Skip to content

v1.2

Latest
Compare
Choose a tag to compare
@J-Hoplin J-Hoplin released this 17 Feb 16:49
· 13 commits to dev since this release

Update

  • 로컬 환경에서 동작할 수 있도록 변경하였습니다. 애플리케이션에서 활용하는 Queue를 AWS SQS 뿐만 아니라 Rabbit MQ도 추가하였습니다.(운용비용 절감 측면, 환경 다양성 지원)
    • 이제 AWS 배포를 필수적으로 하지 않아도, 단순히 Docker Compose 환경에서 전체(Worker포함) 애플리케이션을 실행할 수 있습니다.(단 채점 서버 제외)
    • 이에 따라 기존 libs/aws-sqs 라이브러리가 삭제되고 libs/queue 라이브러리가 추가되었습니다. Nest.js 코드는 Strategy Pattern기반의 Custom Provider형태로 설계되어있습니다.
    yarn docker:build
    
    yarn docker:up
    
  • 위 추가사항에 따라 Nest.js Bootstrap Function(main.ts)에 변화가 있습니다. 설정한 환경에 맞게끔 Nest.js Webserver application 혹은 Nest.js Microservice application이 실행됩니다.
  • WokerModule의 Controller는 AWS SQS Worker, Rabbit MQ Worker가 통합적으로 사용합니다.
    • Elastic Beanstalk Worker는 기존처럼 Route를 POST /worker로 지정하면 됩니다.
    • Rabbit MQ Worker는 Nest.js Microservice의 @MessagePattern를 활용하여 Message 패턴에 따른 Handler가 정의됩니다.

.env설정하기

무엇보다 변경된것은 .env의 활용성입니다. Rabbit MQ Worker를 지원하면서 실행 애플리케이션의 설정값이 중요해졌습니다. 중요 필드는 TYPE, QUEUE_TYPE 입니다.

AWS Environment

AWS 배포환경에서는 (Web server, Worker모두 포함) 각각 아래와 같이 설정해줍니다

TYPE="webserver"

...

QUEUE_TYPE="SQS"

...

이는 AWS Elastic Beanstalk Worker는 Webserver형태의 애플리케이션으로 Queue Item을 전송하기 때문입니다(Docs).

Docker Environment

Docker 환경에서는 Web server, Worker 각각 다른 설정을 해줘야 합니다. 각각의 값은 BootstrapWorkerModule 그리고 QueueModule에 모두 영향을 주기 때문에, 애플리케이션 실행하기 전에 확인을 꼭 해주셔야합니다.

[ Webserver ]

TYPE="webserver"

...

QUEUE_TYPE="RMQ"

[ Worker ]

TYPE="worker"

...

QUEUE_TYPE="RMQ"

Next Update

다음 업데이트 사항은 Hashicorp Vault를 적용하는 것입니다. 관리해야하는 환경변수가 많아지고, 프런트엔드와 협업, 실제 배포환경에서 일관성과 키값 노출 방지를 위해서 Vault를 적용할 예정입니다.