이 글은 AWS Lambda로 시작하는 서버리스를 참고하여 작성하였습니다.
작성자 : 임나경
Ch8. API Gateway
1. Amazon API Gateway
- 사용자가 쉽게 API를 생성, 게시, 관리, 모니터링, 보안 관리를 할 수 있는 완전관리형 서비스이다.
- 이외에도 트래픽 관리, CORS 지원, 권한 부여 및 액세스 제어, 제한, 모니터링 및 API 버전 관리 등 최대 수십만개의 동시 API 호출을 수신/처리하는데 관계된 모든 작업을 처리한다.
- 최소 요금은 존재하지 않으며, 수신한 API 호출과 전송한 데이터 양에 대한 요금을 청구받는다.
- 선택 옵션 : REST API, WebSocket API, HTTP API(2019년 신규 추가)
2. HTTP API
Hypertext Transfer Protocol의 약자로, 링크(link) 기반으로 데이터를 주고받는다.
클라이언트-서버가 요청(Request)-응답(Response)을 하기 위해 따르는 프로토콜이다.
HTML 문서, 오디오, 이미지, 동영상, 텍스트 문서 등을 주고받는다.
HTTP 동작 방식
클라이언트가 프로토콜, 도메인, URI를 이용하여 서버에 Request(요청)를 보내면,
서버는 클라이언트가 요청한 내용에 따라 내부적으로 처리를 진행하고 그 결과를 Response(응답)해준다.
HTTP 특징
1. 비연결성 (Connectionless)
요청-응답 1회 후 연결을 끊는다. 장점은 리소스 낭비가 적다는 점이고, 단점은 매번 연결 시도 후 해제하므로 오버헤드가 발생한다.
오버 헤드를 줄이기 위해 KeepAlive 속성을 이용하지만 이는 메모리 사용량이 크기때문에 완전한 해결법은 아니다.
2. 무상태 (Stateless)
상태값이 없고 요청받은 정보에 대해서 주고받기만 한다. 상태를 유지하려면 클라이언트에서 쿠키를 사용하거나, 서버에서 세션을 사용해야한다. 쿠키나 세션은 메모리 사용량이 커서 과부하의 원인이 되고, 위변조의 위험도 있다. 쿠키나 세션 대신 토큰(OAuth, JWT)을 사용하는 방법도 있다.
3. HTTP Method
클라이언트가 서버로 요청을 보낼 때 어떤 목적을 갖는지 HTTP 메소드에 명시한다.
GET, POST, PUT, PATCH, DELETE 등
더 알아보기 : https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
4. 응답 상태코드
서버는 클라이언트의 요청에 대한 응답으로 숫자 상태코드를 반환한다.
더 알아보기 : https://developer.mozilla.org/ko/docs/Web/HTTP/status
3. REST API
Representational State Transfer의 약자로, 대표적인 상태 전달인데 이게 무슨소리일까?
시스템을 구성하는 여러 자원들 중 상황에 따라 대표적인 것이 다르다.
ex) DB에 Users라는 테이블이 있다면, 유저들의 정보는 하나의 자원이다.
특정 유저를 구분하는 값으로 id값이 존재한다면 우리는 id값을 대표적인 필드라고 생각한다.
REST는 이러한 자원들에 고유한 URI(통합 자원 식별자, Uniform Resource Identifier)를 부여한다.
REST 특징
1. 클라이언트/서버 (Client/Server)
REST 서버가 API를 제공하고, 클라이언트는 사용자 인증이나 context 등을 직접 관리하는 구조이다.
서버와 클라이언트 각각의 역할이 명확하기때문에 서로 의존성이 낮다.
2. 무상태 (Stateless)
상태값이 없고 요청받은 정보에 대해서 주고받기만 한다.
3. 캐싱 처리 가능 (Cacheable)
HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그 또는 E-Tag를 이용하여 캐싱 구현 가능하다.
장점은 응답시간이 빠르고, 서버의 자원 사용률이 향상된다는 점이다.
4. 계층화 (Layered System)
REST 서버는 다중 계층으로 구성 가능하다. 보안, 암호화 계층, 로드밸런싱을 추가하여 구조를 유연하게 관리할 수 있다.
게이트웨이같은 네트워크의 중간 매체를 사용 가능하다.
5. Code-On-Demand
필수적이지 않다. 서버로부터 스크립트를 받아 클라이언트에서 실행하는 것이다.
6. 인터페이스의 일관성 (Uniform Interface)
REST는 URI로 지정한 자원에 대해 통일하여 한정적인 인터페이스로 수행하는 아키텍처를 의미한다.
즉, 어떤 언어로 구성된 서버를 사용하던, 어느 플랫폼이나 운영체제를 사용하던 상관없이 REST를 사용할 수 있다.
인터페이스 일관성의 제약조건
1. Indentification of resources
리소스를 URI로 식별한다.
2. Manipulation of resources through representations
Representations(GET, POST, PUT, DELETE...)을 전송하여 Resources를 조작한다.
3. Self-Descriptive Messages
메시지가 스스로를 설명해야한다. HTTP URI : 자원, HTTP Method : 행위, MIME Type : 표현방식
4. Hypermedia as the engine of application state (HATEOAS)
애플리케이션 상태는 하이퍼링크를 사용하여 전송되어야한다.
즉, 리턴 메시지에 link값이 있어야한다.
** MIME Type이란?
확장자를 파일 종류/파일 포맷 형태로 작성하는 것
참고자료 : https://server-talk.tistory.com/183
MIME이란 무엇인가?
MIME이란 무엇인가? MIME이란? Multipurpose Internet Mail Extensions의 약자로 간략히 말씀을 드리면 파일 변환을 뜻한다고할 수 있습니다. MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메
server-talk.tistory.com
[ 인터페이스 일관성 제약조건을 위배하지 않는 요청, 응답 예시 ]
- 요청 : example.com(목적지)에 /100이라는 URI로 GET해라.
GET /100 HTTP /1.1
HOST : example.com
- 응답 : HTTP/1.1 기반 통신했고, 200 상태코드 + GET 요청 성공했다. 데이터 형식은 Body가 Json 형식이다.
HTTP/1.1 200 OK
Content-Type : application/json-patch+json
[ {op : "remove", path : "a/b/c" } ]
4번 조건을 만족하는 응답 예시 : 링크 정보를 포함한 값 리턴
HTTP/1.1 200 OK
Content-Type : text/html
<html>
<head></head>
<body><a herf="/page">page</a></body>
</html>
4. HTTP API와 REST API의 선택기준
가격 : HTTP가 REST보다 더 싸다.
속도 : HTTP가 REST보다 더 빠르다.
(HTTP는 프록시 기능만 제공하고 최적화되어있기 때문에)
=> HTTP로 충분하지 않고, REST에 내가 구현하는데 필요한 기능이 있을 때 REST를 사용한다.
5. WebSocket API
웹버전 TCP 또는 Socket을 이용하여, 서버-클라이언트 간 소켓 연결을 통해 양방향 통신 또는 데이터 전송이 가능한 기술이다.
Request-Response 방식을 사용하다가 HTML5 등장 이후 우리는 웹 환경에서 보다 쉽게 소켓 통신이 가능해졌다.
ex) 실시간 대시보드, 채팅 등에 사용된다.
HTTP와 Websocket의 차이점은 프로토콜 차이인데, 최초 접속 시에는 HTTP를 사용하지만 연결 후에는 Websocket의 독자적 프로토콜로 이루어진다.
=> HTTP는 Stateless여서 client가 요청을 보내면 server가 응답하는 단방향 통신이지만, Websocket은 client와 server가 특정 포트로 연결되어있어서 실시간 양방향 통신이 가능하고 server도 client에게 요청을 보낼 수 있다.
'GDSC HUFS 3기 > Cloud Computing' 카테고리의 다른 글
[AWS] Amazon SQS, API Gateway (0) | 2022.06.02 |
---|---|
[AWS] Amazon SQS/메시징 서비스/Amazon SNS (0) | 2022.06.02 |
[AWS] AWS Lambda (0) | 2022.05.18 |
[AWS] AWS 네트워크 (0) | 2022.05.12 |
[AWS] AWS Lambda/cold start/warm start/lambda 런타임/lambda event/메모리 할당/실행 제한 시간 (0) | 2022.05.12 |