서비스 운영이 쉬워지는 AWS 인프라 구축 가이드

서버 구축부터 배포, 모니터링, 관리 자동화, 데브옵스까지

AWS와 서비스 운영에 첫걸음을 내디딜 수 있게 도와준다!

서비스 개발과 인프라 관리를 담당하는 실무자의 운영 노하우를 배우자!

이 책은 AWS나 클라우드 환경에 익숙하지 않은 분들이 AWS 서비스를 잘 활용해 실전에서 바로 서비스를 운영할 수 있게 도와준다. 기초적인 서버 구성 방법부터 배포, 모니터링, CI/CD 같은 고도화 등 운영 서버 관리에 필요한 모든 영역을 다룬다.

이론에만 머무르는 것이 아니라 실무에서 바로 서비스를 운영할 수 있도록 30개 가량의 실습이 포함돼 있으며, 환경 구성은 물론 다양한 서비스 사용 시 발생하는 예외 상황에 바로 대처할 수 있게 돕는다.  

추천사

“이 책은 클라우드에 입문하는 개발자나 시스템 엔지니어들이 익숙했던 개념을 클라우드에서 어떻게 구현할지 알려주는 사례 위주의 레시피 책입니다. 업무에서 직접 사용 가능한 30여 가지의 실습이 포함돼 있어 다양한 수준의 독자가 손으로 직접 체험해보면서 AWS 클라우드를 익힐 수 있습니다. 이론이나 개념이 아니라 AWS를 바로 현업에서 사용하려는 분들에게 추천합니다.”

— 윤석찬, AWS 테크니컬 에반젤리스

김담형

