우리가 알고 있는 클라이언트-서버 구조는 보통 다음과 같다.
클라이언트 - 웹서버 - 웹어플리케이션서버 - 데이터베이스 서버
백엔드는 웹서버, 웹어플리케이션서버, 데이터베이스 서버를 담당한다.
그중에서도, 웹서버는 페이지의 데이터가 변하지 않는 정적페이지에 대응한다.
웹어플리케이션 서버는 데이터가 계속 변하는 동적페이지에 대응한다.
백엔드를 알기 위해서는 데이터를 받아올 수 있는 API라는 개념에 대해 알아야 한다.
API(application programming interface 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다. 이러한 연결이나 인터페이스를 빌드하거나 사용하는 방법을 기술하는 문서나 표준은 API 규격(사양)으로 부른다. 이 표준을 충족하는 컴퓨터 시스템은 API가 구현(implement)되었다거나 노출(expose)되었다고 말한다. API라는 용어는 사양이나 구현체를 의미할 수 있다.
API의 한 가지 목적은 시스템이 동작하는 방식에 관한 내부의 세세한 부분을 숨기는 것으로, 내부의 세세한 부분이 나중에 변경되더라도 프로그래머가 유용하게 사용할 수 있고 일정하게 관리할 수 있는 부분들만 노출시킨다. API는 특정 시스템용으로 커스텀하게 빌드될 수도 있고, 아니면 수많은 시스템 간 상호운용성을 허용하는, 공유가 되는 표준일 수도 있다.
API - Wikipedia
간단하게 말하자면, API는 사용자가 필요로 하는 정보들을 쉽게 활용할 수 있도록 제공하는 인터페이스이다.
예를 들어, 우리가 날씨를 알려주는 웹페이지를 제작하고자 할 때, 기상청의 API를 이용하여 기상청의 데이터베이스를 쉽게 가져올 수 있다.
API를 통해 데이터를 전달하여 사용할 수 있었다. 일반적인 API 라고하면, 정해진 프로토콜이나 형식에 관계없이 모두 전달할 수 있는 인터페이스이다.
여기서, REST API라는 개념이 등장한다.
HTTP라는 프로토콜을 지정하고, 데이터 포맷은 주로 JSON과 XML 형식으로 제한을 둔 API이다.
이렇게 규약을 지정해서 통신하게 되면, 불필요한 부분을 제외하기 쉽고, 메시지의 어떤 부분이 필요한 데이터인지 쉽게 파악할 수 있어 성능 향상에 큰 도움이 된다.
그렇다면 HTTP 프로토콜은 어떤 형식을 지켜야 할까?
HTTP에 포함되는 다양한 속성들이 있지만, 우선 대표적인 속성들로 간략하게 알아보겠다.
1) 통신 상태(HTTP(status) Code) : 200, 404, 500
2) 응답형태 : POST , PUT ...
1) 전달해줄 데이터 값
그렇다면 요청은 어떤 방식으로 이루어질까?
요청은 URL을 통해서 이루어진다.
URL 이란, 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다.
기본 주소가 http://localhost:8888 일 때, 우리는 다음과 같이 URL을 설계할 수 있다.
전체 상품 조회 : http://localhost:8888/조회
상품 등록 : http://localhost:8888/등록
전체 상품 삭제 : http://localhost:8888/삭제
하지만, REST API 에서 URL을 작성하는 규칙이 존재한다.
<REST API URL 규칙>
따라서, 해당 기능들을 API로써 올바르게 표현한다면, 다음과 같겠다.
조회요청 : "GET" http://localhost:8888/products
등록요청 : "POST" http://localhost:8888/products
삭제요청 : "DELETE" http://localhost:8888/products
쇼핑몰 페이지를 예시로 들어보자.
1. 쇼핑몰의 메인페이지
쇼핑몰의 메인페이지에서는 상품들의 이미지, 상품명들이 존재할 것이다.
우리는 이 상품들의 정보를 얻기 위해, 전체 상품을 조회하는 API(GET) 을 요청할 것이다.
상품 상세페이지
쇼핑몰의 메인페이지에서 상품들의 이미지를 클릭했을 때, 상품을 안내하는 상세페이지로 이동할 것이다. 상세 페이지에는, 해당 상품의 이미지는 물론이고, 가격, 설명, 구매하기버튼, 장바구니 버튼 등이 존재할 것이다.
이 때, 우리는 해당 상품의 정보를 얻기 위해, 해당 상품을 조회하는 API(GET)을 요청할 것이다.
상품 관리 페이지
상품들에 대한 데이터를 수정할 수 있도록 하는 페이지를 보여줄 것이다.
이 페이지에서는, 상품1, 상품2, 상품3 에 대한 상품명,가격,설명 등이 포함된 요약된 데이터를 보여줄 것이고, 수정하기 버튼이 존재한다.
이 때, 우리는 모든 상품들의 정보를 얻기 위해, 모든 상품을 조회하는 API(GET)을 요청할 것이다.
상품 수정 페이지
상품 관리 페이지에서 수정버튼을 눌렀을 때, 해당 상품에 대한 데이터를 수정하도록 하는 페이지이다.
이 페이지에서는, 먼저 상품 1에 대한 개별조회 API(GET)을 요청할 것이고, 수정을 요청하는 API(PUT) 를 요청할 것이다.