여니의 프로그래밍 study/Spring & Spring Boot

[스프링부트] Spring 웹 계층

여니's 2022. 3. 21. 15:26

 

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

 

[스프링] Spring 웹 계층

1. Web Layer 흔히 사용하는 컨트롤러(Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역이다. 이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적..

leveloper.tistory.com

https://m.blog.naver.com/jysaa5/221751719334

 

[용어] MVC, Spring Framework MVC, Controller, Service, DAO, DTO, VO - 개념

MVC (Model-View-Controller) - 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. - 이 패...

blog.naver.com

https://velog.io/@jdoubleeyun99/Spring02