본문 바로가기

Spring boot/Blog 프로젝트 만들기(JPA)

스프링 부트의 웹 애플리케이션 구조 어떻게 만들어져 있을까?

1. MVC 패턴 (Model-View-Controller)

MVC 패턴은 애플리케이션의 기능을 세 가지 역할로 분리하는 구조이다.

  • Model (모델): 데이터와 비즈니스 로직을 관리한다.
  • View (뷰): 사용자에게 데이터를 시각적으로 보여준다.
  • Controller (컨트롤러): 사용자의 요청을 받아 모델을 통해 처리하고, 결과를 뷰에 전달한다.

이 패턴은 애플리케이션의 UI 로직과 데이터 처리 로직을 분리하여 코드의 가독성을 높이고, 유지보수를 쉽게 한다.

 

 

2. 레이어드 아키텍처 (계층 구조)

레이어드 아키텍처는 애플리케이션을 세 가지 주요 계층으로 나누어 각각의 책임을 명확히 하는 구조를 말한다.

  1. 프레젠테이션 계층 (Presentation Layer):
    • 역할: 사용자와 상호작용하는 계층으로, HTTP 요청을 받아 이를 비즈니스 계층으로 전달하고, 비즈니스 계층에서 처리된 결과를 사용자에게 반환하는 역할을 한다.
    • 구성 요소: 이 계층에는 View와 Controller가 속하며, 사용자의 요청을 받아 처리하고, 처리 결과를 화면에 출력하거나 API 응답으로 반환한다.
  2. 비즈니스 계층 (Business Layer):
    • 역할: 애플리케이션의 핵심 비즈니스 로직을 처리하는 계층으로, 서비스의 핵심 규칙과 처리를 담당한다. 예를 들어, 주문 서비스에서 주문 개수 계산, 가격 처리, 예외 처리, 주문 취소 등의 로직을 처리한다.
    • 구성 요소: 이 계층에서는 주로 서비스 클래스가 비즈니스 로직을 수행하며, 데이터의 흐름을 제어한다. 또한, MVC 패턴의 Model이 이 계층에 포함되어, 비즈니스 로직에서 사용되는 데이터를 관리하고, 필요한 경우 퍼시스턴스 계층과 상호작용하여 데이터를 저장하거나 조회한다.
  3. 퍼시스턴스 계층 (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이 담당하는 역할은 무엇입니까?

  1. 사용자에게 데이터를 시각적으로 보여주는 역할
  2. 사용자의 요청을 받아 처리하는 역할
  3. 데이터와 비즈니스 로직을 관리하는 역할
  4. 데이터베이스와 상호작용하여 데이터를 저장하는 역할

문제 2

레이어드 아키텍처에서 비즈니스 계층의 주요 역할은 무엇입니까?

  1. 사용자와 상호작용하는 역할
  2. 애플리케이션의 핵심 비즈니스 로직을 처리하는 역할
  3. 데이터를 시각적으로 표현하는 역할
  4. 데이터베이스와 상호작용하여 데이터를 저장하는 역할

문제 3

스프링 부트 프로젝트의 main 디렉토리에서 자바 소스 코드가 들어가는 디렉토리의 이름은 무엇입니까?

  1. bin
  2. src
  3. java
  4. resources

문제 4

Gradle 프로젝트의 settings.gradle 파일에서 설정할 수 있는 내용은 무엇입니까?

  1. 프로젝트의 루트 이름과 하위 모듈 포함
  2. 테스트 파일과 리소스 파일 설정
  3. 애플리케이션의 HTTP 요청 처리 방식
  4. 프로젝트의 의존성 관리

문제 5

build.gradle 파일에서 설정할 수 없는 항목은 무엇입니까?

  1. 프로젝트 의존성
  2. 플러그인 설정
  3. 빌드 스크립트
  4. 데이터베이스 쿼리
728x90