어느 사이 21주차에 접어들었습니다. 거의 이번 주의 강의와 다음주 월, 화 강의가 끝나고 11월 1일부터 Final project
가 시작됩니다. 그 동안 학습한 내용들을 최대한 활용하고자 할 것이며 사용되는 기술말고도 진행되는 환경과 과정에도 신경쓰면서 배웠던 내용들을 응용할 것 입니다.
이번주의 학습은 "개발자" 보다는 "엔지니어" 로서 완성된 시스템, 웹 페이지 등을 배포하고 그 과정에서 Docker
를 통해 잘 되는 지 테스트하는 과정을 배웠으며, nGrinder
을 이용해 성능 테스트까지 학습할 수 있었습니다.
이전처럼 무언가를 개발하고, 코딩하는 것에 초점을 둔 것이 아니라 이를 "어떻게 배포하며 그 과정에서 무엇이 진행되는 지" 를 알 수 있었습니다. 또한 신입 개발자, 엔지니어로서 실무에 접했을 때 닥치게 될 상황 등을 가정하며 업무를 하는 상황극(?)을 통해 간접적인 실무 경험을 했으며, 매 번 Github
사용했기에 활용 능력을 점진적으로 강화할 수 있는 강의였고 매우 만족스러웠습니다.
pypi 모듈
에 weather_show()
기능을 추가해 현재 위치한 지역, 날씨, 기온 정보를 알려주는 기능 구현을 완료했습니다.pytest
실행 시, requests, beautifulsoup4
모듈이 없어 테스트에 실패했지만$ pdm add requests beautifulsoup4
, $ pdm install
을 통해 pyproject.toml
에 dependencies
가 추가된 것을 확인했고 pytest
에 통과하여 배포를 할 수 있었습니다.$ pip install hello-aaingyunii_pr
하면서 요구되는 모듈들도 함께 설치할 수 있음을 알 수 있었습니다.BRANCH | URL |
---|---|
dev | https://aaingyunii.web.app |
stg | https://aaingyunii.fly.dev |
prd | https://aaingyunii.github.io |
load balancing(LB)
구현을 완료했습니다.이전에 weather-show()
기능을 만들어서 배포하는 경험을 진행해봤기 때문에
이번 pip에서는 팀 github 관리 및 구성, 배포 과정을 맡아서 진행했고,
팀원들이 만든 다양한 기능, "blog 링크 보여주기, 프로젝트 기한 표기, 로또 번호 생성, 신대방삼거리 근처 맛집 추천" 등을 하나로 merge 하는 작업과 pypi.org 에 배포하는 과정까지 진행했습니다.
FastAPI
모듈을 통해 만들었던 pip 를 배포 및 테스트하는 과정을 진행했습니다.
nginx-proxy
관련 docker compose
에 대한 학습을 진행했습니다.
pypi.org
에 배포했던 pip 들을 설치해 FastAPI
모듈을 통해 웹 API 테스트를 하고Dockerfile
로 실행 및 테스트를 마친 후fly.io
로 배포: compose.yml
을 이용해 docker compose
로 nginx
컨테이너-proxy 서버를 만들고 이로부터 파생된 whoami
서버를 만드는 작업을 수행했습니다. 또한 compose.yml 파일을 수정하면서 Scale out-in / up-down
=> load balancing
의 작업을 수행했습니다.
아래 명령어와 compose.yml 수정을 통해 진행했습니다.
$ docker compose up -d # compose.yml 의 따라 이미지와 컨테이너를 생성하고 활성화
$ docker compose ps # 현재 실행 중인 컨테이너 리스트 확인
$ docker compose up -d --scale whoami=3 # scale out-in 관련 명령어
# --scale {서버명}=n, n개 만큼의 서버를 늘리거나 줄임
$ docker stats # 실행 중인 컨테이너의
# CPU % ,MEM USAGE / LIMIT ,MEM % 정보를 실시간으로 확인
version: '2'
services:
nginx-proxy:
image: nginxproxy/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
deploy:
resources:
limits:
cpus: '0.20' # scale up-down 관련 조정 변수
memory: 77M # scale up-down 관련 조정 변수
reservations:
cpus: '0.01'
memory: 30M
whoami:
image: jwilder/whoami
expose:
- "8000"
environment:
- VIRTUAL_HOST=whoami.example
- VIRTUAL_PORT=8000
deploy:
mode: replicated
replicas: 2 # https://docs.docker.com/compose/compose-file/deploy/#replicas
resources: # https://docs.docker.com/compose/compose-file/compose-file-v3/#resources
limits:
cpus: '0.05' # scale up-down 관련 조정 변수
memory: 33M # scale up-down 관련 조정 변수
reservations:
cpus: '0.01'
memory: 6M
: 해당 repo에서 진행한 과정이 오늘의 학습 내용입니다.
도커 컴포즈로 nginx-proxy
서버를 이용했고, compose.yml
자유롭게 수정하면서 resource scale 을 조정하는 실습을 진행했습니다. 또한 ngrinder
를 이용해 각각의 서버 성능을 실시간으로 확인하는 학습을 진행했습니다.
Performance test
과정을 이용해 실무에서 개발한 홈페이지의 BMT
요청사항이 들어왔을 때를 가정해등 실무에서 접할 법한 상황을 경험할 수 있는 학습을 진행했습니다.
안녕하세요. DJ26 개발팀장입니다.
어제 저녁 긴급 안건으로 사장님 요청사항이 있어 급하게 개발팀에 아래와 같은 요청을 드립니다.
- 사장님 업무 요청사항
: 영업팀이 개발진행 중인 API 또는 HOME PAGE 를 외부 고객사와 미팅 및 BMT, PoC 진행을 위해 외부에서 접속 가능한 배포를 요청하셨습니다.
1. [fly.io](http://fly.io/) 에 배포 하여 URL 을 회신 부탁드립니다.
2. [fly.io](http://fly.io/) 배포 이전 docker 를 통해 TPS 150 충족이 가능한 스팩을 정의하여 리포트로 작성하여 아래 주소에 작성하여 주시길 부탁드립니다. 해당 리포트를 바탕으로 PoC 전에 [fly.io](http://fly.io/) scale out / up 을 고려 하고자 하오니 필요 정보를 기입 부탁드립니다.
- https://github.com/dj-twenty-six/PoC-REPORT/issues
* 오늘 오후 2시 경쟁사와 BMT 예정입니다.
* 긴급 이슈로 문의 사항이 있으면 적극적으로 메일 회신 부탁드립니다.
감사합니다.
pypi
를 만드는 과정을 통해 흥미를 느낄 수 있었고, 이번에 알게된 dependencies
개념을 통해 더 다양한 기능들을 구현할 수 있을 것 같아 앞으로 어떤 기능을 추가할 지 고민되고 재미를 느낄 수 있어 매우 좋았습니다.
github, firebase, fly.io
등을 통해 웹 사이트를 배포하는 과정을 진행하면서 각각의 배포 방법을 익힐 수 있어 좋았습니다.
load balancer
를 실행하면서 한 서버에 가해지는 부하를 분산하는 과정을 경험한 것이 좋았습니다. 대개 같은 웹 페이지들로 분산시켜 페이지 전환이 없는데 이번 학습에서는 분산되는 것을 확인하기 위해 각각 다른 웹 페이지들을 사용했습니다. 이 과정에서 dockerhub
로 배포한 팀원들의 웹 페이지들을 사용했고 같은 웹 경로(http://localhost:9052) 로 접속을 여러 번 할 때마다 매번 다른 웹 화면이 뜨는 것을 볼 수 있었고, 이 과정이 LB임을 확인할 수 있어 매우 만족스러웠습니다.
Organization
계정을 만들어서 팀원들과 협업하는 과정이 매우 좋았습니다. 아직 부족한 점들은 많았지만 Github 이란 협업 툴을 활용하는 것 같아 좋았고 merge 후 배포까지 하는 과정이 재밌었습니다.
전체적으로 수업 내용이 어려운 부분들이 많았지만 하나씩 이해하는 과정에 흥미를 느꼈습니다.
docker compose
관련 학습 내용에서 아직 nginx
, proxy
등에 대해 명확한 개념 정리가 안되어서 이해하기 어려워 아쉬웠습니다.
nginx-proxy
repo를 통해 학습하면서 LOAD BALANCING
에 대한 이해가 되었고 docker
사용에 익숙해지는 과정이 만족스러웠습니다.
다양한 deploy 과정을 하면서 이에 익숙해질 수 있었고 더 이상 localhost
접속이 아닌 주소값으로 만든 사이트들에 접근할 수 있게 되어 만족스러웠습니다.
포트폴리오 사이트가 미완성이여서 검색엔진 최적화 하기에 부족해서 아쉬웠습니다.
성능 테스트 과정에서 진행한 scale 조정작업에 대한 결과물을 그때 그때 테스트할 수 있어 좋았습니다. 이를 통해 실무에서 서비스 배포하는 과정이 굉장히 까다롭고 여러 테스트 과정을 거친다는 것을 간접적으로 경험할 수 있었습니다.
BMT 학습 때, 실무에서 하는 것과 같은 상황을 접할 수 있어 좋은 기회였습니다.
이번 학습 과정은 파일로 남기는 것 보다는 Github
를 적극 활용해 그 때마다 학습에서 발생한 이슈, 알게 된 점들을 해당 학습 repo에 Issues, Pull requests
에 남겼습니다. 그러다 보니 블로그 글로 옮기는 과정에서 보다 자세한 내용들이 누락된 것 같지만 글 내용에 업로드된 링크에 더 자세한 내용들이 담겨있어 모두 확인 가능합니다.
실무에서 발생할 법한 상황들로 이루어진 학습이었기 때문에 경력이 없는 신입 개발자-엔지니어인 저로서는 뜻 깊은 시간들이었고, 앞으로 진행하게 될 파이널 프로젝트
에서 여태 배운 내용들을 모두 활용할 수 있도록 노력할 것 입니다. 프로젝트 진행 과정에서 쓰이는 Github 협업, 버전 관리, 그리고 여러가지 프로그래밍 기술들까지 최대한 응용하도록 할 것 입니다.
이와 더불어 취업 준비와 복습 또한 빼먹지 할 것이며, 이력서 디벨롭을 하면서 앞으로 어떤 직무로 나아갈 것인지와 장기적인 미래 계획에 대해서도 생각해볼 예정입니다.