본문 바로가기

캡스톤 설계 [건물별 소통 플랫폼 BBC]/기술 스택 및 아키텍처

데브옵스& 인프라 기술스택 및 아키텍쳐 [1]

데브옵스& 인프라

Deploy: AWS(IAM,EC2,CloudFront, S3, Route 53, RDS, ELB(ALB),ACM,ECR), Docker

CI/CD : Github Actions

doamin 구매 : 가비아

API 통신 테스트 : Postman

API 명세서 : Swagger

 

.

.

.

.

 

 

Deploy: AWS(IAM,EC2,CloudFront, S3, Route 53, RDS, ELB(ALB),ACM,ECR)

IAM

AWS 클라우드 환경에서 리소스에 대한 액세스를 관리하고 보안을 강화하기 위한 서비스이다. 

IAM을 사용하면 AWS 리소스에 대한 사용자 및 그룹별로 정확한 권한을 할당하고 관리할 수 있다. 

1. 사용자 (Users):
사용자는 AWS 계정에 로그인하는 개별 개체를 나타낸다.
각 사용자는 고유한 자격 증명을 갖고 있으며, AWS 리소스에 대한 액세스를 부여받아야 한다.


2. 그룹 (Groups):
그룹은 여러 사용자를 그룹화하여 동일한 권한을 할당하는 데 사용됩니다.
사용자는 여러 그룹에 속할 수 있으며, 사용자에게 그룹의 권한이 상속됩니다.

 

3. 역할 (Roles):
역할은 AWS 리소스 간에 권한을 공유하고 다른 AWS 서비스와의 통합을 지원한다.
역할을 사용하면 EC2 인스턴스, Lambda 함수 등에서 안전하게 자격 증명을 관리하고 필요한 권한을 부여할 수 있다.
4. 정책 (Policies):
정책은 권한 집합을 정의하며, 사용자, 그룹 및 역할에 할당된다.
정책은 JSON 형식으로 작성되며, 어떤 작업이 어떤 리소스에 대해 수행될 수 있는지를 지정한다.

 

5. 권한 부여 (Permissions):
IAM을 사용하여 사용자 및 역할에 대한 권한을 부여하고 관리한다.
권한은 정책을 통해 지정되며, 정책을 수정하여 권한을 조정할 수 있다.


6. 다단계 인증 (Multi-Factor Authentication, MFA):
다단계 인증은 보안을 강화하기 위한 옵션으로, 로그인 시 추가적인 인증 단계를 필요로 한다.

 

7. 액세스 키 (Access Keys):
액세스 키는 프로그래밍 방식으로 AWS에 액세스하는 데 사용된다. 

주로 API 호출 및 CLI(Command Line Interface)에서 사용된다.

 


IAM을 사용하면 AWS 리소스에 대한 액세스를 최소한으로 제한하여 보안을 강화하고,

권한을 세분화하여 사용자와 그룹에 필요한 작업만 수행할 수 있도록 제어할 수 있다.

이를 통해 AWS 계정의 보안을 유지하고 규정 준수를 지원한다.

.

.

.

.

 

EC2

 클라우드 컴퓨팅 서비스로, 가상 컴퓨팅 리소스를 제공하는 데 사용된다.

 EC2는 사용자가 필요한 만큼 가상 서버(인스턴스)를 시작, 관리 및 종료할 수 있는 확장 가능한 플랫폼을 제공한다.

1. 인스턴스 (Instances)

인스턴스는 가상 서버로, 사용자가 선택한 운영 체제와 애플리케이션을 실행할 수 있는 가상 환경을 제공한다.

다양한 인스턴스 유형과 구성 옵션이 있으며, 성능, 메모리, CPU 및 스토리지 요구 사항에 맞게 선택할 수 있다.

2. 이미지 (Amazon Machine Image, AMI):

AMI는 EC2 인스턴스를 시작하는 데 사용되는 이미지로, 운영 체제, 애플리케이션 및 설정을 포함한다.

AWS에서 제공하는 AMI를 사용하거나 사용자 정의 AMI를 생성할 수 있습니다.

3. 인스턴스 유형 (Instance Types):

다양한 인스턴스 유형을 제공하며, 각 유형은 특정 용도에 적합한 CPU, 메모리, 스토리지 및 네트워크 리소스를 제공한다.

