넷플릭스에서 사용한 Netflix Passport는 사용자 인증을 위한 독특한 접근 방식 중 하나로,
특히 넷플릭스의 글로벌 서비스 확장에 맞춰 확장성과 보안을 중점으로 고려한 시스템입니다.
이 시스템은 주로 다양한 인증 방식(OAuth2, SSO 등)과 관련 서비스를 통합하는 데 사용되며, 마이크로서비스 아키텍처에서 쉽게 적용할 수 있는 분산 인증 시스템을 구축하는 데 초점을 맞추고 있습니다.
Netflix Passport는 넷플릭스에서 전 세계 다양한 사용자의 인증과 인가를 관리하기 위해 만들어졌으며, 사용자 정보를 중앙화된 인증 시스템에 저장하는 대신, 분산된 여러 마이크로서비스에서 인증을 처리할 수 있도록 도와줍니다.
Netflix는 유저 인증 시에 Passport 라는 id 토큰을 트랜잭션 내로 전파하는 방법을 사용
이 방법을 우리 프로젝트에 적용할 것이고, 이것이 주 프로젝트 목표가 될 것 같다.
1. Netflix Passport의 주요 개념
- 다중 인증 제공자 지원
Netflix Passport는 다양한 인증 제공자를 지원합니다. 예를 들어, 사용자는 Google, Facebook, 또는 자체적인 이메일 인증 방식을 사용할 수 있습니다. 이를 통해 넷플릭스는 다양한 시장에서 사용자 경험을 최적화할 수 있습니다. - JWT와 OAuth2의 결합
Passport는 OAuth2를 기반으로 하면서도 JWT를 활용한 상태 비저장 인증 방식을 사용하여 성능과 확장성을 확보합니다. 인증 서버가 중앙에서 인증 토큰을 발급하면, 그 토큰을 가지고 여러 마이크로서비스가 독립적으로 인증을 수행할 수 있습니다. - 분산 시스템에서의 확장성
넷플릭스의 모든 마이크로서비스는 서로 독립적으로 운영되며, Passport는 각 서비스가 중앙 서버에 의존하지 않고도 자체적으로 사용자 인증을 처리할 수 있도록 합니다. - 세션 관리 없이 확장성 유지
JWT의 특성상 서버에 세션 정보를 저장할 필요가 없어, 세션 관리 부담을 줄이고 확장성 높은 시스템을 운영할 수 있습니다.
2. Netflix Passport와 같은 프로젝트를 구현할 때 고려할 수 있는 기술 및 기능
- SSO(Single Sign-On) 통합
넷플릭스 Passport에서처럼 여러 인증 제공자를 통합하면서 SSO 방식을 적용할 수 있습니다. 예를 들어, 기업 내 애플리케이션 간 SSO를 구현하거나, 외부 서비스(구글, 페이스북 등)와 연동할 수 있습니다. OAuth2, OpenID Connect(OIDC)를 사용하여 인증 흐름을 구현하고, 중앙 인증 서버를 통해 인증 및 인가를 처리할 수 있습니다.- 장점: 사용자 편의성 증가(한 번 로그인으로 여러 서비스 사용 가능), 보안성 강화(통합 인증 관리).
- 액세스 토큰 및 리프레시 토큰 관리
Passport는 JWT와 OAuth2를 사용하여 상태 비저장 방식으로 토큰을 관리합니다. 프로젝트에서 JWT를 사용하여 액세스 토큰을 발급하고, 리프레시 토큰을 통해 만료된 토큰을 갱신할 수 있는 시스템을 구축하면, 보안성과 성능을 모두 확보할 수 있습니다.- 기술 구현 예시:
- JWT를 활용한 토큰 발급 및 검증
- 리프레시 토큰을 통한 세션 갱신
- 토큰의 짧은 유효 기간 설정과 리프레시 토큰을 통한 보안 강화
- 기술 구현 예시:
- API Gateway와 인증 처리
넷플릭스에서 사용되는 마이크로서비스 아키텍처에서는 API Gateway를 통해 모든 API 요청을 중앙에서 관리합니다. 이때 API Gateway에서 사용자 인증을 처리할 수 있습니다. 예를 들어, JWT가 API Gateway에서 먼저 검증되고, 해당 토큰의 정보가 유효할 때만 백엔드 마이크로서비스로 요청을 전달하는 방식입니다.- 기술 구현 예시:
- Spring Cloud Gateway 또는 Zuul 같은 오픈소스 API Gateway를 사용하여 인증 처리
- API 요청 시 헤더에 포함된 JWT를 검증하여 인가된 사용자만 마이크로서비스에 접근할 수 있도록 설정
- 기술 구현 예시:
- 세분화된 권한 관리 (RBAC, ABAC)
사용자 역할(Role)에 기반한 접근 제어(RBAC: Role-Based Access Control)나 속성(Attribute)에 기반한 접근 제어(ABAC: Attribute-Based Access Control)를 적용하여 세분화된 권한을 관리할 수 있습니다. 넷플릭스처럼 다양한 권한이 필요한 시스템에서는 각 사용자에게 특정 권한을 부여하고, 그에 따라 다른 리소스에 접근할 수 있도록 처리할 수 있습니다.- 기술 구현 예시:
- Spring Security의 @PreAuthorize, @Secured 등의 애너테이션을 사용하여 각 역할별로 접근 권한을 제어
- ABAC에서는 Spring Security와 SpEL(Expression Language)를 사용해 복잡한 권한 조건을 정의
- 기술 구현 예시:
- 사용자 활동 모니터링 및 감사 로그: 넷플릭스와 같은 대규모 서비스에서는 사용자 활동을 모니터링하고, 이를 통해 보안 이상 징후를 감지하는 것이 중요합니다. 각 사용자의 로그인, 로그아웃, 권한 요청 등의 활동을 로그로 기록하고, 이를 중앙에서 모니터링할 수 있는 시스템을 구축할 수 있습니다.
- 기술 구현 예시:
- ELK Stack(Elasticsearch, Logstash, Kibana) 등을 사용하여 로그를 분석하고 대시보드로 시각화
- Spring AOP를 활용한 로그인/로그아웃 이벤트 로깅
- 기술 구현 예시:
- 멀티 팩터 인증(MFA)
넷플릭스와 같은 글로벌 서비스에서는 보안을 강화하기 위해 멀티 팩터 인증(MFA)을 도입할 수 있습니다. 예를 들어, 사용자가 로그인할 때 비밀번호 외에 추가적인 인증 단계(OTP, 이메일 인증 등)를 추가할 수 있습니다.- 기술 구현 예시:
- OTP(One Time Password) 발급을 위한 Google Authenticator API 연동
- SMS나 이메일을 통한 추가 인증을 구현하여 보안 강화
- 기술 구현 예시:
- Geo-IP 기반 보안 정책
넷플릭스처럼 글로벌 서비스를 운영할 경우, 사용자 위치에 따른 접근 제한을 두거나 보안 정책을 적용할 수 있습니다. 예를 들어, 특정 국가에서만 서비스가 가능하거나, 해외에서의 로그인 시 추가 인증을 요구하는 방식입니다.- 기술 구현 예시:
- IP 정보를 기반으로 위치 정보를 추적하는 GeoIP2 라이브러리 적용
- 위치 기반 접근 제어 및 알림 시스템 구축
- 기술 구현 예시:
- 분산 캐시를 통한 성능 최적화
대규모 트래픽이 발생할 경우 인증 정보를 빠르게 처리하기 위해 Redis와 같은 분산 캐시를 사용할 수 있습니다. Redis를 사용하면, 사용자 인증 정보(세션이나 토큰)를 빠르게 조회할 수 있어 전체 시스템 성능을 높일 수 있습니다.- 기술 구현 예시:
- Redis와 Spring Security를 연동하여 인증 정보를 캐싱
- 토큰 만료 시간이나 세션 유지 정책을 Redis에서 관리하여 성능 최적화
- 기술 구현 예시:
'개발관련' 카테고리의 다른 글
토스에서는 GATEWAY를 어떻게 활용할까? (2) | 2024.09.30 |
---|---|
<캡슐화> JPA 엔티티 생성시 Setter를 지양하는이유 (0) | 2024.09.24 |
MSA 기반 물류관리 및 배송시스템 프로젝트를 마치며... (0) | 2024.09.24 |
Gateway 에 관하여 내가 프로젝트를 진행하면서 해야할것 (2) | 2024.09.13 |
[Spring Security] @EnableMethodSecurity와 @EnableGlobalMethodSecurity (0) | 2024.09.10 |