1. Web ( Controller, View )
- 컨트롤러와 뷰 템플릿 영역입니다.
- 필터, 인터셉터, 컨트롤러 어드바이스 등 외부 요청과 응답에 대한 영역을 의미합니다.
2. Service
- @Service에 사용되는 서비스 영역입니다.
- 일반적으로 Controller와 Dao 중간 영역에서 사용됩니다.
- @Transactional이 사용되는 영역입니다.
트랜잭션과 도메인 간의 순서만 보장해줍니다.
3. Repository -> interface로 생성
- Database와 같이 DB 저장소에 접근하는 영역입니다.
- DAO(Data Access Object) 영역이라고 생각하면 됩니다.
JpaRepository<Entity 클래스, PK 타입>을 상속해주면,
기본적인 CRUD가 생성됩니다. (자동으로)
Entity 클래스와 기본 Entity Repository는 함께 위치해있어야 합니다.
Entity 클래스는 기본 Repository 없이는 제대로 역할을 할 수가 없습니다.
따라서 도메인 패키지에서는
Entity 클래스와 Repository 클래스를 함께 관리합니다.
4. DTO ( Data Transfer Object)
- 계층 간에 데이터 교환을 위한 객체를 위한 영역입니다.
따라서 데이터 접근 메서드 외에 기능을 가지고 있지 않습니다.
(getter,setter 외에 비즈니스 로직을 가지지 않습니다.)
- 값을 유연성 있게 변경할 수 있습니다.
- 예를 들어 뷰 템플릿 엔진에서 사용될 객체
혹은
Repository 영역에서 결과로 넘겨준 객체 등에 속합니다.
- Response,Request용 DTO는 View를 위한 클래스입니다.
(자주 변경이 필요함)
RequestDto : Request를 받을 DTO 클래스
@Getter
@Setter
public class MembersSaveRequestDto {
private String userId;
private String password;
private String name;
private String registryNum;
private String phoneNum;
private String email;
private boolean isReceiveNotification;
private boolean isAdmin;
private String profile;
@Builder
public MembersSaveRequestDto(String userId, String password, String name, String registryNum, String phoneNum, String email, boolean isReceiveNotification, boolean isAdmin, String profile) {
this.userId = userId;
this.password = password;
this.name = name;
this.registryNum = registryNum;
this.phoneNum = phoneNum;
this.email = email;
this.isReceiveNotification = isReceiveNotification;
this.isAdmin = isAdmin;
this.profile = profile;
}
// dto인 MembersSaveRequestDto의 객체를 Members의 Entity 객체로 변환하기 위한 메서드
public Members toEntity(){
return Members.builder()
.userId(userId)
.password(password)
.name(name)
.registryNum(registryNum)
.phoneNum(phoneNum)
.email(email)
.isReceiveNotification(isReceiveNotification)
.isAdmin(isAdmin)
.profile(profile)
.build();
}
}
ResponseDto : Entity 객체를 DTO로 변환하여 응답하기 위한 클래스
5. Domain
도-메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고,
공유할 수 있도록 단순화시킨 것을 의미합니다.
- 비즈니스 로직을 처리하는 영역입니다.
- 택시 앱을 예시로 들면, 배차, 탑승,요금 등이 모두 도메인이 될 수 있습니다.
- @Entity가 사용된 영역입니다.
- 게시글, 댓글, 회원, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역입니다.
- 수많은 서비스 클래스나 비즈니스 로직들이 Entity 클래스를 기준으로 동작합니다.
따라서 Entity 클래스가 변경되면 여러 클래스에 영향을 미칩니다.
참고서적 및 링크
: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
https://leveloper.tistory.com/14
https://m.blog.naver.com/jysaa5/221751719334
https://velog.io/@jdoubleeyun99/Spring02
'여니의 프로그래밍 study > Spring & Spring Boot' 카테고리의 다른 글
[스프링부트] 실제로 실행된 쿼리 보는 방법 (0) | 2022.03.21 |
---|---|
[스프링부트] Spring boot JPA 테스트 코드 작성하기 (0) | 2022.03.21 |
[스프링부트] JPA가 무엇이고, 왜 써야 하는가!? (0) | 2022.03.21 |
[스프링부트] MockMvc 관련 메소드 (0) | 2022.03.21 |
[스프링부트] 값 넘겨주는 유닛 테스트코드 작성하기(RequestParam) (0) | 2022.03.21 |