springboot 55

@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..

[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] 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: 메시지를 발..

[Spring Boot] STOMP

STOMP란 무엇인가 – 웹소켓을 더 구조화하기 위한 프로토콜STOMP (Simple Text Oriented Messaging Protocol) 는 텍스트 기반의 경량 메시징 프로토콜로, 웹소켓 상에서 메시지를 주고받을 때 구조적이고 표준화된 방식으로 통신을 가능하게 해주는 프로토콜임.웹소켓이 단순한 통신 채널이라면, STOMP는 그 위에서 주제(topic), 구독(subscription), 전송(send), 연결 관리 등을 정의하는 규약임.Spring Framework에서는 STOMP를 통해 복잡한 웹소켓 로직을 단순화하고, 채팅, 실시간 알림, 브로커 연동 등을 쉽게 구현할 수 있음.1. 왜 STOMP를 사용하는가?웹소켓 자체는 프레임 단위로 데이터를 주고받는 낮은 수준의 통신 프로토콜임.예를 들어..

[Spring Boot] @CacheEvict

@CacheEvict 이란 무엇인가@CacheEvict 는 Spring Framework 에서 캐시(Cache)를 비우는 데 사용하는 어노테이션임.스프링 캐시 추상화(Cache Abstraction) 기능과 함께 사용되며, 캐시에 저장된 데이터를 명시적으로 삭제할 때 활용함.주로 데이터 변경이 발생하는 시점에서 사용하여, 캐시에 저장된 오래된 데이터를 제거하고 최신 데이터를 반영하도록 유도함.캐싱은 시스템 성능을 향상시키지만, 데이터가 변경되었을 때는 반드시 캐시를 갱신하거나 삭제해야 데이터 불일치 문제를 방지할 수 있음. 이를 위해 사용하는 것이 @CacheEvict 임.1. @CacheEvict의 주요 속성속성설명value 또는 cacheNames대상 캐시 이름 (캐시 저장소 구분)key제거할 캐시의..