이 글은 OAuth프로토콜이 무엇인지 설명하게 간단한 예제를 설명합니다.
- 목차
- OAuth 프로토콜이란?
- OAuth 프로토콜 약점
- 토큰을 받는 과정
- 용어
- 핸즈온 1. Google Playground
- 핸즈온 2. 내가 만든 애플리케이션으로 OAuth 프로토콜 사용
OAuth 프로토콜이란?
OAuth 프로토콜은 승인 프로토콜입니다. 승인이라 함은 리소스 접근 권한을 제어한다는 뜻입니다.
OAuth 프로토콜의 특징은 사용자 인증정보 없이 리소스 접근 권한을 제어할 수 있습니다. 사용자 인증정보는 아이디/비밀번호, 생체정보 같은 사용자에게 귀속되는 영구 데이터를 의미합니다. OAuth는 리소스 접근 권한을 검사할 때 사용자 인증정보를 사용하지 않고 토큰을 사용합니다. 이 때 사용하는 토큰을 액세스토큰이라고 합니다.

사용자 인증정보 없이 액세스토큰으로 리소스 접근 권한을 검사를 하기 때문에, OAuth는 제3자 애플리케이션에게 사용자 권한을 위임할 수 있습니다. 사용자는 내 대신 애플리케이션이 리소스에 접근할 수 있도록 액세스토큰을 전달(\합니다.
예를 들어 Google Drive를 관리하는 백엔드를 개발한다고 가정해봅시다. Google 입장에서는 내가 만든 백엔드가 제3자 애플리케이션이기 때문에 사용자 아이디/비밀번호 같은 Google 사용자 정보를 줄 수 없습니다. 하지만 액세스 토큰으로 접근 권한을 검사한다면 사용자 인증정보 없이 안전하게 제3자 애플리케이션에게 리소스 접근을 허용할 수 있습니다.

OAuth 프로토콜에서 헷갈리면 안되는 부분
OAuth 프로토콜은 승인만 하는 프로토콜이기 때문에 사용자가 정말 사용자가 맞는지 확인하는 인증 과정이 없습니다. 그래서 OAuth를 사용할 때는 OIDC처럼 인증 프로토콜과 같이 사용합니다.
토큰을 받는 과정
OAuth 프로토콜의 동작은 토큰받는 과정에 따라 달라집니다. 토큰을 받는 과정은 제3자 애플리케이션의 유형에 따라 달라집니다. 애플리케이션 유형별로 토큰을 받는 과정은 Google 개발 문서에 잘 설명되어 있습니다.
예로 웹 애플리케이션 유형은 토큰을 바로 발급하지 않고 토큰을 받기 위한 Authorization Code를 발급해줍니다. 웹 애플리케이션은 발급받은 Authorization Code를 가지고 토큰을 발급받습니다.


용어
OAuth 프로토콜을 사용해서 개발을 하거나 다른 사람과 커뮤니케이션을 할 때 용어 통일이 매우 중요합니다. 용어에 대한 설명은 Okta 문서가 잘 설명되어 있습니다.
- Client: 리소스에 접근하는 제3자 애플리케이션
- Resource Server: 접근하려고 하는 리소스를 관리하는 서버
- Resource Owner: 리소스 주체인 사용자
- Authorization Server: 리소스에 접근할 수 있는 토큰을 발급하는 서버
핸즈온 1. Google Playground
Google Playground에서는 Google에서 제공하는 리소스에 대한 OAuth 프로토콜을 체험할 수 있게 합니다. 테스트하려면 Google 계정이 필요합니다.
- Google Playground에 접속합니다.
Google Playground 링크: https://developers.google.com/oauthplayground/
- 테스트하고 싶은 리소스를 선택합니다. 저는 YouTube Auth를 선택했습니다.

- 하단 Authorize APIs 버튼을 클릭합니다.

- 사용자 인증 과정과 어떤 YouTube 계정을 사용할지 선택 페이지가 나옵니다.

- 인증이 끝나면 OAuth 프로토콜 페이지가 나옵니다. 어떤 권한을 client에게 제공할지 권한 설정 페이지입니다. 부여할 권한은 페이지 중에 표시됩니다. 이 예제에서는 YouTube 동영상, 재생목록 등 권한을 부여합니다.


- OAuth 프로토콜 과정이 끝나면 code를 받습니다. Code를 token으로 교환해야 token을 발급받을 수 있습니다. Code를 token으로 교환하는 이유는 Playground의 예제가 token 발급받는 과정을 Authorization Code 방식으로 했기 때문입니다.

핸즈온 2. 내가 만든 애플리케이션으로 OAuth 프로토콜 사용
핸즈온 2는 Python으로 백엔드 애플리케이션을 만들고 직접 OAuth 프로토콜을 사용합니다. pyhon으로 만든 백엔드 애플리케이션은 저의 github에 공개되어 있습니다.
핸즈온 설명
애플리케이션은 Authorization Code 방식을 사용하여 토큰을 발급받습니다. 애플리케이션은 /login과 /callback API가 있습니다.
- /login API는 Google Authorization Server가 OAuth 프로토콜로 수락을 하기 위해 필요한 파라미터를 설정하고 리다이렉트(302)시킵니다.
- 사용자는 리다이렉트 때문에 Google Authorization Server 페이지로 이동합니다. 이 과정에서 인증과 권한 수락을 합니다.
- Google Authorization Server가 권한 수락까지 끝나면 code를 발급합니다. 애플리케이션은 이 code로 토큰을 발급해야 합니다. 그래서 Google Authorization Server는 code 발급 이후에 callback API를 호출하게 합니다.
- 애플리케이션의 callback API가 호출되면 발급받은 code로 토큰을 교환합니다.
지금까지 말한 과정은 아래 그림과 같습니다.

핸즈온 하는 방법
- Google Cloud Platform에 로그인합니다.
- API & Services -> OAuth consent screen 메뉴로 이동합니다. 이 메뉴는 OAuth 프로토콜에서 권한을 수락할 때 동의 화면입니다.

- 동의 화면을 생성합니다.


- Client를 만듭니다. Client는 애플리케이션입니다. 애플리케이션이 Google Authorization Server와 OAuth 프로토콜 통신하려면 내 애플리케이션을 등록해야 합니다.

- Client 생성이 완료되면 토큰이 생성됩니다. 이 토큰은 애플리케이션 환경 변수로 주입합니다.

- app 디렉터리로 이동합니다. 그리고 uv로 Python 패키지를 설치합니다.
cd app
uv sync
- Python 애플리케이션을 실행합니다. 그리고 Google 로그인 버튼을 클릭하여 실습을 진행합니다.
uvicorn main:app --port 8080

참고자료
'전공영역 공부 기록' 카테고리의 다른 글
| OIDC란? GitHub Actions 인증 사례로 알아보기 (0) | 2026.01.04 |
|---|---|
| EKS ALB controller에서 gateway API 사용하는 방법 (0) | 2025.12.30 |
| Kubernetes Gateway API 간단히 알아보기 (2) | 2025.12.30 |
| eBPF와 함께하는 Cilium 핸즈온: Pod부터 Service 통신까지 (1) | 2025.12.27 |
| 공식문서로 이해하는 eBPF 입문 (0) | 2025.12.23 |

