Server/HTTP 7

[HTTP] HTTP 메서드 활용 - HTTP API 설계 예시

우리가 회원 관리 API 를 제공한다고 가정해보자. 그때, URI GET POST 등을 어떻게 사용해야 하는지 배워보자. 그런데, POST와 PUT 모두 데이터를 등록할 때 사용하는데 이를 어떻게 구분해야 하는지가 중요하다. 이전에도 정리한 내용인데, URI는 리소스(members)를 식별하는 용도로 사용하는 것이다. 리소스의 행위를 식별하는 것은 최대한 지양해야 한다. 그런 행위들은 HTTP method를 통해 식별 가능하기 때문이다. GET의 경우 /members 을 request-target으로 지정한다. 데이터가 100만개 이면 적절한 필터링이 필요하고 이러한 필터링은 query parameter의 검색어를 통해 조회하게 된다. 정렬하고 싶으면 그것 역시 query parameter를 사용한다. ..

Server/HTTP 2022.08.12

[HTTP] HTTP 메서드 활용 - 클라이언트에서 서버로 데이터 전송

/static/star.jpg 에 요청을 하게 되면 별 이미지를 내려준다. 이 경우는 클라이언트 요청 메세지의 header에 path만 지정하고 query parameter를 사용하지 않아도 된다. 조회를 할때 데이터를 전달하는 경우가 존재하며, 동적 데이터를 조회하는 경우이다. 예를 들어, 검색 조회의 경우 검색어를 query parameter로 보내게 된다. Form tag를 하용하고 /save 로 post 메소드를 사용하면 저장이 된다고 하자. submit type의 버튼을 누르게 되면 웹 브라우저는 form의 데이터를 읽어서 오른쪽 그림과 같이 HTTP 메세지를 생성하고 해당 HTTP 메세지를 packet으로 만들어서 인터넷 망으로 던지게 된다. 여기서, Content-Type을 applicati..

Server/HTTP 2022.08.11

[HTTP] HTTP Method

목차 HTTP API를 만들어보기 HTTP 메서드 - GET, POST HTTP 메서드 - PUT, PATCH, DELETE HTTP 메서드의 속성 HTTP API를 만들어보자 회원 목록 조회 - 회원 리스트를 확인할 수 있다. 회원 조회 - 회원 리스트에서 선택해서 상세화면으로 들어가면 회원을 조회할 수 있다. 회원 등록, 수정, 삭제가 필요하다. 회원을 조회하고 등록, 수정, 삭제하는 것이 리소스(자원)가 아니다. 미네랄을 캐는 행위가 리소스가 아니라, 미네랄 그 자체가 리소스이다. 회원이라는 것만 리소스로 식별하면 된다. 그것을 URI에 매핑하면 된다. 그래서 URI 는 다음과 같이 설계되어야 한다. 리소스에 집중해서 URL를 설계했는데, 조회 등록 수정 삭제는 어떻게 구분해야 하는거지? 답: HT..

Server/HTTP 2022.08.11

[HTTP] HTTP 기본

목차 모든 것이 HTTP - 어디까지 할 수 있는가 Client Server 구조 Stateful, Stateless Connectionless (비연결성) HTTP Message HTTP (HyperText Transfer Protocol) HyperText(문서 간의 링크를 통해 연결할 수 있는 HTML)를 전송하는 규약으로 시작되었다. 현재는 모든 형태의 데이터를 HTTP를 통해서 전송한다. (서버간의 통신도 TCP를 사용하지 않고 HTTP를 사용하며, 간혹 게임 서버 같은 경우에는 TCP 계층으로 통신하기도 한다.) 기능은 HTTP/1.1 에 다 들어있고 가장 많이 사용해서 가장 중요한 버전이다. HTTP/2 와 HTTP/3 는 성능 개선만 추가되어 한 것이기에 많이 사용하지는 않는다. RFC26..

Server/HTTP 2022.08.10

[HTTP] URI와 웹 브라우저 요청 흐름

목차 URI 웹 브라우저 요청 흐름 URI (Uniform Resource Identifier) 리소스를 식별하는 통합된 방법 "URI는 Locator, Name 또는 둘 다 추가로 분류될 수 있다." https://www.ietf.org/rfc/rfc3986.txt Resource를 식별한다. 주민번호 같이 자원을 식별하는 것이다. URL은 리소스 위치를 식별하는 것이다. URN은 리소스 이름을 식별한다. URI는 리소스 위치과 이름을 식별한다. Resource는 html 파일 뿐 아니라 실시간 교통정보 같은 식별 가능한 모든 것을 말한다. URN을 정한다고 해서 실제 리소스를 찾는 방법이 없다. 시도 되었지만 잘 마무리 되지 않아서 잘 사용하지 않는다. URL 전체 문법과 각 요소들에 대해 살펴보자 ..

Server/HTTP 2022.08.10

[HTTP] 인터넷 네트워크

HTTP 또한 인터넷 망 위에서 동작하기에 네트워크 지식이 필요하다. 내 PC에서 Server와 Client가 동시에 있으면 Table 연결해서 사용하면 된다. 하지만 Server와 Client가 물리적으로 먼 거리에 존재하면 우리는 인터넷을 사용해야 한다. 그리고 복잡한 인터넷 망을 이해해야 데이터를 인터넷 망을 통해 전달할 수 있다. 노드는 중간에 존재하는 각각의 서버이며 인공위성, 미국에 있는 아마존 서버 등등 여러 서버를 거쳐서 클라이언트에게 전달될까? 도대체 어떤 규칙으로 어떻게 넘어갈까? IP(Internet Protocol) 복잡한 인터넷 망에서 내가 원하는 곳까지 도달하는게 가능할까? 우리는 영어를 못하는데, 미국에서 스마트폰 없이 가장 가까운 이마트를 찾아가는 것이 가능할까? 그것이 가능..

Server/HTTP 2022.08.10

[HTTP] 기본 지식

기존 HTTP 동작 방식을 이해하고 있었고, 백엔드 개발자와 소통 과정에서 만들어진 API를 문서를 통해 잘 사용할 수는 있었다. 그런데 서버 개발을 시작하면서 API를 구현할 때, GET으로 구현 후 header로 받을지 POST를 통해 body로 받을지 어떤 것이 더 효율적이며 좋은지를 구분할 수 없었기에 배움이 필요하다고 생각했다. 그래서 배달의 민족 기술이사인 김영한 님의 "모든 개발자를 위한 HTTP 웹 기본 지식"을 수강하기로 했다. 총 강의는 340분(6시간 40분)이며, 8월 10일~11일 중으로 강의를 끝내고 만들던 API 구현을 마무리할 생각이다. 참고로 저자는 Java+SpringBoot가 아닌 Python+Django를 사용해서 백엔드를 구현하고 있다. 강의를 시작하며 해당 강의는 ..

Server/HTTP 2022.08.09