[프리온보딩] AWS 알아보기 - 1

연어·2022년 12월 12일
0

AWS

목록 보기
1/1
post-thumbnail

AWS.. !
AWS를 사용하면서 필수적으로 알아야 될 이론을 정리하고자 한다.

AWS

Amazon Web Service

아마존에서 제공하는 클라우드 서비스로, 서버와 네트워크 등의 인프라를 빌려 사용할 수 있고 사용한 시간 만큼만 비용을 지불한다.

서비스를 배포하기 위한 서버를 두는 방식으로 크게 On-premise, Cloud Computing 이 있다.
On-premise는 자체적으로 서버를 두고 운용하는 방식이고
Cloud Computing은 IT리소스를 인터넷을 통해 온디맨드로 제공하고, 사용한 만큼 비용을 지불한다.
(ex- AWS, Google Cloud, Azure, 네이버 클라우드 플랫폼 등)

온디맨드
수요에 따라서 제품 또는 서비스를 제공한다. 소비자의 요구사항에 따라 즉시 제공, 공급하는 주문형 방식.

AWS를 왜 쓸까?

제공하는 서비스의 규모가 점점 커져 사용자가 늘어나면 그만큼의 트래픽을 수용 가능한 확장이 필요하다. On-premise방식으로 직접 서버를 구입하고 설치할 경우 직접 관리가 가능하고 보안도 상대적으로 높지만, 늘어난 만큼 자원의 낭비가 발생할 가능성이 높고 비용과 시간이 많이 소모된다.

Cloud Computing방식은 필요한 만큼의 자원을 늘리거나 줄일 수 있는 유연성이 높다. 특히 AWS의 AWS Auto Scaling은 Scale In/Out 기능을 정책에 따라 조정해주는 서비스를 제공한다. 또 사전에 사용량을 예상하고 미리 지불하거나 장기적으로 약정하지 않고 사용한 만큼 비용을 지불하기 때문에 상대적으로 비용이 저렴하다. 인터넷 접속이 가능하다면 서버에 대한 관리도 즉각 처리하고 몇 분만에 전 세계에 배포가 가능해 속도 측면에서도 뛰어나다. 하나의 예로 NETFLIX는 MSA로 전환하며 모든 도메인을 각각 다른 서버로 나누기 위해 클라우드를 선택해 유연성을 확보했다.

On-premise와 Cloud Computing 중 제공하는 서비스의 구조에 따라 어느 방식이 더 나을지 판단해서 적합한 것을 선택해야 할 것이다.

AWS VPC (Virtual Private Cloud)

  • 사용자가 정의한 가상 네트워크 서비스로, 구성 요소를 이용해서 원하는 형태의 네트워크망을 구축할 수 있다.
  • 울타리 안에 우리의 서버를 가두고, 설정한 인터넷 게이트웨이를 통해 통신 (대문 역할)

VPC별로 네트워크를 구성하고 각각의 VPC에 따라 다르게 네트워크를 설정할 수 있다. 이 때 각각의 VPC는 완전히 독립된 네트워크처럼 작동한다.

[VPC 내의 용어]

  • subnet : VPC를 특정 범위로 나눈 범위
  • public subnet : 인터넷 게이트웨이를 통해서 직접 연결이 가능한 구역 (인터넷 연결 O)
  • private subnet : 인터넷과 연결되어 있지 않은 구역
  • Route Table : 목적지의 위치가 정의된 집합 테이블. 네트워크 요청에 맞는 목적지에 도달하도록 방향을 맞춰주는 이정표 역할을 한다.
  • Internet Gateway : VPC와 인터넷을 연결해주는 문
  • NAT Gateway : 네트워크 주소 변환을 통해서 private subnet에 인터넷 통신을 연결하는 게이트웨이로 public subnet 상에서 동작
  • VPC endpoint : NAT, Internet Gateway 등을 통하지 않고 AWS의 서비스를 비공개로 연결이 가능하게 하는 서비스

AWS API Gateway

서버의 대문과 같은 역할로, 규모에 관계없이 API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 서비스.
여러 서버와의 통신 전에 마주치는 하나의 입구와 같기 때문에 로깅, 액세스 제어, 모니터링, 트래픽 관리, CORS 지원, 인증 등의 통일된 설정이 가능하다.

API Gateway는 자신만의 주소를 설정하고 내에 여러 경로를 설정할 수 있다. 이 경로별로 어떤 API 서버와 연결할 지 결정한다.

예를 들어 API가 특정 서버와 통신할 수 있게 코드가 짜여져 있다고 가정해보면 아래와 같을 것이다.

이 때, 만약 animal.com 서버가 없어졌다거나 animal.com이 fruit.com에 통합된다면 animal.com으로 짜여진 모든 코드들을 수정해야 하는 일이 발생한다.

이 때 이러한 비용을 줄여줄 수 있는 것이 API Gateway 이다.
API Gateway를 추가해 주소를 설정하고(test.com) API 서버와 통신할 경로를 설정해준다.
(fruit.com = apple / animal.com = bear / vegetable.com = carrot 등으로 이름 붙여주기)

이렇게 되면 중간에 animal.com 서버가 없어지거나 다른 곳과 통합되어 path를 수정해야 할 일이 발생해도 API Gateway에서 경로를 바꾸어 주면 된다.
여기까지가 제일 기본이 되는 구성이고 AWS의 API Gateway 페이지에서 인증, CORS 등의 작업을 추가로 해줄 수 있다.

AWS ELB (Elastic Load Balancing)

