728x90
반응형

TypeScript 애플리케이션을 개발하고 배포할 때는 두 가지 주요 방식이 있습니다: 컴파일된 JavaScript 코드를 실행하는 것과 TypeScript 코드를 직접 실행하는 것입니다. 이 글에서는 각 방법의 차이점과 설정 방법에 대해 설명하고, 이를 위해 필요한 도구와 예시 코드를 제공합니다.

컴파일된 코드 vs TypeScript 직접 실행

1. 컴파일된 코드 실행

  • TypeScript 코드를 JavaScript로 컴파일한 후, 컴파일된 JavaScript 파일을 실행합니다.
  • 일반적으로 프로덕션 환경에서 사용됩니다.
  • 장점: 실행 속도가 빠르고, JavaScript 환경과 호환성이 높습니다.
  • 도구: PM2 (실제로 Node.js를 사용하여 애플리케이션을 실행합니다)

2. TypeScript 직접 실행

  • TypeScript 코드를 직접 실행하여, 개발 과정에서 즉시 결과를 확인할 수 있습니다.
  • 주로 개발 환경에서 사용됩니다.
  • 장점: 코드 변경 시 바로 반영되어 빠른 피드백을 받을 수 있습니다.
  • 도구: nodemon, ts-node

PM2 설정 (프로덕션 환경)

PM2는 프로덕션 환경에서 애플리케이션을 관리하고 모니터링하는 데 사용됩니다. TypeScript 코드를 JavaScript로 컴파일한 후, 컴파일된 파일을 실행합니다.

ecosystem.config.json 예시

{
  "apps": [
    {
      "name": "example",
      "script": "node -r dotenv/config ./dist/src/index.js",
      "watch": true,
      "ignore_watch": ["config", "logs", "node_modules", "public", "src"],
      "env": {
        "PORT": 4000,
        "NODE_ENV": "production"
      }
    }
  ]
}
  • script: 컴파일된 JavaScript 파일 경로.
  • watch: 파일 변경 감시.
  • ignore_watch: 감시에서 제외할 디렉토리.
  • env: 환경 변수 설정.

Nodemon 설정 (개발 환경)

Nodemon은 파일 변경을 감시하고, TypeScript 파일을 직접 실행하여 개발 중 변경 사항을 즉시 반영합니다. ts-nodetsconfig-paths를 사용하여 TypeScript 경로 매핑 문제를 해결할 수 있습니다.

nodemon.json 예시

{
  "watch": ["src"],
  "ext": "ts,json",
  "exec": "ts-node -r tsconfig-paths/register -r dotenv/config ./src/index.ts"
}
  • watch: 감시할 디렉토리 목록.
  • ext: 감시할 파일 확장자.
  • exec: 파일 변경 시 실행할 명령어.

NestJS와 경로 설정

NestJS 프로젝트는 nest start 명령어를 사용하여 서버를 시작합니다. 이는 NestJS의 CLI(Command Line Interface)를 통해 제공되는 명령어로, 프로젝트의 main.ts 파일을 실행하여 서버를 시작합니다. NestJS는 내부적으로 필요한 설정을 자동으로 처리하여 개발자가 직접 경로를 설정하지 않아도 됩니다.

NestJS 프로젝트의 동작 방식

  1. Nest CLI:
    • nest start 명령어는 Nest CLI를 사용하여 프로젝트를 시작합니다.
    • CLI는 main.ts 파일을 찾아 실행합니다.
    • TypeScript 파일을 직접 실행하기 위해 ts-node를 사용합니다.

예시: NestJS 프로젝트의 main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

PM2와 NestJS CLI 사용하는 방식

NestJS 프로젝트에서 PM2를사용할 수 있습니다. NestJS의 실행 파일을 사용하여 애플리케이션을 시작할 수 있습니다.

PM2 설정

PM2를 사용하여 NestJS 애플리케이션을 프로덕션 환경에서 실행하려면, dist 디렉토리에 컴파일된 JavaScript 파일을 실행합니다.

ecosystem.config.js 예시

module.exports = {
  apps: [
    {
      name: 'nestjs-app',
      script: 'dist/main.js',
      watch: false,
      env: {
        NODE_ENV: 'production',
      },
    },
  ],
};

NestJS CLI를 사용하여 자동 재시작 설정

NestJS CLI의 --watch 옵션을 사용하면, 파일 변경을 감지하고 자동으로 서버를 재시작할 수 있습니다. 이를 위해 다음 명령어를 터미널에서 실행합니다:

nest start --watch

이 명령어는 파일 변경을 감지하고, 변경이 있을 때마다 서버를 자동으로 재시작합니다.

결론

TypeScript 애플리케이션을 개발하고 배포할 때, 컴파일된 코드를 실행할지 또는 TypeScript 코드를 직접 실행할지에 따라 설정 방법이 다릅니다. 프로덕션 환경에서는 PM2를 사용하여 컴파일된 코드를 실행하고, 개발 환경에서는 nodemon을 사용하여 TypeScript 파일을 직접 실행하는 것이 일반적입니다. 이를 통해 각 환경에 최적화된 개발 및 배포 프로세스를 구축할 수 있습니다.

NestJS CLI를 사용하면 경로 설정, 환경 변수 로드, 빌드 및 실행 등 다양한 작업을 자동으로 처리해 주기 때문에 개발자는 더욱 편리하게 개발할 수 있습니다. 이를 통해 TypeScript 애플리케이션의 개발 및 배포 과정을 더욱 효율적으로 관리할 수 있을 것입니다.

반응형