Web 이란?
(World Wide Web, WWW, W3) 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말합니다.
Web은 크게 세 가지로 구성됩니다. 첫 번째, URI입니다. URI는 리소스 식별자로서 특정 사이트, 특정 쇼핑 목록, 동영상 목록 등 웹 상의 모든 정보에 접근할 수 있는 주소입니다. 특정 리소스에 대해서는 유니크한 주소가 한 개만 존재합니다.
두 번째는 HTML입니다. 이는 XML을 바탕으로한 범용 문서 포맷입니다. 서버에 특정 리소스를 요청하게 되면 HTML로 구성된 문자열 형태가 내려오게 되며 Chrome, Safari, Explorer에서 사용자가 알아보기 쉬운 형태로 표현해줍니다.
세 번째로 HTTP입니다. 이는 어플리케이션을 컨트롤하는 프로토콜입니다. 프로토콜이란, 약속입니다. 데이터를 주고 받을 때 서로 약속한 형태를 프로토콜이라고 합니다. GET, POST, PUT, DELETE 등의 여러 Method가 존재합니다.
HTTP란?
HTTP란 Web에서 데이터를 주고 받는 프로토콜(약속)입니다. 실제로는 HTML, XML, JSON, Image, Voice, Video, Javascript, PDF 등 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송할 수 있습니다. HTTP는 TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web 기반의 프로토콜입니다.
통신을 간략하게 설명
데이터를 요청하는 쪽에서 어떠한 데이터를 받고 싶다는 요청 메시지를 작성을 합니다. 이는 주소 형태일 수도 있고, 메시지 바디가 채워져 있을 수도 있습니다. 서버의 HTTP 통신을 이용하여 특정 데이터에 대한 요청 메시지를 전송합니다. 이때 어디로 요청을 하겠다는 URI가 필요합니다. 서버에서는 항상 리슨하고 있다가 요청 메시지를 수신합니다. 이를 해석하고 애플리케이션을 할당하여 로직을 통해 HTML, JSON 형태의 데이터로 응답 메시지를 송신합니다. 클라이언트는 응답 메시지를 수신하고 해석하여 브라우저로 데이터를 표시하고 처리합니다.
멱등성
동일한 연산을 여러 번 수행해도 결과가 달라지지 않는 성질
안정성
호출해도 리소스가 변경되지 않는 성질
GET 메서드는 단순히 데이터를 조회하는 기능을 수행하기 때문에 리소스를 변경 및 수정하지 않으니 안전한 HTTP 메서드이다.
반면에 POST PUT PATCH DELETE와 같은 메서드들은 호출할 경우 데이터에 변경이 발생하거나, 서버에서 삭제되기 때문에 안전하지 않는 HTTP 메서드라고 볼 수 있다.
GET 메서드
리소스를 취득할 때 사용하는 HTTP 메서드입니다. (R) 멱등성, 안정성을 보장합니다. URI의 주소에 대해서 Path Variable(ex. /naver.com/mail/)을 가질 수 있으며 Query Parameter(ex. ?name='')를 통해서 조작할 수 있습니다. http 바디에 데이터를 실을 수 없습니다. GET은 리소스를 취득할 때 쓰고 데이터 바디를 쓰지 않기로 약속했습니다.
POST 메서드
리소스를 생성하고 추가할 때 사용하는 HTTP 메서드입니다. (C) 요청을 할 때마다 서버에 새로운 데이터가 생기기 때문에 멱등하지 않습니다. 서버에 데이터를 요청할 때마다 서버의 데이터 상태가 바뀌기 때문에 안정성을 가지지 않습니다. 주소에 Path Variable을 가질 수 있습니다. Query Parameter의 용도는 특정 리소스를 찾기 위해 필터를 걸 때 사용을 하는 것이기 때문에 POST 메서드에서는 사용하지 않습니다. HTTP Data Body에 어떤 리소스를 생성할 것인지 작성할 수 있습니다.
PUT 메서드
리소스를 갱신하거나 생성할 때 사용합니다. (C/U) 데이터가 없으면 생성하고 있다면 갱신합니다. 멱등하지만 안정성은 없습니다. 요청을 할 때마다 리소스를 계속해서 변경하기 때문입니다. Path Variable을 가지며 Query Parameter는 사용하지 않습니다. Data Body는 가집니다.
DELETE 메서드
리소스를 삭제할 때 사용합니다. (D) 멱등하지만 안정성은 없습니다. Path Variable을 가지며 Query Parameter를 사용할 수 있씁니다. Data Body는 사용하지 않습니다.
HTTP 상태 코드
클라이언트가 서버에 요청을 했을 때 응답에 대한 코드입니다.
REST란?
네트워크 아키텍처 원리 중 하나입니다.
Client, Server
클라이언트와 서버가 독립적으로 분리되어져 있는 상태여야 합니다. 떨어져 있는 상태에서 서로의 자원의 상태를 주고받습니다.
Stateless
요청에 대해서 클라이언트의 상태를 서버에 저장하지 않습니다.
캐시
클라이언트는 서버의 응답을 캐시할 수 있어야 합니다. 클라이언트가 캐시를 통해서 응답을 재사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춥니다.
계층화
서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy 등 다계층 형태를 구성할 수 있어야 하며, 확장할 수 있어야 합니다.
인터페이스 일관성
아키텍처를 단순화시키고 작은 단위로 분리하여서, 클라이언트, 서버가 독립적으로 개선될 수 있어야 합니다.
자원 식별
웹 기반의 REST에서는 URI를 사용하여 리소스에 접근합니다.
메시지를 통한 리소스 조작
Web에서는 다양한 방식으로 데이터를 전송할 수 있습니다. 그 중에는 HTML, XML, JSON, TEXT 등 다양한 방법이 있습니다. 이 중에서 리소스의 타입을 알려주기 위해서 header 부분에 content-type(헤더)를 통해서 어떠한 타입인지를 지정할 수 있습니다.
자기 서술적 메시지
요청하는 데이터가 어떻게 처리되어야 하는지 충분한 데이터를 포함할 수 있어야 합니다. HTTP 기반의 REST 에서는 HTTP Method와 Header의 정보로 이를 표현할 수 있습니다.
애플리케이션 상태에 대한 엔진으로서 하이퍼미디어
REST API를 개발할 때에도 단순히 Client 요청에 대한 데이터만 내리는 것이 아닌 관련된 리소스에 대한 Link 정보까지 같이 포함되어야 합니다.
URI란?
Uniform Resource Identifier의 약자로 인터넷에서 특정 자원을 나타내는 주소값이며 해당 값은 유일합니다.
URL이란?
Uniform Resource Loader의 약자로 인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소입니다.
URI와 URL의 차이는?
URL은 URI의 하위 개념입니다. URL은 리소스의 위치를 지정하는 반면, URI는 리소스를 식별합니다. URL은 실제 위치를 가리키는 역할을 하며 URI는 리소스를 찾는 것에 중점을 둡니다.
URI = 식별자, URL = 식별자 + 위치
URL은 어떻게 위치를 찾고 도달할 수 있는지까지 포함되어야 하기 때문에 URL은 프로토콜 + 이름(또는 번호)의 형태여야 합니다.