예를 들어, 일반용, 컴퓨팅 최적화, 메모리 최적화, GPU 가속 등 다양한 유형이 있다.

4. 스토리지:

EC2 인스턴스에는 여러 유형의 스토리지 옵션이 있다.

Amazon Elastic Block Store (EBS)를 사용하여 데이터를 저장하고, 인스턴스 스토어를 사용하여 일시적인 데이터를 보관할 수 있다.

5. 가용 영역 (Availability Zones):

EC2 인스턴스는 가용 영역이라고 하는 물리적인 데이터 센터 내에서 실행된다.

다중 가용 영역을 사용하여 고가용성을 확보하고 장애 복구 옵션을 제공할 수 있다.

6. 보안 그룹 (Security Groups):

보안 그룹은 인스턴스의 방화벽 규칙을 정의하며, 인바운드 및 아웃바운드 트래픽을 제어한다.

인스턴스에 대한 보안을 관리하는 데 사용된다.

7. 키 페어 (Key Pairs):

EC2 인스턴스에 SSH (리눅스) 또는 RDP (Windows)와 같은 원격 액세스를 활성화하려면 키 페어를 사용한다.

개인 키는 인스턴스에 접속하기 위해 필요하다.

8. 인스턴스 스케일링:

EC2는 수평 및 수직 스케일링을 지원하며, Auto Scaling과 같은 서비스를 통해 리소스의 동적인 확장 및 축소를 자동화할 수 있다.

EC2는 다양한 용도로 사용되며, 웹 호스팅, 애플리케이션 배포, 데이터베이스 호스팅, 머신 러닝 및 데이터 분석과 같은 

다양한 클라우드 컴퓨팅 작업을 지원한다.

사용자는 필요에 따라 인스턴스를 시작하고 종료하여 비용을 관리하며, 필요한 만큼 확장하여 애플리케이션 성능을 향상시킬 수 있다.

.

.

.

.





CloudFront

컨텐츠 전송 네트워크(CDN) 서비스로, 웹 애플리케이션과 컨텐츠를 전 세계 사용자에게 빠르고 안정적으로 전달하기 위한 분산 네트워크를 제공하며 정적 및 동적 컨텐츠, 비디오 스트리밍, API 호출 및 기타 웹 자산을 가속화하고 보호하는 데 사용된다.

캐싱: 

CloudFront는 엣지 위치(Edge Location)에서 캐싱을 사용하여 정적 및 동적 컨텐츠를 저장하고 사용자에게 가장 가까운 위치에서 컨텐츠를 서빙해서 웹 페이지 로딩 시간을 크게 줄일 수 있습니다.

엣지 위치 (Edge Locations): 

전 세계에 분산된 엣지 위치를 갖고 있으며, 사용자에게 빠르게 컨텐츠를 제공하기 위해 가까운 엣지 위치를 사용한다. 

현재 전 세계에 수백 개 이상의 엣지 위치가 있습니다.

원본 (Origin): 

CloudFront는 원본 서버로부터 컨텐츠를 가져온다.

이 원본은 Amazon S3 버킷, EC2 인스턴스, Lambda 함수, API Gateway 및 사용자 정의 웹 서버 등 다양한 원본 유형을 지원한다.

보안 및 인증: 

CloudFront는 DDoS 공격 방어, SSL/TLS 암호화, 서명된 URL 및 쿠키 기반 인증과 같은

다양한 보안 기능을 제공하여 컨텐츠의 안전성을 유지한다.

지연 시간 및 성능 최적화: 

CloudFront는 네트워크 최적화 및 지연 시간 최소화를 통해 사용자 경험을 향상시킨다. 

엣지 위치를 사용하여 사용자에게 더 빠른 응답 시간을 제공한다.

가속화된 스트리밍: 

비디오 스트리밍을 가속화하며, 다양한 비디오 콘텐츠를 안정적으로 전송할 수 있다.

모바일 최적화: 

모바일 사용자를 대상으로 컨텐츠를 최적화하고 사용자 에이전트 및 기기 유형별로 다른 버전의 컨텐츠를 제공할 수 있다.

비용 효율성:

