Thumbnail
BEST
개발 · 프로그래밍 데브옵스 · 인프라

AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS) 대시보드

(4.9)
25개의 수강평 ∙  404명의 수강생
77,000원

월 15,400원

5개월 할부 시
지식공유자: 김시훈
총 117개 수업 (14시간 29분)
수강기한: 
무제한
수료증: 발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변이 제공되는 강의입니다
폴더에 추가 공유

초급자를 위해 준비한
[데브옵스 · 인프라, 백엔드] 강의입니다.

이 강의에서는 Container Orchestration 대표기술중 하나인 AWS ECS를 배우게됩니다! Github Action으로 CICD도 구축합니다. 하지만 처음부터 ECS를 배우지 않아요. ECS는 DevOps 끝판왕이라고 할 수 있어서 너무 어렵게 느껴질 수 있거든요. 그래서 강의 초반에는 전통적인 가상서버 중에서도 비교적 learning curve가 낮은 AWS Lightsail로 기본기를 먼저 다집니다. 기존 방식의 한계점과 불편한점들도 체감할 수 있어요. 이렇게 기본기와 “Why”로 빌드업을 해서 자연스럽게 Docker Container와 ECS를 배우게 됩니다!

✍️
이런 걸
배워요!
전통적인 가상서버 배포 - AWS Lightsail
고가용성 - High Availability
Github Action을 활용한 CI/CD
컨테이너 기술 - Docker
Container Orchestration - AWS Elastic Container Service (ECS)
Cloud Security
Docker Compose - 깔끔한 dev & test 환경 구축

 제대로 이해하는 AWS 서버 배포! 
쉽게, 더 견고하게 알려드릴게요.

단순 AWS ECS & Docker 튜터리얼이 아닙니다! 

전통적인 VM을 배포하면서 불편함을 직접 경험하게 됩니다. 즉, Why를 명확히 이해하고 ECS & Docker를 제대로 학습할 수 있습니다 😎

AWS 도입, 왜 생소할까요? 😥

여러분, 혹시 AWS 클라우드를 사용해보려다가 막막한 기분이 들어본 적 있으신가요? AWS 안에도 서버 배포할 수 있는 방법이 너무 다양하죠. 그리고 무엇보다 각각 설정도 다양합니다. 그냥 개발한 코드를 견고하게, 저렴하게, 안전하게 그리고 빠르게 배포하고 싶을 뿐인데요. 생소한 설정들이 너무 많죠.

  • VPC?! Subnet은 또 뭐지?
  • Availabiliy Zone?
  • Security group은 또 뭘까... 인바운드? 이건 그냥 모든 IP 허용하면 되는 거겠지?
  • 환경변수는 여기에 두면 안전하겠지?
  • IAM은 또 뭐야! 그냥 AdminAccess 주면 되는 거 아닌가?
  • Load balancer는 또 뭐지? Listener rules, Target groups 설정해주기...

겨우겨우 배포했는데 하다 보니 이런 질문을 하게 된 적도 있지 않으신가요?

  • 배포 자동화는 어떻게 하지? CI/CD? CI는 뭐고 CD는 또 뭐야?
  • 클라우드 쓰면 Auto Scale할 수 있다는데 어떻게 하는 거지?
  • 가상서버(Virtual Machine)와 Container 차이가 정확히 뭐지?
  • 왜 컨테이너를 사용하는 거지? Container Orchestration은 또 뭘까?
  • Kubernetes vs Elastic Container Service (AWS ECS), 뭐가 뭔지 모르겠어.
  • 도커는 알겠는데 Docker-compose는 또 뭐지? 이것도 알아야 할까?
  • 그냥 Fly.io, Vercel, Heroku 같이 "쉬운" 클라우드 써버리면 안 될까? 물론 좀더 비싸겠지만, 내 시간을 많이 절약해주지 않을까?

서비스 개발에 집중하고 싶은 마음이 앞서다보니 AWS 도입을 포기하거나, 어떻게든 적당히 작동하도록 설정들을 대충 넘기는 경험을 대부분 해보셨을 거라고 생각합니다. 

문제는 잘못하면 비용 폭탄 그리고 치명적인 보안 문제에 노출될 수 있어요. 그리고 가용성이 높은 서버를 쉽게 만들 수 있음에도 불구하고 이런 클라우드 이점들을 사용하지 못하고 있을 수도 있어요.

