[TIL] JSON Placeholder, JWT Access Token, Refresh Token 개념 및 기술 전략

SEONG CHAN LEE·2025년 1월 20일

TIL

목록 보기
53/53

JSON Placeholder

JSON Placeholder란?

샘플 데이터를 무료로 제공하는 REST API 서비스.

이를 통해서 빠르고 손쉽게 백엔드 설정 없이 가짜 데이터를 통해 어플리케이션을 테스트해 볼 수 있다.

공식 가이드 문서

지원하는 메서드

GET, POST, PUT, PATCH, DELETE

지원하는 리소스

/post,/comment,/albums,/photo,/todos,/users

예시 코드

fetch('https://jsonplaceholder.typicode.com/posts', {
  method: 'POST',
  body: JSON.stringify({
    title: 'foo',
    body: 'bar',
    userId: 1,
  }),
  headers: {
    'Content-type': 'application/json; charset=UTF-8',
  },
})
  .then((response) => response.json())
  .then((json) => console.log(json));
//Output

{
  id: 101,
  title: 'foo',
  body: 'bar',
  userId: 1
}

JWT

JWT (JSON Web Token)은 JSON 포맷으로 된 인증 정보를 Self-contained Signature* 형태로 담고 있는 토큰.

쿠키와 세션의 단점을 보완하기 위해서 등장함.

Self-contained Signature(자가 수용적)이란?

토큰 자체에 사용자 정보와 인증 관련 데이터를 포함하고 있음
별도의 서버 세션 저장소를 필요로 하지 않음
서명을 포함하여 무결성을 검증할 수 있음
변조 방지를 위해 비밀키를 사용하여 서명됨

쿠키와 세션

쿠키

  • 클라이언트 측(브라우저)에 저장되는 작은 데이터 조각

  • 주로 사용자의 로그인 정보나 사이트 설정을 저장하는 데 사용됨

  • 서버가 클라이언트에게 응답할 때 Set-Cookie 헤더를 사용해 쿠키를 설정

  • HTTP 요청 시 자동으로 서버에 쿠키가 포함되어 전송됨

  • 보안상 취약할 수 있으며, 브라우저에서 쉽게 조작 가능

세션

  • 서버 측에서 관리하는 사용자 정보 저장 공간

  • 클라이언트가 로그인하면, 서버는 고유한 세션 ID를 생성하고 이를 클라이언트에게 전달

  • 클라이언트는 해당 세션 ID를 쿠키에 저장하고, 이후 요청마다 서버에 이를 포함하여 보냄

  • 서버는 해당 세션 ID를 기반으로 사용자 정보를 조회

  • 서버 메모리를 차지하며, 사용자가 많아질수록 부담이 증가할 수 있음

Refresh Token & Access Token

JWT 기반 인증에서는 Access TokenRefresh Token을 사용하여 보안성을 높인다.

Access Token

  • 짧은 유효기간을 가진 토큰
  • 사용자가 요청을 보낼 때마다 인증에 사용됨
  • 유효기간이 지나면 다시 인증이 필요함

Refresh Token

  • 비교적 긴 유효기간을 가짐
  • Access Token이 만료되었을 때, 새 Access Token을 발급받는 데 사용됨
  • 보안 강화를 위해 서버에서만 저장하고, 데이터베이스를 이용해 관리하는 것이 일반적

JWT 구조

JWT는 header.payload.signature 형태로 구성된다.

{
  "alg": "HS256",
  "typ": "JWT"
}
.
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
.
[signature]
  1. Header (헤더)

    • 어떤 알고리즘(예: HS256)을 사용할지 명시
  2. Payload (페이로드)

    • 사용자 정보 (예: sub, name 등)
    • 추가적으로 만료 시간(exp) 등의 정보 포함 가능
  3. Signature (서명)

    • 비밀키를 사용해 서명한 값
    • 토큰이 변조되지 않았는지 검증하는 데 사용됨

JWT 사용 흐름

  1. 사용자가 로그인하면 서버가 Access Token과 Refresh Token을 발급한다.
  2. 클라이언트는 Access Token을 포함하여 API 요청을 보낸다.
  3. 서버는 Access Token을 검증하여 요청을 처리한다.
  4. Access Token이 만료되면 Refresh Token을 이용해 새로운 Access Token을 요청한다.
  5. 서버는 Refresh Token을 확인하고 새로운 Access Token을 발급한다.

이 방식은 보안성과 확장성을 고려한 현대적인 인증 방식으로, RESTful API와 잘 어울린다.

JWT vs 세션 기반 인증

비교 항목JWT (토큰 기반 인증)세션 기반 인증
저장 위치클라이언트(브라우저 또는 로컬 저장소)서버(메모리 또는 데이터베이스)
인증 방식자체 포함된 토큰을 사용해 인증세션 ID를 사용해 서버에서 사용자 정보 확인
서버 부하낮음 (서버 상태를 저장할 필요 없음)높음 (세션 저장 공간 필요)
보안성서명된 토큰으로 검증 가능하지만, 유출 시 보안 취약서버에서 직접 관리 가능하지만, 부하 증가
확장성높은 확장성 (다중 서버 환경에서도 사용 가능)낮은 확장성 (서버 간 세션 동기화 필요)
profile
Develop myself

0개의 댓글