IT 직무캠프 4주차 -2

박상현·2025년 9월 10일

IT 직무캠프

목록 보기
7/7
post-thumbnail

앞선 포스트에 이어서

Lambda와 Node.js를 통한 API 개발

을 마저 진행해보도록 하자. 목표는 다음 내용과 같다.

백엔드 개발이 사용하는 프레임워크는 다양하지만, 가장 최근에 사용하기 시작했고 가장 진보적인 형태를 가진 것은 서버리스입니다. AWS에서는 서버리스 서비스를 제공하는 Lambda가 있습니다. Lambda 서비스에 Node.js 언어를 사용하는 API를 개발하도록 하겠습니다. API는 서버 간 통신에 가장 많이 사용되는 기술이며, 최근에 서비스를 작게 나눠서 개발하는 MSA형식이 트랜드이므로 API 개발이 백엔드 개발의 핵심이 되고 있습니다.
또한 API가 들어올 수 있도록 API gateway를 구축하고 API를 호출하는 가장 대표적인 도구인 Postman을 사용하여 API gateway로 호출해보겠습니다.

Lambda 생성

Lambda는 서버리스로, 서버가 마치 없는 것처럼 동작을 합니다. 그 만큼 간단하게 서버를 구성할 수 있다는 의미로 사용됩니다. 기본적으로 Lambda는 VPC 밖에 있습니다. 따라서 VPC를 구성하지 않아도 Lambda 사용이 가능합니다.(특수한 경우 VPC 안에 구성하기도 합니다.)
Lambda를 만든 후 어떤 언어를 사용할 지 등 다양한 옵션이 존재하며, 여기서는 API 사용에 일반적인 선택을 해보겠습니다.

다음 내용을 구성합니다.

VPC 밖에 Lambda 생성하기
AWS웹 콘솔에 Lambda를 검색한 후 클릭하여 서비스에 진입한다.
함수 생성 버튼을 클릭하고, Lambda 생성 옵션들을 지정한다. Node.js 22버전을 선택하고, lambda-api로 이름을 설정했다. '기본 Lambda 권한을 가진 새 역할 생성'이 선택 되어 있는데 유지한 채 생성 버튼을 누르면 된다.

람다 구성 확인과 기본동작 테스트하기

테스트 탭을 선택하고


이벤트 이름만 넣어준다. 테스트 할 때 전달할 변수 값을 직접 설정할 수 있다.
테스트 버튼을 누르고 로그의 세부 정보를 확인한다.

  • Status code가 200이다. 200은 정상적으로 동작했다는 의미!
  • body에 반환되어야 하는 글자가 모두 담겨져 있다
  • 사용된 최대 메모리가 71MB이다. 아직까지 서버리스의 기술 한계로 고 메모리가 요구되는 것은 처리하지 못하니, 메모리를 잘 확인해야 한다.
  • 요청 건 별로 ID가 존재한다. 서버리스도 실제로는 어딘가에 서버가 존재한다. 그 서버를 잠시 빌려서 사용할 뿐이므로 요청된 내용을 요청 ID단위로 구분하여 입력이 되게 되어 있다.

API 코드 넣기

이 코드는 val01 값을 받은 후 반환해주게 되어있다.
Deploy 버튼을 클릭하여 코드를 배포한다.
이제 테스트 탭으로 이동해서 이벤트를 편집한 후 테스트 세팅 갑에 값을 주고 테스트 버튼을 누른다면?

잘 동작하는 모습!

이제 테스트가 아닌 외부에서 변수를 받았을 때 그 변수를 그대록 반환하도록 코드를 수정한다.

  • queryStringParameters 즉 ?로 pam이라는 변수를 외부에서 받는다
  • output으로 받은 변수를 포함하여 return한다.
export const handler = async (event) => {
const pam = event.queryStringParameters?.pam || "default value";
const output = `Received pam: ${pam}`;
return {
statusCode: 200,
body: JSON.stringify({ message: output }),
};
};

배포 버튼을 잊지 않고 클릭!

API Gateway

API Gateway는 API 호출을 받을 수 있게 하는 서비스입니다. EC2 안에 수동으로 구성할 수도 있지만 API Gateway서비스를 사용하여 보다 편하게 구축하고 관리할 수 있습니다. API Gateway도 기본적으로 VPC 밖에 있기 때문에 VPC를 구성하지 않고 사용할 수 있습니다. API Gateway를 만들면 자동으로 CloudWatch가 구성되어 기본 매트릭을 모니터링 할 수 있게 됩니다.

이제 다음 내용을 구성해보자.

API Gateway를 생성한다
AWS > APIgateway를 검색 후 서비스로 진입하고, Rest API 구축 버튼을 선택한다. (RestAPI는 HTTP 통신규격과 URL로 식별하여 통신하는 방법을 의미하며, API의 가장 기본적인 구성방안입니다.)

