투케이2K

91. (Aws/Amazon) [Amazon Elastic Compute Cloud] EC2 웹서버 구성 프로세스 및 절차 정리 본문

Aws (Amazon)

91. (Aws/Amazon) [Amazon Elastic Compute Cloud] EC2 웹서버 구성 프로세스 및 절차 정리

투케이2K 2025. 7. 18. 19:58
728x90
반응형

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / EC2 / 가상 서버 / 웹 서버


- 사전) EC2 간단 설명 정리 : 

  >> Aws EC2 란 AWS 클라우드에서 온디맨드 확장 가능 컴퓨팅 용량을 제공하는 서비스입니다

  >> Aws EC2 의 기능 : 

    - 인스턴스 : 가상 서버

    - Amazon Machine Images (AMIs) : 서버에 필요한 구성 요소(운영 체제와 추가 소프트웨어 포함)를 패키징하는 인스턴스용 사전 구성 템플릿

    - 인스턴스 타입 : 인스턴스의 다양한 CPU, 메모리, 스토리지, 네트워킹 용량 및 그래픽 하드웨어 구성

    - Amazon EBS 볼륨 : Amazon Elastic Block Store(Amazon EBS)를 사용하는 데이터에 대한 영구 스토리지 볼륨

    - 인스턴스 스토어 볼륨 : 인스턴스를 중단, 최대 절전 모드로 전환 또는 종료할 때 삭제되는 임시 데이터용 스토리지 볼륨

    - 키 페어 : 인스턴스에 대한 보안 로그인 정보. AWS는 퍼블릭 키를 저장하고 사용자는 프라이빗 키를 안전한 장소에 저장합니다

    - 보안 그룹 : 인스턴스에 도달할 수 있는 프로토콜, 포트 및 소스 IP 범위와 인스턴스가 연결할 수 있는 대상 IP 범위를 지정할 수 있는 가상 방화벽

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[1] : EC2 인스턴스 생성
// --------------------------------------------------------------------------------------

1. AWS 콘솔에 로그인 후 EC2 서비스로 이동


2. 인스턴스 시작 > Amazon Linux 또는 Ubuntu 선택


3. 인스턴스 유형 선택 (예 : t2.micro - 프리 티어)


4. 키 페어 생성 및 다운로드 (SSH 접속용)


5. 보안 그룹 설정:

  >> 포트 22 (SSH)

  >> 포트 80 (HTTP)

  >> 포트 443 (HTTPS, 필요 시)

  >> 포트 3000 (Node.js 기본 포트, 필요 시)

// --------------------------------------------------------------------------------------
[2] : EC2 인스턴스에 SSH 접속
// --------------------------------------------------------------------------------------

1. AWS 콘솔을 통한 웹 기반 접속과 Putty 같은 외부 SSH 클라이언트를 사용하는 방법 모두 가능

  >> EC2 보안 그룹에서 **포트 22 (SSH)**가 열려 있어야 접속 가능합니다

  >> 접속이 안 될 경우, IP 주소나 키 파일 경로, 사용자 이름(ec2-user/ubuntu)을 확인이 필요합니다

  >> Amazon Linux : ec2-user

  >> Ubuntu : ubuntu


2. AWS 콘솔에서 접속 (브라우저 기반) : 

  >> AWS EC2 대시보드에서 인스턴스를 선택

  >> 상단 메뉴에서 "연결" 클릭

  >> "EC2 Instance Connect" → 브라우저 기반 SSH 접속

  >> 별도의 설정 없이 바로 접속 가능 (단, Amazon Linux 또는 Ubuntu에서만 지원)


3. Putty를 통한 SSH 접속 (Windows 사용자)

  >> 사전) 준비 사항

    - EC2 생성 시 받은 .pem 키 파일

    - Putty 설치: https://www.putty.org

  >> .pem 파일을 > .ppk 로 변환 (Putty 용 키)

    - Puttygen 실행

    - Load 클릭 > .pem 파일 선택

    - Save private key > .ppk 파일 저장

  >> Putty 로 접속

    - Host Name : ec2-user@<EC2 Public IP> (Amazon Linux) 또는 ubuntu@<EC2 Public IP> (Ubuntu)

    - Port : 22 (SSH 접속 포트)

    - Connection > SSH > Auth > .ppk 파일 선택

    - Open 클릭 > SSH 접속 성공


4. 참고 : 일반 SSH 클라이언트 (Mac/Linux/WSL)

  >> ssh -i "your-key.pem" ec2-user@<EC2 Public IP>

  >> chmod 400 your-key.pem

// --------------------------------------------------------------------------------------
[3] : Node.js 및 npm 설치 (전역(Global) 설치)
// --------------------------------------------------------------------------------------

1. Node.js와 npm은 시스템 전체에서 사용할 수 있는 실행 환경을 제공하기 때문에, 특정 프로젝트 폴더가 아닌 EC2 인스턴스 전체에 설치해야 합니다

  >> Node.js 설치 시 npm 도 자동으로 설치됩니다

  >> 이후에는 npm install 명령어만 사용하면 됩니다 (node 프로젝트에서 개별 사용 중 인 라이브러리 다운로드)


2. Amazon Linux 기준 설치 예시 : 

  >> curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -

  >> sudo yum install -y nodejs


3. Ubuntu 기준 설치 예시 : 

  >> curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

  >> sudo apt-get install -y nodejs


4. 설치 후 확인 방법 : 

  >> node -v

  >> npm -v

// --------------------------------------------------------------------------------------
[4] : Node.js 프로젝트 경로 생성 및 웹 서버 코드 업로드

// --------------------------------------------------------------------------------------

1. 홈 디렉토리로 이동

  >> cd ~