트래픽 양에 따라 과금되며, 사용한 만큼만 지불하게 됩니다. 또한 AWS와 통합되어 사용자가 편리하게 관리할 수 있다.

Amazon CloudFront를 사용하면 전 세계 사용자에게 웹 애플리케이션과 컨텐츠를 빠르게 제공하고, 안전하게 보호하며, 비용을 효율적으로 관리할 수 있다.

이는 웹 사이트의 성능을 향상시키고, 사용자 경험을 개선하며, 트래픽 요구 사항을 처리하기 위한 이상적인 솔루션이다.

 

.

.

.

.

 

S3

객체 스토리지 서비스로, 클라우드 환경에서 데이터를 저장하고 관리하는 데 사용된다.

데이터의 확장 가능한, 내구성이 높은, 안전한 저장소를 제공하며, 다양한 용도로 활용된다.

버킷 (Buckets): 

데이터는 버킷이라고 하는 컨테이너에 저장된다 

각 버킷은 전역적으로 고유한 이름을 가져야 하며, 계정 내에서 여러 개의 버킷을 생성할 수 있다.

객체 (Objects): 

버킷 내에 저장된 데이터 단위를 객체라고 한다. 

객체는 데이터 파일과 메타데이터(객체의 키, 값을 포함하는)로 구성되며, 고유한 키(유일한 이름)로 식별된다.

내구성 (Durability): 

Amazon S3는 데이터를 여러 복제본으로 분산하여 내구성을 보장한다. 

이러한 내구성은 데이터의 손실을 방지하고 실수 또는 장애 시에 데이터를 복원할 수 있게 한다.

액세스 제어: 

다양한 수준의 액세스 제어를 제공하여 버킷 및 객체 수준에서 액세스 권한을 관리하고, 

공개적으로 액세스 가능하도록 설정할 수도 있고, 특정 IAM 사용자 및 역할에만 제한된 액세스를 허용할 수도 있다.

데이터 분류 (Data Classification): 

객체 수명 주기 정책을 사용하여 데이터를 자동으로 분류하고, 장기 저장 또는 삭제 등의 작업을 수행할 수 있다.

버전 관리 (Versioning): 

버전 관리를 활성화하면 객체의 이전 버전을 유지하고 관리할 수 있으며, 실수로 삭제된 객체를 복구할 수 있다.

암호화: 

데이터를 저장할 때 데이터 암호화를 지원한다.

SSL/TLS를 통한 데이터 전송 암호화 외에도 객체 암호화를 통해 데이터를 보호할 수 있다.

정적 웹 호스팅:

정적 웹 사이트를 호스팅할 수 있어 이를 통해 웹 페이지 및 자원을 효율적으로 제공할 수 있습니다.

데이터 전송: 

Amazon S3는 데이터를 업로드 및 다운로드하기 위한 다양한 방법과 클라이언트 라이브러리를 지원하며, 

대용량 데이터 전송을 위한 기능도 제공한다.

Amazon S3는 데이터 백업, 웹 호스팅, 미디어 스트리밍, 데이터 분석, 애플리케이션 아카이빙 및 협업과 같은 다양한 시나리오에서 사용된다.

데이터의 내구성과 안전한 저장, 데이터 액세스 제어 및 확장 가능한 스토리지를 필요로 하는 다양한 비즈니스 요구 사항을

충족시키는 강력한 클라우드 스토리지 솔루션으로 Amazon S3가 널리 사용되고 있습니다.

 

 

lamda

서버리스 컴퓨팅 서비스로, 코드를 실행하고 관리하기 위한 서버 프로비저닝이나 관리 없이 애플리케이션을 실행할 수있다.

AWS Lambda를 사용하면 이벤트 트리거에 응답하여 코드를 실행하고, 필요한 리소스만 사용하므로 비용을 절약할 수 있다.



이벤트 기반 실행: 

Lambda 함수는 이벤트 소스(예: Amazon S3, Amazon DynamoDB, Amazon API Gateway, AWS IoT 등)에서 발생하는 이벤트에 대응하여 실행되며 이벤트가 발생하면 Lambda 함수가 자동으로 호출되고 작업을 수행한다.

서버 관리 없음: 

서버 프로비저닝, 관리 및 확장에 대한 걱정 없이 코드를 실행한다. 사용자는 코드를 업로드하고 AWS Lambda가 나머지를 관리한다.

