들어가며

이번 달 원티드 백엔드 챌린지 코스 주제는 백엔드 인프라 설계 with AWS 였다. 첫 수업에서는 AWS 인프라 관련 요소들에 대해 살펴보았습니다. AWS 인프라 관련 요소들에는 AWS API Gateway, AWS S3, AWS ELB, AWS CloudFront, AWS Secret Manager 등이 있다고 합니다.

한 번의 수업만 듣고는 다 이해하지 못해 따로 공부하는 시간을 가졌고 이번 글을 통해 수업 내용에 제가 공부한 내용을 추가해 학습 내용을 정리하는 시간을 가지려고 합니다.

여러 자료를 찾아보며 나름대로 정리한 내용이라 부정확한 정보가 있을 수 있으니 언제든지 잘못된 정보가 있다면 댓글로 남겨주시기 바랍니다.

 

앞에서 언급했다시피 AWS 인프라 관련 요소들에는 AWS API Gateway, AWS S3, AWS ELB, AWS CloudFront, AWS Secret Manager 등이 있다고 했습니다. 

각 요소에 대해 이것은 무엇이고 왜 사용하고 어떤 특징이 있는지 하나씩 알아보도록 하겠습니다.

AWS API Gateway

1. 무엇인가?

어떤 규모에서든 개발자가 API 를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다.

쉽게 말해 서버의 "대문" 과 같은 역할을 합니다.

2. 왜 사용하나요?

특히 큰 서비스를 여러 개의 마이크로 서비스로 쪼개어 개발/운영하는 MSA(Microservice Architecture) 아키텍처에서 필수적인 요소입니다. 큰 규모의 서비스는 수십 ~ 수백 개의 작은 서비스로 구성되어 있습니다.
만약 클라이언트에서 서비스를 직접 호출하는 형태(클라이언트 -> 서버) 라면 다음과 같은 문제점이 발생할 수 있습니다.

- 각각의 서비스마다 인증/인가 등 공통 로직을 구현해야 하는 번거로움이 있습니다.
- 수많은 API 호출을 기록하고 관리하기가 어렵습니다.
- 클라이언트에서 여러 마이크로 서비스에 대한 번거로운 호출을 해야 합니다.
- 내부의 비즈니스 로직이 외부에 노출되어 보안에 취약해집니다.

이러한 문제점들은 마이크로 서비스의 갯수가 많아질수록 기하급수적으로 늘어나게 될 것입니다.

이때 모든 API 서버의 앞단에 API Gateway 를 둠으로써 엔드포인트와 REST API 를 통합적으로 관리할 수 있습니다.

3. 어떤 기능들을 제공하나요?

api 경유지 역할뿐만 아니라, 엔드포인트 서버에서 공통으로 필요한 인증/인가, 트래픽 관리, CORS 지원, 요청/응답 변조 등의 다양한 기능들을 플러그인 형태로 제공하고 있습니다.

4. 어디에 많이 사용되나요?

API Gateway를 통해 AWS Lambda 와 연동하여 서버리스(Serverless) 서비스를 구축하는 데 많이 사용됩니다.

어느 정도 규모 이상의 마이크로 서비스 기반 어플리케이션에서 많이 사용됩니다.

5. 적용 시 고려사항

API Gateway의 Scale-out 적용이 유연하게 일어나지 않을 경우, API Gateway가 병목 지점이 되어 어플리케이션의 성능 저하가 일어날 수 있습니다.

API Gateway라는 추가적인 계층이 만들어지는 것이므로 그만큼 네트워크 Latency가 증가하게 됩니다.

AWS S3

1. 무엇인가?

이미지, 동영상, 오디오 파일 등과 같은 정적 파일들을 쉽게 관리할 수 있도록 돕는 스토리지 서비스입니다.

단순 파일의 저장공간을 넘어서 데이터를 저장하는 스토리지 플랫폼입니다.

2. 왜 사용하는가?

정적 파일 및 데이터를 저장, 관리하기 위해 사용합니다.

3. 특징

- 많은 사용자가 접속해도 이를 감당하기 위해 시스템적인 작업을 하지 않아도 됩니다.

- 파일에 인증을 붙여서 무단으로 액세스하지 못하도록 할 수 있습니다.

- 버전 관리 기능을 통해 사용자에 의한 실수도 복원 가능합니다.

- 데이터를 여러 시설에서 중복으로 저장해 데이터 손실이 발생한 경우 자동으로 복원합니다.

- 저장할 수 있는 파일 수의 제한이 없습니다.

