BE/Spring & Spring Boot 62

@ConfigurationProperties, @ConstructorBinding

@Value 는 간편하지만, 설정이 많아질수록 복잡하고 유지보수에 불리해짐.이럴 땐 @ConstructorBinding 과 @ConfigurationProperties 를 사용하여 설정값을 객체 단위로 구조화하여 관리하는 것이 바람직함.@ConfigurationProperties + @ConstructorBinding을 활용한 설정 관리@ConfigurationProperties 는 Spring Boot에서 외부 설정 파일(application.yml 등)의 값을 Java 객체로 바인딩하는 어노테이션임.여기에 @ConstructorBinding 을 함께 사용하면 불변성(immutability) 과 IDE 자동완성, 타입 안전성, 테스트 용이성 등을 모두 만족할 수 있음.1. 기존 방식: @Value 방식..

@Value

@Value – Spring에서 설정값 주입에 사용하는 어노테이션@Value 는 Spring에서 application.properties, application.yml 또는 시스템 환경변수, 커스텀 프로퍼티 등에서 값을 읽어와 주입하기 위한 어노테이션임.간단한 구성 값이나 상수를 주입할 때 매우 유용하게 사용됨.1. 기본 사용법@Value("${server.port}")private int port;@Value("${설정 key}") 형태로 사용하며,해당 key가 application.properties 또는 application.yml 에 존재해야 함예시:# application.ymlcustom: greeting: "안녕하세요"@Value("${custom.greeting}")private Stri..

@ElementCollection

@ElementCollection – 값 타입 컬렉션 매핑 어노테이션@ElementCollection 은 JPA에서 기본 타입 또는 Embeddable(값 객체)의 컬렉션을 별도의 테이블에 매핑할 수 있도록 도와주는 어노테이션임.주로 String, Integer, Enum 등과 같은 값 객체 리스트를 다른 엔티티 없이 저장하고자 할 때 사용함.1. 왜 사용하는가?JPA에서 일반적으로 @OneToMany 관계를 매핑할 경우, 반드시 대상이 Entity 여야 하고,별도의 ID를 가지는 테이블이 필요함.하지만 단순히 "문자열 목록", "Enum 리스트", "주소 정보 집합" 과 같은 작은 값의 집합을 저장하고 싶을 때굳이 엔티티로 분리하고 ID를 부여하는 것이 과도함 → 이럴 때 @ElementCollecti..

[Spring Boot] HttpClient

HttpClient란?HttpClient는 자바 애플리케이션이 다른 서버나 API에 HTTP 요청(GET, POST 등)을 보내고 응답을 받기 위한 라이브러리 또는 인터페이스임.자바에서는 기본적으로 HttpURLConnection 이 존재하지만, 더 나은 사용성을 위해 다양한 HttpClient 구현체들이 존재함.1. HttpClient의 역할다른 서버(API 등)에 HTTP 요청 전송응답(Response)을 받아서 파싱REST API 호출, 외부 서비스 통신, 인증 서버 연결 등 다양한 곳에 사용됨2. 대표적인 HttpClient 라이브러리라이브러리설명Java 11+ HttpClient (java.net.http)자바 표준 HttpClient, Java 11부터 기본 제공Apache HttpClient..

[Spring Boot] 웹소켓 하트비트

웹소켓 하트비트(Heartbeat)란?**웹소켓 하트비트(Heartbeat)**는 클라이언트와 서버 간의 연결 상태를 **정기적으로 확인하기 위한 신호(패킷)**임.웹소켓은 항상 연결이 유지되는 실시간 통신 방식이지만,네트워크 문제나 브라우저 중단 등으로 인해 연결이 끊겼을 때 즉시 감지하기 어려움.이러한 상황을 방지하고 연결을 모니터링하기 위해 일정한 간격으로 하트비트(=헬스 체크 메시지)를 주고받음.1. 하트비트의 필요성왜 하트비트가 필요한가?TCP 소켓 자체는 연결이 끊겨도 서버나 클라이언트가 바로 감지하지 못하는 경우가 있음네트워크 장애, 와이파이 끊김, 브라우저 강제 종료 등 예외 상황에서 연결 유지를 보장할 수 없음클라이언트나 서버가 죽었을 때를 빠르게 감지하고 재연결하거나 리소스를 정리할 필..

[Spring Boot] PRG 패턴

