🌱 API와 Spring 웹 계층
- API를 만들기 위해 총 3개의 클래스가 필요
- Request 데이터를 받을 Dto
- API 요청을 받을 Controller
- 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service
- Service의 역할은 비지니스 로직을 처리하는 것이 아닌, 트랜잭션, 도메인 간 순서 보장의 역할!
- Web Layer
- 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역
- 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적인 영역
- Service Layer
- @Service에 사용되는 서비스 영역
- 일반적으로 Controller와 Dao의 중간 영역에서 사용
- @Transactional이 사용되어야 하는 영역
- Repository Layer
- Database와 같이 데이터 저장소에 접근하는 영역
- Dao (Data Access Object) 영역
- Dtos
- Dto (Data Transfer Object)는 계층 간의 데이터 교환을 위한 객체이고 Dtos는 이들의 영역
- 예) 뷰 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등
- Domain Model
- 도메인이라는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화시킨 것
- 예) 택시 앱의 경우 배차, 탑승, 요금 등이 모두 도메인
- @Entity가 사용된 영역 역시 도메인 모델
- 데이터베이스의 테이블과 관계가 있지 않아도 도메인 모델일 수 있음 (VO 같은 값 객체들)
- Web, Service, Repository, Dto, Domain 5가지 레이어에서 비즈니스 처리를 담당하는 곳은 Domain
🌱 Spring 웹 계층과 패키지 및 클래스 설명
- domain : 비즈니스 처리를 담당하며 엔티티가 사용되는 영역 - 엔티티 영역
- Posts 클래스 : 실제 DB의 테이블과 매칭될 클래스 = Entity 클래스
- Repository : DB와 같은 데이터 저장소에 접근하는 영역 클래스 - 데이터 저장소 접근 영역
- PostsRepository 인터페이스 : Posts 클래스로 Database에 접근하게 해주는 인터페이스
- service : 트랜잭션, 도메인 간의 순서를 보장하는 영역 - 순서 보장 영역
- PostsService 클래스 : 순서 보장을 위한 service
- web : API의 요청을 받는 컨트롤러 등의 뷰 템플릿 영역, 외부 요청과 응답에 대한 전반적인 영역 - 요청을 받는 영역
- PostsApiController 클래스 : API를 요청받을 컨트롤러
- dto : 계층 간의 데이터 교환을 위한 객체들의 영역, request 데이터를 받음 - 데이터 교환, 변경을 위한 영역
- PostsReponseDto 클래스 : 조회 기능을 위한 Dto
- PostsSaveRequestDto 클래스 : 등록 기능을 위한 Dto
- PostsUpdateRequestDto 클래스: 수정 기능을 위한 Dto
- Application 클래스 : 메인 클래스로 내장 WAS 실행
🌱 정리
- Domain에서 엔티티 생성 및 테이블 생성, Repository를 통해 데이터베이스 접근
- Service는 트랜잭션, 도메인 기능 간의 순서를 보장
- Web의 controller를 통해 요청을 받고 Dto가 controller의 Request 데이터를 받아 변경 등의 처리를 한 후 response
'Java-Spring > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
[Spring Boot] 04장. 머스테치로 화면 구성하기 - 기본 페이지 만들기 (0) | 2021.10.11 |
---|---|
[Spring Boot] 04장. 머스테치로 화면 구성하기 - 서버 템플릿 엔진과 머스테치 소개 (0) | 2021.10.11 |
[Spring Boot] 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자 - JPA Auditing (0) | 2021.10.06 |
[Spring Boot] 03장. 스프링 부트에서 JPA로 데이터베이스 다뤄보자 - JPA (0) | 2021.10.04 |
[Spring Boot] 02장. 스프링 부트에서 테스트 코드를 작성하자 (0) | 2021.10.02 |