이미지 로딩 중...

AWS 실전 프로젝트 인프라 구축 - 슬라이드 1/11
C

CodeDeck AI

2025. 11. 8. · 1 Views

AWS 실전 프로젝트 인프라 구축

AWS를 활용한 실전 프로젝트 구축 방법을 학습합니다. EC2, S3, RDS, Lambda 등 핵심 서비스를 활용하여 확장 가능한 웹 애플리케이션을 만드는 방법을 단계별로 소개합니다.


카테고리:JavaScript
언어:JavaScript
난이도:intermediate
메인 태그:#AWS
서브 태그:
#EC2#S3#Lambda#RDS

들어가며

이 글에서는 AWS 실전 프로젝트 인프라 구축에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. EC2_인스턴스_생성_및_연결
  2. S3_버킷_파일_업로드
  3. Lambda_함수_생성
  4. DynamoDB_데이터_저장
  5. RDS_MySQL_연결
  6. CloudWatch_로그_기록
  7. SQS_메시지_큐
  8. API_Gateway_REST_API
  9. Secrets_Manager_비밀_관리
  10. CloudFront_CDN_배포

1. EC2_인스턴스_생성_및_연결

개요

AWS SDK를 사용하여 EC2 인스턴스를 프로그래밍 방식으로 생성하고 관리하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const ec2 = new AWS.EC2({ region: 'ap-northeast-2' });

const params = {
  ImageId: 'ami-0c55b159cbfafe1f0',
  InstanceType: 't2.micro',
  MinCount: 1,
  MaxCount: 1
};

ec2.runInstances(params, (err, data) => {
  if (err) console.error(err);
  else console.log('Instance ID:', data.Instances[0].InstanceId);
});

설명

AWS SDK를 사용하여 t2.micro 타입의 EC2 인스턴스를 생성합니다. runInstances 메서드로 인스턴스를 시작하고 생성된 인스턴스 ID를 반환받습니다.


2. S3_버킷_파일_업로드

개요

S3 버킷에 파일을 업로드하여 정적 파일을 저장하고 관리하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const fs = require('fs');
const s3 = new AWS.S3();

const uploadParams = {
  Bucket: 'my-app-bucket',
  Key: 'uploads/image.jpg',
  Body: fs.createReadStream('./image.jpg'),
  ContentType: 'image/jpeg'
};

s3.upload(uploadParams, (err, data) => {
  if (err) console.error(err);
  else console.log('Upload URL:', data.Location);
});

설명

fs 모듈로 로컬 파일을 읽어 S3 버킷에 업로드합니다. 업로드 완료 후 파일의 공개 URL을 받아 웹에서 접근할 수 있습니다.


3. Lambda_함수_생성

개요

서버리스 Lambda 함수를 작성하여 이벤트 기반으로 코드를 실행하는 방법입니다.

코드 예제

exports.handler = async (event) => {
  const name = event.queryStringParameters?.name || 'Guest';

  return {
    statusCode: 200,
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      message: `Hello, ${name}!`,
      timestamp: new Date().toISOString()
    })
  };
};

설명

API Gateway와 연동되는 Lambda 함수로, 쿼리 파라미터에서 이름을 받아 인사 메시지를 JSON으로 반환합니다. 서버 없이 코드를 실행할 수 있습니다.


4. DynamoDB_데이터_저장

개요

NoSQL 데이터베이스인 DynamoDB에 데이터를 저장하고 조회하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB.DocumentClient();

const params = {
  TableName: 'Users',
  Item: {
    userId: '12345',
    name: 'John Doe',
    email: 'john@example.com',
    createdAt: Date.now()
  }
};

await dynamodb.put(params).promise();
console.log('User saved successfully');

설명

DocumentClient를 사용하여 DynamoDB 테이블에 사용자 정보를 저장합니다. put 메서드로 JSON 형태의 데이터를 간편하게 저장할 수 있습니다.


5. RDS_MySQL_연결

개요

RDS MySQL 데이터베이스에 연결하여 쿼리를 실행하는 방법입니다.

코드 예제

const mysql = require('mysql2/promise');

const connection = await mysql.createConnection({
  host: 'mydb.c9akgnd.ap-northeast-2.rds.amazonaws.com',
  user: 'admin',
  password: process.env.DB_PASSWORD,
  database: 'myapp'
});

