일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 인프런백기선
- mysql
- 자바스터디
- 자바
- 네트워크
- DDD
- 알고리즘분석
- 이팩티브 자바
- AWS
- 인덱스
- aop
- CleanCode
- MariaDB
- SQL쿡북
- 기술면접
- vue.js
- AWS RDS
- 클린코드
- jpa
- 도메인 주도 개발 시작하기
- 자료구조
- 자바예외
- react
- 알고리즘
- 이펙티브 자바
- 스프링부트와AWS로혼자구현하는웹서비스
- 인프런김영한
- 혼공SQL
- 이펙티브자바
- java
- Today
- Total
기록이 힘이다.
[원티드 과제] MVC 패턴과 Layered Architecture 비교해보기 본문
MVC 패턴(Model-View-Controller) : 디자인 패턴 중 하나이다.
모델(Model)은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻합니다.
뷰(View)는 inputbox, checkbox, textarea 등 사용자 인터페이스 요소를 나타냅니다. 화면
컨트롤러(Controller)는 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할을 하며 이벤트 등 메인 로직을 담당합니다. 또한 모델과 뷰의 생명주기도 관리하며, 모델이나 뷰의 변경 통지를 받으면 이를 해석해서 각각의 구성 요소에 해당 내용에 대해 알려줍니다.
애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성요소에만 집중해서 개발할 수 있습니다. 재사용성과 확장성이 용이하다는 장점이 있고, 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점이 있습니다.
https://velog.io/@ttomy/mvc%EA%B5%AC%EC%A1%B0layered-architecture
layered architecture(계층화 구조) : 아키텍처 중 하나이다
- Presentation Layer
- 웹 페이지, ui를 화면에 보여주고 api로 통신하는 영역이다.
- Business Layer
- 보안, 접근권한, 인증, 허가 설정, validation, middle ware, proxy 등의 business의 수행을 위한 요소들이 포함되는 계층이다.
- Persistence Layer(data Access layer)
- Dao, ORM을 포함한다. 어플리케이션 level에서 db로부터 가져와 ram에 저장된 데이터들을 관리하는 계층이다.
- Database Layer
- 실제 데이터베이스 부분(mysql, oracle, mariadb, mongodb...)과 SANs(Storage Area Networks)를 가리킨다.
<<Spring의 경우>>
- Presentation Layer
- View와 Controller
- Business Layer
- Service
- Persistence Layer(data Access layer)
- Dao, Orm
- Database Layer
- 데이터베이스 부분
계층간의 연결에 흔히 dto가 쓰이지만 필요성에 의문을 제기할 수도 있다. 그냥 db에서 받은 형식 그대로 데이터를 다루며 타 계층에 넘겨주는 방법을 쓰면 굳이 dto를 따로 만들지 않아도 되기는 하다. dto가 사용되는 이유 몇가지가 있다.
- entity의 노출을 막는다.
db와 연결된 entity는 여러군데에서 접근이 가능하게 된다면 의도치 않은 수정이 발생하게 되고 이는 db데이터의 consistency에 문제를 초래한다.
성능 상으로도,보안상으로도 함부로 연결되어서는 안되는 db의 데이터가 아무데에서나 쓰여서는 안된다. - multiple calls를 방지
db에 접근할 때마다 성능에 쓰이는 자원이 사용된다. db로부터 한 번 가져온 이후에는 어플리케이션 레벨에 저장해 사용하면(dto로 다루면) 서버의 부하를 줄일 수 있다. - 여러 entity외의 정보도 혼합해 넘겨줄 수 있게 된다.
entity뿐만 다른 데이터까지 결합하여 넘길 필요가 있는 경우, dto로 정의해 넘기는 것이 유리하다.
https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/
DTO는 클라이언트 요청에 포함된 데이터를 담아 서버 측에 전달하고, 서버 측의 응답 데이터를 담아 클라이언트에 전달하는 계층간 전달자 역할을 합니다.