Model + View + Controller
사용자 요청을 컨트롤러가 받고, 모델이 처리하며, 뷰에 결과를 표시합니다.
데이터와 비즈니스 로직 담당
순수 Java 코드(*.java)
데이터베이스 CRUD 수행
예시:
public class User {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
사용자에게 데이터를 표시
화면 처리 언어: HTML, CSS, JavaScript
서버 측 JSP(*.jsp) 활용
예시:
<h1>${user.name}님의 프로필</h1>
사용자 요청을 받고 Model에 전달
처리 결과를 View에 넘김
Servlet 또는 Spring Controller로 개발
예시:
@Controller
public class UserController {
@GetMapping("/user")
public String getUser(Model model) {
User user = userService.getUser();
model.addAttribute("user", user);
return "userView";
}
}

사용자 요청
컨트롤러 처리
모델 동작
View로 데이터 전달
View 렌더링
| 계층 | 클래스 | 역할 |
|---|---|---|
| View | StartView, SuccessView, FailView | 사용자 요청, 결과 출력 |
| Controller | Controller | 요청 처리, Model 호출, 결과 전달 |
| Model | Model, Database | 데이터 관리 및 조회 |
| Domain | Person | 데이터 자체 (id, pw) |
프로그램 진입점(main())에서 Controller에 데이터 요청
import controller.Controller;
public class StartView {
public static void main(String[] args) {
Controller.getPersons();
}
}
```
정상 처리 시 메시지 출력
SuccessView 코드 ```java package view;public class SuccessView {
public static void print(String successMsg) {
System.out.println(successMsg);
}
}
</details>
오류 발생 시 메시지 출력
FailView 코드 ```java package view;public class FailView {
public static void print(String failMsg) {
System.out.println(failMsg);
}
}
</details>
View에서 요청을 받아 Model에 전달 후 결과를 View에 넘김
controller 코드 ```java package controller; import model.Database;
import model.Model;
import model.domain.Person;
import view.FailView;
import view.SuccessView;
public class Controller {
private static final Model model = Model.getModel();
public static void getPersons(){
Person data = model.getPerson();
if(data != null) {
SuccessView.print("데이터가 존재합니다");
} else {
FailView.print("데이터가 미 존재합니다.");
}
}
}
</details>
Singleton 패턴으로 인스턴스 1개만 생성
model 코드 ```java package model;import model.domain.Person;
public class Model {
private Database db = new Database();
private static Model model = new Model();
private Model() {}
public static Model getModel() {
return model;
}
public Person getPerson() {
return db.getPersons();
}
}
</details>
static 블록으로 Person 객체 1개 생성
database 코드 ```java package model;import model.domain.Person;
public class Database {
private static Person p;
static {
p = new Person("tester", 11);
}
Person getPersons(){
return p;
}
}
</details>
데이터 클래스(Lombok으로 간결화)
Person 코드package model.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Person {
private String id;
private int pw;
}
StartView.main()
↓
Controller.getPersons()
↓
Model.getPerson()
↓
Database.getPersons()
↓
Person 반환
↓
Controller에서 null 여부 판단
↓
SuccessView.print() or FailView.print()
Singleton Model
private static Model model = new Model();private 생성자로 중복 인스턴스 생성 방지static 블록 데이터 초기화
책임 분리
📚 참고자료