-
[Backend] OAuth와 JWTBackend 2025. 6. 8. 22:38반응형
인증/인가
개발자라면 한 번쯤 인증과 인가를 혼동해본 경험이 있을 것이다.
인증(Authentication)은 "너는 누구냐?"에 대한 답이다. 로그인할 때 입력하는 아이디와 패스워드가 정말 그 사람 것인지 확인하는 과정이다. 카페에서 멤버십 카드를 보여주는 것과 같다고 생각하면 된다.
인가(Authorization)는 "너는 무엇을 할 수 있냐?"에 대한 답이다. 로그인한 사용자가 특정 기능을 사용하거나 데이터에 접근할 권한이 있는지 판단한다. 회사에서 사원증으로 출입할 수 있는 층이 정해져 있는 것처럼 말이다.
이 두 개념을 명확히 구분해야 JWT와 OAuth의 차이점도 이해할 수 있다.
JWT
JWT?
JWT는 JSON Web Token의 줄임말이다. RFC 7519 표준으로 정의된 토큰 형식으로, 당사자 간에 정보를 안전하게 주고받을 때 사용한다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
위처럼 점으로 구분된 세 부분으로 구성되어 있다:
구성 요소 역할 예시 Header 토큰 타입과 알고리즘 정보 {"alg":"HS256","typ":"JWT"}
Payload 실제 데이터 (클레임) {"sub":"1234567890","name":"John Doe"}
Signature 위변조 방지용 서명 HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT의 핵심 특징
자체 완결성(Self-contained)
토큰 안에 필요한 모든 정보가 들어있다. 데이터베이스를 뒤질 필요 없이 토큰만 보면 사용자가 누군지, 어떤 권한을 가졌는지 알 수 있다.무상태성(Stateless)
서버에서 세션을 따로 관리하지 않는다. 토큰만 있으면 어느 서버에서든 사용자를 인증할 수 있어서 확장성이 좋다.빠른 검증
토큰의 서명만 확인하면 되므로 검증 속도가 빠르다. API 호출이 많은 환경에서 성능상 이점이 크다.OAuth
Google OAuth 기준 OAuth?
OAuth은 인가 프레임워크다. "내 구글 계정으로 다른 앱에 로그인하기"를 가능하게 해주는 표준이다. 사용자가 직접 비밀번호를 알려주지 않고도 다른 서비스가 자신의 정보에 접근할 수 있도록 권한을 부여하는 방식이다.
OAuth의 4가지 주역
역할 설명 실제 예시 Resource Owner 데이터 주인 구글 계정을 가진 사용자 Client 권한을 요청하는 앱 Notion, Figma 등 Authorization Server 권한을 검증하고 토큰 발급 구글 OAuth 서버 Resource Server 실제 데이터를 가진 서버 구글 API 서버 JWT vs OAuth
용도의 차이
기준 JWT OAuth 주 목적 정보 전달 및 인증 제3자 인가 적용 범위 주로 같은 도메인 내 다른 서비스 간 JWT 사용 사례:
- 회사 내부 API 인증
- 마이크로서비스 간 통신
- 모바일 앱 로그인 토큰
OAuth 사용 사례:
- "구글로 로그인하기"
- 써드파티 앱에게 API 접근 권한 제공
- 파트너사와의 데이터 연동
보안 특성
JWT:
- 장점: 토큰 자체에 서명이 있어 위변조 검증 가능
- 단점: 토큰이 탈취되면 만료까지 막을 방법이 없음
- 주의: Payload는 Base64 인코딩일 뿐이라 중요 정보를 넣으면 안 됨
OAuth
- 장점: 액세스 토큰과 리프레시 토큰 분리로 보안성 강화
- 장점: 토큰 즉시 폐기 가능
- 장점: 사용자 비밀번호를 제3자에게 노출하지 않음
성능과 확장성
JWT의 성능 우위:
- 데이터베이스 조회 없이 토큰만으로 인증 완료
- 서버 간 세션 공유 불필요
- 로드밸런서 뒤에서도 문제없이 동작
OAuth의 성능 고려사항:
- 토큰 검증 시 인가 서버와 통신 필요할 수 있음
- 토큰 관리를 위한 추가적인 인프라 필요
- 그러나 토큰 생명주기 관리는 더 유연함
그래서 뭐?
JWT를 선택해야 하는 경우
- 사내 시스템: 같은 회사의 여러 서비스 간 인증
- 성능 중시: API 호출이 많아서 빠른 검증이 필요한 경우
- 모바일 앱: 오프라인에서도 토큰 유효성 검증이 필요한 경우
- 마이크로서비스: 서비스 간 통신에서 사용자 정보 전달
OAuth을 선택해야 하는 경우
- 소셜 로그인: 구글, 네이버, 카카오 등으로 로그인
- API 플랫폼: 다른 개발자들이 우리 API를 쓸 수 있게 하려는 경우
- 엔터프라이즈: 세밀한 권한 관리와 감사(audit)가 필요한 경우
- 파트너 연동: 외부 회사와 데이터를 주고받아야 하는 경우
선택 기준을 정리하면:
- 내부 시스템 인증 → JWT
- 외부 서비스 연동 → OAuth
- 복합적인 요구사항 → 두 기술 조합
기술 선택 시 고려해야 할 요소들:
- 프로젝트 규모와 복잡도
- 보안 요구사항
- 성능 목표
- 팀의 기술 역량
- 미래 확장 계획
마무리하며
결국 중요한 것은 "무엇이 더 좋은가?"가 아니라 "우리 상황에 무엇이 더 적합한가?"다. 각 기술의 특성을 이해하고 프로젝트의 요구사항에 맞는 최적의 조합을 찾는 것이 진정한 개발자의 역량이다.
'Backend' 카테고리의 다른 글
[Backend] EDA (0) 2025.07.15 [Backend] MQ (0) 2025.05.05 [Backend] CloudWatch 이론 (0) 2025.04.29 [Backend] Feign (0) 2025.03.26 [Backend] Grafana Loki (0) 2025.03.06