테크 경제

API 인증 방식 비교: JWT, OAuth, mTLS, API Key 선택 기준 2026

API 인증 방식 비교: JWT, OAuth, mTLS, API Key 선택 기준 2026

API 인증 방식 선택, 팀에서 계속 미루고 있지 않나요?

“우리 서비스에 OAuth 써야 할까요?” 질문이 또 나왔어요. 그런데 막상 비교해보면 JWT도 되는 것 같고, API Key도 당장은 잘 돌아가고 있고. 결론이 안 나요.

사실 API 보안 사고의 절반 이상이 인증 방식을 잘못 선택해서 생겨요. 더 안전하다고 알려진 방식을 골랐는데, 우리 서비스 구조에 안 맞으면 오히려 더 위험해지는 거예요.

핵심 요약

  • JWT는 stateless 구조 덕분에 DB 조회 없이 인증이 가능하지만, 토큰 수명을 5~15분으로 설정하지 않으면 탈취 시 대응이 어렵다.
  • API Key는 가장 빠르게 구현할 수 있지만, GitHub 퍼블릭 저장소에 하드코딩된 키가 노출되는 사고가 꾸준히 발생하고 있다.
  • OAuth 2.0은 B2B 엔터프라이즈에서 Okta, Azure AD 같은 기업 ID 제공자와 연동할 때 사실상 표준이다.
  • mTLS는 내부 마이크로서비스 간 통신에서 가장 높은 보안 수준을 제공하지만, 핸드셰이크 레이턴시가 측정 가능한 수준으로 존재한다.
  • 인증 방식 선택은 “가장 안전한 것"이 아니라 “우리 시스템 구조에 맞는 것"으로 결정해야 한다.

마이크로서비스가 기본값이 된 지금, 인증 방식 선택이 왜 복잡해졌나요?

SPA와 모바일 앱이 기본이 된 지금, 인증 방식 하나를 잘못 고르면 서비스 전체 구조가 흔들려요.

Security Boulevard에 따르면, Basic Auth처럼 매 요청마다 Base64로 인코딩된 자격증명을 전달하는 방식은 프로덕션 환경에 아예 적합하지 않다고 명시하고 있어요. 그런데도 레거시 시스템에선 아직 쓰이죠.

흐름을 정리하면 이렇게 돼요:

  • 2010년대 초: REST API 확산과 함께 API Key가 기본값으로 자리 잡기 시작
  • 2012년: OAuth 2.0 RFC 6749 공식 발표 — 위임 인증의 표준이 생김
  • 2014년: JWT(RFC 7519) 등장 — stateless 인증 아키텍처를 가능하게 함
  • 2020년 이후: 제로트러스트 보안 모델 확산과 함께 mTLS가 마이크로서비스 인프라에 본격 적용
  • 2026년 현재: 하나의 서비스가 여러 인증 방식을 계층적으로 쓰는 게 일반적

youngju.dev의 OAuth 2.0 분석에서는 실제 사례도 공개했어요. Anthropic이 OAuth 토큰을 Claude.ai와 Claude Code에만 제한해서, 제3자 앱이 구독 비용보다 높은 API 토큰 가치를 임의로 사용하는 걸 막았다는 거예요. 인증 방식이 비즈니스 모델 보호 수단이 된 케이스예요.


방식별 분석: 각각 어떤 상황에서 쓸까요?

API Key — 빠르지만 관리가 관건

API Key는 구현이 제일 단순해요. 앱을 식별하는 긴 문자열 하나를 헤더에 넣으면 끝이거든요. 그런데 문제가 있어요. 만료 시간이 없다는 거예요.

Security Boulevard에 따르면, GitHub 퍼블릭 저장소에 하드코딩된 API Key가 노출되는 사고가 문서화된 실제 취약점으로 계속 등장하고 있어요. 키 교체 시 24시간 유예 기간을 두는 게 다운타임을 막는 권장 방법이에요.

내부 도구나 개인 프로젝트에서 빠르게 쓸 때는 충분해요. 다만 퍼블릭 API나 B2B 서비스에서 API Key만 단독으로 쓰는 건 2026년 기준으로 권장하기 어려워요.

JWT — Stateless의 힘, 그리고 함정

JWT는 세 파트(header.payload.signature)로 이루어진 토큰이에요. 서버가 매 요청마다 DB에서 세션을 조회할 필요가 없어요.

Spring Security 구현 시 OncePerRequestFilterUsernamePasswordAuthenticationFilter 앞에 넣고, SessionCreationPolicy.STATELESS로 설정하는 게 기본 패턴이에요.

그런데 두 가지 함정이 있어요.

첫째, alg: none을 허용하는 라이브러리가 아직 있어요. 서명 검증을 우회해서 토큰 위조가 가능해지죠. 라이브러리 선택 시 반드시 확인해야 해요.

둘째, 토큰을 만료 전에 무효화하려면 Redis 기반의 거부 목록(denylist)이 필요해요. Stateless의 장점이 여기서 복잡해지는 거예요.

권장 수명은 5~15분이에요. 리프레시 토큰은 절대 localStorage에 넣으면 안 돼요. XSS 공격에 바로 노출되거든요.

OAuth 2.0 — 위임 인증의 표준

OAuth 2.0은 인증(authentication)이 아니라 인가(authorization) 프레임워크예요. “누구인가"가 아니라 “무엇을 할 수 있는가"를 다루죠. “누구인가"까지 다루려면 OIDC(OpenID Connect)를 OAuth 위에 얹어야 해요.

네 가지 Grant Type 중 실무에서 자주 쓰이는 건 이렇게 나뉘어요:

  • Authorization Code + PKCE: 모바일·SPA 필수. client_secret 없이 SHA256 해시된 code_verifier/code_challenge 쌍으로 대체
  • Client Credentials: 유저 없는 서버 간 통신
  • Refresh Token: 1시간 수명의 Access Token 갱신

Access Token 수명은 1시간, Refresh Token은 서버 DB에만 보관하는 게 원칙이에요. state 파라미터 없이 쓰면 CSRF 공격에 열려 있는 거예요.

엔터프라이즈 B2B에서 Okta, Azure AD 같은 기업 ID 시스템과 연동할 때는 OAuth 2.0 + OIDC가 사실상 기본값이에요.

mTLS — 상호 인증, 가장 높은 수준

mTLS는 클라이언트와 서버 양쪽 모두 인증서를 제시해요. 서버만 인증서를 가진 일반 TLS와 다르게, 클라이언트도 신원을 증명해야 하죠.

보안 수준은 가장 높지만 핸드셰이크 레이턴시가 측정 가능한 수준으로 존재해요. 인증서 관리 비용도 추가되고요. 그래서 퍼블릭 API보다는 내부 마이크로서비스 간 통신에 더 잘 맞아요.


방식 비교: 어떤 상황에 무엇을 써야 하나요?

기준API KeyJWTOAuth 2.0mTLS
구현 복잡도낮음중간높음높음
토큰 만료없음 (수동 관리)5~15분 권장1시간 (갱신 가능)인증서 만료 주기
유저 인증
상호 인증
토큰 즉시 취소Redis 필요인증서 폐기
주요 위험키 노출·유출alg: none 취약점잘못된 redirect_uri인증서 관리 부담
가장 잘 맞는 곳내부 도구·단순 API마이크로서비스 내부퍼블릭·B2B 서비스서비스 간 내부 통신

패턴이 보이죠? 외부 노출이 많을수록 OAuth, 내부 통신일수록 JWT나 mTLS, 빠른 프로토타이핑엔 API Key. 혼합해서 쓰는 게 2026년의 표준 구성이에요.


실제 시스템에 어떻게 적용할까요?

퍼블릭 API를 외부에 노출할 때:

  • OAuth 2.0 + PKCE를 기본으로
  • SPA라면 Access Token을 메모리에만 저장
  • redirect_uri 와일드카드는 절대 허용하지 않기

내부 마이크로서비스 간 통신:

  • JWT(stateless로 빠르게) 또는 mTLS(보안 요구가 높을 때)
  • JWT 수명은 5~15분으로 고정
  • alg: none을 허용하는 라이브러리 즉시 교체

Webhook이나 서버 간 단순 통신:

  • HMAC 서명 포함
  • 타임스탬프 검증으로 30초 이상 된 요청 거부 — 재전송 공격 방지

API Key를 아직 쓰고 있다면:

  • 코드베이스 전체에서 하드코딩된 키 즉시 제거
  • 환경변수로 이동하고, 키 교체 시 24시간 유예 기간 설정
  • 만료 메커니즘 추가 계획 수립

앞으로 6개월, 무엇이 바뀔까요?

지금 추세를 보면 세 가지 방향이 보여요.

제로트러스트 아키텍처 확산이 계속될 거예요. 내부 네트워크도 신뢰하지 않는 구조가 기본값이 되면서, 내부 서비스 간에도 mTLS 도입을 검토하는 팀이 늘고 있어요.

JWT 라이브러리 보안 감사가 강화되는 흐름이에요. alg: none 취약점처럼 라이브러리 레벨의 문제가 계속 발견되고 있어서, 주요 언어별 JWT 라이브러리 선택 기준이 더 엄격해질 거예요.

OAuth의 비즈니스 도구화는 Anthropic 사례처럼 계속 진화할 거예요. 인증이 기술 문제를 넘어서 비즈니스 정책 집행 수단이 되는 케이스가 더 나올 거예요.

자, 이제 진짜 질문이에요. 지금 우리 시스템이 API Key나 Basic Auth에 여전히 의존하고 있다면, 그 이유가 기술적 판단인가요, 아니면 바꾸기 귀찮아서인가요? 그 답이 2026년 보안 수준을 결정해요.


이 글이 도움이 됐다면, 실제로 여러분 팀의 API 인증 구조를 한번 그려보세요. 어디에 약한 고리가 있는지 보일 거예요.


Photo by Ram Kishor on Unsplash