본문 바로가기
백엔드

[개념] 인증(Authentication) vs 인가(Authorization)

by zzingni 2025. 5. 15.

 

 

 

인증과 인가, 헷갈리는 이유


 

많은 개발자들이 인증(Authentication)과 인가(Authorization)을 헷갈리는 이유는 이 두 개념이 거의 동시에 발생하고, 비슷한 맥락에서 다뤄지기 때문이다.

 

1. 로그인 성공시 모든 절차가 끝난 줄 알기 때문이다.

대부분 시스템은 로그인하면 곧바로 무언가를 할 수 있기 때문에, '로그인 = 권한 부여'라고 오해하기 쉽다.

하지만 실제로는 로그인은 누구인지 확인일 뿐이고, 권한은 그 뒤에 따로 체크된다.

 

2. 비슷한 타이밍에 발생함

인증 → 인가 순서로 바로 이어지기 때문에, 사용자 입장에서는 '한 번에 처리되는 과정'으로 느껴진다.

그래서 둘을 구분하지 않고 그냥 '접근 가능 여부 판단'으로 한꺼번에 생각하게 된다.

 

3. 용어가 비슷하고 추상적임

영어 단어인 Authentication, Authorization 자체가 비슷하게 생겼고, 우리말 번역도 ‘인증’과 ‘인가’라서 의미가 헷갈리기 쉽다.

특히 개발 초보자에게는 추상적인 개념이라 구체적 이미지 없이 외우게 된다.

 

4. 보안 문서나 프레임워크에서 혼용되는 경우도 있음

일부 문서에서는 두 단어를 명확히 나누지 않고 혼용하거나, 인증과 인가 로직을 한 API에서 처리하기도 한다.

 

 

 

현실에서 사용되는 인증과 인가의 예


    • 회사 출입 시 신분증을 보여주는 것은 인증, 특정 부서만 들어갈 수 있는 것은 인가.
    • 웹사이트에 로그인하는 것은 인증, 로그인 후 관리자 페이지에 들어갈 수 있는 권한이 있는지는 인가.
    • 도서관에서 회원카드로 로그인하는 것은 인증, 희귀 도서를 대출할 수 있는 권한이 있는지는 인가.
    • 스마트폰을 지문으로 잠금 해제하는 것은 인증, 앱이 카메라를 쓸 수 있도록 허용하는 것은 인가.
    • GitHub에 로그인하는 것은 인증, 특정 저장소에 푸시할 수 있는 권한이 있는지는 인가.

 

 

인증(Authentication)이란?


정의 및 개념

 

사용자가 누구인지 확인하는 과정.
시스템이나 서비스는 사용자로부터 어떤 행동을 허용하기 전에, 먼저 그 사람이 주장하는 신원이 진짜인지 확인해야 한다.

 

 

예시

 

  • ID와 비밀번호로 로그인
  • 휴대폰 본인 인증(문자 코드 입력)
  • Google, Kakao, Apple 로그인 (OAuth 기반)
  • 지문, 얼굴 인식 같은 생체 인증
  • OTP(One-Time Password) 사용
  • 보안카드나 인증서 로그인

 

기술
  • JWT (JSON Web Token)
    • 인증에 성공하면 서버가 발급하는 토큰
    • 토큰 안에 사용자 정보와 유효 기간이 포함됨
    • 클라이언트는 이 토큰을 요청 시마다 헤더에 담아 인증 수행
  • OAuth 2.0
    • 제3자 인증 방식
    • 사용자가 직접 ID/PW를 입력하지 않고, Google이나 Facebook 같은 신뢰된 플랫폼을 통해 로그인
    • "누구인지"를 다른 시스템이 보증해주는 방식
  • SSO (Single Sign-On)
    • 한 번 로그인으로 여러 서비스에 접근 가능
    • 예: 구글 계정으로 Gmail, Google Drive, YouTube 등 다양한 서비스 사용

 

 

인가(Authorization)란?


정의 및 개념

 

사용자가 무엇을 할 수 있는지, 어떤 자원(Resource)에 접근할 수 있는지를 결정하는 과정.

즉, 인증을 통해 "누구인지" 확인된 사용자에 대해, 그 사용자가 어떤 기능이나 데이터에 접근할 권한이 있는지 판단하는 것.

 

 

예시

 

  • 일반 사용자는 자신의 정보만 수정 가능하지만, 관리자는 모든 사용자 정보에 접근할 수 있음
  • 게시판 글 읽기는 누구나 가능하지만, 글 삭제는 작성자만 가능
  • 사내 시스템에서 인턴은 자료를 열람만 할 수 있고, 정직원은 편집도 가능
  • 클라우드 서비스에서 S3 버킷을 읽을 수는 있지만 쓸 수 없는 사용자 권한

 

