앞서 해당글은 인프런에 있는 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 기반으로 추가 보충하여 공부하고 정리한 내용들로 해당 강의 자료를 일부 사용하였습니다. 강의를 듣고자 하시는 분은 아래 링크로 가셔서 들으시면 되겠습니다.
HTTP Mehod
HTTP Method는 클라이언트가 서버에 요청할 때 사용하는 명령어입니다. 가장 많이 사용되는 HTTP Method는 GET과 POST이지만, 다양한 목적에 맞춰 다양한 HTTP Method가 존재합니다. 이제 각각의 HTTP Method의 기능에 대해 자세히 살펴보겠습니다.
GET
- 서버로부터 정보를 가져올 때 사용합니다.
- URL 끝에 파라미터를 추가해서 데이터를 전송합니다.(? 뒤에 있는 문자열을 쿼리(query)라고 지칭합니다)
- 요청을 캐싱할 수 있기 때문에 빠른 속도로 데이터를 가져올 수 있습니다.
- 보통 조회, 검색 기능 등에서 사용됩니다.
POST
- 서버에 정보를 제출할 때 사용합니다.
- HTTP Body에 데이터를 담아서 전송합니다.
- GET과 달리 데이터를 캐싱하지 않기 때문에 보안성이 좋습니다.
- 보통 데이터의 생성, 수정, 삭제 등에서 사용됩니다.
- POST 요청을 서버에 보내게 되면 서버에서는 새로 생성된 자원의 정보를 반환 합니다.
- GET 메소드를 사용하기 애매한 상황에 대신 사용하여도 됩니다.
PUT
- 서버에 정보를 업데이트할 때 사용합니다.
- HTTP Body에 데이터를 담아서 전송합니다.
- 전체 데이터를 교체합니다.(데이터의 일부만 보내면, 나머지는 null 로 저장됩니다)
- 보통 데이터의 수정 등에서 사용됩니다.
- 해당 기능은 사용자가 URI값을 지정하여 사용합니다.
- 서버에 해당 자원이 없는 경우에는 새로운 자원을 생성합니다.
PATCH
- PUT과 비슷하지만, 부분적으로 데이터를 수정할 때 사용합니다.
- HTTP Body에 수정할 데이터를 담아서 전송합니다.
- 보통 데이터의 일부 수정 등에서 사용됩니다.
DELETE
- 서버에서 데이터를 삭제할 때 사용합니다.
- HTTP Body에 데이터를 담지 않습니다.
- 보통 데이터의 삭제 등에서 사용됩니다.
HEAD
- GET과 비슷하지만, 실제 데이터를 가져오지 않고 헤더 정보만 가져옵니다.
- 보통 파일 다운로드 등에서 사용됩니다.
OPTIONS
- 서버가 지원하는 HTTP Method를 확인할 때 사용합니다.
- 보통 CORS 설정 등에서 사용됩니다.
CONNECT
- 프록시 서버와의 터널링을 요청할 때 사용합니다.
- HTTPS 등의 보안 연결을 설정할 때 사용됩니다.
TRACE
- 서버에서 클라이언트로 요청이 전달될 때마다, 그 과정을 추적할 때 사용합니다.
- 보통 디버깅 등에서 사용됩니다.
Method의 속성
HTTP 메소드는 기능 이외에도 안전(Safe), 멱등(Idempotent), 캐시 가능(Cacheable)이라는 속성을 가질 수 있습니다. 이제 각각의 속성에 대해서 자세히 살펴보겠습니다.
안전(Safe)
- 안전(Safe) 속성이 있는 HTTP 메소드는 서버의 상태를 변경시키지 않습니다.
- 즉, GET, HEAD, OPTIONS 메소드는 안전 메소드입니다.
- 안전 메소드는 서버에 요청을 보내더라도 해당 요청에 대한 부작용이 없기 때문에 언제든지 반복해서 요청할 수 있습니다.
멱등(Idempotent)
- 멱등(Idempotent) 속성이 있는 HTTP 메소드는 같은 요청을 여러 번 보내더라도 결과가 동일합니다.
- 즉, 같은 데이터에 대해 여러 번 요청을 보내도 최종 결과는 동일합니다.
- GET, HEAD, PUT, DELETE, OPTIONS 메소드는 멱등 메소드입니다.
- 멱등 메소드는 보내는 요청의 횟수가 여러 번이더라도 결과가 같다는 것을 보장하기 때문에 서버와 클라이언트 간의 통신을 안정적으로 유지할 수 있습니다.
캐시 가능(Cacheable)
- 캐시 가능(Cacheable) 속성이 있는 HTTP 메소드는 응답 결과를 캐시할 수 있습니다.
- 캐시 가능 메소드는 GET, HEAD, POST, PATCH, PUT, DELETE 메소드 중에서 GET과 HEAD를 제외한 메소드들이 해당됩니다.
- 캐시 가능 메소드는 응답 결과를 캐시하여 다음 요청에 대한 응답 시간을 단축시킬 수 있습니다.
- 이와 같이 HTTP 메소드는 기능 이외에도 안전, 멱등, 캐시 가능 등의 속성을 가질 수 있습니다. 이러한 속성은 서버와 클라이언트 간의 통신을 보다 안정적으로 유지하고 효율적으로 처리할 수 있도록 도와줍니다.
상황에 따른 메소드 사용 방식
HTTP 메소드를 사용하는 방식은 상황에 따라 여러가지 방식으로 사용하게 됩니다. 해당 강의에서는 총 4가지 상황으로 기준으로 설명했으며 각 내용에 대한 설명은 아래와 같습니다.
정적 데이터 조회
이미지, 정적 텍스트 문서 정적 데이터는 미리 만들어진 파일이며, 서버에서 변환할 필요가 없습니다. 클라이언트는 단순히 URL을 통해 해당 파일을 요청하고 서버는 해당 파일을 응답하여 클라이언트에게 전송합니다. 이는 GET 메소드를 사용하여 요청합니다.
동적 데이터 조회
주로 검색, 게시판 목록에서 정렬 필터(검색어) 동적 데이터는 클라이언트에서 요청한 데이터에 따라 서버에서 새로 만들어진 응답을 전달합니다. 즉, 서버는 요청에 대한 적절한 응답을 생성하기 위해 데이터베이스와 같은 데이터 저장소와 상호 작용해야 합니다. 이러한 동적 데이터 조회는 주로 GET 메소드를 사용합니다.
HTML Form을 통한 데이터 전송
회원 가입, 상품 주문, 데이터 변경 HTML Form은 사용자가 입력한 정보를 서버로 전송할 수 있는 방법입니다. Form은 클라이언트에서 생성되며, 사용자가 입력한 정보와 함께 POST 또는 GET 메소드로 서버로 전송됩니다. POST 방식은 데이터를 HTTP request body에 담아 전송하는 방식이며, GET 방식은 데이터를 URL에 쿼리 스트링으로 전송하는 방식입니다.
form 방식으로 전달하게 될때 Content-Type은 multipart/form-data로 form에 있는 여러가지 타입의 파일과 정보를 보내기에 이러한 방식을 사용하게 됩니다.
특히나 form으로 데이터를 전달하게 되는 경우, 지원되는 메소드의 종류는 GET과 POST 밖에 없는 관계로 많은 기능을 제공하는데 어려움이 있습니다. 이러한 제약을 해결을 위해 컨트롤 URI를 지정하여 사용하는 경우가 많습니다.
Control URI
URL경로 끝에 해당 URL이 어떠한 작업을 하는지 명시적으로 표기하는 방법을 말합니다.
- 회원 등록 폼 /members/new
- 회원 수정 폼 /members/{id}/edit
- 회원 삭제 /members/{id}/delete
HTTP API를 통한 데이터 전송
회원 가입, 상품 주문, 데이터 변경, 서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax) HTTP API를 통해 데이터를 전송하는 경우, 클라이언트는 HTTP 요청을 보내고, 서버는 HTTP 응답으로 응답합니다. HTTP API는 보통 JSON 또는 XML 형식으로 데이터를 전송합니다. HTTP API를 사용하여 데이터를 전송하는 경우에는 주로 POST, GET, PUT, DELETE 메소드가 사용됩니다. 각각의 메소드는 해당 데이터를 생성, 조회, 수정, 삭제하는 데 사용됩니다.
URI 설계 개념
URI 설계에서 사용되는 개념은 다음과 같습니다.
문서(Document)
리소스의 개별 인스턴스를 나타냅니다. 예를 들어, http://example.com/customers/1 은 ID가 1인 고객의 개별 정보를 나타내는 문서입니다.
컬렉션(Collection)
동일한 종류의 리소스가 여러 개 존재하는 경우, 해당 리소스들을 그룹화하고 컬렉션으로 표현합니다. 예를 들어, http://example.com/customers 는 모든 고객 리소스의 컬렉션을 나타냅니다. 컬렉션의 경우 서버가 관리하는 리소스를 뜻 합니다.
스토어(Store)
서버 자체를 리소스 저장소로 표현할 때 사용합니다. 예를 들어, http://example.com/customers 눈 고객 리소스의 컬렉션을 저장하는 고객 스토어를 나타냅니다. 스토어의 경우 클라이언트가 관리하는 리소스를 의미합니다.
컨트롤러(Controller), 컨트롤 URI(Control URI)
컨트롤러에 대한 URI로, HTTP 요청을 보내면 컨트롤러에 대한 액션을 수행합니다. 예를 들어, http://example.com/customers/1/orders ID가 1인 고객에 대한 주문 생성을 수행하는 컨트롤 URI를 나타냅니다.
URI 설계 개념은 RESTful API를 구현할 때 중요한 개념 중 하나입니다. 적절한 URI 설계를 통해 클라이언트와 서버 간의 통신을 효율적이고 명확하게 만들 수 있습니다.
'CS 지식 > 네트워크' 카테고리의 다른 글
Http 프로토콜 구조 (0) | 2023.05.08 |
---|---|
HTTP 2xx, 3xx, 4xx, 5xx 상태코드 (0) | 2023.05.06 |
HTTP (0) | 2023.05.04 |
네트워크(TCP/UDP,IP,URI/URL) (0) | 2023.05.04 |
REST, REST API, RESTful (3) | 2023.01.25 |