Skip to content

feat(infra): initialize production Terraform and server deployment setup#48

Merged
Nohgh merged 3 commits into
mainfrom
feat/infra-structure
Jul 3, 2026
Merged

feat(infra): initialize production Terraform and server deployment setup#48
Nohgh merged 3 commits into
mainfrom
feat/infra-structure

Conversation

@Nohgh

@Nohgh Nohgh commented Jul 3, 2026

Copy link
Copy Markdown
Owner

개요

  • apps/server의 컨테이너화 배포 체계를 구축하고, 프로덕션 환경의 AWS 배포를 위한 기초 인프라(Terraform) 설정을 정의합니다.
  • 특히 AWS EC2 Graviton(ARM64) 환경에 적합한 빌드 파이프라인(Webpack을 이용한 모노레포 패키지 인라인화 및 Slim 베이스 Docker 빌드)을 설계하고, 원격 상태 협업을 위한 S3 백엔드를 초기화합니다.

작업 내용

1. 백엔드 서버 헬스체크 API 구현

  • 관련 파일: apps/server/src/health/health.controller.ts, apps/server/src/app.module.ts
  • 상세: AWS ALB(Application Load Balancer)가 서버 컨테이너의 활성화 여부를 빠르게 판별(Liveness)할 수 있도록 가벼운 /health API 엔드포인트를 신규 생성하고 헬스체크를 위해 API Throttle 제한을 바이패스하도록 @SkipThrottle() 데코레이터를 적용했습니다.

2. 모노레포 로컬 패키지 인라인을 위한 Webpack 빌드 설정

  • 관련 파일: apps/server/webpack.config.js, apps/server/package.json
  • 상세: 모노레포 환경에서 백엔드 서버가 @dookmark/*와 같은 공유 라이브러리를 상대 경로로 참조할 때 런타임에서 모듈 로드 에러가 나는 문제를 해결하기 위해, 빌드 시 해당 패키지 소스 코드를 빌드 결과물(dist/main.js) 내부에 인라인화하는 Webpack 설정을 도입했습니다.

3. 배포용 Dockerfile 추가 (ARM64 Graviton 타겟)

  • 관련 파일: apps/server/Dockerfile
  • 상세: AWS EC2의 Graviton 인스턴스(ARM64)에 최적화하여 작동할 수 있도록 node:22.13.0-slim 기반의 멀티스테이지 Dockerfile을 작성했습니다. Prisma ORM 구동에 필요한 OpenSSL과 외부 아웃바운드 API용 보안 인증서를 설치하도록 설정했습니다.

4. 프로덕션 환경의 Terraform 백엔드 및 프로바이더 설정

  • 관련 파일: infra/terraform/envs/prod/provider.tf, infra/terraform/envs/prod/versions.tf
  • 상세: AWS 서울 리전(ap-northeast-2)에 리소스를 배포하기 위한 Terraform 기초 환경을 구성했습니다. 협업 및 상태 관리를 위한 원격 상태 백엔드(S3) 설정을 완료했으며, Terraform 1.11+ 정식 스펙인 use_lockfile = true를 사용하여 별도의 DynamoDB 잠금 테이블 없이 S3 네이티브 파일 잠금 메커니즘을 사용하도록 최적화했습니다.

검증 결과

  • Test Files: -
  • Tests: -
  • Webpack을 이용한 NestJS 빌드 (pnpm --filter server build) 로컬 통과
  • 도커 빌드 파이프라인 구성 검증 완료
  • tsc --noEmit 통과
  • biome check (또는 lint/format) 통과

비고

  • 실제 원격 S3 백엔드 버킷을 생성하기 위한 AWS CLI 가이드 문서를 docs/guides/terraform-s3-backend-locking.md에 보완해 두었으며, 이를 통해 버킷을 선제 생성해야 테라폼 실행이 가능합니다.
  • 다음 단계에서는 이 설정을 기반으로 본격적인 AWS 네트워크 모듈(VPC, Subnet, Route Table) 리소스를 생성하는 테라폼 작업을 진행할 예정입니다.

@Nohgh Nohgh added the feat label Jul 3, 2026
@Nohgh
Nohgh merged commit 4939e79 into main Jul 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant