보통 서버 개발자, 백엔드 개발자 둘중 하나로 부른다.
하나의 프로젝트에서 프론트엔드-백엔드, 안드로이드-서버, iOS-서버 이런 식으로 붙이기 나름이라고 생각한다.
좀 찾아보고 내가 이해한 바는 이렇다.
따지고 보면 웹에만 국한된 개념이 백엔드 개발, 서버를 이용하는 모든 프로그램에 해당하는 개념이 서버 개발인 것 같다.
내가 독학하고자 하는 건 HTTP 기반의 API 서버를 만드는 것
이다.
네트워크 장치 간에 정보를 전송하도록 설계된 애플리케이션 계층 프로토콜
일반적인 흐름에 클라이언트 시스템에서 서버에 요청한 다음 서버에서 응답 메시지를 보내는 작업
이 포함됨.
프로토콜이란?
컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계. 컴퓨터의 공용어와 같으며 상이한 소프트웨어 하드웨어가 네트워크 내에서 프로토콜을 사용해 서로 통신할 수 있도록 한다.
즉, WWW(World Wide Web)에서 통신 규약을 정함으로써 사용자들이 서로 통신하는 데에 어려움이 없도록 하는 정해진 규약이고 HTTP는 하나의 프로토콜인 것이다. 클라이언트와 서버는 이 HTTP라는 통신 규약 내에서 통신을 하는 것!
HTTP는 기본적으로 request와 response 구조
로 이루어져 있으며 클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어진다.
HTTP Request의 구조
HTTP Request는 Start Line, Headers, blank line, Body로 이루어진다.
HTTP Request Message의 시작 라인으로 HTTP Method
, Request target
, HTTP version
의 3가지 부분으로 구성된다.
GET /test.html HTTP/1.1
[HTTP Method] [Request target] [HTTP version]
: HTTP 요청이 쿼리된 서버에서 기대하는 작업을 의미
Method | 설명 | Idempotent(멱등성) | Cacheability | Safe |
---|---|---|---|---|
GET | 리소스 조회 | O | O | O |
POST | 요청 데이터 처리(데이터 등록) | X | 가능하나 구현이 쉽지 않음 | X |
PUT | 리소스 대체(없을 시 생성. 덮어쓰기) | O | X | X |
PATCH | 리소스의 일부만 변경 | X | 가능하나 구현이 쉽지 않음 | X |
DELETE | 리소스 삭제 | O | X | X |
Idempotent(멱등성)
은 여러 번 연산하더라도 결과가 달라지지 않는 성질을 의미한다. 이전 요청과 동일한 멱등키를 가진 요청을 받으면, 서버에서 이 요청을 중복으로 판단한 뒤 실제로 처리하지 않고 첫 요청과 같은 응답을 반환하는 방식을 말한다. 외부 요인으로 인해 중간에 리소스가 변경되는 것은 멱등에서 고려하지 않는다.Cacheability
는 응답 결과 리소스를 캐시에서 사용 가능한지를 의미한다. 내 로컬에 응답 결과 리소스를 저장하고 있는 것이 캐시인데, GET, HEAD 메소드(GET 메소드의 요청과 동일한 응답이지만 응답 본문 포함 X, 요청 시에도 헤더 정보 외에는 전송X)를 캐시로 사용하고 POST, PATCH는 실제로 사용되지 않는다. 캐시를 하려면 똑같은 리소스에 대해 캐시 키가 정확히 맞아야 하는데 POST, PATCH는 본문 내용까지 캐시 키로 고려해야 해 구현이 어렵기 때문이다.Safe
는 여러 번 해당 메소드를 호출해도 리소스를 변경하지 않는 것을 의미한다. 서버의 상태를 바꾸지 않으면, 즉 읽기 작업만 수행하는 메소드는 안전하다고 한다. 이 개념은 해당 리소스의 변화 여부만 고려하고 세부적인 사항은 고려하지 않는다.: Host(Base URL) 뒤에 어떤 경로로 HTTP Request를 보내는지에 대한 정보 표시
: version에 따라 Request message 구조나 데이터가 다를 수 있어서 명시
해당 request에 대한 추가 정보를 담고 있는 부분으로 헤더는 크게 general headers
, request headers
, entity headers
, response headers
의 4가지로 이루어져 있다. Request header는 Response header를 제외한 3가지 부분으로 이루어져 있다.
: Request message와 Response message에 적용되는 기본적인 정보. Body에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더
: HTTP 요청에서 사용되지만 메시지의 컨텐츠와 관련이 없는 패치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더
: 콘텐츠 길이나 MIME 타입과 같이 Entity body에 대한 자세한 정보를 포함하는 헤더
HTTP Request가 전송하는 데이터를 담고 있는 부분으로 전송하는 데이터가 없다면 비어 있다. POST 요청인 경우, HTML 폼 데이터가 포함되어 있다.
POST /test HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: google.com
User-Agent: HTTPie/0.9.3
{
"test_id": "tmp_1234567",
"order_id": "8237352"
}
HTTP Response의 구조
일반적인 HTTP Response에는 HTTP 상태 코드(status line), HTTP 응답 헤더(headers), blank line, 선택 사항인 HTTP 본문(body)이 포함된다.
HTTP Response의 상태를 간략하게 나타내 주는 부분으로, HTTP version
, Status code
, Status Text
의 3가지 부분으로 나뉘어져 있다.
HTTP/1.1 200 OK
[HTTP version] [Status Code] [Status Text]
: 클라이언트가 보낸 Request의 처리 상태를 Response로 알려주는 기능
HTTP response status codes
: 위치 또는 서버 자체에 대한 정보(이름, 버전)과 같이 응답에 대한 부가적인 정보를 갖는 헤더
데이터를 전송할 필요가 없을 경우 body가 비어 있으며 Request의 body와 일반적으로 동일하다.
HTTP의 특징
통신이 끝나면 상태를 유지하지 않는 속성, 연결을 끊는 순간 상태정보를 유지하지 않는 특성. Server는 Client의 상태를 보존하지 않는다.
client가 request를 보내고, server가 response를 하면 그 연결을 끊어버린다.
기본적으로 HTTP는 연결을 유지하지 않는 모델이다.(응답을 준 뒤 TCP/IP 연결을 끊어 최소한의 자원으로 서버를 유지함)
API 작동 방식(아키텍처 주요 유형)
SOAP API, RPC API, Websocket API, REST API의 4가지 방식으로 작동할 수 있음
: 단순 객체 접근 프로토콜. 클라이언트와 서버가 XML을 사용해 메시지를 교환하며 과거에 더 많이 사용되었음. 유연성이 떨어지는 API
: 원격 프로시저 호출. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송
: JSON 객체를 사용해 데이터를 전달하는 최신 웹 API. 클라이언트 앱과 서버 간의 양방향 통신을 지원하며 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 가장 효율적임.
: 가장 많이 사용되고 유연한 API. 클라이언트가 서버에 요청을 데이터로 전송하면, 서버가 이 클라이언트 입력을 사용해 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환함
API의 유형(사용 범위)
프라이빗 API, 퍼블릭 API, 파트너 API, 복합 API의 4가지 유형이 있음
: 기업 내부에 있으며 비즈니스 내에서 시스템과 데이터를 연결하는 데만 사용
: 일반에 공개되며 누구나 사용할 수 있음. 이러한 유형의 API와 관련된 권한 부여와 비용이 있을 수도 있고 없을 수도 있음.
: B2B 파트너십을 지원하기 위해 권한이 부여된 외부 개발자만 액세스 가능함
: 두 개 이상의 서로 다른 API를 력ㄹ합하여 복잡한 시스템 요구 사항이나 동작을 처리
참고자료
HTTP란 무엇입니까?
프로토콜이란? | 네트워크 프로토콜의 정의
[TIL — NETWORK] 인증, 인가, http 메서드, 상태코드
[간단정리] HTTP Request/Response 구조
HTTP의 특징
Method Definitions
HTTP Method : 안전(Safe), 멱등성(Idempotent), 캐시(Cacheable)
안전함 (HTTP 메서드)
HTTP Header에는 어떤 정보들이 담겨있을까
애플리케이션 프로그래밍 인터페이스(API)란 무엇인가요?