본문 바로가기

웹 프로그래밍/웹

[Design Pattern] MVC와 Layer Architecture Style

MVC : Model + View + Controller

- Model        : 정보
- Controller    : 정보를 조작하여 새로운 정보를 산출
- View         : Templete, 사용자에게 직접 보여주는 부분을 의미



Layer Architecture Style 

- Presentation Layer : MVC패턴이 적용되는 부분 사실 M이 데이터베이스로 직접적으로 접촉되는 설계로도 개발할 수 있으나 Layer Architecture Style 을 기반으로 MVC를 적용하면 Service Layer에서 정보를 받아오는 Domain Class가 정확히 Model이되며 View Templete(JSP)와 적정할 모델을 모아 View 선택해 보내주는 Controller 가 될 수 있다.

- Service Layer : 실제 DB에서 정보를 가져와 가공 가능한 서비스로 만들어 반한해주는 부분 예를 들어 getCustomers 등등을 이곳에 담는다. (실제 비즈니스 로직이 들어간다.)

- Repository Layer : 직접적으로 DB와 연동되어 정보의 입출력을 담당하는 부분 주로 DAO 패턴이 적용되어 있다. 





전체적인 흐름

'Presentation Layer'                    'Service Layer'            'Repository Layer'

Client : [ View <-> Controller <-> M :Domain(DTO) ] <-> [Service] <-Entity(VO)-> [Repository(DAO)]





Q1 : 왜 DTO와 VO(Entity)는 따로 분리되는 것일까?

DTO와 VO를 따로 사용하는 것을 DTO는 서버와 Client가 통신할 때 일정한 클래스나 POJO에 정보를 담게되는데 이게 반드시 VO와 정확히 매핑되는 정보만 들어올 수 없다 따라서, DTO는 다양한 확장성을 고려한 Data Transfer Object 로써 엔티티와 매핑되는 컬럼정보 외에도 검색조건, 댓글의 이름(보통 테이블에는 사용자 ID만들어가있다), 닉네임, ID 등등을 포함한 정보들을 교환하기 위해서 사용된다. 분리하지 않게되면 VO(Entity)와 테이블간의 반드시 매핑되야하는 제약조건에 위배되어 정상적인 JPA사용이 불가능하다.



-개인적인 생각을 정리한 것이라 틀릴 수 있습니다.-