MVC 패턴에 대한 설명과 Spring Boot에서 MVC 프로젝트를 생성하는 예제를 소개드리겠습니다.
MVC 패턴이란?
MVC 패턴이란 애플리케이션의 구성요소를 모델-뷰-컨트롤러로 나누어 개발하는 방식입니다.
- Model
- 데이터와 비즈니스 로직을 관리하는 역할입니다.
- 데이터베이스와 통신하거나 데이터를 가공해 Controller나 View에 전달합니다.
- View
- 사용자 인터페이스(UI)를 담당합니다.
- 사용자에게 데이터를 보여주거나 입력을 받을 수 있는 화면 요소로 구성되어있습니다.
- Controller
- Model과 View를 연결하는 중개자 역할입니다.
- 사용자 요청을 받아 Model에서 데이터를 가져오고 View로 전달합니.
MVC 패턴의 장단점은?
장점
- Model, View, Controller가 각각 고유한 역할을 담당하므로 코드가 구조화되고 모듈화됩니다.
- View와 Model이 분리되어 있어 동일한 Model 데이터를 다양한 View에서 재사용 가능합니다.
- 비즈니스 로직(Model)과 컨트롤러(Controller)가 분리되어 있어 각각 독립적으로 테스트할 수 있습니다.
단점
- Controller가 요청을 중계하는 역할을 하다 보니, 모든 로직이 Controller에 집중되면 코드가 비대해지고 유지보수가 어려워질 수 있습니다.
- 요청이 Controller → Service → Repository → Database로 이어지며 복잡한 데이터를 처리할 경우, 데이터의 흐름을 파악하기 어렵거나 디버깅이 힘들 수 있습니다.
스프링 부트 MVC 폴더, 패키지 구조 예제
프로젝트 MVC 구조 예제
기본적으로 다음과 같은 구조로 구성되는 경우가 많습니다.
src
├── main
│ ├── java
│ │ └── com.example.demo
│ │ ├── controller
│ │ ├── service
│ │ ├── repository
│ │ └── model
│ ├── resources
│ │ ├── static
│ │ ├── templates
│ │ └── application.properties
└── test
각 패키지의 역할과 패키지 별 예제는 다음과 같습니다.
1. Controller
사용자의 요청을 처리하는 클래스가 위치합니다.
HTTP 요청을 받고, 서비스 레이어를 호출해 처리 후 데이터를 반환하거나 View에 전달하는 역할을 수행합니다.
@RestController
@RequestMapping("/api")
public class UserController {
// ...
// service 의존성 추가
// ...
@GetMapping("/users")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
2. Service
비즈니스 로직을 처리하는 클래스들이 위치합니다.
Controller에서 받은 요청을 처리하거나, Repository를 호출하여 데이터를 가공하는 역할을 수행합니다.
@Service
public class UserService {
// ...
// repository 의존성 추가
// ...
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
3. Repository
데이터베이스와의 상호작용을 담당합니다.
JPA나 MyBatis등이 활용됩니다.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
4. Model
데이터를 표현하는 클래스들이 위치합니다.
엔티티 클래스나 DTO같은 전송 객체가 포함됩니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
5. Resources
정적 파일 및 템플릿 파일이 저장됩니다.
- static: 정적 리소스(css, js, 이미지 등)
- templates: Thymeleaf, JSP와 같은 서버 렌더링용 파일
- application.properties: 애플리케이션 설정 파일(application.yml로도 사용 가능)