소프트웨어 공학의 대표적인 디자인 패턴
프로그램을 역할별로 분리해 깔끔하고 효율적인 구조를 제공
관심사 분리 (Separation of Concerns)
유지보수성 ↑, 재사용성 ↑, 협업 효율 ↑
구조 : Controller(View) ↔ Model
JSP 파일 안에 HTML + Java 로직을 같이 작성
✅ 장점: 개발 속도 빠름
❌ 단점: 코드 뒤섞임 → 유지보수/역할 분담 어려움
구조 : View ↔ Controller ↔ Model
View = 화면, Controller = 로직/흐름 제어, Model = 데이터/DB
✅ 장점: 화면과 로직 분리 → 유지보수 용이
❌ 단점: 파일 개수 증가, 구조 복잡해짐
구조 : View ↔ Controller ↔ Service ↔ Repository(Model)
Controller의 역할(흐름 제어 vs 핵심 로직)을 분리해 Service 계층 추가
✅ 장점: 역할 세분화, AOP(관점 지향 프로그래밍), 트랜잭션 관리 유리
❌ 단점: 파일 수 증가, 구조 이해 필요
[사용자 브라우저]
│
▼
[ View ] ⇆ 화면(UI, JSP/HTML/JS/CSS)
│ 요청/응답
▼
[ Controller ] (@Controller, @RestController)
│ 서비스 호출
▼
[ Service ] (@Service)
│ DB 액세스
▼
[ Repository ] (@Repository, DAO, JPA/MyBatis)
│ SQL
▼
[ Database ]