📃 요약
실무에서는 MVC 디자인 패턴 속해서 스프링부트를 사용해 코딩을 진행함. 파일관리 시 파일을 용도에 맞게 정리하듯이 MVC 디자인 패턴도 패키지 및 클래스를 용도에 맞게 분류해서 코딩을 진행함
요소 기술 :
– Basic : java & spring boot
📃 기술 구현
스펙 :
- intellij - java - spring boot
📃 @RestController :
- View 가 react, vue 일때 사용되는 컨트롤러 - 함수 위에 요청받은 특정 url 이 있음 - return 값이 json 데이터임
@Slf4j :
- 로깅 라이브러리 (롬북) , 인터페이스 : 자식클래스(logback) - 설치 : Logback 프러퍼티 파일2개 복사, build.gradle 라이브러리 4개 추가
사용법 : 1) @Slf4j 클래스 위에 달고 2) 로깅 하고 싶은 라인에서 log.debug(값.toString());
@Service :
- 클래스 위에 달고, 달린 클래스는 서버가 가동될때 자동으로 객체 생성됨(IOC) - 유사 어노테이션 : @Repository, @Component, @Bean 등
@Autowired :
- 위에서 생성된 객체를 가져오기 할때 사용(DI)
CRUD 어노테이션
- 생성/조회/수정/삭제 요청에 대해 각각의 어노테이션이 존재함 - @PostMapping(/url) : Post 방식으로 오는 요청에(insert 요청) 대해 실행 - @GetMapping(/url) : Get 방식으로 오는 요청에(조회요청) 대해 실행되는 어노테이션 - @PutMapping(/url) : Put 방식으로 오는 요청에(update 요청) 대해 실행 - @DeleteMapping(/url) : Delete 방식으로 오는 요청에(delete 요청) 대해 실행
1) C : Insert 요청 어노테이션
사용법 : @PostMapping(/url) public ResponseEntity<Object> 함수명(@RequestBody Dept dept){ try { 실행문; return new ResponseEntity<>(변수, 신호); } catch(Exception e) { 실행문; return new ResponseEntity<>(신호); } } 예 : @PostMapping("/dept") public ResponseEntity<Object> createDept( @RequestBody Dept dept) { try { List<Dept> list = deptService.save(dept); return new ResponseEntity<>(list, HttpStatus.CREATED); } catch (Exception e) { log.debug(e.getMessage()); // todo: INTERNAL_SERVER_ERROR(500) : sql 구문 에러 등 return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }
2) R : Select 요청 어노테이션
사용법 : @GetMapping(/url) public ResponseEntity<Object> 함수명(){ try { 실행문; return new ResponseEntity<>(변수, 신호); } catch(Exception e) { 실행문; return new ResponseEntity<>(신호); } } 예 : @GetMapping("/dept") public ResponseEntity<Object> getDeptAll() { try { List<Dept> list = deptService.findAll(); if(list.isEmpty() == false) { // todo: 조회 성공 return new ResponseEntity<>(list, HttpStatus.OK); } else { // todo: 데이터 없음 return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } catch (Exception e) { log.debug(e.getMessage()); // todo: INTERNAL_SERVER_ERROR(500) return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }
3) U : Update 요청 어노테이션
사용법 : @PutMapping(/url) public ResponseEntity<Object> 함수명( @PathVariable int dno, @RequestBody Dept dept ){ try { 실행문; return new ResponseEntity<>(변수, 신호); } catch(Exception e) { 실행문; return new ResponseEntity<>(신호); } } 예 : @PutMapping("/dept/edit/{dno}") public ResponseEntity<Object> updateDept( @PathVariable int dno, @RequestBody Dept dept ){ try { List<Dept> list = deptService.save(dept); return new ResponseEntity<>(list, HttpStatus.CREATED); } catch (Exception e) { log.debug(e.getMessage()); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }
4) D : Delete 요청 어노테이션
사용법 : @DeleteMapping(/url) public ResponseEntity<Object> 함수명( @PathVariable int dno ){ try { 실행문; return new ResponseEntity<>(변수, 신호); } catch(Exception e) { 실행문; return new ResponseEntity<>(신호); } } 예 : @DeleteMapping("/dept/delete/{dno}") public ResponseEntity<Object> deleteDept( @PathVariable int dno ) { try { boolean bSuccess = deptService.removeById(dno); if(bSuccess == true) { // todo: 삭제 성공 return new ResponseEntity<>(HttpStatus.OK); } else { // todo: 0건 삭제 없음 return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } catch (Exception e) { log.debug(e.getMessage()); // todo: INTERNAL_SERVER_ERROR(500) return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }