도서 저자분의 깃허브 주소 (chap 3) : https://github.com/shinsunyoung/springboot-developer/tree/main/chapter3
1. 프레젠테이션 계층 (Presentation Layer):
- 역할: 사용자와의 상호작용을 담당하는 계층으로, 주로 HTTP 요청과 응답을 처리합니다.
- 구성 요소: @RestController, @Controller, @RequestMapping 등.
- 기능: 클라이언트로부터 요청을 받고, 이를 적절히 처리한 후 응답을 반환하는 역할을 합니다. API에서 데이터를 요청하고 반환하는 로직이 여기에 포함됩니다.
2. 비즈니스 계층 (Business Layer):
- 역할: 애플리케이션의 핵심 비즈니스 로직을 처리하는 계층입니다.
- 구성 요소: 서비스 클래스 (@Service 어노테이션 사용).
- 기능: 애플리케이션의 주요 기능을 처리하며, 데이터 처리나 다른 비즈니스 로직을 수행합니다. 예를 들어, 주문 처리, 결제 처리, 사용자 인증 등의 로직이 이 계층에 해당합니다.
3. 퍼시스턴스 계층 (Persistence Layer):
- 역할: 데이터베이스와의 상호작용을 담당하는 계층으로, 데이터의 저장과 검색을 처리합니다. ( DAO 객체를 사용가능)
- 구성 요소: 리포지토리 클래스 (@Repository 어노테이션 사용), JpaRepository, CrudRepository 등.
2) 스프링 부트 프로젝트 디렉터리 구성하며 살펴보기
- static:
- 정적 리소스(이미지, CSS, JavaScript 파일 등)를 저장하는 디렉토리입니다.
- 이곳에 있는 파일들은 HTTP 요청을 통해 클라이언트에서 직접 접근할 수 있습니다. 예를 들어, /static/css/style.css와 같은 URL로 접근 가능합니다.
- templates:
- 서버 사이드에서 처리될 HTML 템플릿 파일들을 저장하는 곳입니다.
- Spring Boot에서는 Thymeleaf, FreeMarker 등의 템플릿 엔진을 사용하여 동적 HTML을 생성할 수 있습니다. 예를 들어, /templates/index.html 파일이 뷰 템플릿으로 사용될 수 있습니다.
- application.yml:
- Spring Boot 애플리케이션의 설정 파일입니다.
- 애플리케이션의 환경 설정, 데이터베이스 연결 정보, 서버 포트, 로깅 설정 등을 포함합니다. application.properties 파일과 비슷한 역할을 하지만 YAML 형식으로 작성됩니다.
3) JAP 스프링 데이터 , JPA, 로컬 환경과 테스트 환경에서 사용할 인메모리 데이터베이스인 h2 , Lombok 사용을 위한 의존성주
입
build.gradle 을 아래처럼 작성하자 !
//build.gradle
plugins {
// Java 플러그인 사용 (Java 프로젝트를 빌드하는 데 필요)
id 'java'
// Spring Boot 플러그인 (Spring Boot 애플리케이션을 실행하고 패키징하는 데 사용)
id 'org.springframework.boot' version '3.0.2'
// 의존성 관리 플러그인 (Spring 의존성 관리를 위한 플러그인)
id 'io.spring.dependency-management' version '1.1.0'
}
group 'me.shinsunyoung' // 프로젝트의 그룹 ID (보통 조직명이나 도메인명)
version '1.0' // 프로젝트 버전
sourceCompatibility = '17' // Java 17 버전으로 컴파일
repositories {
// Maven 중앙 저장소에서 의존성 다운로드
mavenCentral()
}
dependencies {
// Spring Boot 웹 애플리케이션을 위한 의존성 (서블릿, RESTful API 등)
implementation 'org.springframework.boot:spring-boot-starter-web'
// Spring Data JPA (데이터베이스 연동을 위한 의존성)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// H2 데이터베이스 의존성 (런타임 시 H2 데이터베이스를 사용, 메모리 내 DB)
runtimeOnly 'com.h2database:h2'
// Lombok 의존성 (롬복은 컴파일 타임에 코드 생성해주는 라이브러리로 getter, setter 등을 자동으로 생성)
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok' // Lombok을 사용할 때 필요한 어노테이션 프로세서
// Spring Boot 테스트 의존성 (단위 테스트를 위한 라이브러리)
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
// JUnit 플랫폼을 사용하여 테스트 실행 (JUnit 5 이상을 사용)
useJUnitPlatform()
}
1) TestController.java 작성
package me.shinsunyoung.springbootdeveloper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
// @RestController 어노테이션은 해당 클래스가 REST API의 엔드포인트로 사용된다는 것을 나타냄
@RestController
public class TestController {
// TestService를 주입받기 위한 @Autowired 어노테이션
@Autowired
TestService testService;
// "/test" 경로로 GET 요청을 받을 때 호출되는 메소드
@GetMapping("/test")
public List<Member> getAllMembers() {
// TestService의 getAllMembers() 메소드를 호출하여 모든 회원 정보를 가져옴
List<Member> members = testService.getAllMembers();
// 가져온 회원 정보를 반환
return members;
}
}
2) TestService 작성
package me.shinsunyoung.springbootdeveloper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
// @Service 어노테이션은 해당 클래스가 서비스 컴포넌트임을 나타냄
// 주로 비즈니스 로직을 처리하는 클래스에 사용
@Service
public class TestService {
// MemberRepository를 자동으로 주입받기 위한 @Autowired 어노테이션
@Autowired
MemberRepository memberRepository;
// 모든 회원 정보를 반환하는 메소드
public List<Member> getAllMembers() {
// memberRepository에서 모든 회원 데이터를 가져옴
return memberRepository.findAll();
}
}
어노테이션들을 각 컴포넌트마다 잘 작성해야하는 이유
1. 요청(Request) 처리
🔹 클라이언트(브라우저, API 요청 등)가 HTTP 요청을 보냄
🔹 톰캣(서블릿 컨테이너)이 요청을 받아 스프링 MVC의 DispatcherServlet에 전달
2. 컨트롤러 호출 및 비즈니스 로직 실행
🔹 DispatcherServlet이 요청을 분석 후, 해당하는 Controller의 메서드 실행
🔹 서비스(Service) → 리포지토리(Repository) 순서로 로직 처리
3. 응답(Response) 반환
🔹 컨트롤러가 처리 결과를 반환하면, DispatcherServlet이 이를 HTTP 응답으로 변환
🔹 톰캣이 최종적으로 클라이언트에게 응답 전송
📌 정리: 톰캣은 요청을 받아 스프링에게 전달하고, 응답을 클라이언트에게 보내는 역할을 한다. 🚀
'SpringBoot' 카테고리의 다른 글
스프링부트 3백앤드 개발자 되기 : 자바 편 5장 정리 (데이터베이스/ ORM) (0) | 2025.02.17 |
---|---|
스프링부트 3백앤드 개발자 되기 : 자바 편 4장 정리 (스프링부트3 테스트 코드) (2) | 2025.02.17 |
스프링부트 3백앤드 개발자 되기 : 자바 편 2장 정리 (스프링부트3 예제) (0) | 2025.02.14 |
스프링부트 3백앤드 개발자 되기 : 자바 편 1-2장 정리 (자바 백앤드가 알아두면 좋은 지식들) (0) | 2025.02.14 |
스프링부트 3백앤드 개발자 되기 : 자바 편 1장 정리 (스프링부트 환경 세팅) (0) | 2025.02.14 |