새 API 선택이 된 상태에서 이름을 지어주고, 엔드 포인트 유형은 인터넷 망을 사용할 수 있게 '지역'으로 놓는다. API 생성 버튼을 누르면 된다.

REST API 동작방식 이해하고 리소스 구성하기

'/'는 가장 상위인 루트를 의미합니다. 리소스를 만들지 않으면 API'/'에서 호출이 되는데, 이는 이 API에 접속만 하면 바로 실행된다는 의미입니다. HTTP 통신에서는 이러한 설정이 매우 위험하기 때문에 리소스가 없으면 수행을 하지 않도록 막고 있습니다. 리소스는 'method'라고 불리는 동작방식에 따라 수행됩니다.

  • get 방식은 URL의 변수값을 받아 처리하기 때문에 사용이 간단하고 응용력이 좋습니다.
  • post 방식은 URL이 아닌 body에 변수 값을 담아서 처리하기 때문에 보안이 더 좋습니다.

따라서 가장 먼저 해야할 일은 리소스 생성이다.
get 방식을 먼저 만들어보자.
리소스 이름을 getsource라 설정하고 메서드 유형을 GET으로 선택한다. 통합유형은 람다를 호출할 것이므로 람다 함수를 선택한다. Lambda 프록시 통합을 설정한다. 그렇게 해야 변수를 주고 받을 수 있음!

이제 배포에 대한 정보 입력이다. API 배포의 대상이 되는 것은 스테이지이다. 스테이지는 새 스테이지로 선택하고 스테이지 이름을 적는다. 스테이지 이름은 띄워쓰기나 특수기호가 없어야함!

스테이지가 완성되었다!

인터넷 브라우저로 Get 방식 호출

다음 내용을 수행해보자

먼저 URL 호출에 있는 링크를 복사한다.
크롬과 같은 인터넷 브라우저에 URL을 붙여넣는다. 뒤에 리소스 이름이 포함되어야 한다! /getsource를 붙여준다. 그리고 변수도 ?pam=shawn를 입력하여 shawn라는 글자를 pam 변수의 값을 준다.

성공적으로 반횐되었음!

Post 방식의 새 리소스 구성하기

동일하게 API메뉴에서 리소스 생성을 누르고 이름을 짓고 생성을 완료한다.
메서드 생성은 유형을 POST로 하고 이전과 동일하게 옵션을 설정한다.

마찬가지로 API 배포 버튼을 클릭하고 새 스테이지에 postapi라는 이름을 짓고 배포를 완료한다.

Post 호출

post 방식은 인터넷 브라우저로 호출할 수 없기 때문에 도구가 필요합니다. 가장 레퍼런스가 많고 많이 사용되는 도구는 postman입니다. postman 도구를 통해 post 방식의 API를 호출하겠습니다.

다음 내용을 수행해보자.

먼저 post방식으로 처리가 가능하게끔 Lambda 코드를 변경한다
post방식은 ? 파라미터가 아닌 body로 처리한다. body에 있는 pam 변수를 가져와 처리하도록 코드를 변경한다.

export const handler = async (event) => {
const requestBody = JSON.parse(event.body);
const pam = requestBody.pam || "default value";
const output = `Received pam: ${pam}`;
return {
statusCode: 200,
body: JSON.stringify({ message: output }),
	};
};

배포 버튼도 잊지 말고 클릭!

이제 postman 프로그램을 다운로드 받아서 설치하고 POST 방식으로 요청을 변경한 후 요청 URL을 입력한다.
body 탭에 변수를 직접 입력하고 postpost값 외에 주고 싶은 값을 주어도 된다.
보내기 버튼을 누르고 결과를 확인한다.

그리고 API gateway 대시보드에서 자동으로 구성된 CloudWatch의 모니터링 내용을 확인할 수 있다.

(이 부분도 이상해서 질문했다...)

수행해본 모든 내용을 도식화 해보면 다음과 같다.

너무 어렵다...

아키텍쳐링

프로젝트 업무는 요건을 만족하는 '쇼핑몰'사이트를 구현하는 것이였는데, 잘 모르겠어서 온 구글링과 AI를 통해 만들어봤다.

하지만, 맨토님께서 실제로 아키텍쳐를 구축할 때 비용적인 측면을 고려하지 않을 수가 없다고 내가 그려놓은 Edge Locations 같은 경우 전세계를 대상으로 하는 것이기 때문에 생략하는 것이 좋다고 하셨다. 그리고 데이터의 흐름을 생략하고 선을 이을 때에는 트래픽의 흐름을 기준으로 단방향으로 그려야 한다고 해주셨다.

5주동안 진행하면서 실무에서 쓰이는 것들 특히 네트워크 구축을 집중적으로 배워봤는데, 너무 어려웠다... 복습하면서도 사실 아직도 모르는 부분이 많은 것 같다... AWS SA associate 준비하면서 다시 공부하면 좀 알려나...

아무쪼록 IT 직무캠프 내용들 복습하면서 정리해봤다!

profile
안되면 되게하라

0개의 댓글