이 강의에서는 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 서버 배포!
쉽게, 더 견고하게 알려드릴게요.
전통적인 VM을 배포하면서 불편함을 직접 경험하게 됩니다. 즉, Why를 명확히 이해하고 ECS & Docker를 제대로 학습할 수 있습니다 😎
여러분, 혹시 AWS 클라우드를 사용해보려다가 막막한 기분이 들어본 적 있으신가요? AWS 안에도 서버 배포할 수 있는 방법이 너무 다양하죠. 그리고 무엇보다 각각 설정도 다양합니다. 그냥 개발한 코드를 견고하게, 저렴하게, 안전하게 그리고 빠르게 배포하고 싶을 뿐인데요. 생소한 설정들이 너무 많죠.
겨우겨우 배포했는데 하다 보니 이런 질문을 하게 된 적도 있지 않으신가요?
서비스 개발에 집중하고 싶은 마음이 앞서다보니 AWS 도입을 포기하거나, 어떻게든 적당히 작동하도록 설정들을 대충 넘기는 경험을 대부분 해보셨을 거라고 생각합니다.
문제는 잘못하면 비용 폭탄 그리고 치명적인 보안 문제에 노출될 수 있어요. 그리고 가용성이 높은 서버를 쉽게 만들 수 있음에도 불구하고 이런 클라우드 이점들을 사용하지 못하고 있을 수도 있어요.
가용성이 높은 서버는 매우 중요해요. 특히 서비스가 커지면 커질수록요. 자연재해가 발생해서 데이터 센터가 완전 다운이 되더라도 서비스를 유지할 수 있거든요!
원래는 Docker & AWS ECS만 다루는 강의를 제작하려고 했어요. 하지만 그러면 너무 버겁게 느껴지실 수도 있고 왜 이런 기술이 탄생했는지 이해가 어렵겠다라는 생각이 들었어요. 그래서 이해를 돕기 위해 강의를 크게 두 파트로 나눴습니다.
첫 파트는 "전통적인 가상서버를 이용한 견고한 배포 방법"을 다루었어요.
EC2 대신 Lightsail을 이용해서 최대한 쉽게 설명하려고 노력했어요. 이 과정에서 서버 배포에 있어 중요한 개념들을 다룹니다.
이후 가상 서버의 아쉬운 점들이 무엇인지 되짚어봅니다. 그리고 컨테이너 기술이 어떻게 이 문제를 개선해주는지 알아봅니다. 그리고 마지막 파트에서는 Docker Container의 기본기부터 대표적인 Container Orchestration 기술인 AWS Elastic Container Service (ECS)를 집중적으로 다루게 돼요.
아래는 강의에서 쓰이는 일부 자료들입니다 :)
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분)
가 제공되는 강의입니다.
강의 소개
18:01
섹션 소개
02:26
Node.js & Redis 설치하기
02:44
Typescript 프로젝트 생성하기
05:34
Express로 간단한 웹서버 만들기
03:29
테스트 코드 개발 준비하기
03:18
.env 파일로 환경변수 분리
06:35
섹션 소개
01:10
가상머신이란?
04:13
Express App 받아서 준비하기
04:58
Github 준비하기
06:52
AWS 계정 만들기 - 과금 주의!
03:53
환경변수 세팅해주고 백엔드 실행해주기
04:55