코멘토 - 직무부트캠프

Backend 서버배치 - Lambda - postman

1son 2023. 2. 7. 12:29

AWS lambda는 서버리스로 배치프로그램을 수행할 수 있게 해주는 서비스입니다. 

람다는 함수서비스의 일종인데요, 코드를 작성하고 백엔드에서 주로 사용합니다. 

람다를 사용하면 AWS내 다양한 서비스에 다양한 처리를 코드로 할 수 있습니다. 

 

이번 장에서는 Lambda와 API Gateway를 사용하는데요, 먼저 비용을 확인해보겠습니다. 

 

API Gateway는 명백하게 100만건 초과할 때에만 유료라고 명시되어 있습니다. 

1년동안 100만건 미만으로 사용하시면 무료입니다. 

 

이번 장에서는 입력변수를 받아서 특정값으로 반환해주는 기초적인 람다로 함수를 만들고 

API로 호출하도록 설정해보겠습니다. 

 

AWS에 접속하여 lambda를 검색하고

 

생성하고, 

가장 먼저 보이는 것은 함수개요입니다. 

 

람다는 호출할 대상과 특정조건에 맞춰 다른 서비스를 불러올 수 있도록

트리거와 대상이라는 추가객체가 주어집니다. 

우리는 단독으로 람다가 실행되게 할 것이므로 그대로 둡니다. 

 

이 람다에 권한을 주거나 특정객체만 연결되게 제어할 때는 오른쪽에 있는 ARN을 사용합니다. 

 

 

저장버튼을 누릅니다. 

그리고 테스트 버튼을 누릅니다.

로그가 출력됨을 볼 수 있습니다. 

200코드는 정상적으로 반환되었다는 뜻입니다. 

 

아래쪽 로그출력 텍스트박스에서는 실제로 사용한 메모리와 수행시간이 나옵니다. 

서버가 없이 돌아가는 함수이기 때문에, 이 정보를 잘 보셔야 합니다. 

서버에서 관리해주지 않기 때문에 각 람다마다 리소스 사용량이 어떤지 알아둘 필요가 있습니다. 

 

이제 코드를 수정해보겠습니다. 

 

코드를 수정한 다음에는 반드시 배포버튼을 눌러서 적용해주어야합니다. 

deploy버튼을 눌러주세요 

 

작성한 코드를 테스트해볼게요 

val01 변수에 이름을 넣습니다.

 

다시 테스트 버튼을 눌러서 테스트해봅니다.

원하는대로 값이 나오지 않았네요 

 

다시 어떤 부분이 실수가 있었는 지 살펴봅니다. 

 

index.js로 다시 만들어줍니다. 원래 파일은 mjs 확장자를 가지고 있음 

 

 

성공했습니다. 

 

우리는 간단한 예제로 val01 변수에 값을 입력받아 출력시키는 것을 만들어보았는데요, 

실제로 API에서 호출되는 lambda는 가벼운 것이 많기 때문에 

이처럼 간단하게 데이터를 반환해주는 경우도 많이 있습니다. 

 

반면 람다가 로직이 무거워지는 경우도 있는데요 

주로 이경우에는 API로 호출하지 않고, 우리가 직접 테스트 버튼을 눌러서 실행하듯이, 

특정 시간에 맞춰 실행을 하도록 하는 경우도 있습니다. 

AWS에서는 프로그램 라이브러리 SDK나 커멘드 명령어 CLI를 통해 함수를 실행할 수 있는데요 

이렇게 구성해서 주기적으로 람다를 실행시키도록 설정하면 서버배치라호 부릅니다. 

 

 

축하합니다. 이제 기초적인 함수 작성법을 알아보았습니다. 

이번에는 이함수를 호출할 API세팅을 해보겠습니다. 

 

함수가 혼자서만 존재한다면 테스트 버튼을 누르기 전까지 동작하지 않는데요,

따라서 다른 서비스에서 이 람다를 실행할 수 있도록 건드려줘야 합니다. 

많이 쓰이는 방법은 CloudWatch의 규칙 기능과, API Gateway입니다. 

 

우리는 백엔드개발을 체험해보고 있으므로 API Gateway를 통해 호출해보겠습니다. 

람다와 HTTP(프론트)를 쓸 수 있는 REST API를 구축합니다.

 

 

새 API를 눌러서 새로 만들어보겠습니다. 

 

 

 

api의 이름을 지어줍니다. 

엔드포인트는 지역으로 선택해야 인터넷망에서 자유롭게 쓸 수 있습니다. 

 

 

가장 먼저 해야할 일은 리소스 생성입니다. 

 

리소스를 만들지 않으면 API '/'에서 호출이 되는데, 이는 이 API에 접속만 하면 바로 실행된다는 의미입니다.

HTTP통신에서는 이러한 설정이 매우 위험하기 때문에 리소스가 없으면 수행을 하지 않도록 막고 있습니다. 

 

 

 

 

