DTO(Data Transfer Object)
데이터 저장 담당 클래스이다. Controller, Service, View처럼 계층 간의 데이터 교환을 위해 쓰인다. 로직을 갖고 있지 않으며 순수한 데이터 객체이며 getter, setter 메소드만을 갖고 있다.
- 우리는 왜 DTO를 써야 할까?
DTO를 쓰지 않으면, 통신의 횟수가 증가할 뿐 아니라 로직이 비효율적이 되기 때문이다. Entity가 아닌 DTO를 전달함으로써 각 레이어 간 역할을 분리할 수 있기 때문이다. 또 다른 이점은, 데이터를 전송하기 위한 직렬화 메커니즘을 캡슐화하는 것이다. 이와 같이 직렬화를 캡슐화함으로써, DTO는 이 로직을 코드에서 제외하고,
원하는 경우 직렬화를 변경할 수 있는 명확한 지점을 제공한다.
Controller(web)
- 기능
- 해당 요청 url에 따라 적절한 view와 mapping 처리
- @Autowired service 를 통해 Service의 method를 이용
- 적절한 RsponseEntity(DTO)를 body에 담아 Client에 반환
- @Controller vs @RestController
Controller
- API와 view를 동시에 사용하는 경우에 사용
- 대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환
- View(화면) return이 주목적
RestController
- view가 필요없는 API만 지원하는 서비스에서 사용.
- @ResquestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정
- data(json, xml 등) return이 주목적 : return ResponseEntity
- 즉, @Controller + @ResponseBody
Service
- 컨트롤러와 리포지토리 사이의 미들웨어
- Model이 테이터페이스에서 받아온 데이터를 전달받아 가공하는 역할
- Controller에서 전달받은 사용자의 요청사항에 알맞게 데이터를 가공해서 데이터베이스로 전달하거나, 데이터베이스에서 데이터를 전달받아 가공하여 유저에게 전달하는 역할
- DB 정보가 필요할 때는 Repository에게 요청
Repository
- DB 관리(연결, 해제, 자원 관리)
- DB에 CRUD의 명령을 실행하게 만드는 인터페이스
- '저장소'라는 뜻을 가진 단어로 JPA에서 Repository 인터페이스를 생성 후, JpaRepository<Entity, 기본키 타입>을 상속받으면(extends하면) 기본적인 Create, Read, Update, Delete가 자동으로 생성됨
참조:
링크텍스트
링크텍스트