인증(Authentication) vs 인가(Authorization)

Spring Boot / Security
💡 한 줄 정리: 인증은 '누구인지' '너 누구야?' 확인하는 것이고, 인가는 확인된 사용자가 '무엇을 할 수 있는지' 확인하는 것

1. 인증 (Authentication): 너 누구니?

인증은 해당 서비스에 접근하려는 사용자가 본인이 맞는지 신원을 확인하는 과정입니다. 가장 쉬운 예로 웹사이트에 로그인하는 행위가 바로 인증입니다.

  • 목적: 시스템을 사용하는 주체의 신원을 증명함
  • 수단: 아이디/비밀번호, 생체 인식, 일회용 비밀번호(OTP) 등
  • 비유: 호텔에 도착해 신분증을 제시하고 본인임을 확인받는 과정

2. 인가 (Authorization): 이건 해도 돼!

인증을 통해 누구인지 확인되었다면, 이제 그 사용자가 어떤 권한을 가지고 있는지 확인하는 과정이 인가입니다. 사용자가 특정 페이지에 접근하거나 기능을 실행할 권한이 있는지를 체크합니다.

  • 목적: 자원에 대한 접근 권한을 제어함
  • 수단: 역할(Role - Admin, User), 권한 등급 등
  • 비유: 체크인 후 받은 카드키로 내 방에는 들어갈 수 있지만, 옆 방이나 관리자 전용 구역에는 들어가지 못하는 것

3. 한눈에 비교하기

구분 인증 (Authentication) 인가 (Authorization)
질문 당신은 누구입니까? 이 작업을 할 권한이 있습니까?
발생 시점 보통 로그인 시 (가장 먼저 발생) 인증 성공 후 요청마다 확인
실패 시 에러 401 Unauthorized 403 Forbidden

4. Spring Security가 해주는 일

스프링 시큐리티는 이 복잡한 인증과 인가 과정을 필터(Filter) 체인을 통해 자동화

  • 사용자의 요청이 들어오면 인증 필터가 먼저 신원을 확인
  • 인증된 사용자의 정보를 SecurityContextHolder에 담아둠
  • 이후 인가 필터가 사용자의 '권한'을 확인하여 페이지 접근 여부를 결정

 

5. 흐름

정리

 인증이 없으면 누구인지 알 수 없고, 인가가 없으면 누구나 모든 정보를 볼 수 있다.

Q1. 인증(Authentication)과 인가(Authorization)의 차이를 설명해 주세요.

  • 답변: 인증은 시스템에 접근하는 사용자가 주장하는 신원과 일치하는지 확인하는 신원 확인 과정(예: 로그인)입니다. 반면 인가는 인증된 사용자가 특정 자원에 접근하거나 기능을 수행할 수 있는 권한이 있는지 확인하는 과정(예: 관리자 페이지 접근 권한 확인)입니다.

Q2. HTTP 에러 코드 401과 403의 차이는 무엇인가요?

  • 답변: 401 Unauthorized는 인증되지 않은 사용자가 자원에 접근하려 할 때 발생하며, "누구인지 알 수 없으니 먼저 로그인하라"는 의미입니다. 403 Forbidden은 인증은 되었으나 해당 자원에 접근할 권한(Role)이 부족할 때 발생하며, "누구인지는 알지만 이 작업은 할 수 없다"는 의미입니다.

Q3. Spring Security에서 인증된 사용자 정보를 어디에 보관하나요?

  • 답변: Spring Security는 인증이 완료된 사용자의 상세 정보와 권한을 담은 Authentication 객체를 SecurityContextHolder 내부의 SecurityContext에 보관합니다. 이를 통해 애플리케이션 어디에서든 현재 로그인한 사용자의 정보를 참조할 수 있습니다.

'Spring > spring 숙련' 카테고리의 다른 글

RestTemplate  (0) 2026.04.09
Vaildation  (1) 2026.04.09
Session/Cookie/Filter/Listener  (0) 2026.04.09
쿠키(Cookie)와 세션(Session)  (1) 2026.04.09
Bean 수동 등록, 중복 빈 해결하기  (1) 2026.04.09