VPN은 Virtual Private Network란 뜻으로 한국어로는 "가상 사설망"이라고 한다. VPN은 같은 네트워크 상에서 필요에 따라 구역을 나누어 A구역과 B구역을 따로 사용할 수 있게 해주는 기능을 말한다.
예를 들자면 회사에서 A팀과 B팀의 업무를 나눠야 할때 물리적으로 네트워크를 나누기 위해서는 기기를 추가 한다던지 선을 연장한다던지 많은 일이 추가로 필요하게 된다. 이때 VPN을 사용하여 같은 네트워크 상에서 구역을 나누어 서로 간섭하지 않는 네트워크를 사용할 수 있는 가상의 망을 사용 할 수 있게된다.
Virtual Private Cloud의 약자로 가상 사설 클라우드를 뜻한다. 가상 네트워크 서비스로 퍼블릭 네트워크와 프라이빗 네트워크를 분리하고 모니터링 할 수 있도록 해주는 서비스이다.
기본적으로 AWS에서는 아마존 클라우드 내에서 private ip를 사용하는 일종의 가상 사설 네트워크망을 만들어줄 수 있게 해주는 서비스이다. VPN에서와 같이 사용자의 계정에 따라 아마존 클라우드에서 사용자에게 독립된 개인 공간을 지정해주어 이 공간 안에서 사용자는 원하는 서비스를 개인적으로 구축 할 수 있게 된다. 기본적으로 많이 사용하는 EC2 인스턴스들과, RDS 혹은 S3같은 서비스들이 VPC라는 테두리 안에서 구축되게 된다.
클라우드의 종류는 이렇게 나뉜다.
전통적으로 기업의 어플리케이션 구현은 모놀리틱 아키텍처를 기반으로 구성되었다. 이러한 방식은 아키텍처 자체는 간단하다는 점이 있지만, 특정 서비스에 변경이 있을 경우 전체적인 구조를 변경해야 하는 경우도 있으며 서비스를 중단 해야 할 경우도 생기는 불편함이 있었다.
그래서 최근에는 MSA(MicroService Architecture), 마이크로 서비스 아키텍쳐에 대한 기업의 관심이 높아지는 것으로 알고있다. 기본적으로 MSA는 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법이다. 이렇게 된다면 각 서비스는 독립된 서버로 타 컴포넌트와 의존성이 없기 때문에 독립된 배포를 하게 되며, 필요에 따라 다른 서비스를 간섭하지 않고 부분적인 서비스의 확장이 가능하게 된다.
하지만 각 서비스가 독립적으로 개발/배포를 진행하기 때문에 API통신을 통해 가져와야 하는 다른 컴포넌트의 데이터를 URL이 각기 다르기 때문에 가져오는데 어려움이 생기거나 트랜젝션으로 묶을 수 없는 문제가 생기게 된다.
이러한 문제점을 해결하기 위해 사용되는 서비스가 API Gateway 이다. 서비스로 전달되는 모든 API요청의 관문 역할을 하며 시스템의 아키텍쳐를 내부로 숨기고 외부의 요청에 대한 응답만을 적절한 형태로 응답해주는 기능을 해준다. 이러한 기능을 보통 라우팅이라고 하며 이렇게 되면 클라이언트의 내부 구조가 모놀리틱인지 마이크로소프트인지 관계 없이 서로 약속된 형태로써 API 요청을 주고 받을 수 있게 된다.
API Gateway는 실제 백엔드 서비스 또는 데이터와 접속하고 API 호출에 대한 정책, 인증 및 일반 엑세스 제어를 적용하여 중요한 데이터를 보호하는 트래픽 관리자 기능을 해준다.
보통 서버에 가해지는 부하가 커지게 될때 두가지 방법을 고려하게 되는데 서버의 인스턴스 성능을 올려주는 스케일 업(Scale -up)이라는 방법과 서버를 여러대로 나눠서 트래픽을 처리하는 스케일 아웃(Scale-out)이라는 방법이 있다. 로드 밸런서는 이 중 스케일 아웃에 속하며 서버에 가해지는 트래픽을 여러대의 서버에게 균등하게 분산시켜주는 역할을 해준다.
ELB는 AWS의 로드 밸런서 서비스이다. 기본적으로 AWS에서 제공하는 VPC 서비스에 탑재되는 기능이며 사용자의 요청을 받아 VPC내의 리소스에 적용되어 부하를 적절히 분산시켜 줄수 있다. 뿐만 아니라 ELB 서비스는 단순히 부하 분산 서비를 넘어 HTTP Header를 조작하여 전달 대상을 정하거나 보안 기능을 강화하고 CloudFront와 연동하여 반응 속도를 올리며 부하 분산 대상 리소스에 대한 지속적인 헬스체크로 다운된 서버를 제외해주는 기능을 가지고 있다.
AWS에서 제공하는 ELB의 경우 총 4가지의 종류로 나뉘게 된다.
S3는 AWS에서 지원하는 파일 서버의 역할을 해주는 서비스이다. 가장 오래된 서비스중 하나로 뛰어난 내구성과 가용성을 자랑하며 정적파일들을 용이하게 관리하도록 해준다.
특징으로는 단순한 웹 서비스 인터페이스를 사용하여 언제 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있으며 엑세스 감사 및 관리 기능을 제공하여 S3에서 생성된 버킷 및 객체를 프라이빗하게 관리할 수 있도록 해 높은 신뢰성을 보여준다.
또한 다른 AWS 서비스와의 호환성이 커 함께 사용될 수 있으며 클라우드 어클리케이션, 컨텐츠 배포, 백업 및 아카이빙, 재해 복구 및 빅데이터 분석을 포함한 다양한 사례에 적용 될 수 있다는 장점이 있다.
다만 매달 5GB의 프리티어 용량을 넘어가게 되는 사용량에 대해서는 요금이 청구되며 해당 리전 외에 대한 데이터 송수신 시에는 요금이 추가된다.
CDN이란 전세계 어느 곳이던지 지리적인 한계에서 벗어나 콘텐츠 사용자에게 전송할 수 있는 기술을 의미한다. 사용자에게 더욱 빠른 콘텐츠 제공을 위해 CDN은 여러 지리적 위치에 접속 지점(POP) 또는 엣지 서버 그룹을 설정하는 방식으로 작동한다. 지리적으로 분산된 이 네트워크는 캐싱, 동적 가속 및 엣지 로직계산의 원리를 기반으로 작동된다.
AWS CloudFront는 모든 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 아마존에서 지원하는 CDN 서비스이다. 아마존에서 제공하는 엣지 로케이션(또는 서버)를 통해 요청자에게 가장 가까운 지리적 위치에 있는 POP서버를 이용하여 지연시간을 최소화 시켜준다.
AWS Secrets Manager란 AWS에서 제공하는 비밀 값 관리 서비스이다. Secrets Manager를 사용하면 보안 암호를 어플리케이션에 직접 포함하지 않아도 되기 때문에 코드를 볼 수 있는 제 3자에게 보안 암호를 누출하거나 손상될 일이 사라지게 된다. 또한 지정한 일자에 따라 자동으로 보안 암호를 교체하도록 구성할 수 있다.
Parameter Store 또한 AWS에서 제공하는 비밀 값 관리 서비스이다. 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공하며, 암호, 데이터베이스 문자열, 라이선스 코드와 같은 데이터를 파라미터 값(String, StringList, SecureString)으로 저장할 수 있다.
AWS에서 제공하는 두 서비스는 비슷하지만 엄연히 다른 서비스이므로 다른 점도 있다.
Secrets Manager에서는 AWS CLI 또는 SDK를 통해 임의의 암호를 생성하고 무작위로 생성된 암호값을 참조 받아 이용하는 서비스 구성에서 참조할 수 있다. 또한 암호 값을 교체하는 기능도 지원하며 다른 계정간 암호를 공유 할수 있다는 점도 있다.
보통 DB 정보와 같은 민감한 정보는 암호화가 지원이 되는 Secretes Manager에 저장을 하며 간단한 정보 같은 경우 Parameter Store를 사용하여 저장하게 된다. 다만 Secrets Manager는 Parameter Store와는 달리 유료로 서비스를 제공하고 있다.