const [rows] = await connection.execute(
  'SELECT * FROM users WHERE email = ?',
  ['john@example.com']
);
console.log(rows);

설명

RDS MySQL 엔드포인트에 연결하고 prepared statement를 사용하여 안전하게 쿼리를 실행합니다. 환경변수로 비밀번호를 관리합니다.


6. CloudWatch_로그_기록

개요

CloudWatch Logs를 사용하여 애플리케이션 로그를 중앙에서 관리하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const logs = new AWS.CloudWatchLogs();

const params = {
  logGroupName: '/aws/lambda/my-function',
  logStreamName: '2025/01/02/stream',
  logEvents: [{
    message: JSON.stringify({ level: 'INFO', msg: 'User login' }),
    timestamp: Date.now()
  }]
};

await logs.putLogEvents(params).promise();
console.log('Log sent to CloudWatch');

설명

CloudWatch Logs에 구조화된 로그를 전송합니다. 로그 그룹과 스트림을 지정하여 애플리케이션의 모든 로그를 중앙에서 모니터링할 수 있습니다.


7. SQS_메시지_큐

개요

SQS를 사용하여 비동기 메시지 처리 시스템을 구축하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const sqs = new AWS.SQS();

const sendParams = {
  QueueUrl: 'https://sqs.ap-northeast-2.amazonaws.com/123/my-queue',
  MessageBody: JSON.stringify({
    orderId: '67890',
    action: 'process_payment'
  })
};

await sqs.sendMessage(sendParams).promise();
console.log('Message sent to queue');

설명

SQS 큐에 메시지를 전송하여 비동기 작업을 처리합니다. 주문 처리나 이메일 발송 같은 시간이 걸리는 작업을 백그라운드에서 처리할 수 있습니다.


8. API_Gateway_REST_API

개요

API Gateway를 통해 RESTful API 엔드포인트를 생성하고 Lambda와 통합하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const apigateway = new AWS.APIGateway();

const params = {
  name: 'MyAPI',
  description: 'RESTful API for my app',
  endpointConfiguration: {
    types: ['REGIONAL']
  }
};

const api = await apigateway.createRestApi(params).promise();
console.log('API ID:', api.id);
console.log('API Endpoint:', `https://${api.id}.execute-api.ap-northeast-2.amazonaws.com`);

설명

API Gateway로 RESTful API를 생성합니다. 생성된 API는 Lambda 함수와 연동하여 서버리스 백엔드를 구축할 수 있습니다.


9. Secrets_Manager_비밀_관리

개요

AWS Secrets Manager를 사용하여 데이터베이스 비밀번호와 API 키를 안전하게 관리하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();

const params = {
  SecretId: 'prod/db/credentials'
};

const data = await secretsManager.getSecretValue(params).promise();
const secrets = JSON.parse(data.SecretString);

console.log('DB User:', secrets.username);
// DB 연결에 secrets.password 사용

설명

Secrets Manager에서 암호화된 비밀 정보를 가져옵니다. 코드에 하드코딩하지 않고 안전하게 자격 증명을 관리하고 자동 로테이션도 가능합니다.


10. CloudFront_CDN_배포

개요

CloudFront를 사용하여 정적 파일을 전 세계에 빠르게 배포하는 방법입니다.

코드 예제

const AWS = require('aws-sdk');
const cloudfront = new AWS.CloudFront();

const params = {
  DistributionConfig: {
    CallerReference: Date.now().toString(),
    Origins: {
      Quantity: 1,
      Items: [{
        Id: 'S3-my-bucket',
        DomainName: 'my-bucket.s3.amazonaws.com',
        S3OriginConfig: { OriginAccessIdentity: '' }
      }]
    },
    Enabled: true,
    Comment: 'CDN for my app'
  }
};

const dist = await cloudfront.createDistribution(params).promise();
console.log('Distribution URL:', dist.Distribution.DomainName);

설명

S3 버킷을 오리진으로 하는 CloudFront 배포를 생성합니다. 전 세계 엣지 로케이션에서 콘텐츠를 캐싱하여 사용자에게 빠르게 제공합니다.


마치며

이번 글에서는 AWS 실전 프로젝트 인프라 구축에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#AWS #EC2 #S3 #Lambda #RDS

#AWS#EC2#S3#Lambda#RDS#JavaScript

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.