Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 리스코프치환원칙
- JXM
- 자판기미션
- 상근날드
- 자바로 만들수 있는 것
- Oracle JDK와 OpenJDK의 차이
- 백준
- 객체지향적인 설계
- 테스트 성능 개선
- 제임스고슬링
- There isn't anything to compare.
- ControllerTest
- 윤년계산하기
- 우아한테크코스
- 우테코4기
- Getter Setter
- JDK
- 프로젝트 패키지 구조
- 자바의 종류
- 자바 버전 다운 그레이드
- throw 와 throws 차이
- 블랙잭 회고
- ServiceTest
- 인수테스트
- java 1000번 A+B
- 상수와 Enum
- 방어적 복사
- PR 오류
- 우테코
- 자바 4334
Archives
- Today
- Total
개발새발
MVC 패턴 본문
프로젝트 패키지 구조 어떻게 설계 해야 할까?
프로젝트를 시작하면 제일 처음 드는 고민이 패키지를 어떻게 가져가야 하는가? 인 것 같다.
현재까지 패키지 구조의 장 단점을 명확하게 느낄 수 있는 계기가 없어 나만의 명확한 분류 기준은 없지만,
여러가지 패키지 구조를 직접 설계해보며 조금이나마 기준을 세워보고자 한다.
계층형 아키텍쳐
이번 프로젝트에서 사용했던 구조는 계층형이었다.
UI/ 비지니스 모델을 분리하라는 조건에 맞추기 위해서 관심사 별로 레이어를 나눠서 구현하는 것이 좋겠다고 판단했다.
웹 계층에서 대표적인 계층형 아키텍처는 MVC 이기 때문에 MVC 패턴을 적용시켰다.
MVC 패턴을 사용하면 Model과 View가 다른 컴포넌트들에 종속되지 않아 변경에 유리하다는 장점을 가질 수 있다.
MVC패턴이란?
어플리케이션을 세 가지 역할로 구분한 개발 방법론이다.
이 방법론을 사용하게 된다면, 각 컴포넌트간 의존성을 낮춰 재사용성을 높일 수 있다.
간단한 방법은 아래와 같다.
- View 로 사용자에게 입력을 받고 Controller 에게 보내면,
- 관련 Model 로직을 수행하고 Controller 에게 반환,
- Controller 는 결과를 View 로 보내 출력한다.
더 자세한 내용을 살펴보자.
Model
- 데이터로 무엇을 할 것인지 정의한다.
- 실질적인 비지니스 로직이다.
- Model은 다른 컴포넌트들에 대해 알지 못한다.
- 자기 자신이 무엇을 수행하는지만 알고 있다.
View
- 사용자에게 입, 출력을 담당한다.
- Model 이 처리한 데이터를 가공하여 출력시킨다.
- 사용자로부터 데이터를 받아온다.
- 자기 자신이 무엇을 수행하는지만 알고 있다.
Controller
- Model과 View 사이에 있는 컴포넌트이다.
- 클라이언트의 요청을 받으면 해당 요청에 대한 실제 업무를 수행하는 Model을 호출한다.
- Model이 업무 수행을 완료하면 그 결과를 가지고 화면을 생성하도록 View에 전달한다.
주의사항
이론만 보면 정확하게 지킬 수 있을 것 같지만, 실제로 구현하다보면
여기 저기 의존 관계를 맺게 된다. ㅠㅠㅠㅠ 그래서 아래와 같은 사항을 잘 지키고 있나?
고민하면서 구현하면 도움이 될 것 같아 정리했다.
- Model은 독립적이어야 한다. Controller 와 View 에 의존적이면 안된다.
- View에는 Model 관련된 코드만 있어야 한다.( 모든 사용자에게 일관되게 보여저야하는 부분은 view 에서, 다르게 보여져야하는 부분은 Model 에서 받아온다.)
- Controller 는 Model과 View에 내용을 알고 있다.
- View 가 데이터를 받을 때는 Controller 를 통해서 받는다.
느낀점
MVC 패턴을 사용하는 이유와 각 레이어의 책임을 명확하게 이해하고 구현을 진행하니,
의존관계를 최소화하여 응집도를 높일 수 있었다.
기존에 작성했던 코드에 꼬여있던 의존 관계를 찾아서 풀 수 있었고,
조금이라도 재사용이 가능한 코드를 작성할 수 있게 된 것 같다.
번외로 관련 자료를 찾아보니, 테코톡과, 테코블에 관련 자료가 많이 있었다.
역시 우테코 ... 나도 나만의 명확한 분류 기준을 세울 수 있으면 너무 좋겠다 👍🏻
참고
'우아한테크코스' 카테고리의 다른 글
객체, 설계 (0) | 2022.08.24 |
---|---|
JDBC와 JDBC Template (0) | 2022.04.27 |
Enum을 사용하는 이유가 뭘까? (0) | 2022.02.20 |
오류와 예외는 같은걸까? (0) | 2022.02.20 |
Mac에서 JAVA 버전 확인과 IntelliJ 에서 JDK 변환하기 (0) | 2022.02.20 |