Overview

좋은 아침입니다. 오늘은 AWS Lambda와 API Gateway 이용하여 API를 만들어보겠습니다. 서버 구축부터 해야 하지만 이번 글에서 서버는 따로 필요 없습니다. 당황하셨나요? 괜찮습니다. 이 글을 보면 곧 이해가 될 겁니다. 우선 Lambda와 API Gateway부터 알아봅시다.

Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. 브랜디 랩스에는 이미 이것을 활용한 예제가 많은데요. 아마 아래의 포스팅들을 보시면 도움이 될 겁니다.

SQS + Lambda: 이상근 팀장님
CodeStar + Lambda + SAM으로 테스트 환경 구축하기: 천보성 팀장님




API 호출부터 결과 확인까지

API Gateway는 규모에 상관없이 API 생성, 유지 관리, 모니터링과 보호를 할 수 있게 해주는 서비스입니다. 이 글에서는 API를 호출해 결과를 확인하는 걸 목표로 진행하겠습니다.

최종 API 호출 URL
* GET /v1/reviews/{review-no}/comments
* POST /v1/reviews/{review-no}/comments

AWS(Amazon Web Service) 가입 절차는 생략하겠습니다.

1.AWS 로그인 후 API Gateway 시작!

01

AWS에서도 설명되어 있듯이 API gateway엔 이와 같은 장점이 있습니다.
1. API 개발 간소화: 새로운 버전을 신속하게 반복하고, 테스트하고, 출시할 수 있습니다.
2. 규모에 따른 성능: 백엔드 시스템에 대한 트래픽 관리하여 유동적으로 API 호출하여 성능을 높이는데 도움이 됩니다.
3. SDK 생성: 사용자 지정 SDK를 만들어 애플리케이션에서 신속하게 API를 테스트하고 배포할 수 있습니다.


2.API 생성

02

새 API로 엔드 포인트 유형을 지역으로 선택하여 생성하세요.

엔드 포인트 유형
1. 지역 : 현재 리전에 배포
2. 최적화된 에지 : CloudFront 네트워크에 배포
3. 프라이빗 : VPC에서만 엑세스 가능



3.최종 호출 url로 순차적으로 리소스 생성

03
04

리소스 이름과 리소스 경로를 입력하고 리소스를 생성합니다.

05

리소스는 호출할 수 있는 특정 URL입니다. 생성된 리소스로 /reviews 주소가 만들어졌습니다.

06

다음은 /reviews 주소 뒤에 {review-no}를 생성합니다. 리소스 경로에 {} 가 포함되어 있으면 경로 파라미터를 나타냅니다.

07

마지막 리소스를 생성하게 되면 위의 이미지와 같이 /reviews/{review-no}/comments 리소스가 생성되었습니다. 이제 메서드에 연결할 Lambda 함수를 먼저 생성하겠습니다.


4.Lambda 함수 생성

08
09

GET, POST 메서드에 연결할 각각의 Lambda 함수를 생성합니다.

10

‘Hello from Lambda’ 문자열로 리턴되는 Lambda 함수가 생성되었습니다. 생성된 Lambda 함수를 API Gateway 메서드에 연결해보겠습니다.


5.메서드 생성

11

GET, POST 메서드를 생성합니다.

메서드의 의미
* POST : 새로 생성(Create)
* GET : 조회(Read)
* PUT : 수정(Update)
* DELETE : 삭제(delete)
* PATCH : 일부만 수정(Update)

12
13

새 메서드의 통합 유형을 Lambda 함수로 선택하고 기존에 생성한 함수명으로 입력한 다음 저장을 누릅니다.

14

메서드 실행 화면입니다. 해당 메서드에 통합 요청할 Lambda 함수가 연결됩니다. 연결된 Lambda 함수를 눌러보겠습니다.

15

왼쪽 목록 트리거 추가하는 부분에 API Gateway가 연결되었습니다. 그럼 이제 정상적으로 호출되는지 테스트해보겠습니다.

16
17

테스트를 클릭하면 오른쪽에 요청에 대한 결과가 나옵니다. 조금 전에 연결했던 Lambda 함수에 ‘Hello from Lambda’ 값으로 출력됩니다. 이제 리소스로 추가한 경로 파라미터를 매핑하여 출력해보겠습니다.

18

메서드 요청에서는 사용자에게 노출되는 API를 정의할 수 있습니다. 리소스로 경로 파라미터를 추가하게 되면 메서드 요청 -> 경로 요청 부분에 자동으로 추가되어 있습니다.

19

통합 요청에서는 백엔드와의 통신 방식을 지정할 수 있습니다. 메서드 요청에서 보낸 URL 경로 부분을 매핑시켜야 합니다. 명명 규칙은 아래와 같습니다.
method.request.{"path" | "querystring" | "header"}.{param_name}

20

매핑 템플릿을 추가하여 수신된 요청을 변환하여 통합 백엔드로 보내야 합니다. 정의된 템플릿이 없기 때문에 매핑 템플릿을 추가한 후 메서드 요청 패스스루로 지정합니다. 그러면 클라이언트가 제공한 요청이 변환없이 통합 백엔드로 전달됩니다.

21

클라이언트가 요청한 경로 파라미터 출력하도록 Lambda 함수를 수정합니다.

22

이제 다시 테스트를 해보겠습니다. 경로에 값을 요청하여 응답 본문에 출력되는 걸 확인할 수 있습니다.


6.API 배포

23
24

스테이지 정보를 입력하고 배포를 클릭합니다.

25

스테이지 상세 정보에 API 호출 주소가 생성됩니다.

26

Postman으로 생성된 API주소를 입력하여 정상적으로 return 값을 확인합니다.


Conclusion

정말 긴 과정이었습니다. 지금까지 API Gateway를 이용하여 API 생성부터 배포까지 알아봤습니다. API Gateway를 사용하면 서버 없이 높은 확장성을 가진 백엔드 애플리케이션을 구축하고 운영할 수 있게 될 겁니다. 백엔드에 관심이 있는 개발자에게 이 글이 도움이 되길 바랍니다.


곽정섭 과장 | R&D 개발1팀
kwakjs@brandi.co.kr
브랜디, 오직 예쁜 옷만