가용성이 높은 서버는 매우 중요해요. 특히 서비스가 커지면 커질수록요. 자연재해가 발생해서 데이터 센터가 완전 다운이 되더라도 서비스를 유지할 수 있거든요!

이 강의로 많은 분들이 AWS를 제대로 이해하고 쉽게 사용했으면 합니다.

원래는 Docker & AWS ECS만 다루는 강의를 제작하려고 했어요. 하지만 그러면 너무 버겁게 느껴지실 수도 있고 왜 이런 기술이 탄생했는지 이해가 어렵겠다라는 생각이 들었어요. 그래서 이해를 돕기 위해 강의를 크게 두 파트로 나눴습니다.

첫 파트는 "전통적인 가상서버를 이용한 견고한 배포 방법"을 다루었어요.
EC2 대신 Lightsail을 이용해서 최대한 쉽게 설명하려고 노력했어요. 이 과정에서 서버 배포에 있어 중요한 개념들을 다룹니다.

  • 수평 확장 vs 수직 확장
  • Stateless vs Statefull
  • High Availability (고가용성) & Availability Zones
  • Private Network & Firewall
  • Load balancer & HTTPS
  • SSH 터널링
  • 배포 자동화 : 팀을 위한 Pull Request 기반 CI/CD & 솔로 개발자를 위한 CI/CD
  • CI를 위한 테스트 & 빌드 과정 다루기
  • 환경변수 안전하게 관리하기

이후 가상 서버의 아쉬운 점들이 무엇인지 되짚어봅니다. 그리고 컨테이너 기술이 어떻게 이 문제를 개선해주는지 알아봅니다. 그리고 마지막 파트에서는 Docker Container의 기본기부터 대표적인 Container Orchestration 기술인 AWS Elastic Container Service (ECS)를 집중적으로 다루게 돼요. 

아래는 강의에서 쓰이는 일부 자료들입니다 :)


Q&A 🙋🏻‍♂️ 

Q. Kubernetes를 나두고 ECS를 배워야 할까요?

저는 대략 5년 전부터 쿠버네티스를 써봤습니다. MSA를 도입하면서 직접 쿠버네티스를 회사에 도입했어요. 그 때도 K8S, ECS 사이에 고민했었는데요. 오픈소스라는 점이 매력적이어서 당시에는 쿠버네티스를 사용했습니다.

이후 창업한 회사에서는 고민 끝에 ECS를 사용했어요. ECS가 오픈소스가 아닌 대신 좀 더 사용하기 편하다는 느낌을 받았습니다. 그리고 문득 vendor-lock 문제가 생각보다 매우 작다라는 생각을 하게 됐습니다. 어차피 쿠버네티스를 사용하든 ECS를 사용하든 둘 다 같은 docker container를 사용하거든요. 모든 코드는 동일한 도커 환경에서 작성되는 거죠. AWS에서는 ECS가 조금 더 저렴하기도 하고 DX가 조금이라도 더 편한 ECS가 매력적이었습니다. 그리고 K8S, ECS 둘다 Container Orchestration 기술입니다. 즉, 하나만 잘 하시면 다른 기술로 전환하는건 생각보다 매우 쉽습니다.

Q. AWS Lambda 같은 Serverless는 어떻게 생각하세요? 

분명 좋은 기술이고 제가 만든 이미지 업로드 강의에서도 사용하고 있습니다. 하지만 특수 상황이 아니라면 일반적인 서버용으로는 적합하지 않다고 생각해요. 매우 저렴해 보이지만 트래픽이 증가하면 어느 순간부터 훨씬 비싸집니다. vendor-lock에 취약해질 가능성도 높아서 나중에 일반적인 서버로 이전하는게 비교적 어려울 수 있어요.

무엇보다 람다는 짧은 시간 동안 살아 있는 서버이기 때문에 웹소켓 서버를 만들기 어렵습니다. 그래서 AWS Lambda를 사용하고 있는 Vercel도 문서를 보면 웹소켓을 지원 못하니 외부 서비스를 사용하라고 합니다. 그 외 디비 커넥션 풀 관리라든지 신경써야할 추가적인 사항들이 발생할 수 있어요.

Q. Node.js 알아야 하나요?

아닙니다! 이 강의에서 처음에 Node.js로 간단한 백엔드 (express app)을 만들긴 합니다. 하지만 이건 순수히 배포할 코드가 필요해서입니다. 그리고 CI 파이프라인 구축을 위한 더미 테스트 코드와 빌드 과정을 추가하기 위한 목적으로 만들어졌습니다. 여기서 생성한 Node.js 코드는 모두 제공되며 해당 섹션을 생략하셔도 무방합니다.

