먼저 HTTP(Hyper-Text Transfer Protocol)는 www 상에서 문서를 주고 받는 프로토콜이다. 여기서 하이퍼텍스트란, 참조를 통해 한 문서에서 관련된 다른 문서들로 넘나들며 원하는 정보를 얻을 수 있게 해주는 텍스트를 말한다. TCP와 UDP를 사용하며, 포트는 80번을 사용한다. 그리고 이 HTTP 프로토콜을 이용해 클라이언트가 서버로 요청을 보낼 때 보내는 데이터를 HTTP 패킷이라 한다.
① Header
② Body
바디는 보통은 비어있지만, 특정 데이터를 담아서 서버에게 요청을 보낼 때 필요하다.
요청헤더: 요청하는 페이지의 주소와 현재 컴퓨터의 정보가 전송되는 부분
요청바디: POST 요청 시 전송되는 데이터가 들어가는 부분. GET요청 시에는 빈칸임.
응답헤더: 응답 페이지의 상태와 서버에 관한 정보가 전송되는 부분.
응답바디: 페이지의 HTML소스가 전송되는 부분.
GET은 서버로부터 정보를 조회하기 위해 설계된 메서드로, 요청을 전송할 때 필요한 데이터를 바디에 담지 않고 쿼리스트링으로 전송한다. 즉, 클라인트가 입력한 쿼리의 이름과 값이 결합되어 스트링 형태로 서버에 전달된다. 여기서 쿼리스트링이란, URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 뜻한다. 다시 말해 GET은 주소창을 통해 데이터를 보내는 것이다. 만약 요청 파라미터가 여러 개라면, &로 연결할 수 있다.
POST는 리소스를 생성 및 변경하기 위해 설계되었기 때문에 전송할 데이터를 HTTP 메시지의 바디에 담아서 전송한다. HTTP 메시지의 바디는 길이 제한이 없어 GET과 달리 대용량 데이터 전송도 가능하다. 또한 POST는 데이터를 바디로 전송하기 때문에 내용이 URL에서 보이지 않아 보안적인 면에서 GET보다 안전하다. 물론 확인이 불가능 한 것은 아니므로 민감성 데이터의 경우 암호화하여 전송해야 한다.
get과 post의 차이는 아래의 표를 참고하라.
PUT과 PATCH는 모두 리소스의 업데이트를 의미한다. 리소스를 업데이트한다는 점에서는 같은 역할을 하지만 약간의 차이가 존재한다. 먼저 PUT은 리소스의 모든 것을 업데이트한다. 반면, PATCH는 리소스의 일부만 업데이트한다. 아래의 회원 리소스를 예시로 들어보자.
아래와 같은 요청을 보내면 회원 리소스가 변경된다.
그렇다면 나이와 성별을 빼고 요청을 보내면 어떻게 될까? 요청하지 않은 값에 대해서는 null로 변경한다.
다시 처음의 리소스로 돌아와 이번에는 PATCH로 요청해보자.
위와 같이 요청에 포함되어 있는 부분만 변경된다.
XML은 Extensible Markup Language의 줄임말로, HTML과 매우 비슷한 문자 기반의 마크업 언어이다. 사람과 기계가 동시에 읽기 편한 구조라는 특징을 갖는다. XML은 데이터를 보여주는 것을 목적으로 하는 HTML과 달리 데이터를 저장 및 전달할 목적으로 사용한다. 또한 XML의 태그는 미리 정의되어 있지 않고 사용자가 직접 정의한다.
JSON 데이터는 이름과 값의 쌍으로 구성되고 콜론(:)으로 구분된다. JSON데이터는 쉼표로 나열되며, 객체의 경우 중괄호로, 배열의 경우 대괄호로 표현한다. 데이터의 이름과 값이 문자열인 경우 큰 따옴표와 함께 입력해야 한다. 문자열 이외에도 숫자, 객체, 배열, bool 값, NULL 등이 올 수 있다.
JSON 데이터
JSON 객체
JSON 배열
CSV(Comma Separated Value)는 쉼표로 구분된 값이라는 의미로, 테이블이나 스프레드시트로 데이터를 설명하는 형식이다. CSV는 데이터베이스 사이에 데이터를 교환하는 데 사용된다. 데이터 필드는 쉼표로 구분되고, 데이터 필드 그룹은 반복되는 필드 구분 기호(아래의 예시에선 CR과 LF의 조합)로 구분된다.
위와 같이 쉼표가 따옴표 안에 있는 경우는 구분자가 아닌 데이터로 인식한다. 엑셀을 잘 아는 사람이라면 아래의 예제가 익숙할 것이다.
API는 Application Programming Interface의 약어로, 프로그램 간의 상호작용을 돕는 매개체라는 의미이다. API는 서버와 데이터베이스에 대한 출입구 역할을 수행하여 허용된 인원만이 접근 할 수 있게 만들고, 애플리케이션과 기기가 데이터를 원활히 주고 받을 수 있도록 도우며, 기계나 운영체제에 무관한 동일 액세스 환경을 지원한다.
API는 private API, public API, partener API가 있다. private은 내부 API로, 회사 내부적으로 사용하는 API이고, public API는 개방형 API로 모두에게 공개된 API이다. 마지막 partner API는 데이터 공유를 상호 합의한 경우에 사용되며, 주로 비즈니스 관계에서 사용된다.
API를 사용하여 정보를 제공받기 위해선 사용자가 어떤 정보를 전달받을 수 있는지, 어떤 방식으로 요청해야 하는지, 어떤 형식으로 데이터가 넘어오는지 알아야 한다. 그러므로 개발자는 API명세서를 작성하여 사용자들에게 클라이언트가 서버에서 제공하는 데이터를 어떻게 사용할 수 있는지 알려주어야 한다. 특히 api 명세서를 작성하는 데에는 공통의 규칙이 있는데, 이를 restAPI라고 한다.
프레임워크와 라이브러리를 가장 쉽게 구분하는 기준은 "누가 만든 규칙을 따르는가"이다.
① Library
② Framework
- Library → 마트에 가서 떡볶이 밀키트를 사서 만들어 먹는다.
- 떡, 소스, 기타 재료를 다른 사람들이 만들어 놓은 것을 사용하지만, 떡볶이를 만드는 조리 과정은 내가 정함.
- 그 과정에서 다른 사람이 만들어 놓은 재료를 사용하지 않을 수도 있고, 무언가를 더 추가할 수도 있음.
- Framework → 분식집에 가서 돈을 내고 떡볶이를 사먹는다.
- 떡볶이를 만드는 조리 과정을 분식집이 정함.
- 나는 분식집에서 제공하는 메뉴에 맞춰서 요청만 가능함. → 메뉴에 없는 요청은 할 수 없음.
① Library
② Framework