웹 서비스에는 크게 2가지의 개념이 있습니다. 첫 번째 client와 두번 째 Server인데 간단히 설명하자면 client는 '서비스 요청자' server는 '서비스 제공자'라고 얘기할 수 있습니다.
위 그림을보면 클라이언트가 서버에 서비스를 요청(request,req)하고 서버는 요청의 내용을 읽고 처리한 뒤 서비스를 클라이언트에 응답(response, res)하는 관계에 대해서 이해하실 수 있을 겁니다.
그렇기 때문에 서버에는 요청을 받는 부분과 요청을 보내는 부분이 존재해야 합니다.
Rest란 ❓
위 서버-클라이언트에서 보았듯이 클라이언트가 서버에 요청을 보내는데 요청을 보낼 때 주소를 통해 요청의 내용을 표현합니다.
만약 주소가 /today.html 이면 today.html 파일을 보내달라는 뜻이고, /today.js 이면 today.js 파일을 보내달라는 뜻입니다.
바로 위 같은 개념이 REST입니다.
API(Application Programming Interface)
Application Programming Interface의 약자로 API라고 불립니다.
API는 네트워크 구조의 형식 중 하나로 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.
즉 서버의 자원을 정의하고, 자원에 대한 주소를 지정하는 방법입니다.
- 자원: 문서, 그림, 데이터 등, 서버가 행할 수 있는 모든 것
- 자원의 표현: 그 자원을 표현하기 위한 이름
이때 주소는 쉽게 파악하고 명확히 전달하기 위해 명사로 구분됩니다. /user 라면 사용자의 정보에 관한 자원을 요청하는 것이고, /time 라면 시간에 관한 자원을 요청하는 것이라고 추측해 볼 수 있습니다.
하지만 단순히 명사만 존재한다면 /user에서 어떠한 자원을 요청하는 것인지, /time 시간에 관련된 자원 중 어떠한 자원을 요청하는 것인지 추측하기 어렵습니다. 그렇기 때문에 REST에서는 주소 외에도 HTTP 요청 메서드라는 것을 사용합니다.
만약 Watchat에서 클라이언트인 "내가" Watcha에 "드라마"를 검색한다면 /드라마라는 GET요청 보내고, 왓챠에서는 자원에 대한 요청(res)의 내용을 보내주게 됩니다.
REST 구성요소
자원(Resource) : url
자원은 문서, 그림, 데이터 등, 서버가 행할 수 있는 모든 것입니다.
- URL은 정보의 자원을 표현해야 합니다.
- 모든 자원에는 고유한 ID가 존재하고, 이 자원을 서버에 존재한다.
행위(Verb) : HTTP Method
HTTP의 프로토콜의 Method를 사용합니다.
주로 5개의 Method(GET, POST, PUT, PATCH, DELETE)를 사용하여 CRUD를 구분합니다.
- GET : 서버 자원을 가져오고자 할 때 사용합니다.
- 요청의 본문(body,payload)에
데이터를 넣지 않습니다. - 데이터를 서버로 보내야 한다면 쿼리스트링을 사용합니다.
- 요청의 본문(body,payload)에
- POST : 서버에 자원을 새로 등록하고자 할 때 사용합니다.
- 요청의 본문(body,payload)에 새로 등록할 데이터를 넣어 보냅니다.
- PUT : 서버의 자원을 일부만 수정하고자 할 때 사용합니다.
- 요청의 본문(body,payload)에 치환할 데이터를 넣어 보냅니다.
- PATCH : 서버 자원의 일부만 수정하고자 할 때 사용합니다.
- 요청의 본문(body,payload)에 일부 수정할 데이터를 넣어 보냅니다.
- DELETE : 서버의 자원을 삭제하고자 할 때 사용합니다.
- 요청의 본문(body, payload)에
데이터를 넣지 않습니다.
- 요청의 본문(body, payload)에
표현
Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보내며, REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나 타지만 json, xml을 통해 데이터를 주고받는 것이 일반적입니다.
REST의 장단점
장점
Complete Seperation between Client and Server
- HTTP 통신을 사용하면 클라이언트가 누구든 상관없이 같은 방식으로 서버와 통신할 수 있습니다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼(앱, 웹, 다른 서버 등)에서 사용이 가능합니다.
- 서버와 클라이언트의 역할을 명확하게 분리합니다.
- 개발자 간 협업이 용이합니다.
Easy to use (쉬운 사용), 가독성 향상
- REST API 메시지를 읽는 것만으로도 메시지가 의도하는 바를 명확하게 알 수 있습니다.
Detail expression for specific data type
- REST API는 헤더 부분에 url처리 메서드를 명시함으로써, 필요한 실제 데이터를 Body(payload)에 표현할 수 있도록 구성할 수 있는 기능을 제공합니다.
- 특정 메서드의 세부적인 표현 문구를 json, xml 등 다양한 언어를 이용하여 작성할 수 있다는 장점과 간결한 헤더 표현을 통한 가독성의 장점까지 두 가지의 토끼를 모두 잡을 수 있습니다.
단점
Restriction of HTTP Method
- 위에서 알 수 있듯이 RSET API는 HTTP 메서드를 사용하여 URL을 표현합니다. 이러한 표현 방법은 다양한 인프라에서 간편하게 사용할 수 있지만 사용할 수 있는 메서드가 4개뿐이라서 메서드 형태가 제한적이라는 문제점을 야기하기도 합니다.
Absence of Standard (표준의 부재)
- 표준자체가
존재하지 않아정의가 필요하다는 것입니다.
HTTP 상태 코드
HTTP 응답 코드는 HTTP 요청이 성공적으로 완료되었는지 알려주는 코드이며, 5개의 코드그룹으로 나누어집니다.
상태코드 | 역할 |
---|---|
1xx | 전송 프로토콜 수준의 정보 교환 |
2xx | 클라이언트 요청이 성공적으로 수행됨을 알리는 코드 |
3xx | 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함(redirection) |
4xx | 클라이언트의 잘못된 요청 오류 |
5xx | 서버쪽 오류로 인한 상태코드 |
'Computer Science' 카테고리의 다른 글
[CS] - 백엔드 (1) | 2024.01.22 |
---|