클라우드 기초 – AWS로 배포 시작하기

클라우드 기초 – AWS로 배포 시작하기


클라우드 컴퓨팅은 현대 소프트웨어 개발에서 중요한 역할을 합니다. 그 중에서도 Amazon Web Services(AWS)는 가장 널리 사용되는 클라우드 플랫폼 중 하나로, 다양한 서비스를 통해 애플리케이션을 쉽게 배포하고 관리할 수 있습니다. 이번 포스팅에서는 "AWS 배포", "클라우드 기초", "클라우드 배포"를 중심으로 AWS를 사용하여 애플리케이션을 배포하는 방법을 설명하겠습니다. 중급 개발자를 대상으로 상세히 설명하고, 예제를 통해 실습해 보겠습니다.


AWS란?


Amazon Web Services(AWS)는 Amazon에서 제공하는 클라우드 컴퓨팅 서비스 플랫폼입니다. AWS는 다양한 클라우드 서비스를 제공하며, 서버, 데이터베이스, 스토리지, 네트워킹, 인공지능, 보안 등을 포함한 광범위한 기능을 지원합니다. AWS를 사용하면 물리적인 서버를 관리할 필요 없이, 필요한 자원을 유연하게 사용할 수 있습니다.


AWS 계정 생성 및 설정


1. AWS 계정 생성


AWS를 사용하려면 먼저 AWS 계정을 생성해야 합니다. AWS 공식 웹사이트에서 계정을 생성할 수 있습니다. 계정 생성 후, AWS 관리 콘솔에 로그인합니다.


2. IAM 사용자 생성


AWS 보안 모범 사례에 따라, 루트 계정 대신 IAM 사용자를 생성하여 AWS 리소스를 관리해야 합니다. IAM 사용자 생성 방법은 다음과 같습니다:


  1. AWS 관리 콘솔에서 "IAM" 서비스를 선택합니다.
  2. "사용자"를 클릭하고, "사용자 추가" 버튼을 클릭합니다.
  3. 사용자 이름을 입력하고, "프로그래밍 방식 액세스"를 선택합니다.
  4. 기존 정책 직접 연결에서 "관리형 정책"을 선택하고, "AdministratorAccess" 정책을 연결합니다.
  5. "사용자 만들기" 버튼을 클릭하여 사용자를 생성합니다.

사용자 생성 후, 액세스 키 ID와 비밀 액세스 키를 저장합니다. 이는 AWS CLI 및 SDK를 통해 AWS 리소스에 접근할 때 사용됩니다.


AWS 서비스 개요


AWS는 다양한 서비스를 제공하지만, 이번 포스팅에서는 EC2, S3, RDS를 중심으로 애플리케이션 배포를 설명하겠습니다.


Amazon EC2


Amazon EC2(Elastic Compute Cloud)는 가상 서버를 제공하는 서비스로, 사용자가 원하는 시점에 서버를 생성하고 사용할 수 있습니다.


Amazon S3


Amazon S3(Simple Storage Service)는 객체 스토리지 서비스로, 데이터를 안전하게 저장하고 관리할 수 있습니다.


Amazon RDS


Amazon RDS(Relational Database Service)는 관계형 데이터베이스를 클라우드에서 관리할 수 있는 서비스입니다.


애플리케이션 배포 예제


이제 간단한 Node.js 애플리케이션을 AWS에 배포하는 예제를 살펴보겠습니다.


1. 애플리케이션 준비


먼저, 간단한 Node.js 애플리케이션을 준비합니다. app.js 파일을 만들고 다음 코드를 작성합니다.


const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, AWS!');
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

package.json 파일을 생성하고 다음 내용을 작성합니다.


