AWS CloudFormation
AWS CloudFormation은 AWS 리소스를 코드로 정의하고 자동으로 프로비저닝, 구성, 그리고 관리할 수 있게 해주는 서비스입니다. 이 서비스를 이용하면 인프라를 템플릿 형식으로 정의하고, 이 템플릿을 통해 여러 AWS 리소스를 빠르고 일관되게 배포할 수 있습니다.
주요 개념 및 기능
- 템플릿
CloudFormation 템플릿은 JSON 또는 YAML 형식으로 작성되며, 리소스를 정의하는 청사진 역할을 합니다. 템플릿에는 인스턴스, 보안 그룹, 데이터베이스, 네트워크 설정 등 필요한 AWS 리소스의 구성과 속성이 담겨 있습니다. - 스택
템플릿으로 생성된 리소스의 집합을 스택이라고 합니다. 예를 들어, 웹 애플리케이션에 필요한 EC2 인스턴스, VPC, RDS를 템플릿에 정의하고 이를 배포하면 해당 리소스들이 포함된 스택이 생성됩니다. 이 스택은 한꺼번에 배포, 수정, 삭제가 가능해 인프라 관리가 용이합니다. - 인프라 코드(IaC)
CloudFormation은 인프라를 코드로 정의하는 인프라 코드(Infrastructure as Code) 방식을 따릅니다. 이를 통해 코드 변경을 통해 인프라를 쉽게 업데이트할 수 있으며, 모든 변경 내역을 관리하고 버전 관리를 통해 신속히 배포 환경을 복구하거나 수정할 수 있습니다. - 파라미터와 조건
CloudFormation 템플릿은 파라미터와 조건을 지원해 유연성을 제공합니다. 파라미터를 사용하면 템플릿에서 동적인 값을 받아 환경에 맞게 리소스를 구성할 수 있고, 조건을 이용해 특정 리소스를 선택적으로 배포할 수도 있습니다. - 종속성 관리 및 롤백
CloudFormation은 리소스 간 종속성을 자동으로 감지해 올바른 순서로 리소스를 생성하고, 생성 중 문제가 발생하면 이전 상태로 자동으로 롤백하여 안정성을 보장합니다. - 출력 값 (Outputs)
템플릿에서는 출력 값을 정의해 스택에서 생성한 리소스의 ID, 엔드포인트 주소, 또는 기타 유용한 정보를 반환할 수 있습니다. 출력 값은 다른 스택 간 데이터 공유에도 사용할 수 있어 활용도가 높습니다.
CloudFormation의 주요 이점
- 자동화: 코드만으로 인프라를 배포, 업데이트, 삭제할 수 있어 수작업을 줄이고 일관성을 유지합니다.
- 재사용 가능성: 템플릿을 통해 여러 환경에 동일한 구성을 손쉽게 배포할 수 있어 환경 간 차이를 줄일 수 있습니다.
- 비용 관리: 미사용 리소스를 포함한 스택을 쉽게 삭제하여 비용을 절감할 수 있습니다.
- 감사 및 버전 관리: CloudFormation은 AWS 리소스 변경 사항을 코드로 남기므로 모든 인프라 변경을 추적, 관리할 수 있습니다.
CloudFormation은 자동화된 인프라 관리가 필요한 경우나 여러 AWS 리소스의 구성과 설정을 코드로 일관되게 관리하려는 환경에 적합합니다.
AWS 통합 및 메시징: SQS, SNS 및 Kinesis
AWS에서는 애플리케이션 간의 통합과 데이터 전달을 위한 메시징 서비스를 제공합니다. 대표적으로 Amazon SQS, Amazon SNS, Amazon Kinesis가 있으며, 각각 다른 목적과 특성에 맞게 설계되었습니다.
서비스 | 설명 | 사용 예 |
SQS | 비동기 메시지 대기열 | 비동기 작업 처리, 워크로드 분산 |
SNS | 게시-구독 모델, 이벤트 알림 및 브로드캐스트 | 알림 서비스, 이벤트 기반 시스템 |
Kinesis | 실시간 스트리밍 데이터 처리 | 실시간 로그 처리, IoT 데이터 스트리밍, 실시간 분석 |
AWS 모니터링 및 감사: CloudWatch, X-Ray 및 CloudTrail
서비스 | 설명 | 사용 예 |
CloudWatch | AWS 리소스 및 애플리케이션의 실시간 모니터링 | 리소스 메트릭 수집, 경고 설정, 로그 관리 |
X-Ray | 분산 애플리케이션의 트랜잭션 추적 및 문제 해결 | 마이크로서비스 병목 분석, 성능 문제 추적 |
CloudTrail | AWS 계정에서 발생하는 API 호출 기록 | 보안 감사, 규정 준수, 침해 대응 |
AWS 서버리스: Lambda
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. Lambda는 특정 이벤트에 의해 트리거될 때만 실행되며, 사용한 컴퓨팅 시간에 대해서만 비용이 청구되는 이벤트 기반 서버리스 아키텍처를 구축할 수 있습니다.
주요 개념 및 특징
1. 이벤트 기반 실행
- Lambda 함수는 이벤트가 발생할 때 자동으로 트리거됩니다.
2. 무한한 확장성
- Lambda는 자동으로 확장되며, 다중 요청이 발생할 때마다 각 요청을 처리하는 함수 인스턴스를 생성합니다.
- 급격히 변동하는 워크로드에도 적합하며, 높은 확장성과 비용 효율성을 제공합니다.
3. 관리 불필요한 서버리스 인프라
- 서버 인프라 관리가 필요 없으며, 개발자는 코드 작성에만 집중할 수 있습니다.
- AWS가 보안 패치, 운영 시스템 관리, 스케일링 등의 작업을 자동으로 처리합니다.
4. 비용 효율성
- Lambda는 실행 시간(밀리초 단위)과 메모리 사용량에 따라 비용이 청구됩니다.
- 트래픽이 없을 때는 비용이 발생하지 않으며, 트래픽이 증가하면 필요한 만큼만 비용이 증가합니다.
Lambda의 구성 요소
1. Lambda 함수
- 이벤트를 트리거로 실행되는 코드 블록입니다.
- Python, Node.js, Java, Go 등 다양한 언어로 작성할 수 있습니다.
2. 핸들러
- Lambda 함수의 진입점이며, 이벤트를 수신하고 처리하는 역할을 합니다.
3. 트리거
- Lambda 함수를 실행시키는 이벤트 소스입니다.
4. 권한
- Lambda 함수가 다른 AWS 서비스와 상호작용할 수 있도록 권한을 부여하는 IAM 역할이 필요합니다.
5. 환경 변수
- Lambda 함수의 실행 환경에서 사용할 설정값을 제공하는 환경 변수입니다.
AWS Lambda 사용 사례
1. 백엔드 API 구성
- API Gateway와 결합하여 서버리스 REST API를 제공하는 백엔드 구현.
2. 데이터 처리
- DynamoDB 테이블에서 발생한 데이터를 실시간으로 처리하거나, S3에 업로드된 파일을 처리하는 이벤트 기반 데이터 처리.
3. 알림 및 메시징
- SNS, SQS 등을 활용하여 조건에 맞는 알림 전송 및 메시징 기능을 구현.
4. DevOps 자동화
- CloudWatch Events와 함께 사용하여 AWS 인프라의 이벤트에 맞춰 자동화된 작업을 실행.
AWS 서버리스: DynamoDB
Amazon DynamoDB는 AWS에서 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다. 서버 관리, 패치, 스케일링 등 복잡한 작업을 AWS가 대신 처리해주기 때문에 서버리스 환경에서 사용하기에 이상적입니다. DynamoDB는 빠르고 예측 가능한 성능을 제공하며, 자동으로 확장되므로 애플리케이션의 요구 사항에 맞게 쉽게 확장할 수 있습니다.
주요 특징
1. 서버리스 데이터베이스
- DynamoDB는 서버리스 아키텍처를 채택하고 있어 서버를 프로비저닝하거나 관리할 필요가 없습니다.
- 확장성 있는 저장소와 트래픽에 따라 자동으로 확장 및 축소됩니다.
2. 빠른 성능
- 단일 밀리초 수준의 읽기 및 쓰기 성능을 제공합니다.
- 대량의 트랜잭션을 처리할 수 있는 성능을 제공하므로 실시간 애플리케이션에서 유용합니다.
3. 완전 관리형
- 서버 관리, 보안 패치 적용, 백업 등 모든 관리 작업은 AWS가 자동으로 처리합니다.
- 관리자는 데이터 모델링과 애플리케이션 개발에만 집중하면 됩니다.
4. 자동 확장
- DynamoDB는 요청에 따라 자동으로 처리 용량을 조정하여, 트래픽 변화에 유연하게 대응합니다.
- Provisioned Capacity Mode와 On-Demand Mode를 선택할 수 있어, 사용량에 따라 적절한 방식으로 동작합니다.
5. 높은 가용성 및 내구성
- DynamoDB는 멀티 리전 복제와 자동 백업을 통해 데이터의 가용성과 내구성을 보장합니다.
- 기본적으로 지속적인 데이터 복제와 자동 복구가 포함되어 있습니다.
6. 보안
- AWS IAM(Identity and Access Management)과 통합되어, 역할 기반의 세밀한 액세스 제어가 가능합니다.
- 데이터는 암호화되어 저장되며, **AWS KMS(Key Management Service)**와 연동하여 키 관리도 가능합니다.
DynamoDB의 구성 요소
1. 테이블
- DynamoDB에서 데이터를 저장하는 기본 단위는 테이블입니다.
- 테이블은 파티션 키와 정렬 키를 사용해 데이터를 구성합니다.
2. 아이템 (Item)
- 테이블 내에 저장되는 데이터 항목입니다. 관계형 데이터베이스의 레코드와 유사합니다.
- 아이템은 속성(attributes)을 가지며, 각 속성은 이름과 값으로 구성됩니다.
3. 속성 (Attribute)
- 아이템 내에서 데이터를 나타내는 요소입니다. 하나의 아이템은 여러 속성을 가질 수 있습니다.
4. 인덱스 (Index)
- **Global Secondary Index (GSI)**와 **Local Secondary Index (LSI)**를 사용하여 쿼리 성능을 최적화할 수 있습니다.
5. 용량 모드 (Capacity Mode)
- Provisioned Mode: 예상되는 읽기 및 쓰기 요청 수에 맞춰 용량을 설정하고, 초과 용량에 대해 자동 스케일링을 설정할 수 있습니다.
- On-Demand Mode: 사용량에 따라 자동으로 용량을 조정하므로, 트래픽 예측이 어려운 워크로드에 적합합니다.
DynamoDB 사용 사례
1. 실시간 애플리케이션
- 채팅 애플리케이션, 게임 상태 저장, 실시간 분석 애플리케이션 등에서 DynamoDB의 빠른 성능과 자동 확장 기능이 유용합니다.
2. 세션 관리
- 사용자의 세션 정보를 빠르게 읽고 쓸 수 있어, 웹 애플리케이션에서 세션 저장소로 적합합니다.
3. IoT 데이터 저장
- IoT 장치에서 발생하는 데이터를 빠르게 수집하고 저장할 수 있습니다. DynamoDB는 수십억 개의 데이터를 처리할 수 있는 용량을 제공합니다.
4. 모바일 및 웹 애플리케이션
- 모바일 앱에서 사용자 데이터를 저장하고 관리하는 데 적합합니다. DynamoDB는 읽기 및 쓰기 성능이 뛰어나고 확장이 용이하여 앱의 성능을 보장합니다.
5. 로그 데이터 저장
- 웹 서버 로그, 애플리케이션 로그 등을 실시간으로 저장하고 분석할 수 있습니다.
장점과 단점
장점:
- 서버리스: 서버 관리 필요 없고, AWS가 자동으로 확장 관리.
- 빠른 성능: 밀리초 수준의 빠른 응답 시간.
- 높은 가용성 및 내구성: 자동으로 복제되고 백업됩니다.
- 자동 확장: 트래픽에 맞춰 자동으로 확장/축소 가능.
- 비용 효율성: 사용한 만큼만 비용을 지불하며, 트래픽이 없는 경우 비용이 발생하지 않습니다.
단점:
- 쿼리 제한: 복잡한 쿼리나 조인이 필요한 경우 관계형 DB보다 불편할 수 있습니다.
- 성능 최적화: 데이터 모델링과 인덱싱을 잘못하면 성능이 저하될 수 있습니다.
- 용량 계획: Provisioned 모드에서는 예상보다 많은 용량을 요청하면 추가 비용이 발생할 수 있습니다.
AWS DynamoDB는 서버리스 환경에서 빠르고 유연한 데이터 저장소를 제공하는 서비스입니다. 데이터베이스 관리에 필요한 노력과 비용을 줄여주며, 특히 확장성과 비용 효율성이 중요한 서버리스 아키텍처에 적합합니다.
AWS 서버리스: API 게이트웨이
AWS API Gateway는 AWS의 완전 관리형 서비스로, RESTful API, WebSocket API, HTTP API 등을 구축하고 관리할 수 있는 기능을 제공합니다. API Gateway를 사용하면 서버나 인프라 관리 없이 API를 쉽게 구축하고 배포할 수 있으며, AWS Lambda, DynamoDB, S3와 같은 다른 AWS 서비스와 통합하여 서버리스 아키텍처를 구축하는 데 매우 유용합니다.
주요 특징
1. 완전 관리형 API 서비스
- API Gateway는 API의 생성, 배포, 유지 관리, 보안, 모니터링 등 모든 작업을 관리합니다.
- 서버리스 환경에서 API 요청 처리 및 리소스 관리를 자동으로 처리하므로 서버를 직접 관리할 필요가 없습니다.
2. 확장성과 고가용성
- 자동으로 확장되어 수천 또는 수백만 개의 요청을 처리할 수 있습니다.
- 다중 리전 배포를 지원하여 고가용성과 내구성을 보장합니다.
3. 통합 및 트리거
- AWS Lambda와 통합하여 서버리스 API를 구축할 수 있습니다.
- 다른 AWS 서비스(예: DynamoDB, S3, SNS, SQS 등)와도 쉽게 연결하여 API의 백엔드 로직을 구현할 수 있습니다.
4. API 유형
- REST API: RESTful 스타일의 HTTP API로, URL 경로와 HTTP 메서드(GET, POST, PUT 등)를 사용하여 API를 정의합니다.
- WebSocket API: 실시간 양방향 통신을 제공하는 WebSocket API를 구축할 수 있습니다.
- HTTP API: REST API보다 더 간단하고 낮은 비용으로 빠르게 배포할 수 있는 경량 HTTP API입니다.
5. 보안 및 인증
- API Gateway는 다양한 보안 옵션을 제공합니다:
6. 배포 및 버전 관리
- API Gateway에서는 스테이지를 사용하여 API의 여러 버전을 관리하고 배포할 수 있습니다.
- 자동 버전 관리를 통해 이전 버전의 API와 새 버전의 API를 병행하여 운영할 수 있습니다.
7. 모니터링 및 로깅
- Amazon CloudWatch와 통합되어 API 요청에 대한 메트릭과 로그를 모니터링할 수 있습니다.
- 요청/응답 로깅, 지연 시간, 오류율 등 API에 대한 실시간 분석이 가능합니다.
API Gateway 구성 요소
1. API
- API Gateway에서 API는 리소스(Resource) 및 메서드(Method)로 구성됩니다.
2. 리소스 경로 및 메서드
- API의 경로와 메서드를 정의하여, 클라이언트 요청에 대응할 수 있습니다.
3. 백엔드 통합
- API Gateway는 다양한 백엔드 서비스와 통합할 수 있습니다:
4. 응답 및 요청 변환
- API Gateway는 요청을 백엔드 서비스에 전달하기 전에 변환하고, 백엔드 서비스의 응답을 클라이언트에게 적절히 변환하여 전달할 수 있습니다.
5. API 키 관리
- API Gateway는 클라이언트가 API에 액세스하기 위해 사용할 수 있는 API 키를 관리할 수 있습니다.
- API 키를 통해 API에 대한 액세스를 제어하고 사용량을 모니터링할 수 있습니다.
AWS API Gateway 사용 사례
1. 서버리스 API 구축
- API Gateway와 AWS Lambda를 결합하여 서버리스 RESTful API를 구축할 수 있습니다.
- 데이터베이스나 다른 AWS 서비스와의 연동을 통해 다양한 백엔드 로직을 처리합니다.
2. 모바일 애플리케이션 백엔드
- API Gateway는 모바일 애플리케이션과 서버 사이의 API를 제공하는 데 유용합니다.
- 예를 들어, 사용자 인증, 데이터 처리 및 저장 등을 서버리스 방식으로 구현할 수 있습니다.
3. 실시간 애플리케이션
- WebSocket API를 사용하여 실시간 통신이 필요한 애플리케이션을 구축할 수 있습니다.
4. 백엔드 서비스의 프록시
- API Gateway는 다른 웹 서버나 REST API에 대한 프록시 역할을 할 수 있습니다.
- 예를 들어, 다른 서비스에 요청을 전달하거나, API Gateway 자체를 통해 서비스의 엔드포인트를 노출할 수 있습니다.
장점과 단점
장점:
- 서버 관리 불필요: 서버리스 아키텍처로, AWS가 인프라와 리소스를 관리하므로 서버 관리에 신경 쓸 필요가 없습니다.
- 자동 확장: API Gateway는 요청량에 따라 자동으로 확장되어 트래픽 증가에 유연하게 대응합니다.
- 보안 기능 내장: 다양한 인증 및 보안 옵션을 제공하여, API의 액세스를 안전하게 제어할 수 있습니다.
- 다양한 서비스와 통합: Lambda, DynamoDB, S3 등 AWS의 다양한 서비스와 쉽게 통합할 수 있습니다.
- 저비용: 사용량 기반 요금제로, API 호출 수나 트래픽에 따라 요금이 부과됩니다.
단점:
- 응답 시간: Lambda와의 통합 시 초기 요청에 대한 응답 시간이 길어질 수 있습니다.
- 복잡한 라우팅 및 트래픽 관리: 대규모 애플리케이션에서는 API 경로 및 버전 관리가 복잡할 수 있습니다.
- HTTP 요청 크기 제한: API Gateway의 요청 크기나 응답 크기에는 제한이 있어 대용량 데이터 처리에 불편할 수 있습니다.
AWS CICD: Code Commit, CodePipeline, CodeBuild, CodeDeploy
AWS CI/CD (Continuous Integration/Continuous Deployment)는 애플리케이션의 빌드, 테스트, 배포 프로세스를 자동화하여 개발 주기를 단축하고 품질을 향상시키는 서비스들을 제공합니다. AWS는 CodeCommit, CodePipeline, CodeBuild, CodeDeploy를 통해 이 과정을 관리할 수 있는 완전 관리형 서비스를 제공합니다. 이 네 가지 서비스를 활용하면 코드 변경사항을 자동으로 통합하고, 테스트하고, 배포할 수 있습니다.
1. AWS CodeCommit
AWS CodeCommit은 완전 관리형 소스 코드 저장소 서비스로, Git을 기반으로 한 리포지토리 시스템을 제공합니다. 이 서비스를 사용하면 코드 리포지토리를 안전하게 저장하고, 협업하는 팀이 소스 코드를 쉽게 관리할 수 있습니다.
주요 특징:
- Git 호환: Git을 사용하여 로컬에서 코드 변경을 관리하고, AWS CodeCommit 리포지토리와 동기화할 수 있습니다.
- 고가용성: AWS에서 관리하므로 높은 가용성과 내구성을 제공, 여러 리전에 걸쳐 자동으로 데이터를 복제하여 장애 시에도 복구 가능.
- 보안: IAM 역할 및 정책을 통해 세밀한 권한 제어가 가능하며, 코드에 대한 접근을 안전하게 관리할 수 있습니다.
- 자동화: CodePipeline과 통합되어 소스 코드를 자동으로 빌드, 테스트 및 배포할 수 있습니다.
사용 사례:
- 팀 협업을 위한 안전한 소스 코드 리포지토리 제공
- Git을 사용하여 애플리케이션의 버전 관리 및 히스토리 관리
2. AWS CodePipeline
AWS CodePipeline은 CI/CD 파이프라인을 자동으로 생성하고 관리하는 서비스입니다. 애플리케이션의 빌드, 테스트, 배포 작업을 자동화하여 빠르게 변경사항을 배포할 수 있습니다. CodePipeline은 CodeCommit, CodeBuild, CodeDeploy 등과 연동되어 전반적인 배포 파이프라인을 관리합니다.
주요 특징:
- 자동화된 파이프라인: 코드 커밋, 빌드, 테스트, 배포 과정을 자동화하여 지속적인 통합과 배포가 가능합니다.
- 간단한 구성: 시각적인 UI를 통해 파이프라인을 설정하고 관리할 수 있습니다.
- 통합: AWS 서비스뿐만 아니라 GitHub와 같은 외부 소스 리포지토리, Jenkins와 같은 빌드 도구, Elastic Beanstalk, ECS와 같은 배포 대상 서비스와도 통합할 수 있습니다.
- 모니터링 및 알림: 파이프라인의 상태를 모니터링하고, 실패 시 알림을 받을 수 있습니다.
사용 사례:
- 코드 변경을 자동으로 빌드, 테스트 및 배포하는 CI/CD 파이프라인 구현
- 다양한 AWS 서비스와의 통합을 통해 완전한 자동화 환경 구축
3. AWS CodeBuild
AWS CodeBuild는 완전 관리형 빌드 서비스로, 소스 코드에서 애플리케이션을 빌드하는 작업을 자동화합니다. CodeBuild는 다양한 언어와 빌드 환경을 지원하며, 필요에 따라 커스터마이징도 가능합니다.
주요 특징:
- 자동화된 빌드: CodeCommit, GitHub, S3 등 다양한 소스 리포지토리에서 코드를 가져와 자동으로 빌드를 수행합니다.
- 확장성: 필요에 따라 빌드 환경을 확장하고 병렬로 빌드를 실행하여 빌드 시간을 단축시킬 수 있습니다.
- 다양한 언어 지원: Java, Python, Node.js, Ruby, Go 등 여러 언어에 대한 빌드를 지원합니다.
- Docker 지원: Docker 이미지 빌드를 지원하고, 빌드 환경을 Docker 컨테이너로 정의할 수 있습니다.
- 빌드 아티팩트 저장: 빌드 결과물을 S3에 저장하거나 다른 서비스와 연동하여 활용할 수 있습니다.
사용 사례:
- 애플리케이션 코드에서 자동으로 빌드를 실행하고 아티팩트를 생성하여 배포 준비
- 커스터마이징된 빌드 환경을 통해 복잡한 빌드 작업 처리
4. AWS CodeDeploy
AWS CodeDeploy는 애플리케이션 배포를 자동화하는 서비스로, EC2 인스턴스, Lambda 함수, 온프레미스 서버 등 다양한 환경에 배포를 지원합니다. CodeDeploy는 배포 과정에서의 롤백 기능을 제공하여, 문제가 발생할 경우 이전 버전으로 쉽게 복원할 수 있습니다.
주요 특징:
- 다양한 배포 대상 지원: EC2 인스턴스, Lambda, ECS, 온프레미스 서버 등 여러 환경에 배포할 수 있습니다.
- 자동화된 배포: CodePipeline과 통합되어 빌드 후 자동으로 배포 작업을 처리할 수 있습니다.
- 배포 전략: 배포 방식으로 블루-그린 배포, 카나리아 배포 및 롤링 배포 등을 지원합니다.
- 모니터링 및 롤백: 배포 상태를 모니터링하고 문제가 발생하면 자동으로 롤백하여 안정성을 높입니다.
- 배포 속도와 확장성: 여러 서버에 동시에 배포하고, 필요한 대로 배포 속도나 규모를 조정할 수 있습니다.
사용 사례:
- EC2 인스턴스나 Lambda 함수에 자동화된 애플리케이션 배포
- 블루-그린 배포 전략을 사용하여 무중단 배포를 구현
AWS CI/CD 전체 흐름
- 코드 커밋 (CodeCommit):
- CI/CD 파이프라인 구성 (CodePipeline):
- 빌드 (CodeBuild):
- 배포 (CodeDeploy):
장점과 단점
장점:
- 완전 관리형 서비스: 인프라나 도구 설정 없이 AWS에서 제공하는 관리형 서비스를 활용할 수 있습니다.
- 자동화된 파이프라인: CI/CD 파이프라인을 자동화하여 개발 주기를 단축하고 배포 오류를 최소화합니다.
- 다양한 서비스 통합: AWS 서비스뿐만 아니라 외부 서비스와도 손쉽게 통합하여 효율적인 워크플로우를 구성할 수 있습니다.
- 스케일링: 애플리케이션의 빌드 및 배포 프로세스를 자동으로 확장할 수 있습니다.
단점:
- 초기 설정 복잡성: 처음에는 여러 서비스의 설정을 이해하고 구성하는 데 시간이 필요할 수 있습니다.
- 비용: 모든 서비스가 사용량 기반 요금제로 운영되므로, 사용량에 따라 비용이 발생할 수 있습니다.
- 제한된 환경: 일부 복잡한 배포 시나리오에서는 커스터마이징이 어려울 수 있습니다.
AWS 서버리스: SAM - Serverless Application Model
AWS에서 제공하는 서버리스 애플리케이션을 손쉽게 배포하고 관리할 수 있도록 도와주는 오픈 소스 프레임워크입니다. SAM은 AWS Lambda, API Gateway, DynamoDB, S3, SNS, SQS 등 여러 AWS 서버리스 서비스를 쉽게 구성하고 배포할 수 있게 해줍니다.
SAM은 AWS CloudFormation을 기반으로 하여, 서버리스 애플리케이션을 관리할 수 있는 추상화된 템플릿을 제공합니다. 이를 통해 AWS Lambda 함수와 기타 서버리스 리소스를 코드로 정의하고, 자동화된 배포 프로세스를 구축할 수 있습니다.
AWS SAM의 주요 특징
간단한 애플리케이션 정의:SAM은 template.yaml이라는 템플릿 파일을 사용하여 애플리케이션을 정의합니다. 이 템플릿은 YAML 형식으로 작성되며, AWS CloudFormation과 호환됩니다.
SAM 템플릿은 AWS Lambda 함수, API Gateway, DynamoDB 테이블, S3 버킷 등의 리소스를 선언적으로 정의합니다.
핸들러 및 리소스 통합:AWS Lambda 함수는 SAM 템플릿에서 Resources 섹션으로 정의되며, 이벤트 소스와 연결하여 자동으로 트리거될 수 있도록 설정됩니다.
API Gateway, SNS, SQS와 같은 다른 AWS 서비스와도 쉽게 통합할 수 있습니다.
로컬 개발 및 디버깅:SAM은 로컬에서 Lambda 함수를 실행하고 테스트할 수 있는 기능을 제공합니다. sam local 명령어를 사용하면 로컬 환경에서 Lambda 함수를 실행하고, API Gateway와 연결된 API를 테스트할 수 있습니다.
Docker 컨테이너를 사용하여 Lambda 함수가 실제 AWS에서 실행되는 환경과 비슷하게 로컬에서 테스트할 수 있습니다.
자동화된 배포:SAM은 AWS CloudFormation을 활용해 리소스를 관리하므로, sam deploy 명령어를 사용하여 애플리케이션을 자동으로 배포할 수 있습니다.
AWS CodePipeline과 같은 CI/CD 서비스와 통합하여 배포 프로세스를 자동화할 수 있습니다.
확장성과 비용 효율성:SAM을 통해 배포되는 애플리케이션은 서버리스 아키텍처를 기반으로 하므로, 자동으로 확장되고, 사용한 리소스에 대해서만 비용이 발생합니다.
이벤트 기반 아키텍처로, 필요할 때만 자원을 소비하고 트래픽 변화에 따라 자동으로 확장합니다.
클라우드 개발 키트 CDK - Cloud Development Kit
AWS 리소스를 프로그래밍 방식으로 정의하고 배포할 수 있는 오픈 소스 소프트웨어 개발 프레임워크입니다. CDK를 사용하면 AWS 리소스를 코드로 정의할 수 있고, 이를 통해 인프라를 선언적이고 효율적으로 배포할 수 있습니다.
AWS CDK는 CloudFormation을 기반으로 하여, AWS 리소스를 정의하고 자동화된 방식으로 배포하는 작업을 더 간편하게 만들어줍니다. 그러나 CDK는 CloudFormation 템플릿을 직접 작성하는 대신, 고수준 프로그래밍 언어를 사용하여 인프라 리소스를 정의할 수 있도록 해줍니다.
AWS CDK의 주요 특징
프로그래밍 언어 사용:CDK는 다양한 프로그래밍 언어를 지원합니다. 사용자는 TypeScript, JavaScript, Python, Java, C# 등 고수준 언어를 사용하여 AWS 리소스를 정의할 수 있습니다.
이를 통해 개발자는 기존에 익숙한 언어를 사용하여 인프라를 관리할 수 있습니다.
구성 요소와 리소스를 추상화:CDK는 AWS 리소스를 고수준 추상화하여 사용자가 복잡한 리소스를 쉽게 정의할 수 있도록 합니다. 예를 들어, EC2 인스턴스, Lambda 함수, S3 버킷 등을 단 몇 줄의 코드로 정의할 수 있습니다.
클라우드 리소스 자동 생성:CDK는 AWS 리소스를 정의한 코드에 따라 CloudFormation 템플릿을 자동으로 생성하고 이를 통해 리소스를 배포합니다.
CDK는 CloudFormation의 장점을 그대로 유지하면서도, 코드로 인프라를 정의하는 유연성을 제공합니다.
자원 간의 관계 정의:CDK는 리소스 간의 의존 관계를 코드로 표현할 수 있게 해줍니다. 예를 들어, Lambda 함수가 S3 버킷에 접근하는 경우, CDK는 Lambda 함수가 S3 버킷에 접근할 수 있도록 적절한 IAM 역할을 자동으로 생성할 수 있습니다.
리소스 모듈화 및 재사용:CDK는 자원 정의를 재사용 가능한 모듈로 캡슐화할 수 있게 해줍니다. 이를 통해 동일한 구성을 여러 프로젝트에서 재사용하거나, 구성 요소를 쉽게 공유할 수 있습니다.
자동화된 배포:CDK는 AWS CloudFormation을 사용하여 리소스를 배포하고 관리합니다. 따라서 배포와 관리가 자동화되며, 기존의 인프라 변경 사항을 쉽게 추적하고 롤백할 수 있습니다.
Cognito 사용자 풀, Cognito 자격 증명 풀 및 Cognito Sync
기능 | Cognito 사용자 풀 | Cognito 자격 증명 풀 | Cognito Sync |
기능 | 사용자 인증 및 관리 | AWS 리소스 액세스를 위한 임시 자격 증명 발급 | 장치 간 데이터 동기화 |
주요 목적 | 사용자의 로그인, 회원가입 및 인증 처리 | 인증된 사용자가 AWS 서비스에 접근할 수 있도록 임시 자격 증명 제공 | 사용자 데이터를 여러 장치 간에 동기화 |
사용 사례 | 앱 로그인, 회원가입, MFA | S3, DynamoDB 등의 AWS 서비스 액세스 | 게임 상태, 사용자 설정 동기화 |
기타 서버리스: Step Functions 및 AppSync
기능 | AWS Step Functions | AWS AppSync |
주요 용도 | 복잡한 워크플로우 및 비즈니스 프로세스 자동화 | 실시간 데이터 처리 및 GraphQL API 제공 |
서비스 통합 | Lambda, SNS, SQS, DynamoDB 등과 통합 | DynamoDB, Lambda, Elasticsearch, RDS 등과 통합 |
실시간 지원 | X | 실시간 데이터 푸시 및 오프라인 동기화 지원 |
사용 사례 | 주문 처리 시스템, ETL 파이프라인 | 모바일 애플리케이션, 실시간 피드, 채팅 애플리케이션 |
AWS 보안 및 암호화 : KMS, 암호화 SDK, SSM 파라미터 스토어, IAM 및 STS
1. AWS Key Management Service (KMS)
**AWS Key Management Service (KMS)**는 AWS에서 암호화 키를 생성, 관리 및 보호하는 서비스입니다. KMS를 사용하면 애플리케이션과 데이터베이스에서 민감한 데이터를 암호화하고, 해당 데이터를 보호할 수 있습니다.
주요 기능
- 대칭 및 비대칭 키 관리:
KMS는 대칭키와 비대칭키 모두를 지원하여 데이터 암호화와 복호화 작업을 처리합니다. - 키 정책 및 권한 관리:
IAM을 사용하여 KMS 키에 대한 액세스를 제어할 수 있습니다. 키에 대한 세밀한 액세스 제어가 가능합니다. - 자동화된 암호화:
KMS는 Amazon S3, Amazon EBS, Amazon RDS 등 다양한 AWS 서비스와 통합되어 데이터 암호화를 자동으로 처리합니다. - 키 교체 및 감사:
KMS는 주기적인 키 교체를 관리할 수 있으며, CloudTrail을 통해 키 사용을 감사할 수 있습니다.
사용 사례
- 데이터 암호화:
KMS를 사용하여 S3 버킷에 저장된 데이터나 RDS 데이터베이스의 데이터를 암호화하고, 이를 안전하게 관리합니다. - 애플리케이션에서의 암호화:
애플리케이션 코드 내에서 암호화된 데이터를 안전하게 관리하기 위해 KMS를 사용합니다.
2. AWS 암호화 SDK (Encryption SDK)
AWS 암호화 SDK는 AWS에서 제공하는 암호화 관련 SDK로, 애플리케이션에서 암호화와 복호화를 쉽게 구현할 수 있도록 지원합니다. AWS 암호화 SDK는 다양한 언어(Java, Python 등)로 제공되며, 암호화와 관련된 여러 작업을 자동화할 수 있도록 돕습니다.
주요 기능
- 암호화 및 복호화 API 제공:
개발자가 애플리케이션 내에서 데이터를 암호화하고 복호화할 수 있는 간단한 API를 제공합니다. - KMS 통합:
AWS KMS와 통합되어 키 관리 및 암호화 작업을 효율적으로 처리할 수 있습니다. - 데이터 보호:
민감한 데이터(예: 비밀번호, 카드 정보 등)를 안전하게 보호하고 암호화하여 저장할 수 있습니다.
사용 사례
- 애플리케이션 내 민감한 데이터 암호화:
사용자 비밀번호, API 키 등을 애플리케이션 내에서 안전하게 암호화하고 복호화하는 데 사용됩니다. - 데이터 전송 보호:
네트워크를 통한 데이터 전송 시 암호화하여 보안성을 높입니다.
3. AWS Systems Manager (SSM) 파라미터 스토어
AWS Systems Manager Parameter Store는 애플리케이션의 구성 값을 안전하게 저장하고 관리하는 서비스입니다. 주로 비밀번호, API 키, 데이터베이스 연결 문자열과 같은 민감한 정보를 저장하는 데 사용됩니다.
주요 기능
- 구성 값 관리:
시스템의 구성 값을 안전하게 저장하고, 이를 필요에 따라 애플리케이션에서 사용할 수 있습니다. - 비밀 관리:
비밀번호, API 키와 같은 민감한 데이터를 암호화하여 저장할 수 있습니다. 암호화는 KMS를 사용하여 처리됩니다. - 자동화된 값 관리:
SSM 파라미터 스토어는 애플리케이션에서 필요할 때 자동으로 구성 값을 가져오거나 갱신할 수 있는 기능을 제공합니다. - 버전 관리:
파라미터의 버전을 관리하여 변경 사항을 추적하고 롤백할 수 있습니다.
사용 사례
- 애플리케이션 설정 관리:
API 키나 데이터베이스 연결 문자열 등의 구성 값을 안전하게 관리하고 애플리케이션에서 사용합니다. - 비밀 관리:
민감한 데이터를 암호화하여 관리하고 필요할 때 가져옵니다.
4. AWS Identity and Access Management (IAM)
AWS IAM은 AWS 리소스에 대한 액세스를 안전하게 제어하는 서비스입니다. IAM을 사용하면 사용자를 생성하고, 각 사용자에게 권한을 부여하며, 세밀하게 액세스를 관리할 수 있습니다.
주요 기능
- 사용자 및 그룹 관리:
IAM을 사용하여 AWS 리소스에 접근할 수 있는 사용자와 그룹을 관리합니다. - 정책 및 역할:
IAM 정책을 사용하여 리소스에 대한 세밀한 액세스 권한을 정의합니다. 또한 역할을 통해 특정 AWS 리소스에 대한 권한을 부여할 수 있습니다. - 다단계 인증 (MFA):
MFA를 설정하여 계정 보안을 강화할 수 있습니다.
사용 사례
- 애플리케이션 액세스 제어:
IAM을 사용하여 애플리케이션 사용자와 AWS 리소스 간의 액세스를 제어합니다. - 서버리스 애플리케이션 권한 관리:
Lambda, API Gateway 등 AWS 서버리스 서비스에서 IAM 역할을 사용하여 권한을 관리합니다.
5. AWS Security Token Service (STS)
AWS STS는 임시 자격 증명을 생성하고 이를 통해 특정 AWS 리소스에 대한 액세스를 부여하는 서비스입니다. STS는 주로 크로스 계정 액세스나 임시 권한 부여에 사용됩니다.
주요 기능
- 임시 자격 증명:
STS는 임시 자격 증명을 제공하여 특정 AWS 리소스에 대한 일시적인 액세스를 제공합니다. 자격 증명은 설정된 기간 동안만 유효합니다. - 크로스 계정 액세스:
다른 AWS 계정의 리소스에 안전하게 액세스할 수 있는 임시 자격 증명을 생성하여 크로스 계정 액세스를 제공합니다. - 연결된 애플리케이션에 대한 액세스 관리:
특정 서비스나 애플리케이션이 다른 리소스에 액세스할 때, STS를 사용하여 최소 권한 원칙을 준수하면서 자격 증명을 부여할 수 있습니다.
사용 사례
- 애플리케이션 간 액세스:
하나의 계정에서 다른 계정으로 안전하게 리소스를 액세스할 때 STS를 사용합니다. - 시간 제한이 있는 작업 처리:
STS를 사용하여 일시적인 자격 증명을 생성하고 제한된 시간 동안 작업을 처리합니다.
'자격증 > AWS' 카테고리의 다른 글
AWS Certified Developer - Associate 초간단 정리 (0) | 2025.04.01 |
---|---|
AWS Certified Developer - Associate 이론 정리 (2) | 2024.10.22 |