Q. 데이터베이스나 Kafka 같은 메시지 큐 같은 stateful한 서비스 배포 및 서버 관리도 배우나요?

DB와 메시지 큐 같은 상태가 있는 서비스들은 생각보다 복잡하고 많은 관리가 필요한 서비스들입니다. 이 강의는 데이터베이스 같은 복잡한 외부 서비스보다는 여러분들이 개발한 서비스 (백엔드, ETL pipeline, SSR 서버) 배포에 초점이 잡혀 있습니다.

여기서 다루는 내용이 물론 데이터베이스 같은 복잡한 서비스 배포에도 필요한 내용이지만 DB를 직접 배포하고 싶으시면 더 많은 공부를 하셔야 합니다. 데이터베이스, 큐 (카프카) 같이 상태가 있는 (stateful) 서비스들은 매니지드 서비스를 권장합니다! 대부분 AWS 자체에서 지원하는 메니지드 서비스도 있고 각 서비스 회사에서 제공하는 메니지드 클라우드도 존재합니다.

예를 들어 Kafka 같은 경우 Confluent 혹은 AWS MSK, MongoDB 같은 경우 Atlas 혹은 AWS DocumentDB 존재합니다. 서비스별로 이런 메니지드 서비스가 애초에 존재하는 이유는 이런 서비스들은 생각 이상으로 서버 관리가 복잡하기 때문이에요! 그래서 이 강의를 수강하시더라도 가급적이면 이런 stateful 서비스들은 메니지드 서비스들을 권장합니다!

이런 분들께 추천드려요!

🎓
학습 대상은
누구일까요?
백엔드 개발자
DevOps 엔지니어
데이터 엔지니어
📚
선수 지식,
필요할까요?
기본적인 웹 개발 및 서버에 대한 이해

안녕하세요
김시훈 입니다.
김시훈의 썸네일

현재 공동창업한 작은 스타트업 Ninjalerts에서 CTO역할로 일하고 있습니다.

Ninjalerts는 이더리움 블록체인 데이터를 기반으로 NFT 거래 정보들을 실시간으로 알려주는 서비스에요!

전에 만나씨이에이에서 개발 팀장으로 있었어요. 시작은 기획자였는데 개발자가 부족한 탓에 외주를 맡기려다가 직접 개발할 기회가 생기면서 운좋게 개발자로 전향했어요. 이후 자사몰을 자체 개발하면서 이커머스 개발팀장을 맡았어요. 온라인에 나온 다양한 좋은 자료들 덕분에 빠르게 성장할 수 있었어요. 제 노하우가 여러분들에게도 도움이 되길 바랍니다 :) Linkedin 프로필

