패스트캠퍼스 챌린지 최종 후기
패스트 캠퍼스 교육 과정 소개서 및 기존 학습 내용을 참고하여 작성하였습니다.
패스트 캠퍼스 두 번째 챌린지 참여
첫 번째 챌린지는 안길승 강사님의 '파이썬을 활용한 데이터 전처리 LevelUP 올인원 패키지 Online'였다. 덕분에 30일 챌린지로 블로그 내용도 정리하고 데이터를 전처리 할 수 있는 기술까지 배우게 되었다. 이번 두 번째 챌린지는 '한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online' 였는데 덕분에 클라우드를 구성하고 장고를 통해 백엔드를 구현하는 것까지 배울 수 있었다.
아직 강의 전체를 듣지는 못했지만 어떠한 흐름으로 진행하는지 이해할 수 있었고 그 과정에서 현재 진행되고 있는 해커톤에도 적용하는 등 강의를 통해 얻은 것들이 많았다. 이번 챌린지 최종 후기를 통해 그동안 배웠던 것들을 짧게나마 정리를 해보려고 한다.
강의 목표
1. AWS/DevOps의 개념을 이해하고 실제 업무에 DevOps를 적용할 수 있습니다.
2. 40가지가 넘는 AWS/DevOps 툴을 직접 따라해보며 익힙니다.
3. AWS/DevOps의 전체 흐름을 이해합니다.
AWS 인프라 구축 강의 목차
1. DevOps의 기본 개념
2. AWS 기반 소규모 & 중규모 아키텍트 설계
3. AWS 기반 대규모 아키텍트 설계
4. 코드를 통한 인프라 관리(IaC)
5. 도커와 쿠버네티스를 이용한 서비스 운영
6. CI/CD 구현하기
7. 모니터링 서비스 구축 및 운영
8. AWS 기반 보안
9. 부록 - 쿠버네티스 on AWS EKS
총 수강 시간은 75시간으로 많은 분량의 강의가 편성되어있다. 강의 일정은 '22년 1월 중반에 강의가 모두 탑재될 예정이고 강의는 초반에 DevOps의 개념부터 EKS까지 모두 다룰 예정으로 서비스를 구현하는 방법과 클라우드에 서비스를 적용시켜보는 것까지 모든 것들을 다 경험해볼 수 있다.
강의 요약
1. AWS/DevOps가 무엇인지, 왜 필요한지에 대해 이해하고 상황에 따라 어떻게 DevOps를 적용할지 배워봅니다.
2. 각 코스에서 이론을 배운 뒤 간단한 툴 실습부터 여러 툴을 연동한 프로젝트를 수행하며 이론적 이해 뿐만 아니라 실무에서 실제 활용할 수 있는 능력을 얻을 수 있습니다.
3. CI/CD, 자동화, 컨테이너 기술 등의 한 부분만 이해한다고 DevOps를 알고 있다고 할 수 있을까요? 아키텍트 설계, CI/CD, 자동화, 컨테이너 기술, 모니터링, 보안까지 하나의 과정에서 학습하며 AWS/DevOps의 전체 과정을 경험할 수 있습니다.
패스트 캠퍼스의 장점
1. 낮, 새벽과 상관없이 내가 원하는 시간대에 나의 스케줄대로 수강
2. 먼 거리를 오가며 오프라인 강의장을 찾을 필요없이 어디서든 수강
3. 무엇이든 반복적으로 학습해야 내 것이 되기에 이해가 안가는 구간 몇번이고 재생
AWS SSH 키 등록 및 EC2 접속방법
AWS EC2 서비스 페이지에 접속 후, 대쉬보드 좌측에 네트워크 및 보안 섹션 하단에 키 페어가 있는데 이를 선택하고 이어서 우측 상단에 있는 키 페어 생성 버튼을 통해 SSH 키를 생성한다. 이때 키 페어 유형으로 RSA, ED25519로 나뉘어지는데 암호화 알고리즘으로 데이터를 주고받을 때 데이터를 암호화하여 데이터 유출이나 피해를 막는다.(세부 내용은 하단 참고자료 확인)
생성된 키는 다운로드가 되어지고, SSH 개인키는 EC2 머신에 접속하기 위한 키로 생성된 EC2 머신 내에서 사용되어진다. SSH에 접속하기 위해서는 cmd 창에서 개인키의 최소 권한을 설정한다음 명령어를 통해 접속하게 된다.
- 1일차 학습내용 中 -
현재 인공지능 해커톤으로 '실제 사용자를 위해 MLOps 구축하기' 프로젝트를 진행하고 있다. 실제 서비스를 구축하기 위해 클라우드를 구축해봐야겠다 생각했는데 때마침 좋은 기회에 패스트 캠퍼스 챌린지 이벤트가 진행되고 있었고 그 중에서도 가장 관심있었던 이 강의를 선택하여 이벤트에 참가하였다.
클라우드는 주로 AWS, GCP, Azure에 대해서 듣기만 했었지 실제로 다뤄본 경험이 없었기 때문에 이번 강의를 통해 AWS를 직접 사용해본다해서 무척 설레였다. EC2가 무엇인지, 여기에 적용되는 네트워크 개념은 어떠한지 개념을 처음 접하게 되면서 약간의 어려움은 있었지만, 강사님들께서 하나하나 천천히 짚어주셔서 자세히 이해해나갈 수 있었다.
Bastion Host 만들기
Bastion Host는 일반 유저가 외부에서 Private Server에 접속하기 위한 계정이다. 이를 위해 Public EC2와 Private EC2를 생성한다. 이때 Private EC2 설정에서 Security Group 지정으로 소스에 Public EC2으로 지정해주어야 Inbound를 부분적으로 허용해줄 수 있다.
일반 사용자가 접근하려면 SSH 방법으로 접근한다. 이를 위해 putty, pageant, puttygen을 설치한다. 나는 VM에 우분투로 사용하고 있었기에 다음 링크를 통해 설치하였다. 그런데 아무리 찾아봐도 pageant가 없어 찾아보니 Linux 운영 체제(우분투 등)에서는 자체 기능을 통해 해결이 가능했다.
- 8일차 학습내용 中 -
일주일 동안 DevOps의 기초와 네트워크 개념에 대해 알아보고 이어서 실제로 클라우드 서비스를 간단히 구현해봤는데, 어려웠지만 무척 재밌었다. 실제로 나는 실습대로 따라했는데 중간에 설정 값을 잘못줘서 그런지 오류가 나서 다음 날 처음부터 다시했다. 시간은 좀 걸렸지만 그래도 그 과정에서 배운 게 많았고 애매했던 네트워크 개념을 다시 복습할 수 있었다.
클라우드를 구성하게 되면서 Public과 Private 개념을 알게 됐었는데 이를 활용해서 IP 접근을 차단하거나 Bastion Host로 외부 접근을 허용시키는 등 구조에 따라 기능을 다르게 적용할 수 있었던 게 무척 신기했다. 특히 오류가 많이 발생했던 부분은 SSH, Security Group, IAM 프로파일 등 보안과 관련된 설정이었는데 이 부분을 이해하지 못하면 실제로 적용하기가 어려운 부분이 많았었다.
RestAPI 기능 구현하기
해당 링크에 들어가면 장고에서 RestAPI를 구현할 수 있는 방법히 자세히 나와있다.
pip install djangorestframework
이 기능을 사용하기 위해서는 먼저 프로젝트의 settings 파일 내 INSTALLED_APPS에 rest_framework를 추가해야한다. 그리고 해당 명령어를 통해 djangorestframework 패키지를 설치하면 초기 설정을 마칠 수 있다.
이어서 view 파일에 들어가 RestAPI를 위해 request에 GET, POST 기능을 입력한다. 이때 데이터를 JSON 형태로 불러들이기 위해 models에서 작성한 테이블 값과 이를 serializer으로 지정해서 response를 시켜준다.
여기서 serializer은 DB에 들어가있는 데이터 형태를 JSON으로 바꾸어주는데, 이를 위해 serializer 파일을 만들고 파일 내에 JSON으로 바꿀 모델명과 필드값을 적용해준다.
- 15일차 학습내용 中 -
클라우드 기능을 익히고 나서 다음은 장고를 이용해 어플리케이션을 구현하는 강의가 이어졌다. 평소 API가 무엇인지, 그리고 RestAPI가 어떤 역할을 하는지 이해가 안갔었는데 이번 실습을 통해 대부분을 이해할 수 있었다. 장고를 통해 데이터 베이스를 어떻게 생성하는지와 어떻게 데이터가 입력되고 API로 가져올 수 있는지 코드로 직접 구현해보면서 원리를 이해해볼 수 있었다.
특히 어플리케이션을 만들 때 백엔드를 어떻게 구성해야하는지 정말 궁금했는데 간단한 어플리케이션을 만드는 과정으로 백엔드를 비롯해 MVP 개발도 이해해볼 수 있었다.
로드밸런싱(AWS ELB)
접속자 수가 많을 때 다수의 서버(인스턴스)에 트래픽을 분산시켜 접속시키는 기술이다. 이때 다수의 서버로 확장해서 로드밸런싱하는 이유는 비용 측면에서 성능이 좋은 서버를 구축했을 때의 성능 대비 비용이 많이 발생하기 때문이다.
로드밸런싱은 L4, L7 두가지로 구분할 수 있다. L4 로드밸런싱은 빠르고 저렴하지만 데이터를 보지 않기 때문에 각각의 서비스를 서버로 달리할 때(마이크로 서비스) 적용이 불가능하다. L7 로드밸런싱은 마이크로 서비스에는 적용가능하지만 데이터를 확인하는 과정으로 속도 이슈가 있고, 비용 이슈도 있다.
- 22일차 학습내용 中 -
좀 더 심화적으로 로드밸런싱에 대한 것도 배웠다. 서비스 이용자들이 많아지면 서버 과부하로 문제가 발생할 수 있는 것에 대비해 분산시켜 접속을 유도하는 기술로 서비스가 확장되거나 서버의 분산이 필요할 때 사용되어지는 기술이었는데 AWS의 ELB 서비스가 그러한 기능을 했고 여기에서 OSI 7 Layer 개념을 이해해볼 수 있었다.
특히 클라우드를 사용하게 되면서 적절한 기능과 합리적인 비용 계산이 중요하다는 것을 계속 느끼고 있다. 아무리 좋은 성능으로 서버를 구축하는 것보다 여러 대의 서버와 로드밸런싱을 적용하는 게 더욱 가성비 있게 구성할 수 있는 것처럼 서비스를 위한 최소한의 용량 그리고 지속적으로 서비스를 위한 환경까지 다양한 관점에서 살펴보고 적용해야 클라우드를 잘 쓸 수 있겠다는 생각이 들었다.
도커 컨테이너 구현
패스트캠퍼스 28일차에서 도커 컨테이너로 장고 애플리케이션을 구현했던 것처럼 Nginx도 똑같이 컨테이너로 구현해주었다. 구현된 컨테이너는 백그라운드에 실행을 해주어 추가 명령어를 입력해줄 준비를 한다.
그리고 추가로 장고 소켓과 Nginx 연결을 위해 ini 파일을 생성한다. 이후에 도커 컴포즈를 설치하는데 일반적으로 도커를 설치하면 자동으로 설치되나, 우분투는 따로 설치를 해줘야한다고 한다. 설치가 되면 chmod +x 명령어로 파일 권한을 변경해준다.
추가로 Nginx config 파일 생성, Nginx 도커파일 생성, 이미지 빌드를 해준 뒤, 실행 시켜주면 웹페이지에 접속할 수 있는데 기존에 구현했었던 장고 이미지를 실행시켜주지 않은 상태에서 실행할 경우 오류가 발생한다. Nginx가 장고와 소켓이 연결되어야하는데 없기 때문에 오류가 발생하는 것이다. 이를 위해 도커 컴포즈를 통해 우선순위에 따라 컨테이너를 작동시킨다.
- 29일차 학습내용 中 -
어느덧 패스트캠퍼스 챌린지의 끝을 앞두게 되었다. 기존에 구현했던 장고 코드를 도커 파일로 빌드하고 생성된 이미지를 활용해서 배포를 하게 되는데 예전에 도커에 대해서 간단하게 공부한 이후로 다시 경험하니까 그때와는 다른 느낌이었고 당시에 배웠던 것도 기초 중에 기초라는 것을 느끼게 되었다.
실제로 구현된 코드를 이미지로 만들기 위해 거쳐지는 과정을 실습으로 이해할 수 있었는데 여기에서 쿠버네티스를 적용시켜 다중 서버에서 서비스를 확장시킬 수 있는 부분까지 고려할 수 있게 되었고 파편처럼 흩어져 있던 개념들이 하나, 둘 모여지는 경험을 하게 되었다.
실제로 해커톤을 준비하면서 쿠버네티스를 공부하게 되었고, 도커, MLOps 관련 툴들을 접하며 어떻게 사용하는 지 대략적으로 이해는 했었지만 실제 서비스를 위해 코드 구현부터 처음부터 진행해본 적이 없었기 때문에 약간의 막연함이 남아 있었다. 이번 강의는 막연함을 풀 수 있는 실마리가 되어주었는데 아직은 강의 초반부이고, 배워야할 내용들이 많기 때문에 열심히 노력해서 서비스를 구현해서 실제 배포까지 노력해봐야겠다.
수강료 100% 환급 챌린지 | 패스트캠퍼스
딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.