본문 바로가기

728x90

Spring Boot 14

빌더 패턴 vs Lombok @Builder, 언제 직접 구현할까

빌더 패턴 vs Lombok @Builder, 언제 직접 구현할까생성자 파라미터가 6개, 7개로 늘어나면 어떤 값이 몇 번째 자리인지 헷갈리기 시작합니다. 선택적 필드가 몇 개만 더 늘어도 오버로딩된 생성자가 줄줄이 생기는 텔레스코핑 생성자(telescoping constructor) 문제입니다. 빌더 패턴은 이 문제를 해결하지만, 요즘은 대부분 Lombok @Builder로 대체해 씁니다. 둘의 차이를 알아야 언제 직접 구현이 필요한지 판단할 수 있습니다.텔레스코핑 생성자 문제public class Order { public Order(Long userId, String productName, int quantity) { ... } public Order(Long userId, String ..

Spring Boot @ConfigurationProperties 검증: 잘못된 운영 설정을 시작 단계에서 차단하기

Spring Boot @ConfigurationProperties 검증: 잘못된 운영 설정을 시작 단계에서 차단하기결제 서버 주소가 비어 있거나 재시도 횟수에 음수가 들어갔는데도 애플리케이션이 정상적으로 시작된다면, 오류는 실제 요청이 들어온 뒤에야 드러납니다. 배포는 성공한 것처럼 보이지만 첫 결제에서 장애가 발생하는 구조입니다.Spring Boot의 @ConfigurationProperties와 Jakarta Validation을 함께 사용하면 잘못된 설정을 애플리케이션 시작 단계에서 차단할 수 있습니다. 운영자가 수정해야 할 값과 실패 원인도 시작 로그에서 바로 확인할 수 있습니다.@ConfigurationProperties가 필요한 이유Spring Boot 설정값은 YAML, properties ..

어댑터 패턴 완벽 정리: Spring Boot 외부 API 연동을 분리하는 방법

어댑터 패턴 완벽 정리: Spring Boot 외부 API 연동을 분리하는 방법도입부외부 API 호출을 Service에 바로 넣으면 공급자의 DTO와 상태 코드가 비즈니스 로직까지 퍼집니다. 외부 필드가 바뀌거나 업체를 교체할 때 주문 서비스도 수정해야 합니다.어댑터 패턴은 맞지 않는 인터페이스를 연결합니다. 애플리케이션은 내부 인터페이스만 알고, 어댑터가 외부 요청·응답·예외를 변환합니다.어댑터 패턴이란?어댑터 패턴에는 세 역할이 있습니다.Target: 우리 애플리케이션이 사용하려는 인터페이스Adaptee: 인터페이스가 맞지 않는 외부 SDK나 APIAdapter: Target을 구현하고 외부 호출과 변환을 담당하는 객체핵심은 주문 서비스가 특정 결제사 클래스와 상태 문자열을 모르게 하는 것입니다.내부..

Spring Boot Graceful Shutdown 설정: 배포 중 요청을 안전하게 종료하는 방법

Spring Boot Graceful Shutdown 설정: 배포 중 요청을 안전하게 종료하는 방법배포 순간 일부 요청만 502나 503으로 실패한다면 종료 방식을 확인해야 합니다. Graceful Shutdown은 새 요청을 막고 처리 중인 요청에 완료 시간을 준 뒤 종료하는 방식으로, 롤링 배포의 기본 설정에 가깝습니다.즉시 종료와 정상 종료의 차이구분즉시 종료Graceful Shutdown새 요청연결이 갑자기 끊길 수 있음더 이상 받지 않음진행 중 요청중간 종료 가능제한 시간 안에서 완료리소스 정리보장하기 어려움Spring 컨텍스트 종료 과정 수행배포 중 오류502·연결 초기화 가능성 증가사용자 오류 감소종료 시간빠름설정한 유예 시간만큼 길어질 수 있음제한 시간이 끝나면 남은 작업은 종료될 수 있으..

HTTP 캐시 완벽 정리: Cache-Control·ETag·304 동작 원리와 Spring Boot 구현

HTTP 캐시 완벽 정리: Cache-Control·ETag·304 동작 원리와 Spring Boot 구현게시글 상세나 공지처럼 변경은 적고 조회가 많은 API가 매번 같은 JSON을 보낸다면 네트워크와 서버 자원을 낭비합니다. HTTP 캐시는 Cache-Control로 재사용 규칙을 알리고, ETag로 변경을 검증해 필요하면 본문 없는 304 Not Modified를 반환하는 표준 기능입니다.HTTP 캐시란HTTP 캐시는 이전 응답을 브라우저나 CDN에 보관했다가 같은 요청에 재사용합니다.구분위치대표 예시Private Cache한 사용자에게만 사용하는 캐시브라우저 캐시Shared Cache여러 사용자가 함께 사용하는 캐시CDN, 리버스 프록시Cache-Control 핵심 지시어Cache-Control은..

WebSocket vs SSE, 실시간 통신 방식 선택 기준

WebSocket vs SSE, 실시간 통신 방식 선택 기준채팅, 실시간 알림, AI 응답 스트리밍처럼 서버가 클라이언트에게 계속 데이터를 밀어줘야 하는 기능을 만들 때 가장 먼저 부딪히는 선택이 있다. WebSocket을 쓸 것인가, SSE(Server-Sent Events)를 쓸 것인가. 실제로 GPT나 Claude 같은 LLM API가 응답을 토큰 단위로 흘려보내는 방식도 SSE 기반이다. 이 글에서는 두 방식의 근본적인 차이와, Spring Boot에서 어떻게 구현하는지 코드로 정리한다.근본적인 차이 — 양방향이냐 단방향이냐가장 큰 차이는 통신 방향이다.WebSocket: 클라이언트 ↔ 서버 양방향 통신. 한 번 연결을 맺으면 양쪽 모두 언제든 메시지를 보낼 수 있다.SSE: 서버 → 클라이언트 ..

Spring Boot에서 MCP 서버 만들기 — Spring AI 실전

Spring Boot에서 MCP 서버 만들기 — Spring AI 실전Claude Code, Antigravity, Gemini Code Assist처럼 요즘 나오는 AI 코딩 도구들은 하나같이 "MCP 서버"를 통해 외부 도구·데이터에 연결된다는 설명이 붙는다. MCP(Model Context Protocol)는 Anthropic이 처음 제안한 개방형 프로토콜로, LLM 애플리케이션이 외부 데이터 소스·도구와 통신하는 방식을 표준화한다. Spring AI는 이 MCP를 위한 전용 Boot Starter를 제공하기 때문에, Spring Boot 개발자라면 기존 서비스 로직을 몇 줄 설정만으로 MCP 서버로 노출할 수 있다. 이 글에서는 Spring Boot 프로젝트에 MCP 서버를 붙이는 과정을 코드로 ..

AI/AI 2026.07.20

Spring Boot LTS는 없을까? 4.1·4.0·3.5 지원 기간과 버전 선택

Spring Boot 지원 기간과 LTS 선택 전략최종 업데이트: 2026년 7월 26일Spring Boot에는 Java 21·25처럼 모든 사용자에게 붙는 공통 LTS 라벨이 없습니다. 그렇다고 장기 지원이 전혀 없는 것도 아닙니다. 공식 정책은 오픈소스, 상용 구독, 메이저의 마지막 마이너에 제공되는 엔터프라이즈 지원을 구분합니다. 핵심은 어떤 지원을 기준으로 선택하는가입니다.결론부터 정리상황권장 선택신규 프로젝트Spring Boot 4.1을 우선 검토현재 4.0을 안정적으로 운영 중최신 4.0 패치 유지 후 4.1 전환 계획현재 3.x를 운영 중먼저 최신 3.5로 정리한 뒤 4.x 마이그레이션Java 17·기존 라이브러리 제약이 큼3.5 유지 기간과 업그레이드 비용을 함께 계산장기간 같은 계열의 상..

Spring AI로 Spring Boot에서 LLM 연동하는 방법

Spring AI로 Spring Boot에서 LLM 연동하는 방법2026년 현재 Spring Boot 애플리케이션에 LLM을 연동하는 가장 표준적인 방법은 Spring AI를 사용하는 것입니다. 안정 버전은 1.1.x 라인이며, BOM과 스타터 의존성 하나만 추가하면 ChatClient API로 몇 줄 만에 OpenAI·Anthropic·Google 등 주요 모델을 호출할 수 있습니다. 2.0.0은 아직 마일스톤(M8) 단계이므로 프로덕션에는 1.1.x를 권장합니다.이 글에서는 OpenAI를 예시로 의존성 설정부터 REST API로 LLM 응답을 반환하는 실습 코드까지 정리합니다.Spring AI란Spring AI는 Spring 생태계의 설계 원칙(이식성, 모듈화)을 AI 도메인에 적용한 애플리케이션 프..

AI/AI 2026.07.09

CORS 동작 원리와 Spring Boot 설정 방법

CORS 동작 원리와 Spring Boot 설정 방법 Postman은 되는데 브라우저만 안 될 때프론트엔드와 API 서버를 분리해 개발하다 보면 반드시 한 번은 만나는 에러가 있다.Access to fetch at 'https://api.kraft.io.kr/api/posts' from origin'https://kraft.io.kr' has been blocked by CORS policy이상한 점은 같은 API가 Postman이나 curl로는 멀쩡히 응답한다는 것이다. 여기에 CORS의 본질이 담겨 있다. CORS는 서버 장애나 방화벽이 아니라 브라우저가 스스로 지키는 보안 정책이다. 서버는 정상 동작 중이고, 브라우저가 "이 응답을 저 스크립트에게 보여줘도 된다"는 허락 표시를 찾지 못해 차단했을..

728x90