다수의 트래픽을 자동으로 분산시켜 안정적인 서버 환경을 운용할 수 있도록 해주는 서비스로, 특정 요청이 왔을 때 요청을 임의로 나누어 여러 대의 EC2인스턴스의 부하를 분산한다.

AWS S3 (Simple Storage Service)

이미지, 동영상 등과 같은 정적 파일들을 용이하게 관리할 수 있는 저장소 느낌의 스토리지 서비스

AWS S3에 파일을 업로드하게 되면, 한 곳에만 업로드 되는 것이 아닌 여러 대의 컴퓨터에 자동 분산되어 동일하게 저장된다. 이 여러 대의 컴퓨터들은 서로 멀리 떨어져 있어, 특정한 한 대가 죽어도 업로드 된 파일은 안전하다. 데이터의 손실이 발생해도 자동으로 복원할 수 있기 때문에 내구성이 높다고 AWS에서는 표현하고 있다. 또한 파일 보관 뿐 아니라 인터넷에 연결되어 있어 어디서든 다운로드 받거나 파일 서버로 사용이 가능하다. 단일 파일당 최소 1바이트 ~ 최대 5TB의 데이터를 저장하고 서비스 할 수 있으며 파일의 저장 개수에는 제한이 없다.
그 외로 버전관리, 데이터 처리, 로그, 쿼리 지원, 호스팅 등의 기능을 제공한다.

[S3 내의 용어]

  • 객체 : 저장된 데이터(파일) 하나를 객체로 표현
  • 버킷 : 연관된 객체들을 그룹화하여 관리하는 디렉토리. 버킷 단위로 region를 지정할 수 있고 그룹화된 객체들을 대상으로 인증과 접속 제한을 걸 수 있다.

S3에 대해 알아보면서 흥미롭게 느껴졌던 BitTorrent.
S3는 BitTorrent 프로토콜을 지원한다. BitTorrent는 파일을 가지고 있는 여러 컴퓨터들로부터 조금씩 파일을 다운받은 후, 이것을 붙여 완전한 파일로 받을 수 있는 시스템이다.

S3는 가용성이 높고 안정적인 파일 호스팅을 제공하지만 비용이 비싸다. 대용량 파일을 S3에 배포해야 할 경우 비용이 많이 들 수 있어 BitTorrent 프로토콜을 사용해 배포할 경우 비용을 크게 절감할 수 있다.

배포할 버킷에 파일을 업로드하고, 업로드 된 파일을 선택해서 나오는 페이지 하단의 객체 URL을 브라우저에 붙여넣은 후 끝에 ?torrent를 추가한다. 이렇게 해서 다운로드 된 파일을 BitTorrent클라이언트를 사용해 다운로드 할 수 있다.

AWS Cloud Front

AWS 내의 캐시 서버라고 볼 수 있다. AWS Edge Location을 사용해서 CDN서비스를 제공한다.

웹 브라우저(클라이언트)에서 서버로 요청이 전송되면 서버는 프로그래밍 언어를 통해 HTML코드를 생성하고 응답한다. 서버는 요청이 들어올 때 마다 응답을 위해 처리하는 과정을 거치는데, 만약 웹 페이지 중 자주 변경되지 않는 페이지가 있다면 해당 페이지에 사용자 요청이 자주 들어올 때마다의 앞전과 같은 처리 과정은 꽤나 비효율적일 것이다. (그에 따른 시간과 비용은 덤..)

AWS Cloud Front는 이러한 비효율적인 과정을 개선해준다. 서버가 들어온 요청에 대한 컨텐츠를 클라이언트에게 전송하면 Cloud Front는 응답 컨텐츠를 캐시에 저장해 갖고 있는다. 이후에 같은 요청이 들어온다면 서버까지 가지 않아도 Cloud Front에서 캐시에 저장되어 있던 html컨텐츠를 응답처리한다. 이로 인해 더 많은 요청을 처리할 수 있고 속도도 매우 빨라진다.

S3와 Cloud Front를 같이 쓰는 이유
클라이언트가 S3의 객체를 가져오려면 S3를 방문해야 하는데.. S3는 사용요금이 꽤 세다.
만약 페이지의 데이터(이미지 등)가 거의 변경되지 않는 데이터라면 Cloud Front를 활용해서 데이터를 캐시에 저장해두고 사용하는 것이 훨씬 비용을 절약할 수 있다.

Cloud Front는 기본 설정으로 CDN(Content Delivery Network)이 켜져 있다. CDN 서비스로 전세계 어디에 있든 빠르게 접속할 수 있다.

AWS Secret Manager

민감한 DB 정보, 보안 인증 정보, API 키 등의 보안 정보를 안전하게 암호화하고 중앙 집중식으로 감사할 수 있도록 도와주는 서비스

AWS Secret Manager는 기존의 애플리케이션 환경설정 파일 내에 하드코딩해서 관리하는 방식을 보완한다. 외부로 유출되어야 하지 않고 소수의 인원만 알고 있어야 하는 비밀 값들을 Secret Manager에 저장해두고 애플리케이션에서 AWS의 API를 호출해 받아가는 방식이다. 한 곳에서 보안성 높게 집중적으로 관리한다고 생각하면 되겠다.

이렇게 되면 보안되어야 하는 민감한 정보가 더이상 코드에 존재하지 않아 정보의 손상을 막는다. 사용자는 지정한 일정에 따라 Secret Manager가 자동으로 보안 정보를 교체하도록 구성할 수 있다.

profile
끄적이는 개발자

0개의 댓글