기술

 

  • RBAC (Role-Based Access Control)
    • 사용자에게 '역할(Role)'을 부여하고, 각 역할에 따라 권한을 부여
    • 예: 관리자(Admin), 에디터(Editor), 일반 사용자(User)
  • ABAC (Attribute-Based Access Control)
    • 사용자 속성, 환경, 자원 속성 등에 따라 더 세밀하게 접근 제어
    • 예: ‘근무 시간이 아닐 때는 파일 다운로드 불가’
  • Access Token 기반 인가
    • API 요청 시 포함된 Access Token을 검사해 접근 권한 여부 판단
    • JWT(Json Web Token) 안에 포함된 role, scope 등을 기반으로 처리
  • 정책 엔진 (예: OPA - Open Policy Agent)
    • 복잡한 인가 정책을 코드로 정의하고 독립적으로 관리 가능

 

 

실제 개발에서 적용되는 방식


프론트엔드

 

  • 인증
    • 사용자로부터 로그인 정보(ID/PW, 소셜 로그인 등)를 입력받아 백엔드에 전달
    • 로그인 성공 시 받은 토큰(JWT 등)을 저장 (보통 쿠키 또는 로컬스토리지)
    • 토큰 유무로 로그인 상태 관리 및 화면 렌더링 제어
  • 인가
    • 사용자 역할(role)이나 권한(scope)에 따라 UI 요소 노출 여부 결정
    • 예: 관리자 메뉴는 관리자만 보이도록 숨기기
    • 특정 기능에 접근하려면 API 호출 시 토큰과 함께 권한 체크 요청

 

백엔드

 

  • 인증
    • 클라이언트가 보낸 로그인 정보를 검증하여 사용자 신원 확인
    • 인증 성공 시 JWT 등 인증 토큰 발급
    • API 요청 시 토큰 유효성 검사 수행
  • 인가
    • 토큰에 포함된 역할(role)이나 권한(scope) 정보를 기반으로 요청한 자원 접근 허용/거부 결정
    • 세부 권한 정책에 따라 리소스 접근 권한 검증
    • 예: 특정 API는 관리자만 호출 가능

 

API 설계 시 고려사항

 

명확한 목적과 기능 정의

  • API가 수행할 작업과 역할을 명확히 정해야 해.
  • 기능이 겹치거나 모호하면 유지보수 어려움.

RESTful 원칙 준수

  • HTTP 메서드(GET, POST, PUT, DELETE 등)를 목적에 맞게 사용
  • 자원(Resource) 중심 URL 설계
  • 상태 비저장(stateless) 설계

일관된 URL 및 명명 규칙

  • 소문자, 복수형, 하이픈(-) 사용 권장
  • 예: /users, /orders/{orderId}

적절한 인증 및 인가 처리

  • OAuth, JWT 같은 안전한 인증 방식 적용
  • 사용자 권한에 따른 접근 제한 구현

명확한 응답 구조

  • 성공과 실패 시 응답 형식 일관성 유지
  • 상태 코드(200, 400, 401, 403, 500 등)를 정확히 사용
  • 에러 메시지는 이해하기 쉽게

버전 관리

  • API 변경 시 기존 사용자 영향 최소화
  • URL에 버전 명시(/v1/users) 또는 헤더 이용

성능 및 확장성 고려

  • 페이징, 필터링, 정렬 지원
  • 캐싱 전략 적용 가능 여부 검토

문서화 및 테스트

  • Swagger, OpenAPI 등으로 문서화
  • 자동화 테스트 및 모니터링 계획

버전 관리

  • API 변경 시 기존 사용자 영향 최소화
  • URL에 버전 명시(/v1/users) 또는 헤더 이용

성능 및 확장성 고려

  • 페이징, 필터링, 정렬 지원
  • 캐싱 전략 적용 가능 여부 검토

문서화 및 테스트

  • Swagger, OpenAPI 등으로 문서화
  • 자동화 테스트 및 모니터링 계획

 

 

인증 vs 인가 : 핵심 차이점 비교


   인증 (Authentication)       인가 (Authorization)
무엇을 의미하는가? 사용자가 누구인지 확인하는 과정 사용자가 무엇을 할 수 있는지 결정하는 과정
언제 수행되는가? 시스템에 접근하기 전에 수행됨 인증이 완료된 후에 수행됨
주요 질문 "당신은 누구입니까?" "당신은 이 작업을 할 수 있습니까?"
방법 예시 ID/비밀번호, OTP, 지문, 소셜 로그인 등 권한(Role), 정책(Permission), ACL 등
결과 사용자 확인(로그인 성공 여부) 접근 허용/차단 결정
관련 기술/도구 OAuth 로그인, JWT, SSO RBAC, ABAC, 정책 엔진, API Gateway 권한 설정
보통 어디서 처리됨? 인증 서버, 로그인 모듈 애플리케이션 내부 권한 시스템, 미들웨어 등