인증 & 인가
2026. 3. 7. 22:49

인증(Authentication)이란?

내가 누구인지 신원(Identity)을 증명하는 과정이다. 


개발에서는 클라이언트가 자신이 누구인지를 증명해야 한다.

아이디/비밀번호, 토큰, 인증서 등 다양한 방식으로 인증할 수 있다.

 

인증에 성공하면 로그인한 사용자 정보가 보안 컨텍스트(Security Context)에 저장되며,

이 정보를 바탕으로 이후 요청 시 누가 요청했는지 판단할 수 있다.

 

인증에 실패하면 401 Unauthorized가 나온다.

 

보안 컨텍스트(Security Context)란?

Spring 서버 내부 메모리에 존재하며, 현재 로그인한 사용자 정보를 저장한다. 
(Session이든 JWT든 결국 Security Context에 저장된다.)

이후 요청이 들어오면 서버는 이 정보를 통해 현재 요청을 보낸 사용자가 누구인지 확인할 수 있다.

Session 방식은 로그인 시 Security Context가 세션에 저장되어 요청마다 재사용되고,
JWT 방식은 서버가 상태를 저장하지 않기 때문에 요청마다 토큰을 검증하여 Security Context를 새로 생성한다.

그렇다면 왜 JWT는 굳이 Security Context를 만들까?
JWT 토큰 안에는 이미 사용자 정보가 있는데 Security Context를 만드는 이유는
Spring Security는 토큰을 직접 사용하지 않기 때문이다.

Spring Security는 항상 Security Context에서 사용자 정보를 가져온다.
더보기

JWT 요청 흐름                                           Security Context가 없을 때

클라이언트 요청                                           Controller
       ↓                                                                 ↓
Authorization: Bearer JWT                         토큰 직접 꺼내기
       ↓                                                                 ↓
JWT Filter (인증시작)                                  JWT 파싱
       ↓                                                                 ↓
토큰 검증                                                     사용자 정보 추출
       ↓                                                                 ↓
Authentication 생성                                     권한 확인
       ↓
Security Context 저장 (인증 끝)
       ↓

Authorization Filter (권한 검사)

       ↓
Controller

 

* Security Context가 있으면 JWT 검증을 Filter에서 한 번만 하고, 이후 코드에서는 사용자 정보를 바로 사용할 수 있다.

 

인가(Authorization)란?

내가 이것을 해도 되는지 판단하는 과정이다.

 

인증된 사용자가 요청한 리소스나 기능에 접근할 권한이 있는지 판단하는 절차가 필요하다.

역할(Role), 권한(Authority)에 따라 접근 여부 결정한다.

 

인가에 실패하면 403 Forbidden가 나온다.

'💻 Backend > 이론 및 실습' 카테고리의 다른 글

QueryDSL 검색 기능 구현  (0) 2026.03.30
QueryDSL 개념 및 적용  (0) 2026.03.30
VPC EC2 생성  (0) 2026.03.10
클라우드 컴퓨팅 개념 정리 (On-Premise, IaaS, PaaS, SaaS)  (0) 2026.03.09
JWT & Filter  (1) 2026.03.06