AWS Toolkit 및 Cloud9을 통해 로컬 환경에서 서버리스 앱 개발하기
소프트웨어 개발자들은 각자 선호하는 도구가 있습니다. 일부는 강력한 편집기를 사용하고, 일부는 특정 언어 및 플랫폼에 맞춤화된 통합 개발 환경(IDE)을 사용합니다. 그리고 이러한 환경을 클라우드에 구축하여 개발하는 것을 선호하는 개발자도 있지만 이보다는 본인의 로컬 환경에서 직접 개발하는 것을 선호하는 개발자가 많습니다. 이 글은 AWS 에서 이러한 로컬 환경에서 개발을 원하는 개발자들이 보다 더 쉽게 그러한 환경을 구축하는 방법에 대해 살펴봅니다.
AWS Toolkit기반 통합 개발 환경(IDE) 활용하기
AWS 에서는 다양한 IDE 지원을 위한 AWS Toolkit 을 제공하고 있습니다. 지원하는 IDE 는 가장 많이 사용되는 Visual Studio, VS Code, JetBrains(IntelliJ, PyCharm, WebStorm, JetBrains Rider 등), Eclipse 등이 있습니다. 이러한 오픈소스 플러그인을 활용해 AWS 에서 구동되는 애플리케이션을 보다 손쉽게 개발하고 단계별로 디버깅한 뒤 배포할 수 있습니다. 각 언어나 IDE별로 제공되는 AWS Toolkit 은 여기에서 확인할 수 있습니다.
AWS Toolkit 을 활용하면 일반적으로 다음과 같은 작업 등을 수행할 수 있습니다.
- 원하는 런타임에 즉시 배포 가능한 새로운 서버리스 애플리케이션을 생성
- AWS Lambda 실행 환경에서 단계별 디버깅으로 로컬에서 코드를 테스트
- 원하는 AWS 리전에 애플리케이션을 배포
- 로컬 또는 원격으로 Lambda 함수를 호출
- Amazon S3, Amazon API Gateway 및 Amazon SNS 등과 같은 다양한 이벤트 소스의 샘플 페이로드를 사용하고 사용자화
- Amazon ECS 의 Docker 컨테이너 실행을 위한 작업 정의를 구성
- AWS CDK Explorer (Preview) 를 통해 CDK construct 에 정의된 스택과 리소스를 개발하고 확인
설치 방법 (AWS Toolkit for VS Code 예시)
각각의 IDE 별 마켓플레이스나 확장 프로그램 메뉴 등을 통해 추가할 수 있습니다. 또한 AWS Toolkit 의 일부 기능은 AWS Serverless Application Model (SAM) CLI 와 Docker 를 활용하기 때문에 모든 기능 활용을 위해서는 이에 대한 설치가 추가적으로 필요합니다. 이 글에서는 AWS Toolkit for VS Code를 예로 들어보겠습니다.
이후에 AWS 계정과 연동하고 리전을 변경하거나 AWS 를 활용할 툴체인을 설정할 수 있습니다.
주요 기능
AWS Toolkit 에서 제공하는 기능 중 AWS Explorer 를 활용하면 IDE 내에서 개발할 수 있는 AWS 서비스를 확인할 수 있습니다.
AWS Explorer 를 통해 개발할 수 있는 서비스는 다음과 같습니다.
- AWS Serverless Application
- AWS CloudFormation stacks
- AWS Lambda Functions
- Amazon S3
- Amazon EventBridge
- AWS Step Functions
또한 AWS CDK Explorer 를 활용하면 AWS Cloud Development Kit (CDK) 을 보다 편리하게 개발할 수 있습니다. AWS CDK 애플리케이션은 AWS CloudFormation 스택 및 거기에 포함된 AWS 리소스에 대한 정의를 포함하는 Construct 라는 빌딩 블록으로 구성됩니다. AWS CDK Explorer 를 활용하면 이러한 AWS CDK construct 에 포함된 스택과 리소스를 시각적으로 확인할 수 있습니다.
로컬에서 AWS Toolkit 을 활용한 서버리스 애플리케이션 개발
위에서 설명드린대로 AWS Toolkit 을 활용하면 SAM 을 활용했던 것과 유사하게 로컬 환경에서 서버리스 애플리케이션을 개발하고 디버깅하는 것이 가능합니다.
Command Palette 에서 AWS: Create new SAM Application 메뉴를 통해 서버리스 애플리케이션 개발을 시작합니다. 원하는 런타임과 프로젝트 경로 등을 설정할 수 있습니다.
AWS Toolkit 은 AWS SAM 을 활용해서 좌측의 AWS Explorer 에서 보이는 것과 같은 애플리케이션 파일들을 생성합니다. 예제는 Node.js 기준입니다.
app.js 를 에디터에서 열면 handler 함수에 CodeLens 가 표시되는 것을 확인할 수 있습니다. Add Debug Configuration 를 선택하면 디버깅 구성 json 파일이 새로운 탭에서 열리는 것을 확인할 수 있습니다.
아래와 같이 type 을 “aws-sam” 으로 설정하게 되면 AWS SAM CLI 를 통해 로컬에서 빌드하고 디버깅하게 됩니다. 각 항목별 보다 상세한 내용은 다음에서 확인할 수 있습니다 : https://docs.aws.amazon.com/ko_kr/toolkit-for-vscode/latest/userguide/run-debug-sam-app.html
해당 Lambda의 실행 환경은 로컬 컨테이너 환경에서 에뮬레이션 됩니다. 또한 콘솔 메뉴에서 실행 결과도 확인할 수 있습니다.
이러한 방법으로 로컬 환경에서 디버깅도 할 수 있으며 이 후 AWS 환경으로의 배포까지 가능합니다.
AWS Cloud9 – 클라우드 IDE 활용하기
AWS Cloud9 은 웹 브라우저에서 코드를 작성, 실행 및 디버깅할 수 있는 클라우드 기반 IDE입니다. 이번 블로그의 주제는 로컬 환경에 초점을 두고 있지만 Cloud9 을 활용하면 인터넷 연결만 되어 있다면 로컬 환경에서 개발하던 것과 거의 유사하게 AWS 상에 애플리케이션을 개발할 수 있습니다.
Cloud9 에는 코드 편집기, 디버거 및 터미널 등이 포함되어 있고 JavaScript, Python, PHP, Ruby, Go 및 C++을 비롯하여 40여 개의 프로그래밍 언어 및 애플리케이션 유형을 지원합니다. Cloud9 에는 앞서 AWS Toolkit 과 같이 서버리스 애플리케이션을 개발할 수 있는 환경이 미리 구성된 형태로 제공되므로 손쉽게 서버리스 애플리케이션의 리소스를 정의하고, 디버깅하고, 로컬 실행과 원격 실행 간에 전환이 가능합니다.
강력한 편집 기능과 공유 기능
AWS Cloud9 은 관리형 Amazon EC2 인스턴스 또는 SSH를 지원하는 기존 Linux 서버에서 개발 환경을 실행할 수 있는 유연성을 제공합니다. AWS Cloud9 에서 제공하는 기능에는 다음과 같은 것들이 있습니다.
- 코드 힌트, 코드 완성 과 같은 기능을 제공하는 코드 편집기
- 중단점 설정, 코드 계속 실행, PHP, Python, JS/Node.js, C/C++ 앱의 변수 검사 등의 기능을 제공하는 디버거
- AWS Cloud9 터미널에서 제공하는 셸 환경 (추가 소프트웨어를 설치하거나 git push를 실행하거나 명령어 입력 가능)
- 코드 협업 기능과 IDE 내 팀원들과의 채팅 기능
- 파일 수정 이력을 통한 변경 사항 확인이나 빠른 롤백
Cloud9을 통한 로컬 서버리스 앱 개발하기
AWS Cloud9 에는 서버리스 개발에 필요한 모든 SDK, 라이브러리 및 플러그인으로 개발 환경을 사전에 구성합니다. 또한, AWS Lambda 함수를 로컬에서 테스트하고 디버깅할 수 있는 환경을 제공합니다. 코드에 직접 반복할 수 있으므로 시간을 절약하고 코드 품질을 개선할 수 있습니다.
또한 AWS 명령줄 인터페이스와 더불어 개발 환경을 호스팅하고 있는 관리형 Amazon EC2 인스턴스에 대한 sudo 권한이 포함된 터미널이 함께 제공됩니다. 따라서 터미널을 통해 명령을 신속하게 실행하고 AWS 서비스에 직접 접근할 수 있습니다.
AWS Cloud9 에 대한 보다 자세한 내용과 정보를 얻고 싶다면 다음의 자습서와 샘플 예제를 확인해보세요.
마무리
AWS 에서 자신의 아이디어를 애플리케이션으로 구현하는 과정이 놀라울 정도로 빠르고 쉬워졌습니다. 이제 여러분은 원하는 환경에서 AWS 에서 운영할 애플리케이션의 개발 속도를 더욱 단축할 수 있습니다. 기존에 사용 중인 IDE 에 AWS Toolkit 을 추가하거나 새로운 프로젝트를 기획하고 계시다면 AWS Cloud9 으로 보다 편리하게 AWS 서비스와 리소스에 접근하는 방식으로 개발할 수 있습니다. 새로운 도구로 멋진 결과를 얻어내시기 바랍니다!
– 안효빈, AWS 게임 솔루션즈 아키텍트