서강대학교에서 컴퓨터공학을 전공했으며 보안 회사에서 웹 서버 개발로 개발자의 길을 걷기 시작했다. 현재는 드라마앤컴퍼니에서 서버 파트 리더로 API 개발과 인프라 관리를 맡고 있다. 패스트캠퍼스에서 ‘운영 서버 관리 마스터 워크샵’이라는 주제로 여러 차례 강의를 진행했다. 사람이 하는 일을 어떻게 기계에 떠넘길 수 있는지 늘 고민하고 있다.

  • [1부] AWS를 이용한 운영 서버 환경 구축
    • ▣ 01장: 운영 서버와 AWS 소개
      • 1.1 운영 서버
      • 1.2 운영 서버 관리의 세 단계
      • 1.3 AWS
        • 1.3.1 AWS의 탄생 배경
        • 1.3.2 운영 서버에 필요한 서비스들을 제공하는 AWS
        • 1.3.3 클라우드 플랫폼 서비스로서의 AWS
        • 1.3.4 클라우드 서비스 플랫폼을 써야 하는 이유
        • 1.3.5 전 세계에서 사용할 수 있는 AWS
        • 1.3.6 회원 가입
        • 1.3.7 무료로 AWS 서비스를 사용할 수 있는 방법
      •  
    • ▣ 02장: 운영 서버 환경의 구성
      • 2.1 운영 서버 아키텍처의 이해
        • 2.1.1 단일 서버
        • 2.1.2 애플리케이션/데이터베이스 서버 분리
        • 2.1.3 서버 단위의 로드 밸런서
        • 2.1.4 서버 내 앱 단위의 로드 밸런서
      • 2.2 AWS EC2를 이용한 서버 인스턴스 생성과 관리
        • 2.2.1 EC2
        • 2.2.2 EC2를 생성하려면 꼭 알아야 하는 개념
        • 2.2.3 [실습] AWS EC2 인스턴스 생성
        • 2.2.4 [실습] 샘플 프로젝트를 실행하기 위한 서버 환경 구성
      • 2.3 소스코드 배포
        • 2.3.1 Git을 이용한 소스코드 배포
        • 2.3.2 [실습] Git으로 EC2 인스턴스에 코드 배포하기
      • 2.4 웹 서버와 웹 애플리케이션 서버
        • 2.4.1 웹 서버
        • 2.4.2 웹 애플리케이션 서버
        • 2.4.3 웹 서버와 웹 애플리케이션 서버의 사용
        • 2.4.4 클라이언트의 요청 이동 경로
        • 2.4.5 nginx, Phusion Passenger
        • 2.4.6 [실습] nginx, Phusion Passenger 설치 및 서비스
        • 2.4.7 [실습] nginx, Phusion Passenger 서비스 명령어 추가
        • 2.4.8 [실습] 시스템 시작 시 자동 시작 서비스에 등록
        • 2.4.9 [실습] 하나의 서버에서 두 개의 애플리케이션 서비스하기
      • 2.5 정리
      •  
    • ▣ 03장: 다중 서버 환경 구성
      • 3.1 AWS Auto Scaling 그룹을 이용한 다중 서버 구성
        • 3.1.1 AWS Auto Scaling 그룹
        • 3.1.2 AWS Auto Scaling 그룹의 응용 예
        • 3.1.3 AWS Auto Scaling 그룹의 구성
        • 3.1.4 [실습] Auto Scaling 그룹 생성
        • 3.1.5 Auto Scaling 그룹 화면 구성
        • 3.1.6 [실습] Auto Scaling을 통한 인스턴스 자동 추가, 제거
        • 3.1.7 Auto Scaling 그룹 개념 정리
      • 3.2 AWS Elastic Load Balancing을 이용한 서버 트래픽 분산 관리
        • 3.2.1 Elastic Load Balancing
        • 3.2.2 대상 그룹
        • 3.2.3 로드 밸런서의 상태 검사
        • 3.2.4 [실습] Auto Scaling 그룹, 대상 그룹, 로드 밸런서 구성
      • 3.3 장애 조치 아키텍처 구성
        • 3.3.1 Auto Scaling 그룹을 이용한 장애 조치
        • 3.3.2 [실습] Auto Scaling 그룹과 로드 밸런서를 통한 장애 조치
      • 3.4 정리
      •  
    • ▣ 04장: 운영 서버의 외부 환경 구성
      • 4.1 도메인, DNS
      • 4.1.1 도메인
        • 4.1.2 [실습] AWS Route 53을 이용한 도메인 등록
        • 4.1.3 [실습] 로드 밸런서에 도메인 등록
      • 4.2 SSL/TLS, HTTPS
        • 4.2.1 SSL/TLS 인증서, HTTPS 동작 방식
        • 4.2.2 SSL/TLS 인증서의 가격
        • 4.2.3 SSL/TLS 인증서 설치 방법
        • 4.2.4 [실습] AWS Certificate Manager를 통한 SSL/TLS 인증서 등록
      • 4.3 정리
      •  
    • ▣ 05장: 배포 과정
      • 5.1 배포 관련 용어
        • 5.1.1 무중단/중단 배포
        • 5.1.2 현재 위치 배포
        • 5.1.3 서버 단위의 블루/그린 배포
        • 5.1.4 서버 내 블루/그린 배포
      • 5.2 블루/그린 배포
        • 5.2.1 배포에 필요한 절차
        • 5.2.2 [실습] 블루/그린 배포
      • 5.3 정리
      •  
    • ▣ 06장: 배포 자동화
      • 6.1 AWS IAM
        • 6.1.1 IAM 설명
        • 6.1.2 용어
      • 6.2 AWS CodeDeploy
        • 6.2.1 CodeDeploy 설명
        • 6.2.2 CodeDeploy 작동 절차
        • 6.2.3 CodeDeploy 구성 요소
        • 6.2.4 [실습] CodeDeploy로 현재 위치 배포 진행하기
        • 6.2.5 기타
      • 6.3 정리
      •  
    • ▣ 07장: 비밀 값 관리
      • 7.1 비밀 값
        • 7.1.1 비밀 값 관리 원칙
      • 7.2 관리 방법
        • 7.2.1 배포 자동화 툴
        • 7.2.2 Blackbox
        • 7.2.3 Vault
        • 7.2.4 AWS Secrets Manager
        • 7.2.5 [실습] Secrets Manager 사용법
        • 7.2.6 AWS Systems Manager의 파라미터 스토어
        • 7.2.7 어떤 방법을 쓸 것인가?
      • 7.3 정리
      •  
    • ▣ 08장: 모니터링 시스템 구축 및 활용
      • 8.1 모니터링의 목적과 영역
      • 8.2 AWS CloudWatch
        • 8.2.1 AWS CloudWatch 설명
        • 8.2.2 CloudWatch 지표
        • 8.2.3 [실습] CloudWatch에 사용자 지정 지표 기록
        • 8.2.4 [실습] CloudWatch Agent로 메모리, 디스크 사용량 지표, 로그 기록
        • 8.2.5 CloudWatch 대시보드
        • 8.2.6 [실습] CloudWatch 대시보드 생성
        • 8.2.7 CloudWatch 경보
        • 8.2.8 [실습] CloudWatch 경보 생성
      • 8.3 애플리케이션 성능 관리 툴
        • 8.3.1 APM 툴 설명
        • 8.3.1 NewRelic APM
      • 8.4 정리
      •  
      •  
  • [2부] 고도화된 운영 서버 관리
    • ▣ 09장: 로그 분석
      • 9.1 AWS CloudWatch Logs
        • 9.1.1 CloudWatch Logs 소개
        • 9.1.2 [실습] CloudWatch Log에 로그 적재
      • 9.2 Elastic Stack
        • 9.2.1 Elastic Stack 설명
        • 9.2.2 [실습] Elastic Stack 구축
      • 9.3 정리
      •  
    • ▣ 10장: 자동화된 서버 관리
      • 10.1 AWS Elastic Beanstalk
        • 10.1.1 Elastic Beanstalk 소개
        • 10.1.2 Elastic Beanstalk의 장단점
        • 10.1.3 웹 애플리케이션 환경, 작업자 환경
        • 10.1.4 [실습] Elastic Beanstalk으로 배포하기
        • 10.1.5 Elastic Beanstalk를 이용한 서비스 관리
      • 10.2 정리
      •  
    • ▣ 11장: 데브옵스
      • 11.1 데브옵스란?
        • 11.1.1 지속적 통합(CI) 소개
        • 11.1.2 지속적 전달, 지속적 배포(CD) 소개
        • 11.1.3 AWS와 데브옵스
      • 11.2 AWS CodePipeline
        • 11.2.1 AWS CodePipeline 설명
        • 11.2.2 [실습] AWS CodePipeline 구성
      • 11.3 정리
      •  
    • ▣ 12장: AWS를 더 잘 사용하기 위한 서비스
      • 12.1 프로그램으로 AWS의 기능 사용하기
        • 12.1.1 AWS CLI
        • 12.1.2 AWS SDK
        • 12.1.3 [실습] AWS CLI 사용해보기
      • 12.2 파일 스토리지
        • 12.2.1 EC2 인스턴스 스토어
        • 12.2.2 EBS(Elastic Block Store)
        • 12.2.3 EFS(Amazon Elastic File System)
        • 12.2.4 S3(Simple Storage Service)
      • 12.3 EC2 인스턴스 비용 절감하기
        • 12.3.1 스팟 인스턴스
        • 12.3.2 예약 인스턴스
      • 12.4 파일 제공
        • 12.4.1 S3
        • 12.4.2 CloudFront
      • 12.5 데이터 저장
        • 12.5.1 RDS
        • 12.5.2 ElastiCache
      • 12.6 알림
        • 12.6.1 SNS
      • 12.7 정리
      •  
    • ▣ 부록A: 윈도우에서 PuTTY 설치, SSH 접속키 설정, 접속하기
    • ▣ 부록B: macOS, 리눅스에서 SSH 접속하기
  • 31쪽, 3번 항목의 1~6번째 줄

    # curl 명령어를 이용해 공개키를 내려받는다. 이 키는 내려받으려는 rvm 패키지가 유효한
    # 패키지인지 확인하는 데 사용된다.
    $ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
    
    # stable 버전의 rvm 을 내려받는다.
    $ curl -L get.rvm.io | bash -s stable
    

    ==>

    # curl 명령어를 이용해 공개키를 내려받는다. 이 키는 내려받으려는 rvm 패키지가 유효한 
    # 패키지인지 확인하는 데 사용된다.
    # 만약 키가 변경되어 다음 과정에서 에러가 발생한다면 http://rvm.io/rvm/install 사이트의
    # 가이드를 따른다.
    $ gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
    
    # stable 버전의 rvm을 내려받는다.
    $ curl -sSL https://get.rvm.io | bash -s stable
    
  • 42쪽, 그림 2.29를 다음 그림으로 교체

    aws-infra-42.png

  • 210쪽, 상단 Tip 박스의 두 번째 명령어

    CloudWatch 에이전트 서비스를 시작하는 명령어
    
    $ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
    

    ==>

    CloudWatch 에이전트 서비스를 시작하는 명령어
    
    $ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start
    
  • 337쪽, 부록 B의 하단 1번 항목

    01_ 운영체제에 설치돼 있는 터미널을 실행한다.

    ==>

    01_ 운영체제에 설치돼 있는 터미널을 실행한다. 다운로드받은 키 페어 파일의 권한을 변경한다.

    chmod 400 /path/to/인증서.pem