BE/Spring & Spring Boot 64

커스텀 어노테이션

회원가입할때 DTO로 validation을 하는데, password 와 password2 를 비교할때, service에서 password.equals(passowrd2) 를 사용하는것은 좋지 않음.API마다 중복테스트 어려움검증 책임 혼재같은 이유때문. JoinDto@Getter@NoArgsConstructor@AllArgsConstructor@PasswordMatchpublic class JoinRequest { @NotBlank @Size(min = 4) @Pattern( regexp = "^[a-zA-Z0-9]+$", message = "아이디는 영문 대소문자와 숫자만 포함할 수 있습니다." ) private String usern..

@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] [서브 시..