2. 프로젝트 폴더 생성

  >> mkdir my-node-project

  >> cd my-node-project


3. Git 에서 프로젝트 클론

  >> git clone https://github.com/your-repo.git .

  >> .을 붙이면 현재 디렉토리에 바로 클론됩니다


4. 참고 : 여러 프로젝트를 운영할 경우, /home/ec2-user/projects/ 같은 상위 폴더를 만들어 관리하면 더욱 효율적 관리 가능


5. 참고 : 로컬에서 scp 로 프로젝트 업로드도 가능합니다

  >> scp -i "your-key.pem" -r ./your-app-folder ec2-user@your-ec2-public-ip:/home/ec2-user/projects/

// --------------------------------------------------------------------------------------
[5] : Node.js 프로젝트에서 사용 중 인 라이브러리 모듈 설치 진행
// --------------------------------------------------------------------------------------

1. AWS Linux (또는 다른 리눅스 서버) 에 Node.js를 설치한 후, 웹 애플리케이션에서 사용하는 라이브러리들은 별도로 설치해야 합니다

  >> Node.js는 런타임만 제공할 뿐, 여러분의 프로젝트에서 사용하는 라이브러리(예: express, mongoose, axios 등)는 package.json에 정의된 대로 직접 설치해야 합니다


2. Node.js 프로젝트에서 사용 중 인 라이브러리 모듈 설치 : 

  >> 프로젝트 폴더로 이동


  >> npm install 실행 > 필요한 라이브러리 설치

    - npm install 명령은 package.json 파일을 읽고, 필요한 모든 라이브러리를 node_modules 폴더에 설치합니다

    - 프로젝트 예시 구조 : 

      your-app/
      ├── app.js
      ├── package.json
      └── node_modules/   ← npm install 후 생성됨

    - package.json 예시 : 

      {
        "name": "my-app",
        "version": "1.0.0",
        "main": "app.js",
        "dependencies": {
          "express": "^4.18.2",
          "mongoose": "^7.0.0"
        }
      }

    - npm install 을 실행하면 express 와 mongoose 가 자동으로 설치됩니다

    - 만약 package.json 이 없는 경우는 직접 필요한 라이브러리를 설치해야 합니다 

      * npm install express

      * npm install mongoose

// --------------------------------------------------------------------------------------
[6] : Node.js 프로젝트 실행 및 웹서버 구동
// --------------------------------------------------------------------------------------

1. Node.js 프로젝트로 이동 후 서버 실행 수행 : 

  >> cd your-app-folder

  >> npm install

  >> node app.js (node app.js 또는 npm start 로 서버 실행)


2. 참고 : 백그라운드 실행 pm2 사용 (애플리케이션 실행 관리)

  >> npm install -g pm2

  >> pm2 start app.js

  >> pm2 startup

  >> pm2 save

// --------------------------------------------------------------------------------------
[7] : 보안 그룹 및 방화벽 확인 및 웹서버 동작 확인
// --------------------------------------------------------------------------------------

1. EC2 보안 그룹에서 포트 3000 또는 사용 중인 포트가 열려 있는지 확인


2. 브라우저에서 http://your-ec2-public-ip:3000 접속 시도

// --------------------------------------------------------------------------------------
[+] : 참고 추가 사항 정리 (안정적 운영)
// --------------------------------------------------------------------------------------

1. 로그 관리 : 

  >> pm2 logs 또는 console.log 를 파일로 리디렉션

  >> CloudWatch Logs 연동도 가능


2. 도메인 연결 및 Reverse Proxy (선택 사항)

  >> 도메인 구매 및 DNS 설정

    - 도메인을 구매한 곳 (예 : 가비아, 후이즈, Namecheap, GoDaddy) 에서 DNS 설정을 변경합니다.

    - A 레코드를 EC2의 공인 IP 주소로 설정합니다.


  >> EC2에 Nginx 설치 및 Reverse Proxy 설정 (Nginx를 사용해 포트 80/443으로 연결)

    - Nginx 설치 : 

      * sudo yum install nginx -y   # Amazon Linux
      * sudo systemctl start nginx
      * sudo systemctl enable nginx

    - Nginx 설정 파일 수정 : 

      * sudo nano /etc/nginx/conf.d/default.conf

        server {
            listen 80;
            server_name example.com www.example.com;

            location / {
                proxy_pass http://localhost:3000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
            }
        }


  >> SSL 인증서 설치 (Let's Encrypt)

    - Certbot 설치 : 

      * sudo yum install -y certbot python3-certbot-nginx

    - 인증서 발급 및 자동 설정 : 

      * sudo certbot --nginx -d example.com -d www.example.com
      * 도메인 이름은 실제 구매한 도메인으로 변경하세요.
      * 성공하면 Nginx 설정이 자동으로 HTTPS로 바뀝니다.


  >> 인증서 자동 갱신 설정

    - sudo crontab -e


  >> 접속 테스트

    - 브라우저에서 https://example.com 접속

    - 인증서가 적용되었는지 확인


3. 보안 강화

  >> SSH 키 관리 (루트 접근 제한, 키 교체 주기)

  >> UFW 또는 iptables로 추가 방화벽 설정 (Ubuntu에서 사용 가능)

  >> 필요 없는 포트는 닫기


4. 자동 백업 및 모니터링 (선택 사항)

  >> EC2 스냅샷

  >> CloudWatch 로 CPU, 메모리, 디스크 모니터링

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[Amazon Elastic Compute Cloud] EC2 개념 및 설명 정리

https://blog.naver.com/kkh0977/223733098795?trackingCode=blog_bloghome_searchlist


[Amazon EC2 인스턴스 유형]

https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-types.html

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments