RESTful Web Service

Spring Framework
REST는 REpresentational State Transfer의 약자로, 웹 서비스를 개발하기 위한 아키텍처 스타일입니다. 웹 표준 기반 아키텍처로, HTTP 프로토콜을 사용해 데이터 통신을 수행합니다.
http://weather.example.com/seoul → 서울의 날씨 자원 접근REST 아키텍처를 기반으로 구축된 웹 서비스를 RESTful 웹 서비스라 합니다. 플랫폼에 독립적이며 클라이언트·서버 구조를 분리합니다.
POST /things # 자원 생성 (CREATE)
→ 201 CREATED
GET /things/13 # 자원 조회 (READ)
→ 200 OK
PUT /things/13 # 자원 수정 (UPDATE)
→ 200 OK
DELETE /things/13 # 자원 삭제 (DELETE)
→ 204 No Content핵심 패턴: 메서드(명령) + 자원 → 응답 메시지
자원은 다양한 포맷으로 표현될 수 있습니다.
<user>
<id>1</id>
<name>Mahesh</name>
<profession>Teacher</profession>
</user>{
"id": 1,
"name": "Mahesh",
"profession": "Teacher"
}{} 로 정의, 이름/값 쌍으로 구성HTTP 요청은 다음 주요 요소로 구성됩니다:
HTTP 응답은 다음 요소로 구성됩니다:
Accept 헤더로 선호하는 표현 방식 제시Content-Type 헤더로 실제 전송 포맷 지정Accept: text/html, application/json
Content-Type: application/json; charset=UTF-8/users- 또는 _# 나쁜 예
GET /.../getUser/1
# 좋은 예
GET /.../users/1| 메서드 | URI | 설명 |
|---|---|---|
| GET | /estore/users | 사용자 목록 조회 |
| GET | /estore/users/1 | ID=1 사용자 조회 |
| POST | /estore/users | 새 사용자 생성 (ID 서버 할당) |
| PUT | /estore/users/2 | ID=2 사용자 업데이트 |
| DELETE | /estore/users/1 | ID=1 사용자 삭제 |
| OPTIONS | /estore/users | 지원 메서드 목록 조회 |
| HEAD | /estore/users | 헤더만 반환, Body 없음 |
무상태의 장점
| 인증 방식 | 상태 관리 | 설명 |
|---|---|---|
| 세션 기반 | Stateful | 서버가 사용자 세션 데이터 저장 |
| 토큰 기반 (JWT) | Stateless | 서버에 상태 비저장, 토큰 서명 검증만 수행 |
# JWT 토큰 인증 흐름
1. 서버가 사용자 정보로 JWT 생성·서명 → 클라이언트 전달
2. 클라이언트가 요청 시 JWT 헤더에 포함
3. 서버가 서명 검증 후 요청 처리| 헤더 | 설명 |
|---|---|
| Date | 자원 생성 시각 |
| Last-Modified | 자원 마지막 수정 시각 |
| Cache-Control | 캐시 제어 기본 헤더 |
| Expires | 캐시 만료 일시 |
| 지시자 | 의미 |
|---|---|
| public | 모든 캐시 가능한 컴포넌트에 허용 |
| private | 클라이언트 전용 캐시만 허용 |
| no-store | 어떤 캐시에도 저장 금지 |
| max-age=﹤초﹥ | 지정 초만큼 캐시 유효 |
| must-revalidate | 만료 시 서버 재검증 필요 |
If-None-Match에 이전 ETag 전송304 Not Modified 응답 → 클라이언트 캐시 사용베스트 프랙티스: 적절한 인증·인가, HTTPS 사용, 과도한 정보 노출 방지