🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

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

CodeDeck AI

2025. 11. 8. · 31 Views

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

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


카테고리:JavaScript
언어:JavaScript
메인 태그:#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)

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