본문 바로가기
개발관련

Netfilx는 PassPort ?

by 수바니 2024. 9. 27.

넷플릭스에서 사용한 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와 같은 프로젝트를 구현할 때 고려할 수 있는 기술 및 기능

  1. SSO(Single Sign-On) 통합
    넷플릭스 Passport에서처럼 여러 인증 제공자를 통합하면서 SSO 방식을 적용할 수 있습니다. 예를 들어, 기업 내 애플리케이션 간 SSO를 구현하거나, 외부 서비스(구글, 페이스북 등)와 연동할 수 있습니다. OAuth2, OpenID Connect(OIDC)를 사용하여 인증 흐름을 구현하고, 중앙 인증 서버를 통해 인증 및 인가를 처리할 수 있습니다.
    • 장점: 사용자 편의성 증가(한 번 로그인으로 여러 서비스 사용 가능), 보안성 강화(통합 인증 관리).
  2. 액세스 토큰 및 리프레시 토큰 관리
    Passport는 JWT와 OAuth2를 사용하여 상태 비저장 방식으로 토큰을 관리합니다. 프로젝트에서 JWT를 사용하여 액세스 토큰을 발급하고, 리프레시 토큰을 통해 만료된 토큰을 갱신할 수 있는 시스템을 구축하면, 보안성과 성능을 모두 확보할 수 있습니다.
    • 기술 구현 예시:
      • JWT를 활용한 토큰 발급 및 검증
      • 리프레시 토큰을 통한 세션 갱신
      • 토큰의 짧은 유효 기간 설정과 리프레시 토큰을 통한 보안 강화
  3. API Gateway와 인증 처리
    넷플릭스에서 사용되는 마이크로서비스 아키텍처에서는 API Gateway를 통해 모든 API 요청을 중앙에서 관리합니다. 이때 API Gateway에서 사용자 인증을 처리할 수 있습니다. 예를 들어, JWT가 API Gateway에서 먼저 검증되고, 해당 토큰의 정보가 유효할 때만 백엔드 마이크로서비스로 요청을 전달하는 방식입니다.
    • 기술 구현 예시:
      • Spring Cloud Gateway 또는 Zuul 같은 오픈소스 API Gateway를 사용하여 인증 처리
      • API 요청 시 헤더에 포함된 JWT를 검증하여 인가된 사용자만 마이크로서비스에 접근할 수 있도록 설정
  4. 세분화된 권한 관리 (RBAC, ABAC)
    사용자 역할(Role)에 기반한 접근 제어(RBAC: Role-Based Access Control)나 속성(Attribute)에 기반한 접근 제어(ABAC: Attribute-Based Access Control)를 적용하여 세분화된 권한을 관리할 수 있습니다. 넷플릭스처럼 다양한 권한이 필요한 시스템에서는 각 사용자에게 특정 권한을 부여하고, 그에 따라 다른 리소스에 접근할 수 있도록 처리할 수 있습니다.
    • 기술 구현 예시:
      • Spring Security의 @PreAuthorize, @Secured 등의 애너테이션을 사용하여 각 역할별로 접근 권한을 제어
      • ABAC에서는 Spring Security와 SpEL(Expression Language)를 사용해 복잡한 권한 조건을 정의
  5. 사용자 활동 모니터링 및 감사 로그: 넷플릭스와 같은 대규모 서비스에서는 사용자 활동을 모니터링하고, 이를 통해 보안 이상 징후를 감지하는 것이 중요합니다. 각 사용자의 로그인, 로그아웃, 권한 요청 등의 활동을 로그로 기록하고, 이를 중앙에서 모니터링할 수 있는 시스템을 구축할 수 있습니다.
    • 기술 구현 예시:
      • ELK Stack(Elasticsearch, Logstash, Kibana) 등을 사용하여 로그를 분석하고 대시보드로 시각화
      • Spring AOP를 활용한 로그인/로그아웃 이벤트 로깅
  6. 멀티 팩터 인증(MFA)
    넷플릭스와 같은 글로벌 서비스에서는 보안을 강화하기 위해 멀티 팩터 인증(MFA)을 도입할 수 있습니다. 예를 들어, 사용자가 로그인할 때 비밀번호 외에 추가적인 인증 단계(OTP, 이메일 인증 등)를 추가할 수 있습니다.
    • 기술 구현 예시:
      • OTP(One Time Password) 발급을 위한 Google Authenticator API 연동
      • SMS나 이메일을 통한 추가 인증을 구현하여 보안 강화
  7. Geo-IP 기반 보안 정책
    넷플릭스처럼 글로벌 서비스를 운영할 경우, 사용자 위치에 따른 접근 제한을 두거나 보안 정책을 적용할 수 있습니다. 예를 들어, 특정 국가에서만 서비스가 가능하거나, 해외에서의 로그인 시 추가 인증을 요구하는 방식입니다.
    • 기술 구현 예시:
      • IP 정보를 기반으로 위치 정보를 추적하는 GeoIP2 라이브러리 적용
      • 위치 기반 접근 제어 및 알림 시스템 구축
  8. 분산 캐시를 통한 성능 최적화
    대규모 트래픽이 발생할 경우 인증 정보를 빠르게 처리하기 위해 Redis와 같은 분산 캐시를 사용할 수 있습니다. Redis를 사용하면, 사용자 인증 정보(세션이나 토큰)를 빠르게 조회할 수 있어 전체 시스템 성능을 높일 수 있습니다.
    • 기술 구현 예시:
      • Redis와 Spring Security를 연동하여 인증 정보를 캐싱
      • 토큰 만료 시간이나 세션 유지 정책을 Redis에서 관리하여 성능 최적화