반응형
❓ REST API
- REST : Representation State Transfer의 약자
- 자원을 이름(자원에 대한 표현)으로 구분하여 해당 자원의 상태(자원의 정보)를 주고 받는 방식의 소프트웨어 아키텍처
* Representation : 자원의 표현, 요청 URI로 표현
* State : 자원의 현재 상태
- HTTP URI를 통해 자원을 명시한다.
* URL : 자원이 실제로 존재하는 위치
* URI : 자원의 위치뿐만 아니라 자원에 대한 고유 식별자로서, URL을 포함하는 상위 개념
- HTTP Method (GET, POST, PUT, DELETE)을 통해 해당 자원에 대한 CRUD Operation을 명시한다.
- 웹의 모든 자원에 대해서 고유한 ID(HTTP 요청 URI)를 부여한다.
👥 등장배경
- 단순하게 하나의 브라우저만 지원하던 방식 -> 멀티 플랫폼, 멀티 디바이스 등장
- 플랫폼에 맞춰서 새로운 서버 애플리케이션을 개발하는 대신, 범용적으로 사용성을 보장하는 새로운 서버 애플리케이션 디자인이 필요해졌다.
< 단순하게 하나의 브라우저만 지원하던 시대 >
- JSP, ASP, PHP 등을 이용해서 PC 브라우저에 표시할 HTML을 동적으로 생성해서 응답으로 보냈다.
< 멀티 플랫폼, 멀티 디바이스 시대 >
- 서버 개발자는 클라이언트를 고려할 필요 없이 클라이언트에서 읽고 분석하기 용이한 XML, JSON 형태의 데이터를 제공하는 메시지 기반으로 개발한다.

✔️ REST의 구성
- 자원의 이름
(Resource)
- 모든 자원에 고유한 ID가 존재한다.
- 자원을 구별하는 ID는 /user/1과 같은 HTTP URI다.
- 자원에 대한 행위
(Verb)
- HTTP 프로토콜의 메소드를 사용해서 지정한다.
- 자원의 표현
(Representation of Resource)
- REST에서 하나의 자원의 JSON, XML 형태로 표현된다.
✔️ REST의 특징
- Uniform (유니폼 인터페이스)
- URI로 지정한 리소스에 대한 조작이 통일된 인터페이스로 수행하는 아키텍처 구조
- Stateless (무상태성)
- REST는 무상태성을 가진다.
- 세션정보나 쿠키정보를 별도로 저장하고 관리하지 않는다.
- API 서버로 들어오는 요청만을 단순히 처리하기만 하기 때문에 서비스의 자유도가 높고 구현이 단순하다.
- Cacheable (캐시 기능)
- HTTP가 가진 캐싱 기능을 적용할 수 있다.
- Self-descriptiveness (자체 표현 구조)
- REST API 메시지는 쉽게 이해할 수 있는 자체 표현 구조로 되어 있다.
- Client-Server 구조
- 서버와 클라이언트에서 개발할 내용이 명확하게 구분되어 있고, 서로간의 의존성이 낮다.
- 계층형 구조
- REST API 서버는 다중 계층으로 구성될 수 있다.
- REST API 서버는 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다.
📌 REST API 디자인 규칙
1. URI로 자원의 이름을 표현한다.
URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다 명사를 사용한다.)
GET /members/delete/1
- 유효하지 않은 URI, URI에 행위를 나타내는 동사는 적합하지 않다.
DELETE /member/1
- 유효한 URI, 회원정보 1(회원아이디)를 삭제한다.
2. HTTP Method로 자원에 대한 행위를 표현한다.
HTTP Method | URI | O/X | |
---|---|---|---|
회원정보 조회 | GET | /member/show/1 | X |
GET | /member/1 | O | |
--------------- | ------------- | -------------------- | ---- |
회원정보 삭제 | GET | /member/delete/1 | X |
DELETE | /member/1 | O | |
--------------- | ------------- | -------------------- | ---- |
회원정보 수정 | POST | /member/1 | X |
PUT | /member/1 | O | |
--------------- | ------------- | -------------------- | ---- |
회원정보 추가 | POST | /member | O |
* URI 설계 시 주의사항

⚠️ REST API의 HTTP 응답코드
응답코드 | 의미 |
---|---|
200 | 클라이언트의 요청을 성공적으로 수행하였음 |
201 | 클라이언트가 리소스의 생성을 요청, 해당 리소스를 성공적으로 생성하였음 (POST 요청을 통한 리소스 생성 시 응답코드) |
400 | 클라이언트의 요청이 부적합할 때 |
401 | 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 |
403 | 클라이언트의 요청을 거부할 때 |
404 | 클라이언트가 요청한 리소스가 존재하지 않을 때 |
405 | 클라이언트가 요청한 요청방식이 지원하지 않을 때 |
500 | 클라이언트의 요청을 처리하는 중 서버 오류가 발생했을 때 |
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-REST-API
'BackEnd > Spring' 카테고리의 다른 글
[Spring Batch] 스프링 배치 사용법 간단한 예제 (0) | 2025.01.24 |
---|---|
[Spring JPA] 스프링 애플리케이션의 JPA open-in-view 설정 (Feat. 지연로딩) (0) | 2025.01.19 |
[Spring JPA] 연관관계(OneToMany, ...)의 즉시로딩과 지연로딩 (0) | 2025.01.19 |
[Spring JPA] Spring Data JPA의 쿼리 메소드 작성 규칙 (0) | 2025.01.19 |
[Spirng JPA] 단방향/양방향 연관관계 (0) | 2025.01.19 |