{
  "name": "aws-deploy-example",
  "version": "1.0.0",
  "description": "A simple Node.js app deployed on AWS",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

2. AWS CLI 설치 및 설정


AWS CLI(Command Line Interface)를 사용하여 AWS 리소스를 관리할 수 있습니다. AWS CLI를 설치하고, IAM 사용자 생성 시 발급받은 액세스 키를 사용하여 설정합니다.


# AWS CLI 설치
pip install awscli

# AWS CLI 설정
aws configure

3. EC2 인스턴스 생성 및 설정


EC2 인스턴스 생성


  1. AWS 관리 콘솔에서 "EC2" 서비스를 선택합니다.
  2. "인스턴스 시작" 버튼을 클릭합니다.
  3. Amazon Machine Image(AMI)로 "Amazon Linux 2 AMI"를 선택합니다.
  4. 인스턴스 유형으로 "t2.micro"를 선택합니다.
  5. "검토 및 시작"을 클릭하고, "시작" 버튼을 클릭합니다.
  6. 키 페어를 생성하여 다운로드합니다. 이 키 페어는 인스턴스에 SSH로 접속할 때 사용됩니다.

EC2 인스턴스 설정


키 페어를 사용하여 EC2 인스턴스에 SSH로 접속합니다.


ssh -i your-key-pair.pem ec2-user@your-ec2-public-ip

Node.js와 Git을 설치하고, 애플리케이션을 클론합니다.


# Node.js 설치
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
sudo yum install -y nodejs

# Git 설치
sudo yum install -y git

# 애플리케이션 클론
git clone https://github.com/your-repo/aws-deploy-example.git
cd aws-deploy-example

# 애플리케이션 설치 및 실행
npm install
npm start

보안 그룹 설정에서 인바운드 규칙을 추가하여 포트 3000을 허용합니다. 브라우저에서 EC2 인스턴스의 퍼블릭 IP와 포트 3000으로 접속하여 애플리케이션이 실행되는지 확인합니다.


4. S3에 정적 웹사이트 호스팅


Amazon S3를 사용하여 정적 웹사이트를 호스팅할 수 있습니다. 간단한 정적 웹사이트 파일을 준비하고 S3 버킷에 업로드합니다.


  1. AWS 관리 콘솔에서 "S3" 서비스를 선택합니다.
  2. "버킷 만들기" 버튼을 클릭하고, 버킷 이름을 입력합니다.
  3. 버킷을 생성한 후, 정적 웹사이트 파일을 업로드합니다.
  4. "속성" 탭에서 "정적 웹사이트 호스팅"을 선택하고, 인덱스 문서와 오류 문서를 설정합니다.
  5. 버킷 정책을 설정하여 퍼블릭 액세스를 허용합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

S3 버킷의 엔드포인트 URL을 통해 정적 웹사이트에 접속할 수 있습니다.


5. RDS에 데이터베이스 설정


Amazon RDS를 사용하여 관계형 데이터베이스를 설정합니다.


  1. AWS 관리 콘솔에서 "RDS" 서비스를 선택합니다.
  2. "데이터베이스 생성" 버튼을 클릭합니다.
  3. 데이터베이스 엔진으로 "MySQL"을 선택합니다.
  4. 데이터베이스 인스턴스 사양을 설정합니다(t2.micro).
  5. 데이터베이스 설정에서 마스터 사용자 이름과 비밀번호를 입력합니다.
  6. 데이터베이스 인스턴스를 생성한 후, 보안 그룹 설정에서 인바운드 규칙을 추가하여 MySQL 포트(3306)를 허용합니다.

Node.js 애플리케이션에서 RDS 데이터베이스에 접속하여 데이터를 읽고 쓰는 기능을 추가할 수 있습니다.


const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'your-rds-endpoint',
  user: 'your-username',
  password: 'your-password',
  database: 'your-database-name'
});

connection.connect((err) => {
  if (err) throw err;
  console.log('Connected to RDS database');
});

AWS 배포 시 유의사항


  1. 보안: IAM 사용자와 역할을 적절히 설정하여 최소 권한 원칙을 따릅니다. 보안 그룹과 네트워크 ACL을 사용하여 인바운드 및 아웃바운드 트래픽을 제어합니다.
  2. 비용 관리: AWS 서비스 사용량을 모니터링하고, 비용을 최적화할 수 있는 방법을 고려합니다. 불필요한 리소스를 중지하거나 삭제합니다.
  3. 모니터링: AWS CloudWatch를 사용하여 리소스 모니터링 및 로그 관리를 설정합니다. 애플리케이션의 성능과 가용성을 지속적으로 모니터링합니다.
  4. 백업: RDS 데이터베이스와 같은 중요한 데이터를 정기적으로 백업합니다. S3 버킷의 데이터도 버전 관리와 백업 정책을 설정합니다.

결론


AWS는 다양한 클라우드 서비스를 통해 애플리케이션을 쉽게 배포하고 관리할 수 있는 강력한 플랫폼입니다. 이번 포스팅에서는 AWS를 사용하여 간단한 Node.js 애플리케이션을 EC2 인스턴스에 배포하고, S3를 사용하여 정적 웹사이트를 호스팅하며, RDS를 사용하여 데이터베이스를 설정하는 방법을 설명했습니다. 이러한 기초 지식을 바탕으로 더 복잡한 애플리케이션을 AWS에 배포하고 관리할 수 있습니다.

이 포스팅이 AWS를 활용한 애플리케이션 배포를 이해하는 데 도움이 되길 바랍니다. 질문이나 추가 정보가 필요하시면 언제든지 댓글로 남겨주세요.

다음 이전