[HTTP/REST] HTTP와 REST의 기초

오늘·2022년 11월 14일

Android Basics in Kotlin 중 인터넷을 사용하는 부분을 보기 전에, 앞선 영상에서 HTTP와 REST의 기초를 알려주었다. Retrofit을 본격적으로 공부하기 전에, 이 내용을 정리해두려고 한다.

Client and Server

Client

  • 서버에게 요청(Request)하는 존재.
  • 웹 브라우저(web browser) 또는 디바이스에서 작동하는 임의의 앱이 될 수 있음.

Server

  • Client로부터 요청을 받아서 그에 대한 응답(Response)을 주는 존재.

Client와 Server간의 통신

  • 다수의 Client가 하나의 Server에게 각자의 Request를 보냄.
  • 서버는 각 Request를 처리하여 적절한 Response를 Client에게 돌려줌.

HTTP(HyperText Transfer Protocol)

  • 인터넷상에서 통신할 때 사용되는 protocol.
  • Client와 Server는 HTTP를 사용해서 통신함.

포함되는 것

  • Request와 Response의 구체적인 형태를 지정.
    • 이 덕분에 Client와 Server가 서로 이해 가능한 통신을 할 수 있음.

URL의 구성요소

예 : https://google.com/search?q=android

  • https:// : Scheme
    • ://로 끝남.
    • 어떤 protocol을 쓰는지를 표시.
  • google.com : Host
    • Request를 보내는 domain.
  • /search : Path 또는 End point
    • 접근하려는 Resource에 대한 정보.
    • Path에 포함되는 각 segment는 /로 구분됨.
    • 검색 결과를 가져오는 등, 서버측에서 처리할 일(task)을 나타냄.
  • ?q=android: Parameter
    • 필요한 경우 사용되는, 선택적인 요소.
    • 검색 query 등, Path에 필요한 추가적인 정보.

HTTP Request

HTTP Request의 형태 요약

GET /search?q=android HTTP/1.1
Host: google.com
Cache-Control:no-cache
Accept: text/html, application/xhtml+xml ...
Accept-Language: en
...
  • GET : HTTP Method 중 하나
  • /search?q=android : end point
  • Host: google.com : Host
  • HTTP/1.1 : HTTP version
  • Cache-Control:no-cache, Accept: text/html, application/xhtml+xml..., Accept-Language: en : header
    • 요청을 보낸 Client에 대한 정보, 얻어오려는 데이터에 대한 정보 등이 들어있음.

HTTP Request Methods

Client가 무엇을 수행하려고 하는 지를 서버에게 알리는 HTTP Method.

GET

Client가 바라는 정확한 resource를 가리키는 end point 명시하는 method.

  • url에 추가적인 parameter를 더해서 보다 정확한 resource를 지정할 수 있음.
    • path 끝 ? 뒤에 이런 parameter가 더해짐.
    • parameter가 여러 개일 경우 & (ampersnad)로 각각이 구분됨.

POST

Server에 새로운 resource를 생성(Create)할 때 사용하는 HTTP Method.

  • Request에 Client가 Server에 추가하고자 하는 데이터를 포함하여 POST method로 전달.
  • 일반적으로 이 Request에 포함되어 POST method를 사용해서 Server에 올리고자 하는 데이터의 종류를 명시하는 header를 Request에 포함함.
    • text나 media type 등

PUT

어떤 데이터 전체를 다른 데이터로 변경하는 HTTP Method.

  • Server의 resource를 갱신(Update) 하는 method.

DELETE

Server의 특정한 데이터를 삭제(Delete)하는 HTTP Method.

예제 : Social media app

  • GET : 모든 최신 post를 가져옴.
  • POST : 새로운 post를 게시.
  • PUT : 기존 post를 수정.
  • DELETE : 기존 post를 삭제.

HTTP Response

Server가 request에 대한 처리를 끝낸 후 Client에게 HTTP Response를 보냄.

HTTP Response의 형태요약

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Encoding: br
Date: Fri, 12 Feb 2021 01:59:01 GMT
Server: gws
Cache-Control: private, max-age=0
...

<!DOCTYPE html> ...
  • 200 : 상태 코드(status code)
  • OK : 상태 메시지(status message)
  • Content-Type: text/html; charset=UTF-8 : Content-Type
    • Response의 media type을 나타냄.
    • Content-type을 통해 Client가 Server가 보낸 데이터를 올바르게 파싱(parsing)하거나 이해할 수 있음.
  • Content-Encoding: ~ max-age=0 : 다른 header들.
  • <!DOCTYPE html> ... : 실제 내용(content)
    • 여기선 html.
    • image, json text 등 여러가지가 될 수 있음.

HTTP Response Status Codes

자주 쓰이는 status code들. 기대한대로 프로그램이 동작하지 않을 때 status code를 참고하면 어디서부터 문제를 찾기 시작해야 하는 지 알 수 있음.

  • 200-299 : Success. Request가 Client에게 성공적으로 반환되었음을 나타냄.
  • 400-499 : Client Errors. 웹 페이지를 찾지 못할 때 나오는 404 가 대표적.
  • 500-599 : Server Errors. 서버 내부에 error가 있을 때 500 error가 반환됨.

REST(REpresentational State Transfer)

RESTful 하다

아래의 원칙을 준수하는 것.

  1. Client-Server architecture
    • Client와 Server 간의 명확한 관심사 분리(Seperation of Concern)가 이루어진 구조를 따른다.
      • Client는 Request만 보내고, Server는 그에 따른 Response만 보낸다.
  2. Resources exposed as URIs
    • Server에 있는 resource는 URI(Uniform Resource Identifier)를 통해 식별된다.
  3. Uniform interface
    • resource를 Create, Get, Update, Delete 연산을 통해 다룬다.
  4. Stateless
    • Request간의 Client의 state를 기억할 필요가 없어야 한다.
    • 모든 Client Request는 Server가 해당 Request를 처리하기 위한 모든 정보를 포함하고 있어야 한다.

위의 4가지는 기본적인 원칙. 이 외에 RESTful을 위한 특징이 더 있긴 함.

profile
Junior Mobile 개발자

0개의 댓글