AWS란?
AWS는 다양한 서비스와 인프라를 제공하는 클라우드 플랫폼으로, 기업들이 애플리케이션을 효율적으로 개발하고 배포할 수 있도록 지원한다. AWS에서 제공하는 서비스에 대해 알아보겠다.
S3: 정적 파일 저장소
Amazon S3는 대규모 데이터를 저장할 수 있는 안전한 스토리지 서비스다. 웹사이트의 이미지, 동영상, 백업 파일 등 다양한 정적 콘텐츠를 저장하는 데 활용된다.
CloudFront: CDN 서비스
CloudFront는 콘텐츠를 사용자에게 빠르게 전달하기 위해 전 세계에 분산된 서버 네트워크를 사용한다. 사용자와 가장 가까운 서버를 통해 콘텐츠를 제공해 지연 시간을 줄일 수 있다.
Region과 AZ
- Region: AWS의 물리적 위치로 구분된 지리적 영역이다.
- AZ(Availability Zone): Region 내의 독립적인 데이터 센터들이다. AZ는 서로 물리적으로 분리되어 있어 하나의 AZ에 장애가 발생해도 다른 AZ에 영향을 주지 않는다.
서브넷의 구분: Public과 Private
- Public Subnet: 인터넷과 연결되어 외부와의 통신이 가능하다.
- Private Subnet: 인터넷과 직접 연결되지 않아 외부에서 접근할 수 없다.
- 구분 요소: 인터넷 게이트웨이와 라우팅 테이블을 통해 연결된 서브넷이 public이다.
인터넷 게이트웨이와 라우팅 테이블
- 게이트웨이: VPC의 네트워크 트래픽이 외부와 연결될 수 있는 출입구 역할을 한다.
- 라우팅 테이블: 네트워크 내 데이터의 이동 경로를 결정하며, 인터넷 게이트웨이와 연결된 서브넷을 통해 외부로 나가는 경로를 설정한다.
NAT 게이트웨이: 경비실 같은 역할
NAT(Network Address Translation) 게이트웨이는 private subnet에서 외부로 나가는 트래픽을 위한 중간 관문이다. 내부망의 private IP를 public IP로 변환하여 외부로 나갈 수 있도록 한다. 이는 프리티어에 해당하지 않으며, 사용량에 따라 요금이 부과된다.
보안 구성 요소: 네트워크 ACL과 Security Group
- 네트워크 ACL: 서브넷 단위로 적용되는 네트워크 보안 정책으로, 트래픽의 허용과 거부 규칙을 설정할 수 있다.
- Security Group: ACL보다 더 작은 단위인 개별 인스턴스에 적용되는 보안 정책으로, 기본적으로 모든 트래픽을 차단하며 허용 규칙만 존재한다.
AWS 아키텍처 다이어그램
아키텍처 다이어그램에서 화살표는 패킷의 흐름을 나타내며, 이중화된 AZ 및 Region을 통해 고가용성을 보장한다.
CIDR 표기법
**CIDR(Classless Inter-Domain Routing)**은 VPC 안에서 IP 주소 범위를 결정할 때 사용하는 표기법이다. 예를 들어, /16은 65,536개의 IP 주소를, /24는 256개의 IP 주소를 나타낸다.
VPC 엔드포인트
VPC 내에 S3 게이트웨이 엔드포인트를 허용하면 추가적인 네트워크 비용 없이 S3에 접근할 수 있다.
Bastion Host
Bastion Host는 외부 인터넷과 private subnet을 연결하는 중계 서버다. 외부에서 private subnet으로 접근할 때 보안성을 높이기 위해 사용되며, 접근 로그 기록 등의 기능을 제공한다.
---
※ 기타 개발 TIP
환경 구분: prod, qa, dev
- prod(프로덕션): 실제 운영 환경.
- qa(품질 보증): 테스트를 위한 실험 환경.
- dev(개발): 개발자들이 코드를 작성하고 테스트하는 환경.
Git Branching 전략
Git branching 전략에는 Git flow와 GitLab flow가 있다. 다양한 브랜치를 사용해 코드를 관리하고, 기능별로 나눠 개발과 병합을 수행한다.
API 설계 확인법
웹사이트의 F12 개발자 도구를 열고 Network 탭의 Fetch/XHR을 통해 Request URL과 query parameter를 확인할 수 있다. Response를 분석해 API의 구조를 파악할 수 있다.
---
NGINX
NGINX는 오픈 소스 웹 서버 소프트웨어로, 주로 리버스 프록시( 클라이언트의 요청을 받아서 실제 서버로 전달하고, 서버의 응답을 다시 클라이언트에게 전달하는 중간 서버), 로드 밸런서, HTTP 캐시 등 다양한 용도로 사용된다. 높은 성능과 가벼운 자원 사용으로 많은 트래픽을 효과적으로 처리할 수 있다. 웹 요청을 처리할 때 정적 콘텐츠 제공뿐만 아니라 동적 요청을 다른 애플리케이션 서버로 전달하는 역할도 한다. 또한, 다중 연결 처리에 효율적인 이벤트 기반 아키텍처를 사용해 높은 동시성을 제공한다.
인프라는 서버, 네트워크, 스토리지 등의 IT 자원을 관리하는 기반을 말한다. 스케일업은 더 큰 서버나 자원을 추가하여 성능을 높이는 것이고, 스케일다운은 그 반대로 자원을 줄여 효율성을 높이는 것을 의미한다. 이를 통해 시스템이 더 많은 사용자를 처리하거나 비용을 절감할 수 있다.
MSA 구조
MSA(Microservices Architecture)는 여러 개의 작은 서비스들이 독립적으로 작동하며 큰 시스템을 구성하는 구조다. 각 서비스는 독립적이라서 서로 다른 기술 스택을 사용해도 되며, 특정 서비스에 장애가 발생해도 전체 시스템에 큰 영향을 주지 않는다. 확장성과 유지보수성이 뛰어난 장점이 있다.
엘라스틱 빈스톡과 엘라스틱 쿠버네티스
엘라스틱 빈스톡은 AWS에서 제공하던 애플리케이션 배포 및 관리 플랫폼이다. 쉽고 편리하지만, 현재는 레거시로 간주되고 있다. **엘라스틱 쿠버네티스(EKS)**는 쿠버네티스 기반으로 컨테이너화된 애플리케이션의 오케스트레이션을 자동화하는 서비스다. 더 유연하고 현대적인 인프라 운영을 가능하게 해준다.
Amazon Athena
Athena는 S3에 저장된 데이터를 SQL 쿼리로 분석할 수 있는 서버리스 서비스다. 데이터베이스를 따로 설정할 필요 없이 S3에 저장된 데이터를 바로 분석할 수 있어 편리하다. 데이터를 검색하고 분석하는 데 비용과 시간을 절감할 수 있다.
CloudWatch
CloudWatch는 AWS의 모니터링 및 로깅 서비스다. 애플리케이션 및 인프라 자원의 성능을 실시간으로 추적하고 로그 데이터를 수집해 시스템의 건강 상태를 파악할 수 있다. 이를 통해 오류를 빠르게 감지하고 대응할 수 있다.
API Gateway
API Gateway는 RESTful API와 WebSocket API를 위한 AWS의 관리형 서비스다. 클라이언트 요청을 서버로 안전하게 전달하며, 인증, 로깅, 속도 제한 등 다양한 기능을 제공한다. Lambda 함수나 다른 백엔드 서비스와 쉽게 연동할 수 있어 서버리스 아키텍처의 핵심 역할을 한다.
AWS Lambda
Lambda는 서버를 관리할 필요 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스다. 특정 이벤트가 발생할 때 코드를 자동으로 실행하며, 비용은 실행된 시간에 따라 부과된다. 간단한 자동화 작업이나 API와 연계된 백엔드 로직에 적합하다.
DynamoDB
DynamoDB는 AWS의 NoSQL 데이터베이스 서비스다. 고속의 읽기와 쓰기 성능을 제공하며 자동으로 확장된다. 데이터가 비정형이거나 스키마가 자주 바뀌는 경우에 유용하며, 애플리케이션의 확장성과 안정성을 높인다.
GraphQL
GraphQL은 클라이언트가 필요한 데이터를 정확하게 요청할 수 있도록 설계된 API 쿼리 언어다. REST API의 단점인 과다/과소 요청 문제를 해결할 수 있다. 클라이언트는 어떤 데이터를 필요로 하는지 선언할 수 있고, 서버는 요청된 데이터만 반환해 효율적이다.
'AWS' 카테고리의 다른 글
[AWS] AWS란? / 프리티어 계정 생성하기 (0) | 2022.09.05 |
---|