< AWS 다양한 아키텍처 >
1. 고가용성 아키텍처
고가용성(High Availability)이 중요한 이유
1. 비즈니스적 영향: 서비스 중단으로 인한 매출 손실
2. 브랜드 신뢰 하락: 고객 이탈 및 불만
고가용성의 설계 아이디어
1. 모든 기능은 장애가 발생한다는 가정하에 역방향으로 설계
2. 가능한 모든 지점에서 중복성을 구현하여, 단일 장애로 인해 전체 시스템이 중단 방지
고가용성 아키텍처를 만드는 핵심 설계 원리
1. 단일 장애점(SPOF, Single Point of Failure) 제거 → 이중화or삼중화 하기
2. 다중 리전, 다중 AZ 사용
3. 자동 복구 메커니즘 구축
4. 트래픽 분산 및 장애 감지 후 우회
5. 인프라 자동화(Auto Scaling, Elastic Load Balancing)


2. 결합 해제 아키텍처

- 요청을 받는 서버와 요청을 처리하는 서버로 분리
- 요청을 받는 서버와 요청을 처리하는 서버 사이에 SQS서비스를 활용하여 비동기 처리
# 동기 처리=요청을 받아서 처리할 때까지 요청을 받는 서버가 기다리는 것=강한결합
- Amazon SQS 서비스(Simple Queue Service)
n 완전 관리형 메시지 대기열 서비스
n 메시지 처리 및 삭제될 때까지 저장
n 메시지 생산자와 수신자 간 1대1 메시지 버퍼 역할
n Dead Letter Queue(DLQ)은 처리되지 못한 메시지 대기열로 Queue 메시지 처리에서 오류가 발생하면 메시지 이동
< AWS 인프라 자동화 >
- 인프라 관리를 코드로 할 수 있다.
# 인프라 관리: 보안 구성, 네트워크 구성, 서버 구성
- 아키텍처 및 인프라 구성을 수동으로 생성하면 버전 관리가 없음
- 수동으로 환경을 생성할 경우 비상시에 이전 버전으로 롤백 불가능
- 사람들이 수동으로 환경을 제어하고 편집하도록 허용하는 것은 위험
- 자동화는 일관성을 유지할 수 있게 해줌
AWS CloudFormation
- AWS 리소스(EC2, S3, IAM, VPC 등)를 코드 형태로 정의하고 배포할 수 있게 해주는 서비스
- 개발자나 운영자가 동일한 인프라 환경을 재현하거나 자동화 배포할 수 있도록 지원
- 템플릿 파일(template.yaml 또는 template.json)을 기반으로 스택(Stack)이라는 단위로 리소스를 생성/관리
- 코드형 인프라(Infra as a Code) 제공 서비스
- 장점
n 자동화: 클릭 없이 코드로 인프라 배포 가능
n 일관성: 여러 환경(개발, 테스트, 운영)에서 동일한 설정 유지
n 버전 관리: 템플릿 파일을 Git 등으로 관리 가능
n 재사용성: 템플릿 모듈화 및 파라미터 활용으로 다양한 상황 적용 가능
AWS 인프라 자동화 활용 사례
1. DevOps 자동화 환경에서의 활용
▪ CI/CD 파이프라인 통합
CloudFormation은 CodePipeline, CodeBuild, CodeDeploy 등과 통합되어, 애플리케이션 코드뿐 아니라 인프라(EC2, RDS, S3, IAM 등) 도 자동으로 배포. → “코드와 인프라의 동시 배포”를 가능하게 하여 완전한 DevOps 자동화 구현.
▪ IaC (Infrastructure as Code)
개발자가 Git에 템플릿 파일을 관리하고, 변경사항이 푸시되면 자동으로 CloudFormation이 실행되어 동일한 인프라를 재현할 수 있음 → 인프라 변경 이력 추적, 롤백, 협업이 용이
2. 인프라 표준화 및 재사용
▪기업 내 여러 프로젝트가 동일한 네트워크 구조나 보안정책을 써야할 때 CloudFormation 템플릿을 “표준 템플릿”으로 만들어 재사용
3. 멀티환경 관리(개발/테스트/운영)
▪동일한 템플릿으로 개발(Dev), 스테이징(Stage), 운영(Prod) 환경을 자동 생성 가능
4. 보안 및 컴플라이언스 관리
▪모든 리소스를 코드로 정의하므로, 누가 어떤 리소스를 생성했는지 명확히 추적할 수 있음
5. 비용 및 운영 효율화
▪불필요한 리소스를 자동으로 삭제하거나, 특정 환경만 유지하는 템플릿(코드)을 통해 비용 절감 가능
< Azure 소개 >
→ Microsoft가 제공하는 글로벌 클라우드 플랫폼
→ 컴퓨팅, 저장소, 데이터베이스, 네트워크, AI 등 다양한 서비스를 지원
→ 활용 분야: 기업 IT 인프라 이전, 애플리케이션 개발, 데이터 분석, 인공지능, IoT 서비스 등 다양한 분야에 활용 가능
- 장점
n 글로벌 인프라: 전 세계에 분산된 데이터 센터를 통한 빠른 서비스 제공과 고가용성 보장
n 강력한 보안 및 컴플라이언스: 다양한 산업별 보안 인증 획득, 데이터 암호화 및 위협 탐지 기능 제공
n 하이브리드 클라우드 지원: 온프레미스 환경과 클라우드를 통합하는 유연한 아키텍처 제공 (예: Azure Arc, Azure Stack)
n 다양한 개발 도구 및 언어 지원: Visual Studio, GitHub, 다양한 오픈소스 언어(예: Python, Java, .NET)와의 뛰어난 통합성
n Microsfot 제품군과의 높은 연동성
Azure 리전
• Microsoft가 특정 지역에 구축한 물리적 데이터 센터 집합
• 하나의 리전은 하나 이상의 데이터 센터로 구성
• 각 리전은 독립적인 인프라, 자원, 서비스 가용성을 가짐
- 리전 선택 기준
• 사용자와 가까운 위치로 지연 시간 최소화
• 서비스 지원 여부 (모든 서비스가 모든 리전에서 제공되지 않음)
• 법적 요구사항 (데이터 저장 위치 관련 규제 대응)
가용 영역(AZ)
• 하나의 리전 내에 존재하는 물리적으로 분리된 독립 데이터 센터
• 전력, 네트워크, 냉각 시스템이 각각 독립적으로 구성됨
- 목적
• 하드웨어 및 인프라 장애 발생 시 서비스 지속성 유지
• 단일 장애 지점을 제거하여 고가용성(High Availability) 확보
리소스 그룹(Resource Group) # AWS에는 없는 것, 오직 Azure의 기능
• Azure에서 가상 머신, 데이터베이스, 스토리지 계정 등 리소스들을 논리적으로 묶는 단위
• 구독(Subscription) 아래에 여러 개의 리소스 그룹이 존재
• 리소스는 생성 시 반드시 하나의 리소스 그룹에 속해야 함
- 목적
• 관련 리소스를 묶어 효율적으로 관리
• 프로젝트, 부서, 환경(개발/운영) 등 기준으로 그룹화
• 권한 제어, 정책 적용, 비용 추적 등을 그룹 단위로 수행 가능
- 특징
• 리소스 간의 물리적 위치와 무관하게 그룹화 가능
• 하나의 리소스는 오직 하나의 리소스 그룹에만 속함
• 필요 시 리소스를 다른 그룹으로 이동 가능
• 그룹 내 리소스들은 서로 다른 리전에 존재 가능
• 그룹 자체는 하나의 위치(Region)를 지정하여 메타데이터 저장에 활용
Azure Protal
- 웹 기반 GUI로 Azure 리소스 관리 인터페이스
- 가상 머신 생성, 네트워크 구성, 리소스 모니터링 등을 GUI로 쉽게 수행
- 직관적인 대시보드 제공, 초보자부터 전문가까지 활용 가능
Azure CLI (Command-Line Interface)
- 명령어를 통해 Azure 리소스를 관리하는 도구
- 자동화 스크립트 작성, 빠른 리소스 배포에 적합
- 다양한 운영체제(Windows, macOS, Linux)에서 사용 가능
- Azure 관리 작업을 명령줄(Command Line)으로 수행
- 스크립트를 활용하여 반복 작업 및 자동화에 유용
Azure 주요 제공 서비스
1. 컴퓨팅(Compute)
• 가상 머신(Virtual Machines), 앱 서비스(App Service), 서버리스 컴퓨팅(Function Apps)
# AWS EC2 = Azure 가상 머신
2. 저장소(Storage)
• 블롭 스토리지(Blob Storage), 파일 스토리지(File Storage), 디스크 스토리지(Disk Storage)
3. 데이터베이스(Database)
• Azure SQL Database, Cosmos DB, Azure Database for PostgreSQL
# MS SQL Server를 Azure에서 편리하게 사용할 수 있도록 함
4. 네트워크(Netwroking(
• 가상 네트워크(Virtual Network), 부하 분산기(Load Balancer), VPN Gateway
5. 인공지능 및 머신러닝(AI & ML)
• Azure Cognitive Services, Azure Machine Learning Studio
# Azure의 큰 장점 중 하나는 자체 앱 내부에서 gpt를 사용 가능
Azure VM이란? # Azure VM = AWS EC2
• Azure에서 제공하는 클라우드 기반 가상 컴퓨터 인스턴스
• 온프레미스 서버와 유사한 방식으로 운영체제, 앱, 네트워크 설정 가능
• 리눅스/윈도우 등 다양한 운영체제 지원
- 일반적인 VM 시리즈 # EC2의 인스턴스 타입과 같음 = 하드웨어 용량 선택
• B 시리즈: 저비용, 버스트 성능 – 소규모 앱, 개발 환경
• D 시리즈: 균형 잡힌 CPU/메모리 – 웹 서버, 엔터프라이즈 앱
• E 시리즈: 메모리 최적화 – 대용량 데이터베이스, 인메모리 캐시
• F 시리즈: 고성능 컴퓨팅 – 계산 집약적 작업
• N 시리즈: GPU 탑재 – AI, 머신러닝, 영상 처리
가상 네트워크(VNet) # VNet = AWS의 VPC
• Azure 내에서 리소스들이 서로 통신할 수 있도록 구성된 가상의 네트워크
• 온프레미스 네트워크처럼 IP 주소, 서브넷, 라우팅, DNS 등 설정 가능
- 구성 요소
n IP 주소 범위
n 서브넷(Subnet)
n DNS 설정: 기본적으로 Azure 제공 DNS 사용
n 라우팅 테이블(Route Table): 사용자 정의 경로를 설정해 트래픽 흐름 제어
n 서비스 엔드포인트 & 프라이빗 링크: 특정 Azure 서비스(예: Storage, SQL)에 VNet을 통해 안전하게 연결 # AWS에선 S3에 안전하게 연결
Azure Storage
→ Microsoft Azure에서 제공하는 클라우드 기반 저장소 서비스
- 주요 스토리지 유형
n Blob Storage: 뭐든지 정형, 비정형 데이터 다 저장 가능 # AWS Object storage
n File Storage: SMB 프로토콜 기반 공유 폴더, NAS대체
n Disk Storage: 가상 머신에 연결되는 관리형 디스크(우리 컴퓨터의 HDD, SDD)
# AWS에서는 EBS
Azure SQL Database # AWS에는 Aurora가 있음
• Microsoft Azure에서 제공하는 완전 관리형(Managed) 관계형 데이터베이스 서비스(=DBMS)
• MS SQL Server 기반으로, 설치·패치·백업 등 관리 작업 없이 사용 가능
• 고가용성, 자동 백업, 보안 기능 내장
배포 옵션
1. 단일 데이터베이스(Single Database) # 하나의 가상머신 인스턴스 위에 하나의 DB
• 하나의 논리적 DB 인스턴스를 독립적으로 운영
• 소규모 애플리케이션, 개별 워크로드에 적합
• 성능과 과금이 DB 단위로 관리됨
2. 엘라스틱 풀(Elastic Pool) # 하나의 가상머신 인스턴스 위에 여러 개의 DB
• 여러 개의 DB가 공유된 리소스 풀을 사용
• 사용량이 일정하지 않은 다수의 DB에 적합
• 비용 최적화에 유리 (리소스 풀 단위 과금)
3. 관리형 인스턴스 (Managed Instance)
• SQL Server와 가장 유사한 구조
• 전체 인스턴스 수준에서 DB 운영 가능
• 기존 온프레미스 SQL Server 마이그레이션에 적합
• 가상 네트워크(VNet) 기반으로 배포됨
데이터베이스 선택 시 고려사항
- 데이터 모델
• 정형 데이터 → 관계형(DBMS)
• 유연한 스키마, JSON 기반 → NoSQL
- 확장성 및 성능 요구
• 빠른 쓰기, 대규모 사용자 → Cosmos DB, Hyperscale SQL
• 안정적 트랜잭션, 일관성 → SQL Database, PostgreSQL
- 운영/보안 요구사항
• Active Directory 인증, RBAC 필요 → SQL Database, Managed Instance
• 글로벌 복제, API 유연성 → Cosmos DB