샘플 데이터를 무료로 제공하는 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 (JSON Web Token)은 JSON 포맷으로 된 인증 정보를 Self-contained Signature* 형태로 담고 있는 토큰.
쿠키와 세션의 단점을 보완하기 위해서 등장함.
Self-contained Signature(자가 수용적)이란?
토큰 자체에 사용자 정보와 인증 관련 데이터를 포함하고 있음
별도의 서버 세션 저장소를 필요로 하지 않음
서명을 포함하여 무결성을 검증할 수 있음
변조 방지를 위해 비밀키를 사용하여 서명됨
클라이언트 측(브라우저)에 저장되는 작은 데이터 조각
주로 사용자의 로그인 정보나 사이트 설정을 저장하는 데 사용됨
서버가 클라이언트에게 응답할 때 Set-Cookie 헤더를 사용해 쿠키를 설정
HTTP 요청 시 자동으로 서버에 쿠키가 포함되어 전송됨
보안상 취약할 수 있으며, 브라우저에서 쉽게 조작 가능
서버 측에서 관리하는 사용자 정보 저장 공간
클라이언트가 로그인하면, 서버는 고유한 세션 ID를 생성하고 이를 클라이언트에게 전달
클라이언트는 해당 세션 ID를 쿠키에 저장하고, 이후 요청마다 서버에 이를 포함하여 보냄
서버는 해당 세션 ID를 기반으로 사용자 정보를 조회
서버 메모리를 차지하며, 사용자가 많아질수록 부담이 증가할 수 있음
JWT 기반 인증에서는 Access Token과 Refresh Token을 사용하여 보안성을 높인다.
JWT는 header.payload.signature 형태로 구성된다.
{
"alg": "HS256",
"typ": "JWT"
}
.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
.
[signature]
Header (헤더)
HS256)을 사용할지 명시Payload (페이로드)
sub, name 등)exp) 등의 정보 포함 가능Signature (서명)
이 방식은 보안성과 확장성을 고려한 현대적인 인증 방식으로, RESTful API와 잘 어울린다.
| 비교 항목 | JWT (토큰 기반 인증) | 세션 기반 인증 |
|---|---|---|
| 저장 위치 | 클라이언트(브라우저 또는 로컬 저장소) | 서버(메모리 또는 데이터베이스) |
| 인증 방식 | 자체 포함된 토큰을 사용해 인증 | 세션 ID를 사용해 서버에서 사용자 정보 확인 |
| 서버 부하 | 낮음 (서버 상태를 저장할 필요 없음) | 높음 (세션 저장 공간 필요) |
| 보안성 | 서명된 토큰으로 검증 가능하지만, 유출 시 보안 취약 | 서버에서 직접 관리 가능하지만, 부하 증가 |
| 확장성 | 높은 확장성 (다중 서버 환경에서도 사용 가능) | 낮은 확장성 (서버 간 세션 동기화 필요) |