PRG 패턴(Post/Redirect/Get)이란?PRG 패턴(Post/Redirect/Get) 은 웹 애플리케이션에서 폼 데이터 전송 후 새로고침 시 중복 요청되는 문제를 해결하기 위한 설계 패턴임.주로 사용자 입력(form submit) 처리 후, 서버에서 직접 응답을 반환하지 않고 리다이렉트(redirect) 를 수행함으로써 중복 제출을 방지하는 방식임.1. PRG 패턴이 필요한 이유상황 예시사용자가 상품 등록 폼을 작성하고 POST 요청으로 제출함서버가 처리하고 성공 페이지를 그대로 렌더링함사용자가 브라우저 새로고침(F5) 을 누르면 같은 POST 요청이 다시 전송됨상품이 중복 등록됨 → 중복 처리 문제 발생→ PRG 패턴은 이 문제를 리다이렉트를 통해 해결함2. PRG 패턴의 흐름[사용자] --..

[Spring Boot] CommandLineRunner

CommandLineRunner 란 무엇인가?CommandLineRunner는 Spring Boot 애플리케이션이 시작된 후 실행할 로직을 정의할 수 있는 인터페이스임.애플리케이션이 완전히 초기화되고, ApplicationContext까지 로딩된 후에 실행되기 때문에,초기 데이터 세팅, 로그 출력, 외부 시스템 연결 확인 등 '앱 실행 직후에 한 번 실행해야 할 로직'을 처리할 때 유용함.1. CommandLineRunner의 동작 시점Spring Boot에서 main() 함수로 앱이 시작됨내부적으로 SpringApplication.run() 호출ApplicationContext가 초기화된 이후→ CommandLineRunner의 run() 메서드가 자동으로 호출됨2. 기본 사용 방법예시 코드@Compo..

[Spring Boot] 퍼사드 패턴

퍼사드 패턴(Facade Pattern)이란?퍼사드(Facade) 패턴은 복잡한 서브시스템들을 하나의 단순한 인터페이스로 감싸주는 구조 패턴임.즉, 여러 개의 클래스나 모듈로 구성된 복잡한 로직을 하나의 클래스로 감싸서 외부에서는 간단한 메서드 호출만으로 모든 기능을 사용할 수 있게 만드는 패턴임.이름 그대로 “건물의 앞면(Facade)”처럼, 복잡한 내부는 숨기고 단순한 외관만 보여주는 구조임.1. 퍼사드 패턴을 사용하는 이유복잡한 내부 시스템을 외부에 숨기고 단순화된 접근을 제공함서브 시스템 간의 결합도를 줄이고 느슨하게 연결되도록 함코드를 읽기 쉽고 유지보수가 쉬운 구조로 만듦2. 퍼사드 패턴의 구조[클라이언트] | ↓[Facade] → [서브 시스템 1] [서브 시..

[Spring Boot] E2E 테스트

E2E 테스트란 무엇인가 – End-to-End 테스트 개념과 전략**E2E 테스트(End-to-End Test)**는 소프트웨어 시스템의 시작부터 끝까지, 사용자 관점에서 전체 흐름을 시뮬레이션하며 테스트하는 방식임.사용자가 실제로 사용하는 방식 그대로 애플리케이션을 테스트함으로써, 기능이 서로 잘 연결되어 있는지를 검증함.UI → API → DB → 응답 → 화면 결과까지 모든 흐름을 점검하는 것이 특징임.1. E2E 테스트의 목적전체 기능 흐름 검증각 컴포넌트가 개별적으로 잘 동작하더라도, 통합 시 문제가 발생할 수 있음.E2E 테스트는 이 전체적인 연결 상태를 검증함.실제 사용자 경험 시뮬레이션클릭, 입력, 전송 등 사용자의 행동을 자동화하여 실제 사용과 유사한 시나리오를 반복적으로 실행함.서비스..

[Spring Boot] Redis pub/sub

Redis Pub/Sub 이란 무엇인가Redis Pub/Sub(Publish/Subscribe)은 Redis가 제공하는 메시징 기능 중 하나로, 발행/구독 모델을 기반으로 메시지를 전달하는 구조임.서버 간 또는 서버와 클라이언트 간에 비동기 메시지를 실시간으로 전달할 수 있도록 하는 기능임.특정 채널(channel)에 메시지를 발행하면, 해당 채널을 구독 중인 모든 클라이언트가 동시에 메시지를 받을 수 있음.별도의 큐나 브로커 없이 간단하게 실시간 메시징이 가능하다는 점에서 실시간 채팅, 알림, 스트리밍, 이벤트 브로드캐스트 등에 적합함.1. Redis Pub/Sub 기본 개념Pub/Sub 구조는 다음과 같이 구성됨:Publisher → Channel → SubscriberPublisher: 메시지를 발..