기술 학습

MVC란?

hawon6691 2026. 1. 29. 13:48
728x90

MVC는 Model-View-Controller의 약자로, 애플리케이션을 세 가지 역할로 분리하는 디자인 패턴이야.

각 컴포넌트의 역할

Model (모델)

  • 데이터와 비즈니스 로직을 담당
  • 데이터베이스와 상호작용하고, 데이터의 상태를 관리
  • Spring Boot에서는 Entity, Repository, Service 계층이 해당돼

View (뷰)

  • 사용자에게 보여지는 UI 부분
  • Model의 데이터를 받아서 화면에 표시
  • 백엔드 API 서버에서는 주로 JSON 응답이 View 역할을 해

Controller (컨트롤러)

  • 사용자의 요청을 받아서 처리
  • Model과 View 사이의 중재자 역할
  • 요청을 받으면 적절한 Service를 호출하고, 결과를 반환

왜 사용할까?

1. 관심사의 분리 (Separation of Concerns)

  • 각 계층이 독립적이라 코드 수정이 쉬워져
  • UI 변경이 비즈니스 로직에 영향을 주지 않음

2. 유지보수성

  • 각 부분을 독립적으로 수정 가능
  • 버그 추적이 쉬워져

3. 재사용성

  • 같은 Model을 여러 Controller나 View에서 사용 가능

4. 테스트 용이성

  • 각 계층을 독립적으로 테스트할 수 있어

Spring Boot에서의 실제 사용 예시

// Model - Entity
@Entity
public class Todo {
    @Id @GeneratedValue
    private Long id;
    private String title;
    private boolean completed;
}

// Model - Repository
public interface TodoRepository extends JpaRepository<Todo, Long> {
}

// Model - Service (비즈니스 로직)
@Service
public class TodoService {
    private final TodoRepository todoRepository;

    public Todo createTodo(TodoCreateDto dto) {
        Todo todo = new Todo();
        todo.setTitle(dto.getTitle());
        return todoRepository.save(todo);
    }
}

// Controller
@RestController
@RequestMapping("/api/todos")
public class TodoController {
    private final TodoService todoService;

    @PostMapping
    public ResponseEntity<TodoResponse> createTodo(@RequestBody TodoCreateDto dto) {
        Todo todo = todoService.createTodo(dto);
        return ResponseEntity.ok(new TodoResponse(todo)); // View 역할
    }
}

실제 흐름

  1. 클라이언트가 POST /api/todos 요청
  2. Controller가 요청을 받아서 DTO로 변환
  3. Service(Model)가 비즈니스 로직 수행
  4. Repository(Model)가 DB에 저장
  5. Controller가 결과를 JSON으로 변환해서 응답 (View)
728x90

'기술 학습' 카테고리의 다른 글

엔드포인트란?  (0) 2026.02.02
express.Router() 란?  (0) 2026.01.29
Express To-Do List 프로젝트 코드 리뷰  (0) 2026.01.29
XSS(Cross-Site Scripting) 취약점이란  (0) 2026.01.29
Fetch API란  (0) 2026.01.28