커리큘럼 총 117 개 ˙ 14시간 29분의 수업
이 강의는 영상, 첨부 파일이 제공됩니다. 미리보기를 통해 콘텐츠를 확인해보세요.
섹션 0. 강의 소개
섹션 1. 배포용 간단한 백엔드 만들기
섹션 소개 미리보기 02:26
Node.js & Redis 설치하기 02:44
VSCODE & Postman 설치하기 00:45
Typescript 프로젝트 생성하기 05:34
Typescript 개발환경 세팅해주기 (nodemon) 03:18
Express로 간단한 웹서버 만들기 03:29
Redis 서버 구동해서 List 데이터 관리해보기 - LPUSH, LRANGE 04:25
Redis 활용한 간단한 API 만들기 07:11
테스트 코드 개발 준비하기 03:18
Suptertest로 API 엔드포인트 테스트하기 06:58
테스트 코드를 위한 일관된 환경 구축하기 12:02
.env 파일로 환경변수 분리 06:35
테스트용 별도 redis-server 설정해주기 03:58
섹션 2. 전통적인 가상서버(Virtual Machine)에 배포하기 - AWS Lightsail
섹션 소개 미리보기 01:10
가상머신이란? 04:13
AWS - Lightsail vs EC2 04:28
Express App 받아서 준비하기 04:58
Github 준비하기 06:52
SSH Key 생성해서 Github으로 안전하게 코드 push하기 06:19
AWS 계정 만들기 - 과금 주의! 03:53
AWS Lightsail Instance로 첫 가상서버 생성해보기 05:39
VM에 Node.js, Redis 설치해주기 06:52
Ubuntu Service Manager - Systemd & Systemctl 06:14
Github repository에서 VM으로 소스코드 Clone (Pull) 해주기 04:36
환경변수 세팅해주고 백엔드 실행해주기 04:55
Firewall 이해하기 - 4000 포트 노출해주기 06:47
섹션 3. Lightsail - Domain & Https 적용하기
섹션 소개 미리보기 06:07
Public IP가 왜 dynamic?! 02:40
Loadbalancer 생성해서 VM 연결해주기 06:27
Loadbalancer 우회해서 VM Public IP로 접근 못하도록 차단하기 02:42
Domain 구입하기 04:23
Https 적용하고 Domain 연동하기 09:21
섹션 4. Github Actions를 이용한 배포 자동화
섹션 소개 미리보기 08:39
CI - 배포 준비를 위한 Github Workflow 생성하기 16:57
SSH 터널링으로 Lightsail VM 접속하기 09:14
VM에 static public IP 부착해주기 03:10
Github Action이 필요한 SSH 관련 시크릿 정보 안전하게 제공해주기 05:41
배포용 Workflow 만들기 14:30
main branch 보호해주기 05:40
1인 개발자를 위한 통합 배포 파이프라인 구축하기 (Pull Request 과정 제거) 08:06
섹션 5. 견고한 서버 구축하기 - High Availability & Zero Down Time
섹션 소개 미리보기 04:03
Artillery 이용해서 부하 테스트 해보기 08:16
Response time 개선하기 07:39
Process manager - 여러 프로세스를 뛰우고 load balancing 해주기 09:08
VM에 process manager 적용하기 02:24
수직 vs 수평 확장 - Vertical vs Horizontal Scaling 13:14
Snapshot을 이용해서 비교적 간편하게 수평 확장하기 12:07
Availability Zones 11:13
Redis data inconsitency 문제 해결하기 05:53
Private Network를 이용해서 VM to VM 안전하게 통신하기 17:04
VM to VM connection 05:29
데이터베이스 같은 stateful한 서비스들은 가급적이면 Managed Service를 사용하자! 18:23
전통적인 VM 관리에서 어려웠던 점들 되짚어보기 15:02
AWS Lightsail 리소스 정리하기 00:56
섹션 6. Docker Container 101
섹션 소개 미리보기 06:14
Container란? 09:01
Docker 개념 알아보기 - Dockerfile, Image, Container 14:08
Docker 개념 정리 및 설치 04:38
Docker hello-world 04:15
Docker 명령어 더 알아보기 07:20
Docker Container 멈추기 SIGTERM/SIGINT & SIGKILL 07:09
Port mapping으로 호스트 머신에서 컨테이너 접속하기 07:41
도커 이미지 만드는 방법 알아보기 03:52
커스텀 레디스 이미지 만들어보기 08:55
섹션 7. Containerize our apps!
Express app 이미지 만들기 08:42
docker.internal.host 이용해서 부모 호스트 접속하기 04:16
.dockerignore로 .env 분리하기 04:43
도커 캐시를 활용할 수 있도록 Dockerfile 개선하기 06:49
build & production stage 구분해서 도커 이미지 크기 줄이기 08:09
WORKDIR 이용해서 올바르게 파일 관리하기 06:09
Graceful shutdown 적용하기 11:30
Docker volume을 활용해서 개발환경 구축하기 08:56
docker-compose 이용해서 간편하게 개발하기 16:10
섹션 8. Cloud Security 101
섹션 소개 02:13
Virtual Private Network (VPC) & Subnets 알아보기 07:30
Load balancer 더 자세히 알아보기 - listener rules & target groups 04:17
방화벽 - Security Groups 10:23
IAM user 만들어서 권한 제한 해보기 - 1 10:01
IAM user 만들어서 권한 제한 해보기 - 2 03:43
IAM policies 알아보기 06:53
IAM user groups로 user 간편하게 관리하기 04:07
IAM role 알아보기 06:56
섹션 9. Container Orchestration
Container Orchestration이란? 05:48
Kubernetes vs Elastic Container Service (ECS) vs Elastic Beanstalk 08:53
Kubernetes 아키텍처 06:37
AWS Fargate 기반 ECS 아키텍처 06:30
AWS ECS - hello world 18:01
Cloudwatch 이용해서 Task 단위 로그 확인하기 그리고 관련 주의사항! 09:20
AWS ECS - Service 사용해서 여러개의 Task 생성하고 Load balancer 연결해주기 17:21
AWS ECS Cluster 삭제하기 01:59
섹션 10. AWS Elastic Container Service (ECS) 자세히 알아보기!
섹션 소개 03:06
Redis service 생성하고 Service Discovery 적용하기 13:32
Service Connect 보충 설명 03:14
Private Image 배포 전략 알아보기 05:04
AWS Elastic Container Registry (ECR)에 private repository 생성하기 02:31
ECR private repository에 이미지 push할 수 있는 IAM user 만들기 05:08
AWS CLI 설치 및 로그인 04:11
AWS CLI 이용해서 안전하게 ECR로 이미지 업로드하기 05:30
ECR private repository 이미지로 AWS ECS service 생성하기 07:46
AWS ECS 배포 전략 알아보기 03:30
무중단 배포! - Green/Blue Strategy 10:51
Self-healing! - 죽은 서버(테스크) 자동으로 살려내는 AWS ECS service 알아보기 11:48
AWS ECS Service를 이용한 Autoscaling 적용하기 21:45
Autoscaling 보충 설명 - EC2 cluster vs Fargate cluster 06:06
AWS Secret Manager를 이용해서 시크릿키 안전하게 관리하기 13:21
섹션 11. AWS Application Load Balancer - Domain & Https 적용하기
섹션 소개 03:06
Lightsail에서 Route53으로 host zone 이전하기 04:25
A record로 80포트 접근 허용하기 01:45
AWS Certificate Manager(ACM) 이용해서 Https를 위한 인증서 생성하기 02:33
Https 적용하고 http redirect 시켜주기 07:39
섹션 12. 컨테이너를 활용한 CICD 파이프라인 구축하기!
섹션 소개 03:04
docker-compose로 Continuous Integration (CI) 완성하기 10:23
Continuous Deployment (CD) 알아보기 04:27
OpenID Connect (OIDC)로 안전하게 AWS CLI 로그인 해주기 17:30
aws 공식 actions 활용해서 CD 파이프라인 구축하기 14:10
ECS 배포를 위한 IAM 권한 설정 및 배포 시간 단축하기 22:14
강의 게시일 : 2023년 10월 17일 (마지막 업데이트일 : 2023년 10월 17일)
수강평 총 25개
수강생분들이 직접 작성하신 수강평입니다.
4.9
25개의 수강평
5점
4점
3점
2점
1점
VIEW 추천 순 최신 순 높은 평점 순 낮은 평점 순 평점 순 높은 평점 순 낮은 평점 순
양지 thumbnail
5
이제야 다 들었네요! 이 강의 덕분에 ECS 배포까지 하는 방법을 쉽게 배울 수 있었습니다. 쉽게 배운 만큼 잊기도 쉬운법..! 나중에 한 번 혼자 적용해봐야겠네요 좋은 강의 내주셔서 감사합니다.
2024-02-27
jungmin.her thumbnail
5
완전 굿이에요
2024-02-28
이재혁 thumbnail
5
조금 어렵지만 이 강의를 듣고 인프라 기초를 잡아갈 수 있었습니다. 이제 실제 프로젝트에서 깃허브액션으로 CICD를 구축하고 도커로 서버를 띄우고 포트포워딩을 하고 도메인을 입힐 수 있는 능력을 갖추게 되었습니다. 감사합니다.
2024-03-07
devin adkins thumbnail
5
ECS 로 배포하는 방법에 대해 알고 싶었는데, 제 궁금증을 확실히 풀어주셔서 너무 감사합니다. 강의의 스토리 전개가 참 좋았습니다. 마치 소설책을 읽듯이 주욱 들었습니다. 다만, 강사님께서 영어 네이티브이신 것 같아서, 한국말 발음 또한 영어식이어서, 한국말 단어가 정확히 들리지 않아서 이해하려면 매우 집중을 하고 유추를 해야했습니다. 한국말 말씀하실 때, 조금 천천히 정확히 말씀하여 주시면 더욱 훌륭한 강의가 될 것 같습니다. 강사님의 다른 강의도 기대하고 수강하겠습니다. 대단히 수고하셨습니다.
2024-02-24
이효민 thumbnail
5
쉬운 설명과 실무에 사용 가능한 팁을 알려주셔서 너무 많은 도움이 되고 있습니다.
2024-02-23
연관 로드맵
이 강의가 포함된 잘 짜여진 로드맵을 따라 학습해 보세요!