학습 목표
1. MVC 패턴이란?
2. 레이어드 아키텍처란?
1. MVC 패턴 (Model-View-Controller)
MVC 패턴은 애플리케이션의 기능을 세 가지 역할로 분리하는 구조입니다.
- Model (모델): 데이터와 비즈니스 로직을 관리합니다.
- View (뷰): 사용자에게 데이터를 시각적으로 보여줍니다.
- Controller (컨트롤러): 사용자의 요청을 받아 모델을 통해 처리하고, 결과를 뷰에 전달합니다.
이 패턴은 애플리케이션의 UI 로직과 데이터 처리 로직을 분리하여 코드의 가독성을 높이고, 유지보수를 쉽게 합니다.
2. 레이어드 아키텍처 (계층 구조)
레이어드 아키텍처는 애플리케이션을 세 가지 주요 계층으로 나누어 각각의 책임을 명확히 하는 구조를 말합니다.
- 프레젠테이션 계층 (Presentation Layer):
- 역할: 사용자와 상호작용하는 계층으로, HTTP 요청을 받아 이를 비즈니스 계층으로 전달하고, 비즈니스 계층에서 처리된 결과를 사용자에게 반환하는 역할을 합니다.
- 구성 요소: 이 계층에는 View와 Controller가 속하며, 사용자의 요청을 받아 처리하고, 처리 결과를 화면에 출력하거나 API 응답으로 반환합니다.
- 비즈니스 계층 (Business Layer):
- 역할: 애플리케이션의 핵심 비즈니스 로직을 처리하는 계층으로, 서비스의 핵심 규칙과 처리를 담당합니다. 예를 들어, 주문 서비스에서 주문 개수 계산, 가격 처리, 예외 처리, 주문 취소 등의 로직을 처리합니다.
- 구성 요소: 이 계층에서는 주로 서비스 클래스가 비즈니스 로직을 수행하며, 데이터의 흐름을 제어합니다. 또한, MVC 패턴의 Model이 이 계층에 포함되어, 비즈니스 로직에서 사용되는 데이터를 관리하고, 필요한 경우 퍼시스턴스 계층과 상호작용하여 데이터를 저장하거나 조회합니다.
- 퍼시스턴스 계층 (Persistence Layer):
- 역할: 데이터베이스와 상호작용하여 데이터를 저장하거나 조회하는 계층으로, 애플리케이션에서 모든 데이터베이스 관련 로직을 처리합니다.
- 구성 요소: 이 계층에서는 DAO(Data Access Object) 객체나 Repository를 사용하여 데이터베이스와 직접 상호작용하며, 데이터를 영구적으로 저장하거나 불러오는 역할을 합니다.
스프링 부트 대표 디렉토리 구조
main
실제 코드를 작성하는 공간입니다. 프로젝트 실행에 필요한 모든 소스 코드와 리소스 파일이 이 폴더 안에 위치합니다.
구성 요소
- java: 자바 소스 코드가 들어가는 디렉토리입니다. 애플리케이션의 패키지 구조에 맞게 클래스 파일들이 이곳에 위치합니다.
- resources: 리소스 파일(예: 설정 파일, HTML, CSS, 이미지 등)이 위치하는 디렉토리입니다. 주로 application.properties 또는 application.yml 같은 설정 파일, 템플릿 엔진 파일(예: Thymeleaf 템플릿) 등이 포함됩니다.
test
- 프로젝트의 소스 코드를 테스트할 목적의 코드나 리소스 파일이 들어 있습니다. 이 폴더는 애플리케이션의 기능을 검증하고, 오류를 발견하기 위한 테스트 코드를 포함합니다.
- 구성 요소:
- java: 테스트를 위한 자바 소스 코드가 들어가는 디렉토리입니다. main/java 와 비슷한 패키지 구조를 가지며, 각 기능에 대한 단위 테스트 및 통합 테스트를 작성합니다.
- resources: 테스트 시 필요한 리소스 파일이 위치합니다. 테스트 전용 설정 파일이나 모의 데이터 파일이 포함될 수 있습니다.
build.gradle
- 빌드 설정 파일로, Gradle을 사용한 프로젝트에서 사용됩니다. 이 파일에서 프로젝트의 의존성, 플러그인 설정, 빌드 스크립트 등을 정의합니다. 예를 들어, 스프링 부트 스타터, 데이터베이스 드라이버, 테스트 라이브러리 등을 의존성으로 추가할 수 있습니다.plugins: 프로젝트에서 사용하는 플러그인을 선언하는 부분입니다. 예를 들어, 스프링 부트 플러그인 등을 추가할 수 있습니다.
- dependencies: 프로젝트에서 사용하는 라이브러리 의존성을 선언하는 부분입니다.
settings.gradle
- Gradle 프로젝트의 설정 파일입니다. 프로젝트의 이름을 설정하고, 하위 모듈(서브프로젝트)이 있는 경우 이들을 포함시키는 역할을 합니다. 여러 모듈로 구성된 멀티 프로젝트의 경우 각 모듈을 설정하는 데 사용됩니다.
- 추가 정보:
- rootProject.name: 프로젝트의 루트 이름을 정의합니다. 예) rootProject.name = 'my-spring-boot-app'
- include: 멀티 모듈 프로젝트에서 하위 프로젝트를 포함시키는 설정입니다.
연습 문제
문제 1
MVC 패턴에서 Model이 담당하는 역할은 무엇입니까?
- 사용자에게 데이터를 시각적으로 보여주는 역할
- 사용자의 요청을 받아 처리하는 역할
- 데이터와 비즈니스 로직을 관리하는 역할
- 데이터베이스와 상호작용하여 데이터를 저장하는 역할
문제 2
레이어드 아키텍처에서 비즈니스 계층의 주요 역할은 무엇입니까?
- 사용자와 상호작용하는 역할
- 애플리케이션의 핵심 비즈니스 로직을 처리하는 역할
- 데이터를 시각적으로 표현하는 역할
- 데이터베이스와 상호작용하여 데이터를 저장하는 역할
문제 3
스프링 부트 프로젝트의 main 디렉토리에서 자바 소스 코드가 들어가는 디렉토리의 이름은 무엇입니까?
- bin
- src
- java
- resources
문제 4
Gradle 프로젝트의 settings.gradle 파일에서 설정할 수 있는 내용은 무엇입니까?
- 프로젝트의 루트 이름과 하위 모듈 포함
- 테스트 파일과 리소스 파일 설정
- 애플리케이션의 HTTP 요청 처리 방식
- 프로젝트의 의존성 관리
문제 5
build.gradle 파일에서 설정할 수 없는 항목은 무엇입니까?
- 프로젝트 의존성
- 플러그인 설정
- 빌드 스크립트
- 데이터베이스 쿼리
'Spring boot' 카테고리의 다른 글
GET 방식과 URL 주소 설계 (0) | 2024.09.28 |
---|---|
스프링 부트 간단한 요청과 응답 동작 방식을 알아보자. (0) | 2024.09.27 |
스프링 부트 핵심 콘셉트가 뭘까? (1) | 2024.09.27 |
전략 패턴 (1) | 2024.09.27 |
어댑터 패턴 (1) | 2024.09.26 |