백엔드/Node.js

[Node.js] Express 서버 클라우드(AWS)에 배포하기_GPT-4o

순코딩 2024. 10. 29. 11:29

Express 서버를 클라우드에 배포하는 방법은 여러 가지가 있습니다. AWS, Heroku, Vercel, DigitalOcean 등 다양한 클라우드 플랫폼에서 Express 애플리케이션을 배포할 수 있습니다. 이 중 **AWS EC2**를 사용한 배포 과정을 단계별로 설명하겠습니다.

### AWS EC2를 사용하여 Express 서버 배포하기

1. **AWS 계정 생성**:
   - 먼저, [AWS 공식 사이트](https://aws.amazon.com/)에 가서 계정을 생성합니다. 이미 계정이 있다면, 로그인합니다.

2. **EC2 인스턴스 생성**:
   EC2(Elastic Compute Cloud)는 AWS에서 제공하는 가상 서버입니다.
   
   1. **EC2 대시보드로 이동**:
      - AWS 콘솔에서 `EC2`를 검색하여 이동합니다.
   
   2. **인스턴스 시작**:
      - `인스턴스 시작` 버튼을 클릭하여 새로운 EC2 인스턴스를 생성합니다.
   
   3. **AMI(Amazon Machine Image) 선택**:
      - Amazon Linux 2, Ubuntu, Debian 등 원하는 운영체제를 선택합니다. 일반적으로는 **Amazon Linux 2** 또는 **Ubuntu**를 선택하는 것이 좋습니다.
   
   4. **인스턴스 유형 선택**:
      - 프리 티어 사용자라면 `t2.micro`를 선택하여 무료로 사용할 수 있습니다.

   5. **키 페어 생성**:
      - 새로운 키 페어를 생성하고 다운로드합니다. 이 키 파일은 이후에 서버에 SSH로 접속할 때 사용됩니다. `.pem` 파일을 안전하게 저장하세요.
   
   6. **네트워크 설정**:
      - 기본 설정으로 진행하거나, 필요에 따라 보안 그룹에서 인바운드 규칙을 수정하여 **HTTP(포트 80)**와 **SSH(포트 22)** 트래픽을 허용하도록 합니다.

   7. **스토리지 설정**:
      - 기본 8GB를 사용할 수 있으며, 필요에 따라 조정합니다.

   8. **인스턴스 시작**:
      - 설정을 완료한 후 **인스턴스 시작**을 클릭하여 EC2 인스턴스를 실행합니다.

3. **EC2 인스턴스에 SSH로 접속**:
   - 인스턴스가 실행되면, 해당 인스턴스의 **퍼블릭 IP 주소**를 확인합니다.
   - 터미널에서 다음 명령어로 EC2에 SSH 접속을 합니다.

   ```bash
   ssh -i /path/to/your-key.pem ec2-user@your-ec2-public-ip
   ```

   > `/path/to/your-key.pem` 부분에는 생성한 `.pem` 파일의 경로를 넣고, `your-ec2-public-ip` 부분에는 EC2 인스턴스의 퍼블릭 IP 주소를 입력합니다.

4. **Node.js와 npm 설치**:
   - SSH로 접속한 후, 서버에 Node.js와 npm을 설치합니다. Amazon Linux 2에서는 다음 명령어로 설치할 수 있습니다:

   ```bash
   curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
   sudo yum install -y nodejs
   ```

   설치가 완료되면 다음 명령어로 Node.js와 npm이 제대로 설치되었는지 확인합니다.

   ```bash
   node -v
   npm -v
   ```

5. **Express 애플리케이션 코드 업로드**:
   - 로컬에서 작성한 Express 애플리케이션을 EC2 서버로 업로드하는 방법에는 여러 가지가 있습니다. 가장 일반적인 방법 중 하나는 **Git**을 사용하는 것입니다.

   1. **Git 설치** (EC2 서버에서):
   
      ```bash
      sudo yum install git -y
      ```

   2. **로컬 애플리케이션을 Git 저장소에 푸시**:
      - Express 애플리케이션이 있는 디렉토리에서 Git을 초기화하고, 원격 저장소에 푸시합니다.

      ```bash
      git init
      git remote add origin <your-repository-url>
      git add .
      git commit -m "Initial commit"
      git push origin master
      ```

   3. **EC2 서버에서 애플리케이션 클론**:
      - EC2 서버에서 Git 저장소를 클론합니다.

      ```bash
      git clone <your-repository-url>
      cd your-repository-directory
      ```

6. **npm 패키지 설치**:
   - Express 서버 코드가 EC2 서버에 업로드되면, 필요한 패키지를 설치합니다.

   ```bash
   npm install
   ```

7. **Express 서버 실행**:
   - 기본적으로, Express 서버는 로컬 환경에서 `localhost:3000`과 같은 주소에서 실행되지만, 클라우드 환경에서는 EC2 인스턴스의 퍼블릭 IP를 사용해야 합니다. `server.js`나 `app.js` 파일에서 아래와 같이 `process.env.PORT`를 사용할 수 있도록 설정합니다.

   ```javascript
   const port = process.env.PORT || 3000;
   app.listen(port, () => {
     console.log(`Server is running on port ${port}`);
   });
   ```

   그런 다음 서버를 실행합니다.

   ```bash
   node app.js
   ```

8. **서버를 외부에서 접근 가능하도록 설정**:
   - Express 서버는 `localhost`에서 실행되므로 외부에서 접근하려면 인바운드 보안 그룹에서 포트를 열어야 합니다.
   - EC2 인스턴스의 **보안 그룹** 설정에서 인바운드 규칙에 **HTTP(포트 80)** 규칙을 추가하여 웹 트래픽을 허용합니다.
   
9. **서버를 백그라운드에서 실행 (PM2 사용)**:
   - 서버가 터미널을 닫을 때마다 종료되지 않도록, **PM2**를 사용하여 Express 서버를 백그라운드에서 실행할 수 있습니다.

   ```bash
   sudo npm install -g pm2
   pm2 start app.js
   pm2 startup  # 서버 재부팅 시 자동 실행 설정
   pm2 save
   ```

10. **도메인 연결 및 HTTPS 설정 (선택 사항)**:
    - 서버에 **도메인**을 연결하고, **HTTPS**(SSL 인증서)를 설정하려면 **Nginx**를 사용하거나 **Let’s Encrypt**로 SSL 인증서를 무료로 설치할 수 있습니다.

---

### 결론

이 과정은 **AWS EC2**를 사용하여 Express 서버를 배포하는 단계별 방법입니다. AWS 외에도 **Heroku**, **Vercel**, **DigitalOcean** 등 다양한 클라우드 플랫폼에서 배포할 수 있습니다. 각 플랫폼은 배포 프로세스가 약간 다르지만, 기본적인 원리는 비슷합니다.

**a.** Nginx를 사용한 EC2의 Express 서버 리버스 프록시 설정 방법  
**b.** Heroku를 사용하여 Express 서버를 배포하는 방법