이번 학습에서는 OAuth2, JWT, Spring Security, Spring Cloud Config, 분산 추적, 이벤트 드리븐 아키텍처에 대해 공부했다.
OAuth2
OAuth2는 사용자를 대신하여 외부 서비스(Google, Kakao 등)의 인증을 처리하는 인증 및 권한 부여 프로토콜이다.
로그인 과정
- 사용자가 Google/Kakao 로그인 요청
- OAuth Provider가 인가 코드(Code) 발급
- 서버가 인가 코드로 Access Token 요청
- Access Token으로 사용자 정보 조회
- 회원 여부 확인
- 기존 회원이면 로그인, 신규 회원이면 회원가입 후 로그인
OAuth2는 사용자 인증(Authentication) 을 담당하며, 로그인 상태를 유지하는 것은 JWT 또는 Session이 담당한다.
JWT(JSON Web Token)
JWT는 사용자 정보를 포함하는 토큰 기반 인증 방식이다.
특징
- 토큰 자체에 사용자 정보를 포함(Self-contained)
- 서버가 로그인 상태를 저장하지 않는 Stateless 방식
- Authorization Header의 Bearer Token 형태로 전달
인증 과정
- 로그인 요청
- 사용자 정보 확인
- JWT 발급
- 클라이언트 저장
- 이후 요청마다 Authorization Header에 JWT 포함
- 서버에서 JWT 검증
- 사용자 인증 완료
Spring Security
Spring 기반 애플리케이션에서 인증(Authentication) 과 인가(Authorization) 를 담당하는 보안 프레임워크이다.
Session 기반 인증
기본적으로 Spring Security는 Session 기반 인증을 사용한다.
인증 과정
로그인
↓
Session 생성
↓
JSESSIONID 발급
↓
이후 요청마다 Session 확인
특징
- 서버가 로그인 상태를 저장
- 기본 Login Form 제공
- JWT 없이 인증 가능
JWT 기반 인증
REST API에서는 Session보다 JWT 방식을 많이 사용한다.
인증 과정
로그인
↓
JWT 발급
↓
클라이언트 저장
↓
Authorization Header에 JWT 포함
↓
JWT 검증
↓
인증 완료
특징
- Stateless 방식
- Session 대신 JWT 사용
Spring Security 기본 로그인
Spring Security는 별도의 로그인 페이지를 만들지 않아도 기본 Login Form을 제공한다.
GET /login
- 로그인 페이지 자동 생성
POST /login
- UsernamePasswordAuthenticationFilter가 로그인 처리
- UserDetailsService를 통해 사용자 조회
- PasswordEncoder로 비밀번호 검증
- Authentication 생성
- SecurityContext 저장
- Session 생성
즉, UserDetailsService와 PasswordEncoder만 구현하면 로그인 과정을 대부분 Spring Security가 처리한다.
UserDetailsService
UserDetailsService는 DB에서 사용자 정보를 조회하기 위한 인터페이스이다.
로그인 과정은 다음과 같다.
로그인 요청
↓
UsernamePasswordAuthenticationFilter
↓
UserDetailsService
↓
DB 사용자 조회
↓
PasswordEncoder.matches()
↓
Authentication 생성
↓
SecurityContext 저장
↓
Session 생성
기본적으로 Spring Security는
아이디 : user
비밀번호 : 랜덤 비밀번호
를 가진 임시 사용자를 생성하며, 실제 서비스에서는 UserDetailsService를 구현하여 DB 사용자 정보를 조회하도록 변경한다.
JWT와 Spring Security
JWT 기반 프로젝트에서는 Spring Security의 기본 Login Form을 사용하지 않는다.
formLogin().disable();
httpBasic().disable();
를 통해 기본 인증 방식을 비활성화한 후 로그인 API를 직접 구현한다.
JWT 인증 흐름
로그인 요청
↓
사용자 조회
↓
비밀번호 검증
↓
JWT 생성
↓
Access Token / Refresh Token 발급
이후 요청에서는
Authorization Header
↓
JWT 검증
↓
Authentication 생성
↓
SecurityContext 저장
↓
Controller
과정을 거쳐 인증이 완료된다.
즉,
- JWT는 개발자가 직접 생성 및 검증
- Spring Security는 Authentication 관리
를 담당한다.
OAuth2 + Spring Security
OAuth2 로그인 역시 Spring Security를 통해 구현할 수 있다.
인가 코드(Code)
↓
OAuth2UserService
↓
사용자 정보 조회
↓
JWT 발급
OAuth 인증 과정은 Spring Security가 처리하지만, JWT 발급은 개발자가 직접 구현하는 경우가 많다.
Spring Cloud Config
MSA에서는 여러 서비스가 존재하기 때문에 설정 파일을 각각 관리하기 어렵다.
Spring Cloud Config는 여러 서비스의 설정을 중앙에서 관리하는 서버이다.
관리하는 설정
- DB 주소
- DB 계정
- JWT Secret
- Redis
- Kafka
- Eureka
- API Key
- Port
각 서비스는 실행 시 Config Server로부터 필요한 설정을 받아온다.
@Configuration과의 차이
@Configuration
Spring Bean을 등록하기 위한 설정 클래스
예시
- SecurityConfig
- SwaggerConfig
- MinioConfig
Spring Cloud Config
MSA 환경에서 여러 서비스의 application.yml을 중앙에서 관리하는 서버
즉, 이름은 비슷하지만 역할은 완전히 다르다.
실시간 설정 변경
Spring Cloud Config는 설정 변경 사항을 서비스에 실시간으로 반영할 수 있다.
Git Repository
│
Config Server
│
Spring Cloud Bus
│
/actuator/refresh
│
각 서비스
Git을 통해 설정을 버전 관리할 수 있다는 장점도 있다.
분산 추적(Distributed Tracing)
MSA에서는 하나의 요청이 여러 서비스를 거치기 때문에 요청 흐름을 추적할 필요가 있다.
Micrometer
- 메트릭 수집
- 모니터링
- 다양한 모니터링 시스템과 연동
Zipkin
- 요청 흐름(Trace) 수집
- 시각화
- 검색 및 분석

