최근 진행중인 프로젝트에서 NestJS 와 React 를 통해 프로젝트를 한달간 진행 하게되었고, 일종의 1.0 알파? 버전을 배포 해야하는 상황이되었습니다. PM님 으로부터 GCP 혹은 AWS ElasticBeanstalk 로 배포시, 관리하기 쉽다는 이야기를 듣게 되었고, 그나마 AWS는 사용했던 경험도 있고 친숙하여 AWS ElasticBeanstalk 를 배포 환경으로 선택하게 되었습니다.
NestJS 는 Node.js 기반의 서버 앱 프레임워크 입니다. 내부적으로 express 를 사용하고 있으며, 높은 추상화, 모듈화 구조를 제공하여, 모듈 재사용과, 테스트가 용이하다는 장점이 있습니다. 실제 한달동안 사용해본 느낌은, 컨트롤러/서비스/레포지토리/엔티티를 모듈로 생성하여 구현 해야하며, 실제 의존성 주입은 NestJS 에 의해 이루어지는 점 등이 스프링부트와 매우 유사하다는 느낌을 갖게 만들었습니다.
플랫폼과, 구성/배포 환경을 설정하고, 앱을 아카이브 파일(.war/.zip 등) 형태로 업로하면 AWS ec2 인스턴스, RDS, 로드밸런서 등을 자동으로 구성하여 배포/관리 해주는 무료 서비스 입니다. 무료로 시작하기를 클릭하여 구성해보는 경우, 로드밸런서는 추가되지 않고 ec2 인스턴스가 마이크로 타입으로 생성됩니다. 참고로 aws 콘솔 구성 메뉴에서 인스턴스, RDS 와 로드밸런서 등을 추가/삭제 할 수 있습니다.
web: node main
NestJS 가 일반적인 express 앱 등과 다르게, 빌드 산출물에 진입점이 되는 js 파일명이 main.js 이기 때문에 정상 실행되지 않는 문제가 있었고, 배포 환경(ec2 인스턴스)에 SSL 설정을 추가 하고자 하면서 17번 재배포를 하고 디버깅 하면서 정상 배포하게 되었습니다.(로그 정보를 aws콘솔에서 제공해주지만 자세한 로그는 EB CLI 설치해서 eb ssh 커맨드로 ec2 인스턴스 접속해서 확인 하시길 바랍니다.ㅠㅠ)
배포에 실패하여 10번 정도 재배포 하니 답답합에 그냥 ec2인스턴스에 직접 Node.js를 설치하고, 수동으로 배포 환경을 구성하고 앱을 배포 하고 싶다는 생각?욕망?을 갖게 되었습니다. 그러나 이제 조금 더 스마트한 배포 방법을 사용해보고 싶다는 생각으로 견디게?되었고, 배포 구성 파일 문제를 해결하고 앱의 새로운 버전 배포등으로 30번이 넘는 배포를 해보니, 확실히 시간 절약과, 편리함을 느끼게 되었습니다~
안녕하세요
저도 nestjs를 eb에 올리는 작업을 해보고 있는데 정보도 많이 없고 잘 안되네요 ㅠㅠㅠ
혹시 조금 더 자세하게 경험 공유해주실 수 있을까요?
저의 경우 겪으셨던 것처럼 압축파일을 올리면 main.js여서 안되고 있는 듯 한데 해결 방법을 모르겠습니다 ㅠㅠ