다양한 런타임: 

여러 가지 런타임(예: Node.js, Python, Java, Ruby, Go, .NET 등)을 지원하므로 사용자가 선호하는 프로그래밍 언어로 함수를 작성할 수 있다.

자동 확장

Lambda 함수는 이벤트 처리 요청에 따라 자동으로 확장된다.

더 많은 이벤트가 발생하면 Lambda 함수가 병렬로 실행되어 처리량이 증가한다.

마이크로서비스 아키텍처: 

Lambda 함수는 마이크로서비스 아키텍처 및 서버리스 아키텍처를 구축하는 데 이상적이며, 필

요한 경우 여러 함수를 조합하여 애플리케이션을 작성할 수 있다.

시간 기반 실행: 

Lambda 함수를 주기적으로 실행하도록 스케줄링할 수 있으며, 이를 통해 일정한 간격으로 작업을 수행할 수 있다.

액세스 제어 및 보안: 

Lambda 함수는 AWS Identity and Access Management (IAM)을 사용하여 액세스 제어를 구성하고, 

코드와 데이터를 보호하기 위해 AWS Key Management Service (KMS)와 통합할 수 있다.

지연 및 비용 최적화:

Lambda 함수는 사용자의 코드가 실행되는 데 걸리는 시간에 대해서만 요금을 지불하므로

코드 실행이 발생하지 않는 경우 비용이 발생하지 않는다.

AWS Lambda는 이벤트 기반 아키텍처, 서버리스 마이크로서비스, 데이터 처리, 이미지 리사이징, 로그 분석, 웹 애플리케이션 백엔드 및 다양한 서버리스 애플리케이션을 빌드하고 실행하기 위한 강력한 서비스로 사용된다.

함수로 분리된 작은 단위의 코드를 작성하여 개발자가 더 빠르게 애플리케이션을 구축하고 배포할 수 있도록 도와준다.

.

.

.

.

Route 53

관리형 도메인 네임 시스템(DNS) 서비스이다.

도메인 이름을 등록하고 관리하며, DNS 레코드를 설정하여 웹 애플리케이션 및 인프라스트럭처를 구성할 수 있다.

도메인 등록 및 관리: 

Route 53을 사용하여 도메인 이름을 등록하고 관리할 수 있다. 

이를 통해 웹 사이트, 애플리케이션 또는 서비스에 대한 사용자 지정 도메인을 설정할 수 있다.

DNS 라우팅: 

Route 53을 사용하여 다양한 형태의 DNS 라우팅을 설정할 수 있다.

이를 통해 사용자 트래픽을 여러 엔드포인트 또는 리전으로 분산하고, 고가용성을 제공하며, 부하 분산을 수행할 수 있다.

상태 확인 및 헬스 체크: 

Route 53을 사용하여 엔드포인트(예: 웹 서버 또는 로드 밸런서)의 상태를 주기적으로 확인하고, 

비정상적인 상태에서 자동으로 트래픽을 라우팅할 수 있다.

글로벌 서비스: 

Route 53은 글로벌 서비스이며, 전 세계 다양한 DNS 엔드포인트를 제공하여 

사용자가 가장 가까운 위치에서 서비스를 받을 수 있도록 한다.

안정성과 내구성: 

Route 53은 내구성이 높으며, AWS의 다중 가용 영역과 글로벌 엣지 위치에 데이터를 저장하므로 신뢰성 있는 DNS 서비스를 제공한다.

비용 효율성: 

Route 53의 요금은 사용한 리소스 및 트래픽 양에 따라 과금되며 요금 계산은 트래픽, 호스트 존, 도메인 등을 기반으로 한다.

전환 기능: 

기존 DNS 서비스에서 Route 53으로 도메인을 마이그레이션하거나

Route 53에서 다른 DNS 서비스로 마이그레이션하는 기능을 제공한다.

HTTPS 지원: 

Route 53을 사용하여 SSL/TLS 인증서를 설정하고 HTTPS로 암호화된 트래픽을 지원할 수 있다.

Amazon Route 53은 웹 애플리케이션의 가용성과 신뢰성을 향상시키고, 

글로벌 사용자에게 빠르고 안정적인 서비스를 제공하는 데 중요한 역할을 한다. 