다음으로 해야할 일은 메서드(method)생성입니다.

API를 어떤 방식으로 호출할 지 정의합니다.

 

리소스명(여기에서는 comento)가 눌린 상태에서 작업버튼을 누릅니다.

 

셀렉트 박스가 생겼습니다.

 

통신방식에는 여러가지가 있는데요 여기서는 POST 방식을 사용하겠습니다. 

 

HTTP 대표적인 통신방식은 GET과 POST입니다. 

GET은 요청할 내용을 URL에 실어서 전달하는 방식이고

POST는 요청할 내용을 URL에 넣지 않고 전달하는 방식입니다. 

 

체크버튼을 눌러서 다음 단계로 이동합니다. 

 

 

 

람다를 호출할 것이므로 Lambda함수를 선택합니다. 

람다 함수 명을 입력합니다. 

 

 

저장 버튼을 누릅니다. 

 

여기서도 테스트해볼 수 있습니다. 

테스트 번개모양 버튼을 눌러봅니다. 

 

입력하는 값은 요청 본문에 입력합니다. 

람다 메뉴에서 테스트 할 때 쓰는 값이랑 같지요?

 

테스트 버튼을 눌러 테스트 해봅니다. 

 

 

상태는 200인데 

응답 본문은 error 가 떴네요 ..ㅎ

 

다시 시도해보았습니다. 

 

잘 되는군요 좋습니다. 

아직 API가 저장되지 않았습니다. 

API구성을 마치기 위해서는 API를 저장해야 하는데요, 

코드를 작성하고나서 저장하는 행위를 '배포'라고 부릅니다. 

 

API를 배포해보겠습니다.

 

POST를 클릭한 상태에서 작업 > API배포를 누릅니다. 

완료되었습니다. 

상단의 URL을 복사합니다. 

이 URL을 바로 실행시키면 아래와 같이 오류가 나옵니다. 

 

 

아까 '/'에서 실행하면 HTTP통신에서 막는다고 한 내용이 이것입니다.

 

URL 뒤에 리소스 명인 /comento를 포함시킵니다. 

 

하지만 리소스 명을 붙여도 아직 인증 오류가 날 것입니다. 

 

우리가 post방식으로 사용했기 때문인데요, 

 

만약 get메서드를 사용했다면 여기서 오류 없이 바로 URL로 호출이 가능합니다. 

 

POST방식의 메서드는 강화된 보안기능이 있어서 아무나 쉽게 들어오지 못하게 하기 위해 단순 URL로 호출할 수는 없습니다.

 

실제 서버에서 API를 호출할 때에도 URL을 통해 직접접근할 것이 아닌경우 POST방식을 선호합니다.

POST방식은 URL을 통한 호출이 아니라, 정식적인 HTTP 요청이 필요합니다. 

 

이를 테스트하기 위해서는 테스트 도구가 별도로 필요합니다. 

 

그러면 POST방식도 테스트를 해봐야겠지요?

 

API를 만들고 나서 테스트 할 때 쓰이는 가장 유명한 도구는 Postman입니다.

Postman은 무료버전과 유료버전이 각각 있는데요, 간단한 테스트는 무료버전으로도 충분히 가능합니다.

 

포스트맨은 두가지 방법으로 사용할 수 있습니다.

크롬에서 설치라여 사용하는 방법과, 프로그램으로 다운로드 하는 방법이 있는데요 

 

저는 이미 깔았습니다..

 

이렇게 입력하고 

버튼을 클릭하면 

 

에러가 납니다. ㅎㅎ

(원래 안나야 정상입니다.. 저는 뭔가 잘못한거 같습니다.)

 

+ 다시 시도 

정상적으로 메세지가 출력되었습니다. 

 

API 대시보드 메뉴에 들어가면 API호출 건수를 모니터링해볼 수 있습니다.

 

+ 다시 캡쳐해본..

실무에서는 특정 API만 과하게 호출되어 관련 서비스들이 먹통이 되는 경우가 종종있습니다.

 

이럴때 API를 모니터링해서 호출건수가 과한 경우 

API를 나누거나, API에서 처리하는 로직을 다른 곳에서 처리하도록 분산합니다. 

 

여기까지 서버리스로 서버배치에 쓰이는 람다와 API를 개발해보았습니다. 

 

 

 

https://link.coupang.com/a/UtPDw

 

서버리스 이제는 AWS Lambda로 간다:설계 개발 배포 및 모니터링 지표와 비용 계산까지

COUPANG

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 

'코멘토 - 직무부트캠프' 카테고리의 다른 글

성능테스트 - RDS MySQL - Jmeter - CloudWatch  (0) 2023.02.06
AWS 과금 방지  (0) 2023.02.02
2tier 구축 - wordpress  (0) 2023.02.02
2tier 구축 - Load Balancing-2  (0) 2023.02.02
2tier 구축 - Load Balancing  (0) 2023.02.01