이를 통해
요청이 어떤 서비스를 거쳐 처리되었는지 확인할 수 있다.
이벤트 드리븐 아키텍처(Event Driven Architecture)
이벤트를 중심으로 서비스가 동작하는 아키텍처이다.
예를 들어
주문 생성
│
▼
이벤트 발생
│
▼
재고 서비스
배송 서비스
결제 서비스
처럼 하나의 이벤트를 여러 서비스가 독립적으로 처리한다.
장점
- 느슨한 결합
- 높은 확장성
- 비동기 처리
단점
- 이벤트 흐름 관리가 복잡
- 장애 전파 가능성

Spring Cloud Stream
Spring Cloud Stream은 이벤트 드리븐 마이크로서비스를 쉽게 구현하기 위한 프레임워크이다.
특징
- Binder 추상화
- Producer / Consumer 모델
- Kafka, RabbitMQ 등 다양한 메시지 브로커 지원
Spring Security와 OAuth2, JWT의 역할을 구분할 수 있었고, Spring Cloud Config를 이용한 중앙 설정 관리 방식도 이해할 수 있었다. 또한 MSA 환경에서는 분산 추적(Zipkin, Micrometer)을 통해 요청 흐름을 모니터링하고, 이벤트 드리븐 아키텍처와 Spring Cloud Stream을 활용하여 서비스 간 결합도를 낮추고 비동기 처리를 구현할 수 있다는 점에 대해 알게되었다.
'개발 공부 > Java' 카테고리의 다른 글
| [TIL] Redis 자료구조와 캐싱(Cache) (0) | 2026.07.28 |
|---|---|
| [TIL] Docker, Docker Compose, CI/CD, Amazon ECS (0) | 2026.07.27 |
| [TIL] MSA - Eureka, LoadBalancer, FeignClient 이해하기 (0) | 2026.06.29 |
| [PLUS] Spring Cloud Eureka & Load Balancing (0) | 2026.06.29 |
| [TIL]Spring Boot 숙련(3)-RestTemplate와 JPA 연관관계, Fetch 전략 (0) | 2026.06.26 |