또한 다양한 DNS 기능을 사용하여 트래픽을 관리하고 DNS 관리를 간편하게 수행할 수 있다.

.

.

.

.

 

RDS

 완전 관리형 관계형 데이터베이스 서비스이다. 

RDS를 사용하면 MySQL, PostgreSQL, Oracle, SQL Server 및 MariaDB와 같은 다양한 데이터베이스 엔진을 사용하여 데이터베이스를 쉽게 배포, 운영 및 확장할 수 있다.

완전 관리형 서비스: 

Amazon RDS는 데이터베이스 엔진의 일상적인 관리 작업을 대신 수행하므로 사용자는 데이터베이스의 

하드웨어 및 소프트웨어 설정, 패치 및 백업과 같은 작업을 걱정하지 않고 데이터베이스에 집중할 수 있다.

다양한 데이터베이스 엔진: 

Amazon RDS는 MySQL, PostgreSQL, Oracle, SQL Server 및 MariaDB와 같은 다양한 데이터베이스 엔진을 지원한다.

원하는 엔진을 선택하고 사용할 수 있다.

자동 백업: 

Amazon RDS는 자동 백업을 지원하여 데이터베이스 상태를 일정한 간격으로 백업하고 복원할 수 있다.

고가용성: 

RDS는 여러 가용 영역에 데이터베이스 인스턴스를 배포하여 고가용성을 제공하며, 장애 시 자동 장애 복구를 수행한다.

보안: 

데이터베이스 액세스를 제어하기 위해 Virtual Private Cloud (VPC) 내에서 데이터베이스를 실행하고, 

데이터베이스 암호화 및 인증을 통해 데이터 보안을 강화할 수 있다.

스케일링: 

RDS는 수직 및 수평 스케일링을 지원하여 데이터베이스 성능을 조정할 수 있다. 

필요에 따라 CPU, 메모리 또는 스토리지를 확장할 수 있다.

성능 모니터링: 

Amazon CloudWatch와 통합하여 데이터베이스 성능을 모니터링하고 대시보드를 통해 리소스 사용량 및 알림을 확인할 수 있다.

읽기 전용 복제본: 

읽기 전용 복제본을 생성하여 읽기 작업을 분산시키고 원본 데이터베이스의 부하를 줄일 수 있다.

시간 기반 스냅샷: 

특정 시점의 데이터베이스 상태로 스냅샷을 생성하고 복원하여 데이터 복구 및 테스트에 사용할 수 있다.

Amazon RDS는 데이터베이스 관리 부담을 줄이고 안정적이고 확장 가능한 관계형 데이터베이스 솔루션을 제공한다. 

데이터베이스 스키마 설계부터 운영 및 보안에 이르는 모든 측면에서 강력한 지원을 제공하여 

비즈니스 애플리케이션을 구축하고 실행하는 데 도움이 된다.

 

.

.

.

.

ACM & ELB(ALB)

ACM (AWS Certificate Manager)과 ELB (Elastic Load Balancer, 특히 ALB, Application Load Balancer)는 웹 애플리케이션 및 웹 사이트를 운영하고 안전하게 배포하는 데 사용되는 중요한 서비스이다.

AWS Certificate Manager (ACM):
SSL/TLS 인증서 관리: ACM은 SSL/TLS 인증서를 생성, 발급, 관리 및 갱신하는 데 사용된다. 

무료로 제공되는 공인 인증 기관 (CA)에서 발급한 공인 인증서를 사용하거나 ACM이 제공하는 무료 인증서를 사용할 수 있다.

자동 갱신:

ACM은 인증서의 자동 갱신을 지원하므로 인증서 만료로 인한 문제를 방지할 수 있다.

통합: 

ACM은 다른 AWS 서비스와 쉽게 통합된다. 특히, ELB (Elastic Load Balancer) 및 CloudFront와 함께 사용할 수 있다.

보안 및 관리: 

ACM은 비밀 키와 같은 중요한 정보를 안전하게 저장하고 관리하며 인증서 사용 현황을 모니터링할 수 있는 대시보드를 제공한다.

Elastic Load Balancer (ELB, 특히 ALB - Application Load Balancer):
로드 밸런싱:

