BE/Spring & Spring Boot 62

[Spring Boot] 스프링의 생성자 주입

스프링(Spring)의 생성자(Constructor) 주입이란? 스프링(Spring)에서 생성자 주입(Constructor Injection)이란, 객체를 생성할 때 스프링이 필요한 의존성(변수)을 생성자의 매개변수(parameter)를 통해 주입해주는 것을 의미함. 즉, 클래스가 의존하는 객체를 클래스 스스로 생성하는 것이 아니라, 스프링 컨테이너가 대신 생성하여 클래스의 생성자를 통해 전달하는 방식임. 💡 의존성 주입(DI, Dependency Injection)이란? 생성자 주입을 제대로 이해하려면 우선 의존성 주입(DI)의 개념을 알아야 함. 의존성 주입이란 객체가 직접 의존하는 다른 객체를 생성하지 않고, 외부(스프링 컨테이너)로부터 제공받는 방법임. 스프링에서는 의존성을 다음과 같은 방법으로..

[Spring Boot] Spring AI

⚡ 1. Spring AI란?Spring AI 는 Spring 생태계에서 AI 및 LLM(Large Language Model)을 쉽게 활용할 수 있도록 지원하는 프레임워크입니다.Spring Boot 기반의 애플리케이션에서 OpenAI, Hugging Face, LangChain 같은 AI 모델을 간편하게 통합할 수 있습니다. ✅ Spring AI의 주요 특징 • LLM (GPT-4, Gemini, LLaMA 등) 지원 • Prompt Management (프롬프트 관리) • RAG (Retrieval-Augmented Generation) 적용 가능 • Spring Boot와 자연스럽게 통합 • Vector DB (Pinecone, FAISS) 연동 가능 • 서버리스 AI API (OpenAI, Hug..

[Spring Boot] DispatcherServlet

⚡ 1. DispatcherServlet이란?DispatcherServlet 은 Spring MVC의 핵심 컨트롤러(Front Controller) 역할을 하는 서블릿입니다.클라이언트 요청을 받아 적절한 컨트롤러로 전달하고, 응답을 처리하는 역할을 합니다. 📌 쉽게 말하면? • 요청을 받고 → 컨트롤러에 전달 → 응답을 반환하는 중앙 컨트롤러 • Front Controller 패턴을 사용하여 모든 요청을 한 곳에서 처리 • Spring MVC에서 HTTP 요청을 처리하는 핵심 역할 수행사용자 → DispatcherServlet → 컨트롤러 → 서비스 → 리포지토리 → DB ↓ ViewResolver ↓ 응답..

[Spring Boot] 스프링 배치 (Spring Batch)

⚡ 1. 스프링 배치(Spring Batch)란?Spring Batch는 대량의 데이터를 일정한 주기로 처리하는 배치 작업을 수행하는 프레임워크입니다.스프링 기반으로 배치 처리 자동화 및 최적화를 지원하며, 데이터 읽기(Read) → 처리(Process) → 저장(Write) 의 흐름을 기본으로 합니다. ✅ Spring Batch 주요 특징 🔹 대량 데이터 처리 최적화 → 데이터베이스, 파일, API에서 데이터를 읽고 처리 후 저장 가능🔹 트랜잭션 관리 → 장애 발생 시 재시도(Retry), 롤백(Rollback), 체크포인트(Checkpoint) 지원🔹 스케줄링 연동 → Spring Scheduler, Quartz, Kubernetes CronJob과 연동 가능🔹 병렬 처리 지원 → 멀티스레드,..

[Spring Boot] 멀티 모듈 프로젝트

Spring Boot 프로젝트에서 멀티 모듈(Multi-Module) 프로젝트란, 하나의 루트 프로젝트에서 여러 개의 서브 모듈을 관리하는 방식을 의미함.이렇게 하면 코드 재사용성, 유지보수성, 의존성 관리가 쉬워지고, 각 모듈을 독립적으로 개발 & 배포할 수 있음. 🛠️ 1. 멀티 모듈이란?멀티 모듈 프로젝트는 하나의 루트 프로젝트 안에서 여러 개의 서브 모듈을 포함하는 구조임.각 서브 모듈은 독립적인 기능을 담당하며, 필요에 따라 다른 모듈과 연결될 수 있음. 💡 멀티 모듈의 장점✅ 코드 재사용성 → 공통 기능을 하나의 모듈로 분리하여 여러 모듈에서 사용 가능✅ 모듈별 독립적인 개발 → 특정 모듈만 빌드/테스트 가능✅ 빠른 CI/CD 적용 → 변경된 모듈만 빌드하여 배포 가능✅ 의존성 관리 용이 ..

[Spring Boot] @TestMethodOrder

📌 1. @TestMethodOrder란? @TestMethodOrder는 JUnit 5에서 테스트 메서드 실행 순서를 지정하는 어노테이션임.기본적으로 JUnit은 테스트 메서드를 실행할 순서를 보장하지 않음.하지만, 특정한 실행 순서가 필요한 경우 @TestMethodOrder를 사용하면 테스트를 원하는 순서대로 실행할 수 있음. 📌 2. @TestMethodOrder 기본 사용법✅ (1) 테스트 실행 순서를 @Order로 지정 • @TestMethodOrder(OrderAnnotation.class)를 사용하면 각 테스트 메서드에 @Order(n)을 부여하여 실행 순서를 지정할 수 있음.import org.junit.jupiter.api.*;@TestMethodOrder(MethodOrderer...

[Spring Boot, JPA] 리플렉션

✅ JPA는 객체를 데이터베이스와 매핑할 때 “리플렉션(Reflection)“이라는 기능을 사용합니다.✅ 리플렉션을 사용하면 클래스 내부의 정보(필드, 메서드, 생성자 등)를 실행 중(runtime)에 확인하고 변경할 수 있습니다.✅ JPA는 리플렉션을 통해 엔티티 객체를 생성하고 필드 값을 직접 주입합니다. 1. 리플렉션(Reflection) 기본 개념🔹 (1) 일반적인 객체 생성 방식 자바에서 객체를 생성할 때 new 연산자를 사용합니다.public class Member { private String name; public Member(String name) { this.name = name; }}public class Main { public static voi..

[Spring Boot] Service를 Interface + ServiceImpl 구조로 사용하는 이유

Spring Boot에서 Service 계층을 인터페이스(Service)와 구현 클래스(ServiceImpl)로 분리하여 사용하는 패턴을 많이 볼 수 있음.예를 들어, 다음과 같은 구조를 가짐:📂 service ├── UserService.java (인터페이스) ├── UserServiceImpl.java (구현 클래스) 이렇게 분리하는 이유는 크게 확장성, 테스트 용이성, 유지보수성, 결합도 감소 때문임. 📌 1. Service를 Interface + ServiceImpl로 분리하는 이유✅ (1) 느슨한 결합 (Low Coupling) • 인터페이스를 사용하면 구현체를 쉽게 교체할 수 있음. • 클라이언트 코드(Controller, 다른 Service)가 UserServiceImpl을 직접 ..

[Spring Boot] REST Docs + Asciidoctor

Spring Boot에서 REST Docs와 Asciidoctor를 사용하면 API 명세서를 자동으로 생성할 수 있음.이는 테스트 코드 기반으로 문서를 생성하기 때문에, 코드와 문서가 항상 일치하도록 유지할 수 있음.📌 1. REST Docs + Asciidoctor란?🔹 Spring REST Docs • API 문서를 자동으로 생성할 수 있도록 지원하는 라이브러리 • API 응답을 테스트하며, 이를 기반으로 문서를 생성함 • 문서와 실제 동작하는 코드의 일관성 유지 가능 🔹 Asciidoctor • AsciiDoc 문법을 사용하여 문서를 작성하는 도구 • 마크다운(Markdown)과 비슷하지만 기능이 더 강력함 • HTML, PDF, ePub 등의 다양한 형식으로 변환 가능 ✅ 왜 REST Doc..

[Spring Boot] JaCoCo (Java Code Coverage)

Java 애플리케이션의 코드 커버리지를 측정하는 오픈 소스 도구로, 테스트 코드가 실제로 소스 코드의 어느 부분을 실행했는지 분석하는 역할을 함.주로 JUnit 테스트와 함께 사용되며, 테스트 코드가 작성된 클래스의 몇 %를 실행했는지 측정하여 테스트의 품질을 향상시키는 데 도움을 줌. 1. JaCoCo의 코드 커버리지 지표JaCoCo는 다음과 같은 커버리지 지표를 제공함:커버리지 유형설명Line Coverage실행된 코드 라인의 비율Branch Coverageif-else, switch 등의 분기 실행 비율Instruction Coverage실행된 JVM 바이트코드 명령어의 비율Method Coverage실행된 메서드 개수와 비율Class Coverage실행된 클래스 개수와 비율 ✅ 이 커버리지 지표를..