배경
국문과 친구가 우리 동네에 있는 중고 서점에만 있는 시집을 하나 사달라고 하여, 처음 가봤던 알라딘 중고 서점에 컴퓨터 서적이 있길래 신나서 돌다가 발견한 책이다.
기존에 산업기능요원의 신분으로 다녔던 회사에서 NHN 클라우드를 써본적은 있다. 하지만 AWS는 전세계적으로 가장 많이 쓰이고 있는 클라우드이기도 하고, NHN 클라우드와 비교해서 더 좋은 기능이 많다고 느꼈다.
당장 생각 나는 것들을 몇 가지 뽑아보자면 다음과 같은데.
- RDS에서 슬로우 쿼리 발생 시 AWS의 경우 CloudWatch와 Lambda 등의 연동을 통해 데이터를 수집하기 좋지만, NHN의 경우 그 기능이 좀 빈약하다. (메일 받는 거 말고 못하는듯)
- AWS는 CodeDeploy를 사용해서 배포 자동화를 구축하기 나름 편한 반면, NHN의 경우 Deploy와 Pipeline이라는 기능을 제공하지만 조금 미묘한 느낌이 있다.
- Lambda와 같은 서버리스 기능이 없다.
물론 내가 혼자 찾아본 정보이다보니 있는데 못 찾은 것일 수도 있지만;;
아무튼 AWS에 대해서도 공부를 미리 해두는 것이 좋겠다는 생각을 했다.
그래서 책을 읽게 되었고, 좋은 책이고 알아둘 내용이 많은 것 같아, 내 입장에서 특별히 정리해두고 싶은 내용을 정리해보았다.
정리
1장 - 아마존 웹 서비스 기초 지식
- AWS와 AWS 외부의 시스템, 네트워크를 연동하는 사례도 늘고 있다. 서버의 일부만 AWS를 사용하거나 사내 LAN과 AWS를 연결하는 것도 가능하다.
- AWS의 요금은 종량제이므로 사용한 만큼만 결제하면 되기 때문에 싸다고 느낄 수 있지만 꼭 그렇진 않다. 초기 비용이 들지 않는 대신 운영 비용이 들기 때문에 경우에 따라서는 정액제 임대나 자사에서 준비하는 편이 저렴할 수도 있다.
- AWS의 매니지드 서비스는 소프트웨어 업데이트 같은 운영 업무를 자동화할 수 있으므로 항상 안전한 상태로 운영할 수 있다. 자사에 제대로 관리할 전문가가 없다면 AWS가 압도적으로 보안이 안전하다.
44쪽에는 AWS 도입 사례들이 여럿 있는데, 참고하기 좋다.
2장 - AWS를 이해하기 위한 클라우드 & 네트워크의 구조
가상화 / 분산처리 / 이중화
- 가상화는 클라우드를 지탱하는 가장 중요한 기술이다.
- 가상 서버는 물리 서버 1대 위에, 본래 서버에 필요한 물리적 부품을 가상으로 생성해서 서버 여러 대를 가상으로 생성하는 것이다.
- 가상 서버에 할당된 메모리와 스토리지는 자유롭게 늘리고 줄일 수 있다
- 덕분에 분산처리와 이중화에 도움이 된다.
SaaS, PaaS, IaaS
- SaaS: 인프라, 플랫폼 (OS), 애플리케이션까지 제공한다. SNS, 블로그 서비스, 웹 메일 서비스 등이 있다.
- PaaS: 플랫폼까지만 제공한다. OS가 설치된 서버에 사용자가 애플리케이션을 설치해서 사용해야 한다.
- IaaS: 인프라만 제공한다. 즉, 네트워크나 서버 머신등을 제공한다.
3장 - AWS를 사용하기 위한 도구
- 항상 자신에게 필요한 것을 필요한 만큼, 최적화된 상태로 관리하는 것이 클라우드를 잘 사용하는 요령이다.
관리 콘솔과 리전
- AWS의 서비스를 종합적으로 관리할 수 있는 관리 콘솔을 제공한다.
- root 사용자는 모든 권한을 가지고 있지만, 이러면 곤란하므로 일반적인 운영에 사용하는 IAM이라는 서비스만 사용하는 사용자를 별도로 관리한다.
- AWS 관리 콘솔은 계정 관리, 청구서 확인, 서비스 설정 등의 다양한 관리가 가능하다.
- 관리 콘솔은 지역을 대표하는 '리전' 단위로 조작한다. 같은 EC2 서비스라도 리전이 다르면 다른 서비스로 간주한다.
- 리전에 따라 사용 가능한 서비스와 사용 불가능한 서비스가 다르다.
IAM
- AWS IAM은 AWS의 인증 방식이다. AWS는 서비스 여러 개를 사용하기 때문에 적절한 관리를 위한 인증 방식이다.
- IAM을 사용자나 서비스에 부여해서 접속을 관리할 수 있다.
- 사용자는 IAM 그룹으로 그룹화할 수 있고, IAM 정책은 실행자가 어떤 서비스에 접속할 수 있는지 정해진 규칙을 설정한다.
- 자기만의 정책을 만드는 것도 좋지만 설정하다 실수할 수 있으므로 미리 준비된 AWS 관리 정책을 사용하는 걸 추천한다.
Amazon CloudWatch
물리적 부분은 AWS가 감시해줄 수 있을지라도, 시스템이나 소프트웨어 감시는 본인이 해야 하는데, 이 때 CloudWatch를 이용한다.
- CloudWatch는 각 AWS 서비스의 리소스 모니터링과 관리를 담당하는 서비스다.
- 각 서비스의 지표, 로그 등을 수집/기록한다.
- 수집 로그가 임계 값을 넘기면 특정 동작이 일어나도록 설정할 수 있으므로 감시 상황에 대처하는 관리도 가능하다.
- CloudWatch로 CPU 사용률, 볼륨의 읽기쓰기 횟수나 네트워크 송수신 패킷 수 등을 감시할 수 있다.
- Amazon CloudWatch Logs로 각종 로그를 기록할 수 있다.
AWS Billing and Cost Management
- AWS는 종량제이므로 요금 관리가 중요하다.
- AWS Billing and Cost Management는 요금 납부, 사용료 모니터링, 사용 현황 보고 등을 할 수 있으며 서비스 해지도 여기에서 실시한다.
- 비용과 사용 현황 보고서는 하루에 한번씩 csv로 AWS S3의 S3 버킷에 저장된다. 이 정보를 집계 도구로 보낼 수도 있다.
4장 - Amazon EC2
EC2는 AWS에서 가장 유명한 서비스이다. 컴퓨팅 용량을 제공하며, 이걸 이용하면 서버를 간단하고 쉽게 생성할 수 있다.
- EC2는 매니지드 서비스가 아니므로 OS 등의 필요한 소프트웨어는 직접 사용자가 설치하고 운영해야 한다.
- 자유도가 높은 반면 관리하기 번거로우므로, '어떻게 구성할까?', '어느 정도의 성능이 필요할까?' 와 같은 설계적 관점이 필요하다.
- 바로 생성/삭제 가능하므로 불필요한 리소스를 유지할 필요가 없다.
- 서버에 문제가 생겨도 즉시 복구할 수 있다.
- 복제 / 스케일 아웃 / 스케일 다운 기능이 있으므로 일시적으로 접속이 증가하는 경우에 적합하다.
- EC2는 물리적 작업은 관리 콘솔로 할 수 있다. 소프트웨어 작업은 SSH로 붙어서 한다.
EC2 주요 기능
- 인스턴스: 가상 서버를 의미한다.
- AMI: 가상 이미지를 말한다. 인스턴스를 생성하는 기준이 되는 금형과 같다. OS만 설치된 유형부터 소프트웨어도 설정된 유형까지 다양하다.
- 키 페어: 인스턴스에 접속할 때 인증을 위해 사용하는 키
- EBS: 클라우드에서 사용할 수 있는 스토리지
- 보안 그룹: 가상 방화벽으로, 1개 이상의 인스턴스 트래픽을 제한한다.
- Elastic IP: 정적(고정) IPv4 주소
NHN에서는 블록 스토리지, 플로팅 IP.. 등으로 불리던 녀석들이 이름만 다른 것 같다.
AMI
- Amazon Machine Image(AMI)는 OS와 소프트웨어가 설치된 디스크 이미지이다.
- 금형을 한번 만들어두면 얼마든지 같은 설정의 서버를 생성하는 것이 가능하다.
- 같은 설정의 서버를 얼마든지 생성할 수 있다.
- 생성한 AMI는 개인이 만들고 마켓 플레이스라는 장소에서 복제와 배포도 가능하다. (단, 남의 거 쓸 때 보안은 유의하자)
스냅샷
- 스냅샷을 작성해서 Amazon EBS 볼륨 (HDD/SDD)의 데이터를 Amazon S3에 백업할 수 있다.
- 생성된 스냅샷은 바로 사용 가능한 복제본이며 백업용으로 많이 사용된다.
- 서버 디스크 상태를 통째로 보존하므로 데이터나 소프트웨어 뿐 아니라 OS와 설정 정보도 복제된다.
5장 - 스토리지 서비스 Amazon S3
S3의 기능
- S3는 객체 스토리지 서비스로, 단순 스토리지 서비스 뿐 아니라 정적 웹 서버 등 다양한 편리 기능을 갖추고 있다.
- 확장과 축소가 쉽다.
- 사용 목적에 맞게 다양한 스토리지가 준비 되어 있다. (업로드 위주 / 다운로드 위주 / 데이터 아카이브 용 등)
- 장애나 오류, 위협에 매우 강하다. 최소 4개 이상의 가용 영역에 자동으로 복제되어 보존된다.
- S3 Select라고 하는, 데이터에 쿼리를 실행하는 기능과 서비스가 있다.
- Amazon Athena, Redshiift Spectrum 같은 분석 서비스와 호환된다.
- Amazon Lambda와 호환된다. (아주 많이 사용되는 유스케이스인듯)
사용 방법
- 매니지드 서비스이므로 보통 대시보드에서 작업하며, SSH나 FTP를 지원하지 않는다.
- 버킷을 생성하면 이름과 리전을 변경할 수 없다.
- 버킷 생성 전에 유스케이스에 따라 익명 접속을 허가할지, 접속 가능한 사용자를 관리하는 것 등을 고려하자.
- S3는 정적 페이지 웹 서버로도 사용할 수 있다.
객체와 버킷
- 버킷명은 S3 내에서 유일해야 한다. 다른 사용자의 버킷 명도 안된다.
- 버킷은 윈도우의 C, D 같은 드라이브와 같다.
- 객체는 파일과 같다.
- 버킷은 폴더가 아니므로 버킷 안에 버킷은 불가능하다.
- S3는 객체 스토리지이므로 폴더의 개념이 없다. 하지만 편의를 위해 관리 콘솔에서 접속하면 폴더로 표시된다.
웹 사이트 호스팅
S3의 여러 편리한 기능 중 으뜸은 웹 호스팅 기능이다. (React를 사용할 경우 S3로 연동해서 사용하면 EC2보다 가격도 싸고 안정적이고 좋을듯)
- 정적 웹 사이트 (단순 HTML/JS, 이미지)를 호스팅 할 수 있다.
- 버킷을 그대로 웹 사이트로 오픈하면 된다. URL을 설정하고 버킷에 누구든 접속 가능하도록 하자.
- 정적 웹 호스팅을 활성화하고, 공용 액세스를 설정하고, 버킷 정책을 모든 사용자로 설정하고, 버킷 명을 도메인 명으로 지정한다.
- 개인 도메인을 소지한 경우, Amazon Route 53과 같은 DNS 서비스를 사용하여 설정한다.
대안 기능으로는 EC2, LightSail, Amplify도 있는데, 서버 프로그램 실행여부 / 확장성에 따라 좀 나뉘는듯.
파일 업로드, 다운로드
- 관리 콘솔을 사용하는 방법과 CLI를 사용하는 방법이 있고, 도구나 프로그램에서 작업하려면 API나 SDK를 사용한다.
액세스 관리
- S3는 관리자가 아닌 사람이 액세스할 수도 있으므로 액세스 기록을 제공한다.
- 액세스 로그는 서버에 어떤 요청이 있었는지를 기록한다.
- 스토리지 클래스 분석으로 객체의 액세스 빈도를 분석할 수 있다.
- 객체의 변경을 허용하지 않는 객체 잠금을 할 수 있다.
버전 관리
- 버전관리를 해서 객체를 여러 버전으로 저장할 수 있다.
- 버전 관리를 하면 실수로 변경하거나 삭제한 파일을 복원할 수 있다.
- S3는 수명 주기를 설정할 수 있다. 잘 안 쓰이는 객체를 아카이브용 클래스로 옮기는 등이 가능하다.
- 다른 리전의 버킷에 객체를 비동기적으로 복사할 수 있다. 이를 이용해 데이터를 해외에도 백업하는게 가능한데, 그럴 경우 국외 반출이 안되는 데이터를 보존하지는 않도록 주의하자.
CDN
Amazon CloudFront를 이용해서 CDN으로 사용할 수 있다.
6장 - 가상 네트워크 서비스 Amazon VPC
- Amazon VPC는 AWS 계정 전용 가상 네트워크다.
- EC2와 RDS등을 네트워크에 연결하려면 VPC가 필요하다. VPC를 생성하고 그 안에 인스턴스를 설치한다.
- VPC는 소프트웨어가 라우팅을 한다. 따라서 IP 주소를 갖지 않는다.
- 라우팅 테이블 한 개에 서브넷 여러 개를 설정할 수 있다.
- VPC 하나에 인터넷 게이트웨이는 한 개만 설정할 수 있고, IP 주소는 갖지 않는다.
- 서브넷 사이의 통신은 라우터 없이 직접 통신할 수 있다.
서브넷
- VPC를 사용하려면 서브넷에 대한 지식이 있어야 한다.
- 서브넷은 커다란 네트워크를 작게 나눈 네트워크다.
- VPC는 사용자가 사용할 수 있는 네트워크 범위를 생성하고 그 아래 용도에 따라 서브넷을 생성한다. 어떤건 공개하고, 어떤건 비공개하는 식으로 역할을 다르게 부여할 수 있다.
- 일반적인 네트워크는 서브넷끼리 통신하려면 라우팅이 필요하지만, VPC는 라우팅 없이도 통신할 수 있다.
인터넷 게이트웨이
- 인터넷 게이트웨이는 인터넷 연결을 담당한다.
- 회사 내부에서만 사용하는 서버가 소프트웨어를 업데이트 할 경우 NAT 게이트웨이를 사용하면, 서브넷에서 인터넷으로 접속할 수 있지만 인터넷에서 서브넷으로는 접속 못 하게 한다.
보안 그룹과 네트워크 ACL
- VPC의 가상 방화벽으로 보안 그룹과 네트워크 ACL이 있다.
- 이 둘은 인바운드와 아웃바운드 트래픽을 제어하며, 반드시 양쪽 모두 설정해야 하며 명시적으로 설정하지 않으면 기본 설정이 적용된다.
항목 | 보안 그룹 | 네트워크 ACL |
설정 범위 | 인스턴스에 대해 설정 (보안 그룹을 최대 5개 할당 가능) | 서브넷에 설정 (개별 인스턴스에 설정할 필요 없음) |
규칙 | 규칙 허용만 가능 | 규칙의 허용과 거부가 가능 |
설정 | stateful (규칙과 상관 없이 반환된 트래픽을 자동으로 허용) | stateless (반환된 트래픽을 규칙에 따라 명시적으로 허용) |
규칙 적용 순서 | 모든 규칙을 확인하여 트래픽의 허가 여부를 정함 | 순서대로 규칙을 처리하며 트래픽의 허가 여부를 정함 |
VPC 엔드포인트
AWS에는 VPC를 지원하는 서비스와 그렇지 않은 서비스들이 있고, 이런 서비스들을 연동할 때 연결점이 되는 것이 VPC 엔드포인트다.
- S3, DynamoDB처럼 VPC를 사용하지 않는 서비스는 VPC의 출입구로 엔드포인트를 설정하면 VPC 안의 서비스와 직접 연결할 수 있다.
- 인터페이스 엔드포인트, 게이트웨이 엔드포인트라는 두 종류가 있다.
VPC 연결
VPC끼리 연결하려면 VPC 피어링이라는 기능을 활성화해야 한다.
AWS Direct Connect를 사용하자.
7장 - 데이터베이스 서비스 Amazon RDS
AWS는 관계형 데이터베이스 서비스로 Amazon RDS를 제공한다.
Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle, SQL Server를 제공한다.
- Amazon RDS는 관계형 데이터베이스 제품을 클라우드에 최적화된 상태로 제공하는 서비스다.
- VPC 상에 인스턴스 형태로 구축하며 다양한 인스턴스 클래스를 사용할 수 있다.
- 매니지드 서비스이므로 업데이트 등의 관리가 AWS에 의해 자동으로 이루어지며, 백업 같은 관리 작업도 자동화되어 있다.
- AWS DMS를 사용하면 기존 데이터베이스 이전과 복제도 가능하다.
Amazon Aurora
Amazon Aurora는 MySQL과 PostgreSQL과 호환할 수 있으며 AWS가 만든 관계형 데이터베이스이다.
- 요금은 비싼 편이지만 견고하고 성능이 뛰어나다.
- 일반적 MySQL, PostgreSQL보다 빠르며, 매니지드 서비스이므로 안전하다.
개인적 사견: https://youtu.be/6BhuIvMpNYk?t=338 의 5분 37초에서부터 언급하는데, 조회 로직에서 트래픽을 감당해야 할 때, 일반 RDB에다가 Redis를 굳이 깔아서 운영하는 것보다 Aurora를 사용하는 쪽이 더 나을 수도 있다는 얘기를 한다. Aurora도 굉장히 좋은 서비스인듯? 얼마나 좋은지 궁금하다.
키 밸류 스토어
키 밸류 스토어는 NoSQL의 대표적 예시이다.
RDB에 비해 유연성이 높아서 형식에 구애받지 않고 데이터를 입력할 수 있지만 상세히 검색할 수는 없다.
최근에 빅데이터나 IoT 같은 대용량 데이터를 빠르게 처리하는 경우에 사용되어 주목받고 있다.
Amazon DynamoDB
Amazon DynamoDB는 키 밸류 스토어 데이터베이스다.
- SQL을 사용할 수 없고 고급 검색이 불가능하지만, RDB보다 응답 속도가 빠르다.
- VPC가 불필요하므로 Lambda 같이 VPC를 사용하지 않는 애플리케이션과 궁합이 좋다.
- 대규모 데이터를 처리하므로 ACID 트랜잭션, 데이터 암호화, 접근 제한 등의 서비스를 갖추고 있다.
- 테이블을 글로벌로 생성하면 전세계 각 리전에 분산되어 복제되며, 동기화된다.
Amazon ElastiCache
Amazon ElastiCache는 인 메모리 데이터베이스다.
Redis용과 Memcached용이 있으며, 이들과 호환이 가능하며 현재 사용하는 애플리케이션을 변경하지 않아도 사용할 수 있다.
8장 - 알아두면 좋은 AWS 서비스
Amazon Route 53 - AWS DNS 서비스
접속할 IP 주소를 실제 운영 중인 EC2나 S3 같은 AWS 서비스 엔드포인트와 연결하며, 도메인 이름도 등록할 수 있다.
엔드포인트 하나에 트래픽이 집중되지 않게 하거나, 서비스에 장애가 났을 때 신속히 다른 네트워크로 전환해주는 기능이 있어 라우팅을 유연히 관리할 수 있다.
AWS Lambda - 서버리스 서비스
AWS Lambda는 작은 프로그램을 실행하는 구조이며, 미리 등록해두면 언제든 실행할 수 있다.
S3와 조합해서 사용하는 방식으로 주목받고 있으며 향후 AWS를 사용하는 데에 있어서 활용도가 높아질 것이다.
(유스케이스: S3에 이미지를 저장하면, 이 저장이 트리거가 되어 Lambda 함수 호출. 이걸로 썸네일을 자동으로 생성한다)
- Lambda는 데이터나 요청에 대한 실시간 처리나 백엔드 처리를 자동으로 실행하는 구조다.
- 이와 같은 처리를 위한 전용 서버를 구축하고 관리하지 않아도 필요한 이벤트가 자동으로 실행된다.
- 프로그램 실행 시에만 요금이 부과되므로 필요없이 서비스를 24시간 띄워두는 것보다 싸게 먹힐 수 있다.
- Lambda 함수라는 형식의 함수를 사용하는데, 각종 언어(자바, C#, 파이썬, Node 등)로 만들 수 있다. (JVM은 궁합이 잘 안 맞는다고 한다. Node를 보통 많이 쓰는 느낌)
- API 게이트웨이와 조합해서 웹 CGI처럼 사용할 수 있다.
- Lambda를 호출하는 방법에는 세 가지가 있다.
- Lambda가 이벤트를 읽는 서비스
- Lambda를 동기적으로 호출하는 서비스
- Lambda를 비동기적으로 호출하는 서비스
AWS 컨테이너 서비스
AWS는 도커 형식의 컨테이너도 지원한다. 또한 쿠버네티스와 호환되는 서비스도 제공한다.
도커 이미지를 등록하는 ECR이라는 서비스, 쿠버네티스 서비스인 EKS라는 서비스가 유명하다.
컨테이너를 실행하는 EC2를 자동으로 관리해주는 AWS Fargate라는 것도 유명하다. 필요에 따라 EC2 인스턴스를 가동하고 그 안에 컨테이너를 할당하고 실행하는 방식이다.
마무리하며
책의 내용을 간략히 정리해봤는데, 더 상세한 설명 또는 그림과 함께 이해하고 싶다면 책을 구매해서 보는 것을 강력 추천한다.
관련 내용을 쉽게 잘 정리해줘서 이해하는 데에 도움이 많이 되었던 것 같다.
AWS 입문에 있어 추천합니다
'도서' 카테고리의 다른 글
[서평] '개발자를 위한 시프트 레프트 테스트'를 읽고 (2) | 2023.06.27 |
---|---|
[서평] ‘테스트 주도 개발’ 을 읽고 (1) | 2023.04.13 |