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 파일에서 설정할 수 없는 항목은 무엇입니까?
- 프로젝트 의존성
- 플러그인 설정
- 빌드 스크립트
- 데이터베이스 쿼리
728x90
'Spring boot > Blog 프로젝트 만들기(JPA)' 카테고리의 다른 글
스프링 부트 DB 접근 기술 ORM (1) | 2024.09.30 |
---|---|
POST 방식에 이해 및 실습 (2) | 2024.09.26 |
GET 방식과 URL 주소 설계 (0) | 2024.09.26 |
스프링 부트 간단한 요청과 응답 동작 방식을 알아보자. (0) | 2024.09.26 |
스프링 부트 핵심 콘셉트가 뭘까?(복습) (0) | 2024.09.26 |