ELB는 트래픽을 여러 EC2 인스턴스 또는 컨테이너로 분산하여 애플리케이션의 가용성과 확장성을 향상시킨다.

Layer 7 로드 밸런서 (ALB): 

ALB는 Layer 7 (애플리케이션 계층)에서 동작하며 HTTP 및 HTTPS 트래픽을 기반으로 요청을 분배하고, 

URL 경로 기반 라우팅, 호스트 기반 라우팅, 컨텐츠 기반 라우팅 등 고급 로드 밸런싱 기능을 제공한다.

Auto Scaling와 통합: 

ELB는 Auto Scaling 그룹과 연동하여 자동으로 EC2 인스턴스를 추가하거나 제거하여 트래픽에 따른 확장을 지원한다.

보안:

ELB는 SSL/TLS 암호화 및 ACM과 통합하여 보안을 강화한다.

모니터링: 

ELB는 CloudWatch와 통합되어 로드 밸런서 성능 및 상태 모니터링을 제공한다.

ACM과 ELB (특히 ALB)는 웹 애플리케이션의 성능, 가용성 및 보안을 개선하는 데 중요한 역할을 한다.

ACM은 SSL/TLS 인증서 관리를 단순화하고 보안을 강화하며,

ELB (특히 ALB)는 트래픽을 효과적으로 분산하여 애플리케이션을 안정적으로 운영할 수 있게 해준다.

이러한 서비스를 사용하면 AWS에서 호스팅하는 애플리케이션을 보다 신뢰성 있게 구축하고 관리할 수 있다.

 

.

.

.

.

 

 

 

ECR

Amazon Elastic Container Registry (Amazon ECR)는 완전 관리형 컨테이너 이미지 레지스트리 서비스이다.

Amazon ECR을 사용하면 Docker 컨테이너 이미지를 저장, 관리 및 배포할 수 있으며, Amazon Elastic Kubernetes Service (EKS), Amazon ECS (Elastic Container Service), 및 자체 호스트된 Kubernetes 클러스터와 같은 컨테이너 오케스트레이션 서비스와 통합하여 사용할 수 있다.

완전 관리형 서비스: 

Amazon ECR은 이미지 저장, 관리, 보안, 백업, 복원 및 확장과 같은 모든 이미지 관리 작업을 자동화하므로 사용자는 이미지 레지스트리의 운영과 관리에 대해 걱정하지 않고 개발에 집중할 수 있다.

Docker 호환: 

Amazon ECR은 Docker 이미지 포맷을 사용하므로 기존 Docker 도구와 통합이 원활하며, 

Docker CLI (Command Line Interface)를 사용하여 이미지를 푸시하고 풀 수 있다.

보안 및 액세스 제어: 

ECR은 AWS Identity and Access Management (IAM)과 통합하여 이미지 레지스트리에 대한 액세스를 제어하고 

IAM 롤을 통해 컨테이너 서비스에 액세스 권한을 부여할 수 있다.

또한 이미지 스캔을 통해 보안 취약성을 식별하고 수정할 수 있다.

가용성과 내구성: 

ECR은 여러 가용 영역에 컨테이너 이미지를 저장하여 고가용성과 내구성을 제공하며,

이미지 복제를 사용하여 지역 간 이미지 복사를 자동화할 수 있다.

버전 관리: 

ECR은 이미지 버전 관리를 지원하여 이미지의 변경 이력을 추적하고, 롤백 및 테스트를 쉽게 수행할 수 있다.

스케일링 및 통합: 

Amazon ECR은 Amazon ECS, Amazon EKS 및 Docker Compose와 함께 사용할 수 있으며, 

컨테이너 오케스트레이션 플랫폼과 시스템에서 원활하게 통합된다.

비용 효율성: 

Amazon ECR의 요금은 저장된 이미지의 양과 데이터 전송에 따라 과금되므로 사용한 리소스에 대해서만 비용을 지불하게 된다.

Amazon Elastic Container Registry는 컨테이너 이미지 관리를 단순화하고 컨테이너 기반 애플리케이션을 더 효율적으로 운영할 수 있도록 도와주는 중요한 서비스이다. 

컨테이너 이미지를 안전하게 보관하고 배포할 때 사용할 수 있으며, AWS 클라우드 환경에서 높은 가용성과 안정성을 제공한다.