- 최소 1바이트에서 최대 5TB의 데이터를 저장하고 서비스할 수 있습니다.

AWS ELB

1. 무엇인가?

ELB는 Elastic Load Balancer 의 약자이며, 다수의 컴퓨팅 리소스(EC2, Lambda 등)를 부하 분산시키는 아주 중요한 서비스입니다.

출처: https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/

2. 왜 사용하는가?

특정 서버에 부하가 몰리지 않고 여러 서버에 부하를 고르게 분산하기 위해서

3. 어떤 기능들을 제공하는가?

- 부하 분산, 부한 분산 대상에 대한 헬스 체크, 고정 세션, SSL 암복호화, 헬스 체크를 통한 다운 서버 제외 등이 가능합니다.

- 오토 스케일링과 연동하여 추가된 EC2를 자동으로 ELB의 부하 분산 대상에 포함시키거나 제외시킬 수 있습니다.

- Cloudfront 를 연결하여 반응 속도를 향상시킬 수 있습니다.
- Amazon Certificate Manager(ACM)의 SSL 인증서를 탑재하여 EC2의 부하를 줄입니다.
- HTTP Header를 조작하여 전달 대상을 정하거나 고정 페이지를 반환할 수 있습니다.

4. 어떻게 구성되어 있는가?

외부의 요청을 받아들이는 리스너와 요청을 분산/전달할 리소스의 집합인 대상 그룹으로 구성됩니다.

5. 종류

세 가지의 로드 밸런서가 있습니다.

Application Load Balancer(ALB), Network Load Balancer(NLB), Class Load Balancer(CLB) 가 존재합니다.

이 중에서 Application Load Balancer(ALB) 가 가장 많이 사용된다고 합니다.

AWS CloudFront

1. 무엇인가?

AWS 에서 제공하는 CDN 서비스입니다.

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/lambda-cloudfront-trigger-events.html

2. 왜 사용하는가?

캐싱을 통해 사용자에게 좀 더 빠른 전송속도를 제공하기 위해서 사용합니다.

3. 특징

전세계 이곳저곳에 Edge Server(Location) 를 두고 클라이언트에 가장 가까운 Edge Server를 찾아 네트워크 Latency 를 최소화시켜 데이터를 빠르게 제공합니다.

이전에 요청받은 데이터와 동일한 요청의 데이터에 대해 빠르게 응답해 주기 위해 캐싱 기능을 제공합니다.

4. 데이터가 어떻게 전송되나요?

Edge Server는 클라이언트로부터 요청이 들어오면 요청이 발생한 데이터에 대해 캐싱 여부를 확인합니다. 

캐싱되어 있는 경우, 클라이언트의 요청에 맞는 데이터를 응답합니다.

캐싱되어 있지 않은 경우, 본 서버로 요청이 포워딩됩니다. 요청받은 데이터를 본 서버에서 획득한 후 Edge Server에 캐싱 데이터를 생성하고 클라이언트로 응답합니다.

AWS Secret Manager

1. 무엇인가?

AWS 에서 제공하는 비밀 값 관리 서비스입니다.

2. 왜 사용하는가?

데이터베이스 접속 정보, API 인증 키 등 민감 정보를 외부로부터 노출되는 것을 막기 위해 사용합니다.

2. 어떻게 사용하는가?

비밀 값들을 저장해두고 어플리케이션에서 AWS 의 API 를 호출해서 받아가 사용합니다.

3. 동작 방식

1. 관리자가 Secret Manager에 비밀을 만들고 그 비밀 안에 여러 key, value 비밀 값들을 등록합니다.

2. 비밀 값들는 AWS KMS(Key Management Service)라는 키 관리 서비스를 통해 암호화됩니다.

3. 비밀 값들을 사용하는 서버에서 AWS CLI나 SDK를 이용해 특정 IAM 사용자로부터 Secret Manager에 비밀 값들을 요청합니다.
4. IAM에서 요청한 사용자에게 해당 비밀을 조회할 수 있는 권한이 있는지 판단하면 Secret Manager가 비밀 값을 복화해서 응답으로 줍니다.

마치며

이번 글을 통해 AWS API Gateway, AWS S3, AWS ELB, AWS Cloudfront, AWS Secret Manager 에 대해 각각 무엇이고 왜 사용하고 어떤 기능과 특징이 있는지 알아보았습니다. 

이 요소들은 앞으로 AWS 를 이용해 서비스의 안정적인 운영을 위해 반드시 활용해야 겠다는 생각이 들었습니다.

 

복사했습니다!