BEST
개발 · 프로그래밍

/

데브옵스 · 인프라

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

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

(4.9) 수강평 33개

수강생 600명

Thumbnail

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

이런 걸
배워요!

  • 전통적인 가상서버 배포 - 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분)

수업 자료

가 제공되는 강의입니다.

강의 게시일: 2023년 10월 17일
마지막 업데이트일: 2023년 10월 17일

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!