이미지 로딩 중...
CodeDeck AI
2025. 11. 8. · 1 Views
AWS 실전 프로젝트 인프라 구축
AWS를 활용한 실전 프로젝트 구축 방법을 학습합니다. EC2, S3, RDS, Lambda 등 핵심 서비스를 활용하여 확장 가능한 웹 애플리케이션을 만드는 방법을 단계별로 소개합니다.
들어가며
이 글에서는 AWS 실전 프로젝트 인프라 구축에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- EC2_인스턴스_생성_및_연결
- S3_버킷_파일_업로드
- Lambda_함수_생성
- DynamoDB_데이터_저장
- RDS_MySQL_연결
- CloudWatch_로그_기록
- SQS_메시지_큐
- API_Gateway_REST_API
- Secrets_Manager_비밀_관리
- 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