tech/Spring

[Spring] 인증(Authentication)과 인가(Authorization)

sunm2n 2025. 12. 3. 14:18

저번 글에서는 Spring security에 대해서 알아보았다.

 

https://sunm2n.tistory.com/66

 

[Spring] SpringSecurity란?

Spring Security는 자바(Java) 기반의 애플리케이션(특히 Spring 프레임워크)에서 보안(인증 및 인가)을 담당하는 가장 강력하고 표준적인 프레임워크이다. 쉽게 비유하자면, 웹 사이트라는 '건물'을 지

sunm2n.tistory.com

 

Spring security를 공부하기 위해서 꼭 알아야 할 개념인 인증과 인가에 대해서 알아보자.

 

인증(Authentication)과 인가(Authorization)는 보안의 가장 기초이면서, 실무자들도 용어를 섞어 쓸 만큼 자주 헷갈리는 개념이다.

하지만 이 둘은 명확히 다르다.

 

가장 쉽게 이해할 수 있도록 '회사 출근' 상황에 비유해서 알아보자.

 

 

1. 인증 (Authentication): "당신, 우리 회사 직원 맞아?"

  • 핵심 질문: "당신은 누구입니까?" (Who are you?)
  • 정의: 접속하려는 대상(사용자)이 주장하는 신원이 실제 본인이 맞는지 확인하는 절차
  • 비유:
    • 회사 로비의 스피드 게이트에 사원증을 찍는 행위
    • "나는 이 회사 직원 홍길동입니다"라고 사원증으로 증명하고 로비 안으로 들어가는 과정
  • 웹/앱 예시:
    • 로그인 (아이디/비밀번호 입력)
    • 이메일 인증
    • OTP, 지문 인식, Face ID

 

2. 인가 (Authorization): "직원인 건 알겠는데, 사장실에 들어갈 수 있어?"

  • 핵심 질문: "당신은 이것을 할 권한이 있습니까?" (What can you do?)
  • 정의: 인증된 사용자라 할지라도, 특정 리소스나 기능에 접근할 자격이 있는지 확인하는 절차 반드시 '인증' 후에 일어난다.
  • 비유:
    • 사원증을 찍고 회사에 들어왔지만(인증 완료), '서버실'이나 'CEO 집무실' 문은 안 열리는 상황.
    • 일반 직원은 '사무실'만 들어갈 수 있고, 보안팀 직원은 '서버실'까지 들어갈 수 있는 권한의 차이
  • 웹/앱 예시:
    • 일반 회원은 '공지사항'을 읽을 수만 있음 (Read)
    • 관리자(Admin)는 '공지사항'을 쓰고 지울 수 있음 (Write/Delete)
    • 유료 멤버십 회원만 볼 수 있는 동영상

 

 

 주의! HTTP 상태 코드의 함정 HTTP 상태 코드 이름 때문에 많이 헷갈린다.

  • 401 Unauthorized: 이름은 권한 없음(Unauthorized) 같지만, 실제로는 인증이 안 됨(로그인 필요)을 의미한다.
  • 403 Forbidden: 로그인은 했지만, 권한이 없어서 금지됨을 의미한다. (이게 진짜 인가 실패)

 

3. Spring Security에서의 처리

 

앞서 배운 필터 개념을 적용해 보면 순서가 명확해진다.

  1. 인증 필터 (Authentication Filter):
    • 사용자가 ID/PW를 보냄 → DB와 대조 → 맞으면 "통과! 당신은 User1입니다." (SecurityContext에 저장)
  2. 인가 필터 (FilterSecurityInterceptor):
    • User1이 /admin 페이지를 요청함 → 잠깐, User1은 ROLE_USER네? 여긴 ROLE_ADMIN만 올 수 있어. → 403 에러 발생 (차단)

 

4. 결론

  • 인증(Authentication): 문을 통과하는 열쇠 (로그인)
  • 인가(Authorization): 그 열쇠로 어느 방까지 갈 수 있는지 (권한 등급)