대부분의 서비스에는 회원가입과 로그인 기능이 필수적으로 포함된다. 가장 기본적인 방식은 ID와 비밀번호를 직접 받아 저장하는 것이지만, 이 방식만으로는 사용자 편의성과 서비스 보안을 모두 충족하기 어렵다.
이를 보완하기 위해 많은 서비스가 OAuth 2.0을 도입하고 있다. OAuth가 무엇인지 글을 써보려 한다.
1. OAuth(Open Authorization)의 정의
OAuth는 인터넷 사용자들이 비밀번호를 직접 제공하지 않고도, 다른 웹사이트나 애플리케이션이 특정 계정의 자원(Resource)에 접근할 수 있도록 허용하는 인증(Authorization) 프로토콜이다.
- 즉, "내 계정 비밀번호를 알려주지 않고도, 내가 허락한 범위 내에서만 다른 서비스가 내 데이터를 쓸수 있도록 해주는 표준 방식" 이다.
2. OAuth 구성 요소
Resource Owner (리소스 소유자)
- 데이터의 실제 주인, 서비스의 사용자를 의미
- 인증 절차 수행
- 리소스는 구글의 캘린터 정보, 카카오톡 알림기능
Client
- 리소스 소유자의 데이터를 사용하려는 제 3자 애플리케이션
- 회사 일정 관리 앱, 다이어트 기록 앱 등
- 특징:
- 사용자의 비밀번호를 알수 없음
- 반드시 AccessToken을 통해서만 데이터에 접근
Resource Server (리소스 서버)
- 실제 데이터를 가지고 있는 서버
- Google API 서버, Kakao API 서버
- 역할: Access Token이 유효한지 검증하고, 검증되면 해당 데이터를 반환
Authorization Server (인가 서버)
- 사용자 인증과 권한 부여를 담당하는 서버
- 역할:
- 사용자를 인증 (로그인)
- 동의(Consent)를 받아 어떤 범위(Scope)까지 허용할지 확인
- Access Token과 필요시 Refresh Token 발급
3. OAuth2.0 흐름

간단히 흐름을 정리하자면,
- Resource Owner (나) -> "내 데이터를 사용해도 돼"
- Client(앱) -> "데이터 좀 가져올께"
- Authorization Server -> "좋아, 동의 했으니 Access Token 줄께"
- Resource Server -> "Access Token 맞네, 데이터 가져가"
4. OAuth 장단점
장점:
- 보안 강화
- 사용자의 ID/비밀번호를 직접 공유하지 않아도 됨
- Access Token 기반으로만 접근 -> 비밀번호 노출 위험 감소
- 편리한 사용자 경험 (User Convenience)
- 별도의 회원가입 없이 구글/카카오/네이버 로그인 으로 간편하게 이용 가능
- 사용자가 기억해야 할 계정과 비밀번호 개수가 줄어듦
- 범위 제한 (Scope Control)
- 어떤 데이터에 접근할 수 있을지 세부적으로 권한 부여 가능
- 재사용성과 확장성 (Reusability & Extensilbility)
- 동일한 인증 방식을 다양한 서비스에서 활용 가능
- 모바일, 웹, IoT 등 다양한 환경에서 적용 가능
단점:
- 구현 복잡성 (Implementation Complexity)
- 단순 ID/비밀번호 방식 보다 구조가 복잡
- Authorization Server, Token 관리, Refresh Token 로직 구현 필요
- 토큰 유출 위험 (Token Leakage)
- Access Token이 유출되면 비밀번호와 동일한 수준의 피해 발생
- 따라서 HTTPS 적용 및 토큰 만료/갱신 전략 필수
- 인가 중심 한계
- OAuth는 원래 Authorization(권한 위임)을 위한것이지, Authentication(로그인)을 위한 것은 아님
- 로그인 기능을 위해서는 OpenID Connect(OIDC)와 함께 사용해야함
- 추가적인 관리 비용
- Scope 설계, 토큰 저장소 보안, 토큰 만료 정책 등 관리 포인트 증가
- 대규모 서비스에서는 운영 부담이 커질수 있음
'WEB 개발' 카테고리의 다른 글
| [FastAPI] OAuth2.0 소셜 로그인 구현 (Naver, Kakao, Google) #1 (0) | 2025.09.03 |
|---|---|
| [FastAPI] FileUpload, FileDownload (feat.BackgroundTasks) (0) | 2025.08.30 |
| [Github Action] AWS에 자동 배포 하기 (0) | 2025.08.25 |
| [AWS] EC2 인스턴스 생성하기 (2) | 2025.08.25 |
| [FastAPI] 비밀번호 변경 구현하기(feat. Redis, SMTP) (2) | 2025.07.25 |