Spring Boot 공통 처리 패턴(예외처리, 공통 응답, 검증, MDC)
1. 개요 API 서버를 개발할 때 반복적으로 등장하는 공통 처리 패턴들이 있다. 응답 포맷을 통일하지 않으면 클라이언트가 엔드포인트마다 다른 파싱 로직을 작성해야 하고, 예외 처리가 분산되면 일관성을 유지하기 어렵다. 이 글에서는 실무에서 바로 적용할 수 있는 공통 처리 구조를 코드 레벨로 정리한다. 주제 내용 공통 응답 포맷 ApiResponse&...
1. 개요 API 서버를 개발할 때 반복적으로 등장하는 공통 처리 패턴들이 있다. 응답 포맷을 통일하지 않으면 클라이언트가 엔드포인트마다 다른 파싱 로직을 작성해야 하고, 예외 처리가 분산되면 일관성을 유지하기 어렵다. 이 글에서는 실무에서 바로 적용할 수 있는 공통 처리 구조를 코드 레벨로 정리한다. 주제 내용 공통 응답 포맷 ApiResponse&...
1. 개요 스프링의 어노테이션은 단순한 마커가 아니다. 각 어노테이션이 어떤 메커니즘으로 동작하는지 이해하면 문제가 생겼을 때 원인을 빠르게 찾을 수 있다. 주제 내용 핵심 어노테이션 내부 동작 어노테이션 처리 메커니즘 두 가지 방식 @Transactional 전파, 격리, 롤백, 주의사항 빈 스코프 Singleton, Prototype, Reques...
1. 개요 HTTP 요청이 스프링 부트 애플리케이션에 도달했을 때, 내부에서 어떤 컴포넌트들이 어떤 순서로 실행되는지를 코드 레벨에서 정리한다. 컴포넌트 역할 내장 Tomcat TCP 연결 수락, HTTP 파싱 Filter Chain 서블릿 레벨 공통 처리 (인코딩, CORS, 보안 토큰) DispatcherServlet 프론트 컨트롤러 — 요청 위임...
1. 개요 스프링 부트를 처음 배울 때 가장 먼저 마주치는 개념들이 있다. IoC, DI, AOP, Bean. 이 개념들이 어떻게 연결되고 내부적으로 어떻게 동작하는지를 코드 레벨에서 정리한다. 파트 내용 스프링 vs 스프링 부트 두 프레임워크의 관계와 차이 IoC 컨테이너 ApplicationContext 계층 구조 Bean 등록 컴포넌트 스캔, @...
Spring Boot 애플리케이션을 만들다 보면 @Configuration, @Value, @ConfigurationProperties 등 설정 관련 어노테이션이 한가득 등장한다. 각각이 무슨 역할인지, 언제 어떤 것을 써야 하는지, 그리고 실제로 값이 주입되는 시점이 언제인지 정리한다. 1. 개요 📌 핵심 원칙 Spring Boot의 설정 시스템은 ...
1. 개요 MSA 프로젝트에 서비스가 5개라면, application.yml 파일도 5개다. DB 주소가 바뀌거나 Redis 비밀번호가 바뀌면 5개 파일을 모두 수정하고, 서비스를 재배포해야 한다. 서비스가 10개, 20개가 되면 이 작업은 점점 고통스러워진다. Spring Cloud Config Server는 이 문제를 해결하는 중앙화된 설정 관리 ...
1. 개요 MSA에서는 서비스들이 서로 HTTP 호출로 연결되어 있다. 만약 ai-service가 다운됐는데 recommendation-service가 계속 ai-service를 호출한다면 어떤 일이 벌어질까? 호출 스레드가 타임아웃을 기다리며 쌓이고, 결국 스레드 풀이 고갈되어 recommendation-service까지 죽는다. 이 현상을 Casc...
1. 개요 서비스가 스케일 아웃되면 동일한 서비스의 인스턴스가 여러 개 뜬다. place-service가 3개 떠 있다면, recommendation-service는 어떤 인스턴스로 요청을 보내야 할까? 이 역할을 Load Balancer(로드 밸런서)가 담당한다. 여러 인스턴스에 요청을 고르게 분산시켜 특정 인스턴스에 부하가 집중되지 않도록 한다. ...
1. 개요 이전 글에서 Service Registry(Eureka Server)를 설명했다. Eureka Server는 전화번호부 서버다. 이번에는 각 서비스가 그 전화번호부에 자신을 등록하고, 타 서비스를 조회하는 클라이언트 쪽 — Service Discovery(Eureka Client)를 다룬다. Service Discovery는 크게 두 가지 ...
1. 개요 MSA에서 서비스는 언제든 새 인스턴스가 추가되거나 기존 인스턴스가 내려갈 수 있다. 스케일 아웃(Scale Out)이 일어나면 동일 서비스의 IP가 여러 개가 된다. 이 동적인 환경에서 클라이언트가 어떤 IP로 요청을 보내야 하는지 어떻게 알 수 있을까? 이 문제를 해결하는 것이 Service Registry다. 모든 서비스 인스턴스가 자...
1. 개요 MSA(Microservice Architecture)를 처음 구성할 때 가장 먼저 마주치는 질문이 있다. “클라이언트가 서비스가 여러 개인데, 주소를 몇 개나 알아야 하지?” 예를 들어 서울 데이트 앱처럼 user-service(8081), place-service(8082), recommendation-service(8083)가 따로 떠...
1. 개요 1편에서는 Job 계층의 도메인 개념(Job, JobInstance, JobExecution)을 정리했다. 이번 글에서는 실제 데이터 처리가 일어나는 Step 내부 구조를 깊이 파고든다. Chunk-oriented Processing이 왜 트랜잭션을 chunk 단위로 관리하는지, Tasklet과 언제 무엇을 선택해야 하는지를 중심으로 설명한...
1. 개요 Spring Batch를 처음 접하면 Job, JobInstance, JobExecution이 헷갈린다. 이름이 비슷하고 계층 구조도 명확하게 보이지 않기 때문이다. 이번 글에서는 Spring Batch 공식 문서(6.0 기준)를 바탕으로 Job 계층의 도메인 개념을 전부 정리한다. 💡 Spring Batch는 수십 년간 메인프레임(COBO...
1. Servlet 스프링을 이해하려면 서블릿 컨테이너와 스프링 내의 스프링 컨테이너에 대해 알고 있어야 한다. 스프링 컨테이너와 서블릿 컨테이너에서 더 세부적으로 들어가, 서블릿이라는 개념에 대해 이해한 후에 점진적으로 넓혀가보자. 📌 서블릿이란? 우선, 서블릿이란 웹 서버나 애플리케이션 서버에서 실행되는 자바 프로그램으로, 웹 서버로부터 HTTP ...