728x90
반응형
1. JWT 기반 인증 처리
API 게이트웨이는 뭐냐 ?
- 대문 같은 것
- 많은 api들의 대문(게이트웨이)과 같은 역할
- API 게이트웨이는 : 인증/인가, 사용량 제어, 요청/응답 변조
API Gateway에서 JWT(JSON Web Token) 기반 인증을 처리하는 방식에 대해 설명하겠습니다. JWT는 사용자 인증과 권한 부여를 안전하게 관리하는 데 유용한 기술로, API Gateway에서 이를 처리하는 방식은 크게 두 가지로 나눌 수 있습니다
JWT 인증 처리 방식
- 사용자 로그인 및 토큰 발급:
사용자가 로그인하면 인증 서버(예: OAuth2.0, OpenID Connect)를 통해 JWT 토큰을 발급받습니다. 이 JWT 토큰은 주로 헤더에 포함되어 API 요청과 함께 전달됩니다. - Gateway에서의 인증 처리:
- API Gateway에서 각 요청이 들어오면 JWT를 Authorization 헤더에서 추출합니다.
- JWT가 유효한지 확인하기 위해, Gateway는 JWT 서명 검증을 수행합니다. 이는 공개키 기반의 서명 검증으로 이루어집니다.
- 토큰 검증이 성공하면, 인증된 사용자로 간주하고 요청을 백엔드 서버로 라우팅합니다.
- 검증에 실패한 경우, Gateway는 401 Unauthorized 응답을 반환하거나, 인증된 사용자만 접근할 수 있는 페이지로 리다이렉션합니다.
JWT 토큰 검증 예시
- JWT를 API Gateway에서 미들웨어로 처리하여, 이를 API 엔드포인트에 전달되기 전에 유효성을 검사합니다.
- JWT 라이브러리(예: jsonwebtoken in Node.js, pyjwt in Python)를 사용하여 서명된 토큰을 검증하고, 필요한 경우 오류 처리를 수행합니다.
2. 사용자 요청 라우팅 및 권한 관리
API Gateway는 인증 후, 사용자 요청을 적절한 서비스로 라우팅하는 역할을 합니다. 이 과정에서 권한 관리를 처리하는 방식은 다음과 같습니다:
사용자 요청 라우팅
- 인증된 사용자가 특정 API 요청을 할 때, Gateway는 JWT 내의 클레임 정보(예: roles, permissions, user_id 등)를 확인합니다.
- 요청된 API 경로와 사용자의 권한을 매핑하여, 해당 사용자가 요청할 수 있는 리소스에 대한 접근을 허용합니다.
- 예를 들어, 사용자가 "admin" 역할을 가지고 있을 경우, 관리자만 접근할 수 있는 API 경로로의 요청을 허용합니다.
권한 관리
- 권한 부여를 위해 JWT 토큰 내의 role 또는 scope 클레임을 검토합니다.
- Gateway는 이를 기준으로 요청을 처리하고, 필요한 권한이 없는 사용자는 403 Forbidden 응답을 반환합니다.
- 이 방식으로 세분화된 접근 제어를 구현할 수 있으며, 사용자가 요청한 리소스에 대한 권한을 실시간으로 확인하여 적용합니다.
3. 로깅 (Logging)
API Gateway에서 로깅은 매우 중요한 역할을 합니다. 로깅을 통해 시스템 상태를 모니터링하고, 문제 발생 시 빠르게 대응할 수 있습니다.
로깅 처리 방식
- API 호출 로깅: 요청의 시작 시각, 요청 경로, HTTP 메서드, 응답 상태 코드 등을 로깅합니다.
- 오류 로깅: 인증 실패, 권한 오류(403), 서버 오류(500) 등 주요 오류를 상세히 기록합니다.
- 성능 로깅: API Gateway를 통해 처리된 요청의 응답 시간을 기록하여 성능 최적화를 위해 분석할 수 있습니다.
- 로깅은 중앙 집중화된 로그 시스템(예: ELK Stack, Splunk, AWS CloudWatch)을 통해 수집하고, 분석할 수 있습니다.
4. 트래픽 제어 및 Rate Limiting
API Gateway는 트래픽 제어와 관련된 여러 기능을 제공합니다. 특히, Rate Limiting과 Request Throttling을 통해 시스템을 보호할 수 있습니다.
트래픽 제어 방식
- Rate Limiting:
- 특정 시간 내에 허용되는 최대 요청 수를 설정하여 API가 과부하되지 않도록 합니다.
- 예를 들어, 1분에 1000개의 요청만 허용하는 방식으로 설정할 수 있습니다.
- Redis와 같은 캐시 시스템을 사용하여 요청 카운트를 관리하고, 일정 시간 이상 초과되면 429 Too Many Requests를 반환합니다.
- Request Throttling:
- 사용자나 IP 주소별로 트래픽을 제한하여, 서비스 과부하를 방지할 수 있습니다.
- 이 방식은 서비스 품질 보장을 위한 중요한 요소로, DDoS 공격 등의 악성 트래픽으로부터 시스템을 보호하는 데 유용합니다.
5. 실제 구현 사례
API Gateway 설계 및 구현 경험을 바탕으로, 인증 및 권한 관리, 로깅, 트래픽 제어 등을 처리한 구체적인 사례를 설명하겠습니다.
구현 예시 1: JWT 기반 인증 및 권한 관리
- Gateway에서 JWT 토큰을 검증하고, 이를 기반으로 사용자의 역할에 맞는 리소스에 접근을 허용했습니다.
- 예를 들어, JWT 내 role 클레임을 확인하여, "admin" 역할만 접근할 수 있는 관리자 API와 "user" 역할만 접근할 수 있는 사용자 API를 분리하고, 이에 맞게 요청을 라우팅했습니다.
구현 예시 2: Rate Limiting과 트래픽 제어
- API Gateway에서 Redis를 활용해 각 사용자의 IP별로 요청 수를 모니터링하고, 초과된 요청에 대해 Rate Limiting을 적용했습니다.
- 예를 들어, 동일 IP에서 1분 동안 1000개의 요청이 초과되면 해당 IP에 대해 429 Too Many Requests 응답을 반환하게 설정했습니다.
구현 예시 3: 로깅 및 모니터링
- API Gateway에서 모든 요청의 경로, 응답 코드, 처리 시간을 로깅하여, 모니터링 대시보드(예: ELK Stack)를 통해 실시간으로 트래픽 및 성능 상태를 추적했습니다.
- 오류가 발생한 경우에는 로그를 분석하여 빠르게 문제를 파악하고, 사용자 경험을 저하시킨 요소를 수정했습니다.
결론
API Gateway에서 JWT 기반 인증을 처리하고, 사용자 요청을 라우팅하는 방식은 트래픽 관리, 권한 부여, 로깅 등과 함께 매우 중요합니다. 이러한 설계를 통해 보안성과 유연성을 동시에 제공하며, 시스템의 확장성과 성능 최적화를 달성할 수 있습니다.
728x90
반응형
'Computer 공부 > Backend question' 카테고리의 다른 글
API 설정시 나오는 이슈들.. 정리 (1) | 2024.12.07 |
---|---|
Kubernetes 공부 (0) | 2024.12.04 |
실시간 서비스에서 사용자 수가 예상을 초과했을 때?.. (0) | 2024.11.30 |
Docker / kubernetes 질문 리스트 (0) | 2024.11.17 |
3.1.2 기차표 예매 시스템 (4) | 2024.11.12 |