Backend (Spring)
35개의 글
-
CloudFront CDN 실전 가이드 2편: Spring Boot + Kotlin 오리진을 CloudFront로 (Terraform 실습)
Spring Boot + Kotlin 앱을 오리진으로 두고 CloudFront를 앞단에 붙인다. Kotlin으로 Cache-Control·ETag 설정, /api/*(무캐시)와 /static/*(캐시) Behavior 분리, Terraform 구성, X-Cache로 hit/miss 검증, 무효화까지 실습
-
CloudFront CDN 실전 가이드 1편: CDN과 CloudFront는 어떻게 동작하는가
CDN이 왜 필요한지부터 CloudFront의 구성요소(Distribution·Origin·Behavior·엣지 캐시), 캐싱 동작 원리(캐시 키·Cache-Control·TTL·hit/miss), 무효화 vs 버저닝까지 — Spring Boot 오리진을 올리기 전에 알아야 할 CDN 기본기
-
스프링 배치 6 가이드 종합편: 마켓플레이스 분석 파이프라인 — ETL · KPI 집계 · K8s CronJob
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 시리즈 1~6편을 한 파이프라인에 모으는 종합편. 운영 marketplace schema에서 분석 analytics schema로 어제 주문을 옮기는 daily-etl, 그 위에서 일별·월별 KPI를 집계하는 daily-kpi·monthly-kpi를 PostgreSQL 16 한 인스턴스에 두 datasource로 분리해 올린다. 5편 파티셔닝으로 ETL을 병렬화하고, 3편 멱등 upsert로 재실행을 안전하게, 6편 관측성과 K8s CronJob으로 운영하는 — Lombok 없이 Kotlin으로 풀이한 시리즈 종합편.
-
스프링 배치 6 가이드 6편: 관측성 · 테스트 · 배포 — Micrometer · @SpringBatchTest · Testcontainers · K8s CronJob
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 잡을 관측하고 테스트하고 배포하는 법. 자동 등록되는 Micrometer 메트릭 6종과 Prometheus 노출, MDC로 모든 로그에 jobName·stepName·chunkIndex를 박는 구조화 로깅, 테스트 피라미드·어노테이션 4종·테스트 대역 5종을 배치 컨텍스트로 자체완결 정리, @SpringBatchTest와 JobLauncherTestUtils로 슬라이스·통합·재시작을 검증하는 법, H2가 못 잡는 쿼리를 Testcontainers PostgreSQL 16으로 거르는 이유, 그리고 Java 21 멀티 스테이지 Dockerfile과 K8s CronJob까지 — Lombok 없이 Kotlin으로 풀이한 시리즈 6편.
-
스프링 배치 6 가이드 5편: 성능 · 병렬화 — 멀티 스레드 · 파티셔닝 · 원격 워커 · 가상 스레드
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 잡을 더 빨리 돌리는 법. 단일 스레드에서 멀티 스레드 Step으로 넘어갈 때의 Reader 동시성·재시작 함정, key range로 데이터를 쪼개 파티션마다 독립 StepExecution을 두는 파티셔닝, 워커 프로세스를 분리하는 원격 파티셔닝과 원격 청킹의 차이, JDK 21 가상 스레드가 IO-bound 잡에서 빛나는 지점과 커넥션 풀 한계, 그리고 100만 건 기준 네 방식의 벤치마크 비교까지 — Lombok 없이 Kotlin으로 풀이한 시리즈 5편.
-
스프링 배치 6 가이드 4편: 잡 실행 · 스케줄링 · 운영 — 트리거 · 멱등 파라미터 · 데이터 소스 5 패턴
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 잡을 어떻게 돌리고 운영하는가. JobLauncher와 JobOperator의 역할 분담, @Scheduled·Quartz·K8s CronJob·Argo 중 무엇으로 트리거할지 결정 트리, JobParameters 멱등 키 설계와 incrementer 트레이드오프, 실패 잡 재시작 제어, Actuator·Micrometer 기반 운영 모니터링, 여러 인스턴스에서 같은 잡이 중복 실행되는 걸 막는 법, 그리고 배치가 데이터를 읽어 오는 5가지 패턴(같은 DB·API·Read Replica·분석 Warehouse·CDC)까지 — Lombok 없이 Kotlin으로 풀이한 시리즈 4편.
-
스프링 배치 6 가이드 3편: 트랜잭션 · 실패 처리 — Skip · Retry · 재시작
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 트랜잭션과 실패 처리. 청크 한 사이클에서 한 건이 깨지면 무엇이 rollback되고 무엇이 살아남는지, faultTolerant Step의 Skip·Retry·NoRollback 정책을 예외 의미에 맞춰 설계하는 법, Skip 시 item별 재처리(scan)라는 함정, Listener 6종 카탈로그, ExecutionContext가 재시작 위치를 보존하는 원리, 그리고 JobParameters 멱등 키와 PostgreSQL upsert까지 — Lombok 없이 Kotlin DSL로 풀이한 시리즈 3편.
-
스프링 배치 6 가이드 2편: 청크 지향 처리 — Reader · Processor · Writer
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 청크 지향 처리. read N → process N → write N → commit 한 사이클이 트랜잭션 경계라는 메커니즘부터 ItemReader 6종 선택 트리, ItemProcessor 변환·필터·합성 패턴, JpaItemWriter vs JdbcBatchItemWriter 트레이드오프, PostgreSQL ON CONFLICT 멱등 패턴, 그리고 가장 자주 헷갈리는 청크 크기 vs 페이지 크기까지 — Lombok 없이 Kotlin DSL로 풀이한 시리즈 2편.
-
스프링 배치 6 가이드 1편: Job · Step · 메타데이터의 정체 — Spring Boot 4 · Kotlin 2.3
Spring Boot 4 + Kotlin 2.3 + PostgreSQL 16 환경에서 Spring Batch 6 입문. Job·Step·JobInstance·JobExecution 어휘 정의, JobRepository 6 메타데이터 테이블 구조, 첫 Hello Tasklet 구현, 5.x → 6.x 마이그레이션 핵심 변경(Jakarta EE 10·Java 17 baseline·@EnableBatchProcessing 자동화)까지 — Lombok 없이 Kotlin DSL로 풀이한 시리즈 1편.
-
java.util.concurrent 실무 패턴 7선: 스레드 풀부터 동시성 제어까지
ExecutorService, CompletableFuture, CountDownLatch, ConcurrentHashMap, BlockingQueue, Semaphore, ReentrantLock — 실무에서 자주 쓰이는 java.util.concurrent 클래스 7개의 동작 원리와 실전 패턴을 정리한다.
-
선착순 부하 테스트 회고: 실무에서 놓치기 쉬운 것들
4가지 선착순 전략을 k6로 테스트하면서 만난 문제들 — Rate Limiter 충돌, 대기열 초과 성공 버그. 그리고 실무에서 선착순 API와 일반 API를 격리하는 4가지 방법(DataSource 분리, Redis 오프로드, 서비스 분리, Bulkhead)을 정리한다.
-
토큰 발급 방식으로 선착순 시스템 구현하기: 입장권부터 봇 방지까지
입장 토큰을 먼저 발급하고 토큰 보유자만 구매할 수 있는 선착순 시스템을 구현한다. JWT 기반 토큰 설계, TTL 만료 전략, Rate Limiting + CAPTCHA를 조합한 봇 방지까지 다룬다.
-
Redis로 선착순 시스템 구현하기: DECR부터 Lua 스크립트까지
Redis DECR 원자 연산과 Lua 스크립트로 선착순 재고 차감을 구현한다. Spring Boot + Redisson으로 구현하고, DB 락 방식과 동일 조건(재고 100개, 동시 100명)으로 TPS를 직접 비교한다. Redis-DB 정합성 문제와 장애 대비 전략까지 다룬다.
-
DB 락으로 선착순 시스템 구현하기: FOR UPDATE부터 동시성 테스트까지
SELECT FOR UPDATE를 사용한 선착순 재고 차감 구현을 다룬다. Spring Boot + JPA 코드로 비관적 락을 구현하고, 100명 동시 요청 테스트로 정합성을 검증한 뒤, 한계를 직접 확인한다.
-
격리 수준별 데드락과 락 전략: 비관적 락부터 FOR UPDATE의 한계까지
Read Committed, Repeatable Read, Serializable 각 격리 수준에서 데드락이 발생하는 실제 케이스를 다룬다. 비관적 락과 낙관적 락의 차이, FOR UPDATE의 동작 원리와 한계까지 정리한다.
-
실무에서 자주 쓰는 HTTP 커스텀 헤더 정리
X-Request-ID, X-Forwarded-For 등 실무에서 흔히 사용하는 HTTP 커스텀 헤더의 용도와 사용법을 정리한다. X- 접두사 관례의 역사, CORS와의 관계, Spring Boot에서의 활용까지 다룬다.
-
CORS를 이해하기: 브라우저 보안 정책부터 Spring Boot 설정까지
CORS(Cross-Origin Resource Sharing)의 동작 원리를 이해하고, 실무에서 자주 만나는 CORS 에러를 해결하는 방법을 다룬다
-
SAML 2.0 인증 완벽 가이드: 개념부터 Microsoft Entra ID 연동까지
SAML 2.0 프로토콜의 핵심 개념과 Spring Boot에서 Microsoft Entra ID(Azure AD) SAML 연동을 구현하는 실무 가이드
-
kind로 로컬 K8s 클러스터 구축하기
kind를 사용해 로컬에서 멀티 노드 Kubernetes 클러스터를 구축하고 Spring Boot 앱을 배포하는 실습 가이드
-
Spring Boot SSO 연동 가이드: OAuth2/OIDC와 SAML 실무 구현
Spring Security로 Keycloak, Okta, Azure AD 등 IdP와 SSO 연동하는 실무 가이드
-
스프링부트 실무 가이드 7편: 로깅 전략과 실무
SLF4J, Logback, Log4j2 비교부터 구조화된 로그, MDC, 중앙 집중식 로그 관리까지
-
스프링부트 실무 가이드 6편: 모니터링과 옵저버빌리티
Prometheus, Grafana, 커스텀 메트릭으로 시스템 상태를 실시간 파악하기
-
스프링부트 실무 가이드 5편: 데이터베이스 최적화
인덱스 설계, 커서 기반 페이지네이션, Read Replica로 대용량 데이터 처리하기
-
스프링부트 실무 가이드 4편: Resilience 패턴
Circuit Breaker, Rate Limiter, Bulkhead로 장애에 강한 시스템 구축하기
-
스프링부트 실무 가이드 3편: 이벤트 드리븐 아키텍처
Kafka와 Outbox 패턴으로 신뢰성 있는 이벤트 시스템 구축하기
-
스프링부트 실무 가이드 2편: 캐싱 전략과 Redis 활용
Cache-Aside 패턴부터 캐시 문제 해결까지, 실무에서 바로 적용 가능한 캐싱 완벽 가이드
-
스프링부트 실무 가이드 1편: 동시성 제어와 재고 관리
원자적 UPDATE와 멱등성 키로 동시성 문제를 해결하는 실무 가이드
-
스프링 사전과제 가이드 종합 과제: 마켓플레이스 REST API — Spring Boot 4 · Kotlin 2.3
Spring Boot 4 + Kotlin 2.3 환경에서 1~7편의 모든 패턴을 종합 적용하는 실전 과제. 회원·상품·주문 3대 도메인의 REST API를 7일간 구현하면서 4계층 책임 분리·JPA·테스트·N+1 최적화·JWT 인증·Docker 배포·이벤트 기반 알림까지 한 번에 검증한다. 싱글 모듈과 멀티 모듈(Option A 정석 DIP·Option B 간소화) 중 선택, 기본 70점 + 가산 35점 평가 기준 — Lombok 없이 Kotlin primary constructor·val/var로 풀이한 시리즈 capstone.
-
스프링 사전과제 가이드 7편: Advanced Patterns — Spring Boot 4 · Kotlin 2.3 · Events · Async · 멀티 모듈
Spring Boot 4 + Kotlin 2.3 환경에서 사전과제 차별화를 만드는 고급 패턴. @TransactionalEventListener로 도메인과 부가 기능 분리, @Async + CompletableFuture로 응답 시간 단축, 파일 업로드 검증, URI 버저닝, 계층형·Hexagonal·CQRS 비교, 멀티 모듈 Option A(DIP) vs Option B(간소화) — Lombok 없이 Kotlin primary constructor·val/var로 풀이한 시리즈 7편.
-
스프링 사전과제 가이드 6편: DevOps & Deployment — Spring Boot 4 · Kotlin 2.3 · Docker · GitHub Actions
Spring Boot 4 + Kotlin 2.3 환경에서 사전과제 평가자가 보는 배포 영역. Java 21 멀티 스테이지 Dockerfile, docker-compose의 healthcheck + depends_on 조합으로 DB 실제 준비 보장, GitHub Actions에서 Gradle 캐시 + JaCoCo 커버리지, 프로파일별 application.yml 분리, Actuator로 health·prometheus 노출 — Lombok 없이 Kotlin primary constructor·val/var로 풀이한 시리즈 6편.
-
스프링 사전과제 가이드 5편: Security & Authentication — Spring Boot 4 · Kotlin 2.3 · Spring Security 7, JWT(oauth2-resource-server), BCrypt·Argon2, RBAC
Spring Boot 4 + Kotlin 2.3 환경에서 Spring Security 7과 spring-boot-starter-oauth2-resource-server로 JWT 인증을 표준대로 구현하는 법. JwtDecoder/JwtEncoder Bean 한 짝으로 검증·발급, JwtAuthenticationConverter로 role claim → ROLE_ 매핑, @AuthenticationPrincipal Jwt로 Controller에서 사용자 정보 추출, BCrypt/Argon2 선택 기준, @PreAuthorize와 Service에서의 리소스 소유자 검증, CORS 흔한 함정까지 — 사전과제 보안 영역에서 가점과 감점이 갈리는 포인트를 평가자 시점으로 정리.
-
스프링 사전과제 가이드 4편: Performance & Optimization — Spring Boot 4 · Kotlin 2.3 N+1·페이지네이션·캐싱·QueryDSL
Spring Boot 4 + Kotlin 2.3 환경에서 N+1 문제를 잡는 세 가지 도구(Fetch Join·@EntityGraph·@BatchSize)의 트레이드오프, Page/Slice/Cursor 중 언제 무엇을 쓸지, Caffeine과 Redis 중 어떤 캐시를 고를지, QueryDSL 동적 쿼리와 Projection 적용 기준까지 — 성능 최적화 영역에서 가점과 감점이 갈리는 포인트만 평가자 시점으로 정리했다.
-
스프링 사전과제 가이드 3편: Documentation & AOP — Spring Boot 4 · Kotlin 2.3 Swagger·MDC·Aspect 운용 기준
Spring Boot 4 + Kotlin 2.3 환경에서 Swagger/SpringDoc 운용 기준, MDC 기반 요청 추적과 민감 정보 마스킹, AOP로 횡단 관심사를 분리하는 방법까지 — 사전과제에서 가점과 감점이 갈리는 문서화·로깅·AOP 영역을 평가자 시점으로 한 편에 정리한 시리즈 3편.
-
스프링 사전과제 가이드 2편: Database & Testing — Spring Boot 4 · Kotlin 환경 분리·테스트 피라미드·Testcontainers
Spring Boot 4 + Kotlin 환경에서 환경별 DB 선택과 ddl-auto 정책, Memory Repository 구현 시 주의사항, Test Pyramid에 따른 어노테이션 선택 기준, 테스트 대역(Dummy·Stub·Spy·Mock·Fake) 선택 기준, Testcontainers로 H2 방언 차이가 가리는 버그를 잡는 법까지 — data class·val/var로 Lombok 없이 풀이한 시리즈 2편.
-
스프링 사전과제 가이드 1편: Core Application Layer — Spring Boot 4 · Kotlin 4계층 설계
Spring Boot 4 + Kotlin 환경에서 사전과제 평가자가 반복적으로 지적하는 4계층 설계 포인트만 추렸다. Controller·Service·Repository·Domain 책임 분리, Request → Command 변환, @Transactional(readOnly=true)의 실제 효과, GlobalExceptionHandler 3단 우선순위까지 — Kotlin data class·primary constructor·val/var로 Lombok 없이 자연스럽게 풀이한 시리즈 1편.