serverless project에 대해
serverless 웹 사이트는 서버가 없는 게 아니다. 애초에 웹 동작 방식의 기본이 client <-> server의 handshake이므로 서버가 없다는 건 말이 안된다. 서버리스라는 건, 백엔드 개발자가 서버에 트래픽이 얼마나 잡히는지 모니터링하거나 서버의 개수, 사양 등등을 일일이 고려할 필요없이 aws와 같은 클라우드 서비스에서 제공하는 서버(서비스)를 이용하는 것이다.
이를 이용하면 백엔드 개발자는
- 서버 프로비저닝/관리 없이 코드를 실행할 수 있다.
- 클라이언트(웹 서비스 이용자)의 사용량에 따라서 지속적으로 서버의 규모를 조정할 수 있다.
- 높은 가용성과 자동으로 복구되는 편리함이 있다.
클라우드를 이용하여 REST API를 만들고 운영하는 방법 3가지
1. laaS(EC2, VM Instance 등)를 사용하여 Tomcat, JBoss 등의 WAS 배포를 통한 운영.
2. PaaS(ElasticBeansTalk 등)를 사용하여 war 혹은 jar 파일의 배포를 통한 운영.
3. FaaS(Lambda, Functions)를 사용하여 코드 배포를 통한 운영
laas나 Paas를 사용하여 서버를 운영하는 경우에는 웹 애플리케이션 서버나 웹 서버에서 제공하는 URI를 사용할 수 있는 방법이 있다.
하지만 Faas는 비즈니스 로직이 담겨져있는 코드만 들어있다. 따라서 얘는 내가 서버단에서 처리하고자 하는 기능이 담긴 함수 그자체이기 때문에 해당 코드가 어느 URI를 타야하는지에 대한 정보가 없다. 그러므로 이에 대한 URI 주소를 매겨줘야 하므로 API Gateway 사용이 필수다.
AWS lambda
AWS lambda는 서버리스 컴퓨팅 FaaS 서비스다. 개발자는 이 서비스를 이용해서 서버를 따로 프로비저닝, 관리할 필요없이 서버에 올라갈 코드를 실행할 수 있다. aws lambda는 이벤트가 발생할 때(="trigger" 되었을 때), 함수가 호출되었을 때 실행된다.
직접 써보면서 lambda에 대해 알아보자.
aws 콘솔에 로그인한 뒤 python 3.9 version을 사용하는 lambda 함수를 생성한 것이다.
이렇게 트리거와 대상을 추가할 수 있는 화면, 정보가 나온다. 아래로 스크롤하면 웹 사이트 상에서 바로 소스코드를 수정할 수 있다.
lambda_handler 함수는 *이벤트를 처리하는 함수다.
- 이벤트: 클라이언트의 활동
- 이벤트는 언제 발생할까? ➡️ 트리거
- 이벤트가 발생하면 lambda_handler 함수의 Event 매개변수로 값이 들어오게 된다.
aws labmda는 말 그대로 클라이언트의 요청에 대해 어떻게 동작할 것인지에 대한 함수이므로, 클라이언트의 요청을 받아줄 서버 공인 주소가 필요하다. 이를 API Gateway라고 한다. Lambda 함수 메인 화면에서 트리거 추가를 통해 API GW를 추가할 수 있다.
API GW를 추가하려고 클릭한 뒤 API를 설정할 수 있다. AWS GW의 HTTP API와 REST API에 대해 공부하고 선택해야겟다.
API 이름은 helloLambda-API로 설정했다.
API GW 설정을 마치고 세부 정보를 보면 API 엔드포인트가 나온다. 이 주소가 우리 웹 서버 경로다.
*좌 : [REST API를 공부하며 작성했던 REST API 작동방식]
이 엔드포인트 URL을 통해 페이지에 접속해보면 lambda 함수에 작성했던 대로 잘 수행되는 걸 확인할 수 있다.
결론적으로 다음과 같은 도식으로 서버리스 프로젝트는 운영된다. AWS Lex, CI/CD 등등을 추가한 아키텍처를 구상해야하지만 (아주아주) 기본적인 구조는 다음과 같다.
Reference
https://gun0912.tistory.com/59
https://heytech.tistory.com/398
'DevOps > DevOps' 카테고리의 다른 글
[GCP] Docker와 Artifact Registry (3) | 2023.10.25 |
---|---|
[Docker] Docker와 Docker hub, Docker hub push (1) | 2023.10.23 |
[Docker&DB] Docker와 PyMySQL (0) | 2023.06.08 |
[DevOps] Nat Gateway | public subnet과 private subnet | 라우팅 테이블 편집 (0) | 2023.04.30 |
[Docker] 도커 기본, 가상화(Virtualizaion)와 컨테이너 (0) | 2023.03.29 |