콘텐츠로 이동

Spring Boot (3.5)

안정성을 우선하는 제품, 특히 이벤트 타입의 무거운 트랜잭션 로직을 다루는 곳에서는 "검증된 엔터프라이즈 프레임워크"가 필요해요. Java/Kotlin 진영에서 그 자리를 채우는 게 Spring Boot예요. 트랜잭션, 인증, 배치 같은 기능이 기본 제공돼서 외울 것도 적고, 무겁지만 안정적이라는 장점이 있죠. 우리는 Kotlin/Java 기반으로 Spring Boot 3.5를 쓰고 있어요.


핵심 개념

자동 구성(Auto-configuration)

Spring Boot의 가장 큰 편의는 자동 구성이에요. 클래스패스에 있는 라이브러리를 보고 필요한 빈(Bean)을 자동으로 등록합니다. 개발자는 설정 파일로 조정만 하면 되고, 기본 동작은 프레임워크가 알아서 잡아줘요.

Spring Security로 인증·인가

보안은 Spring Security가 맡아요. Spring Security가 클래스패스에 있으면 웹 애플리케이션은 기본적으로 보호됩니다. 세션/토큰 검증과 역할별 접근 제어(RBAC)를 SecurityFilterChain으로 정의하고, @EnableMethodSecurity를 붙이면 메서드 단위 권한도 걸 수 있어요. OAuth2 클라이언트와 리소스 서버를 조합해 토큰 기반 인증을 구성하기도 합니다.

JPA와 QueryDSL로 데이터를 다룬다

데이터 접근은 JPA(Jakarta Persistence)가 기준이에요. 엔티티로 스키마를 정의하고 Repository로 조회하며, 트랜잭션 관리는 프레임워크가 처리합니다.

그런데 조건이 많아지는 목록 조회는 JPA의 메서드 이름으로 감당하기 어려워져요. 그때 QueryDSL을 씁니다. QueryDSL은 타입 안전한 SQL 계열 쿼리를 빌더 형태로 만들어 주는데, 빌드 시점에 Q 클래스를 생성(annotation processing)해서 오타·타입 오류를 컴파일 타임에 잡아줘요. Spring Data JPA의 QuerydslPredicateExecutor와 함께 쓰면 복잡한 동적 조건도 안전하게 조립합니다. 우리는 이 조합으로 복잡한 조회를 컴파일 시점에 검증하며 짜요.

Spring Cloud OpenFeign / OkHttp로 서비스 간 호출

외부 API나 다른 서비스를 호출할 땐 Spring Cloud OpenFeign이에요. 인터페이스에 선언만 하면 HTTP 호출이 자동 생성되는 선언적 클라이언트죠. 서비스 간 통신에서 요청을 명시적으로 기술하고, 필요에 따라 OkHttp를 전송 계층으로 얹어 커스터마이즈합니다.


사용 사례 / 실제 적용

이벤트 제품의 백엔드는 Spring Boot 계열로 안정성에 방점을 두고 운영돼요.

  • 트랜잭션 중심 로직 — 결제·예약처럼 원자성이 중요한 작업은 Spring의 트랜잭션 관리로 보호합니다. 중간에 실패해도 상태가 어긋나지 않아요.
  • 인증·인가 — Spring Security로 토큰 검증과 역할별 접근 제어를 통일합니다. 제품 트래픽이 Kong 게이트웨이를 거쳐도 각 서비스는 자체적으로 보안 계층을 유지해요.
  • 복잡한 조회 — QueryDSL로 조건이 많은 목록·집계 쿼리를 타입 안전하게 조립해, 조회 로직을 안전하게 유지합니다.
  • 서비스 간 통신 — OpenFeign으로 다른 서비스·외부 API를 선언적으로 호출하고, Retry/Timeout 같은 장애 대응을 보강해요.

더 알아보기