플레이데이터 부트캠프 데이터 엔지니어링 트랙 21주차 (10.23~27)

안인균·2023년 10월 30일
0
post-thumbnail

어느 사이 21주차에 접어들었습니다. 거의 이번 주의 강의와 다음주 월, 화 강의가 끝나고 11월 1일부터 Final project가 시작됩니다. 그 동안 학습한 내용들을 최대한 활용하고자 할 것이며 사용되는 기술말고도 진행되는 환경과 과정에도 신경쓰면서 배웠던 내용들을 응용할 것 입니다.

이번주의 학습은 "개발자" 보다는 "엔지니어" 로서 완성된 시스템, 웹 페이지 등을 배포하고 그 과정에서 Docker 를 통해 잘 되는 지 테스트하는 과정을 배웠으며, nGrinder을 이용해 성능 테스트까지 학습할 수 있었습니다.

이전처럼 무언가를 개발하고, 코딩하는 것에 초점을 둔 것이 아니라 이를 "어떻게 배포하며 그 과정에서 무엇이 진행되는 지" 를 알 수 있었습니다. 또한 신입 개발자, 엔지니어로서 실무에 접했을 때 닥치게 될 상황 등을 가정하며 업무를 하는 상황극(?)을 통해 간접적인 실무 경험을 했으며, 매 번 Github 사용했기에 활용 능력을 점진적으로 강화할 수 있는 강의였고 매우 만족스러웠습니다.


1. ✅ 학습 내용 ✍

  • hello-aaingyunii_pr 를 통해 기존의 pypi 모듈weather_show() 기능을 추가해 현재 위치한 지역, 날씨, 기온 정보를 알려주는 기능 구현을 완료했습니다.

    • 각자 pypi를 만드는 시간을 가졌고, 저는 웹 크롤링을 통해 날씨 정보와 위치한 지역 이름을 표시하는 기능을 구현했습니다.
    • 처음 pytest 실행 시, requests, beautifulsoup4 모듈이 없어 테스트에 실패했지만
    • $ pdm add requests beautifulsoup4, $ pdm install 을 통해
    • pyproject.tomldependencies 가 추가된 것을 확인했고 pytest 에 통과하여 배포를 할 수 있었습니다.
    • dependencies => $ pip install hello-aaingyunii_pr 하면서 요구되는 모듈들도 함께 설치할 수 있음을 알 수 있었습니다.
  • aaingyunii.github.io 배포

BRANCHURL
devhttps://aaingyunii.web.app
stghttps://aaingyunii.fly.dev
prdhttps://aaingyunii.github.io
  • 2.2.0/load balancer nginx , 2.3.0/push dockerhub 를 통해 각자 개인 블로그(github.io)를 dockerhub에 배포할 수 있었고, load balancing(LB) 구현을 완료했습니다.

  • dj-team-eleven , Organization 계정을 만들어 파이널 프로젝트 팀원들과 함께 eleven-pp, 팀 pip를 개발하는 과정을 진행했습니다.

    • 이전에 weather-show() 기능을 만들어서 배포하는 경험을 진행해봤기 때문에

    • 이번 pip에서는 팀 github 관리 및 구성, 배포 과정을 맡아서 진행했고,

    • 팀원들이 만든 다양한 기능, "blog 링크 보여주기, 프로젝트 기한 표기, 로또 번호 생성, 신대방삼거리 근처 맛집 추천" 등을 하나로 merge 하는 작업과 pypi.org 에 배포하는 과정까지 진행했습니다.

    • FastAPI 모듈을 통해 만들었던 pip 를 배포 및 테스트하는 과정을 진행했습니다.

    • nginx-proxy 관련 docker compose 에 대한 학습을 진행했습니다.

  • SEO 검색엔진 최적화 를 통해 이전에 만든 개인 블로그(github.io) 페이지의 검색 노출을 설정을 하는 것을 진행하는 것으로 시작했습니다.

    • 네이버, 구글 각각으로부터 검색 사이트 등록하는 것을 진행했고,
    • 네이버의 "사이트 간단체크" 를 통해 웹 페이지 최적화 정보를 조회하는 등의 활동을 진행했습니다.
  • aai-API

    1. pypi.org 에 배포했던 pip 들을 설치해 FastAPI 모듈을 통해 웹 API 테스트를 하고
    2. Dockerfile 로 실행 및 테스트를 마친 후
    3. fly.io 로 배포
    4. 이전에 빌드한 도커 이미지를 docker-hub에 배포까지 완료했습니다.

: compose.yml 을 이용해 docker composenginx 컨테이너-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 %  정보를 실시간으로 확인
  • compose.yml
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 요청사항이 들어왔을 때를 가정해

1. 도커를 이용해 성능 테스트

2. fly.io 로 배포

3. 레포트 작성

등 실무에서 접할 법한 상황을 경험할 수 있는 학습을 진행했습니다.

  • ✅ 이메일 내용
안녕하세요. 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 예정입니다.
* 긴급 이슈로 문의 사항이 있으면 적극적으로 메일 회신 부탁드립니다.

감사합니다.
  • bmt-caching

    : 이전까지 성능테스트를 할 때 scale 값 조정(cpu, memory 제한)을 통해 이뤄졌는데 이번엔 caching(캐싱), "클라이언트와 'Origin 서버' 사이에 위치하며 보이는 모든 콘텐츠의 복사본을 저장", 을 통한 성능 테스트를 진행하는 법을 학습했습니다.

2. 😄 학습하면서 느낀 점 😭

  • 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 학습 때, 실무에서 하는 것과 같은 상황을 접할 수 있어 좋은 기회였습니다.

3. 🚩 마무리 및 앞으로의 계획 🚀

이번 학습 과정은 파일로 남기는 것 보다는 Github를 적극 활용해 그 때마다 학습에서 발생한 이슈, 알게 된 점들을 해당 학습 repo에 Issues, Pull requests 에 남겼습니다. 그러다 보니 블로그 글로 옮기는 과정에서 보다 자세한 내용들이 누락된 것 같지만 글 내용에 업로드된 링크에 더 자세한 내용들이 담겨있어 모두 확인 가능합니다.

실무에서 발생할 법한 상황들로 이루어진 학습이었기 때문에 경력이 없는 신입 개발자-엔지니어인 저로서는 뜻 깊은 시간들이었고, 앞으로 진행하게 될 파이널 프로젝트 에서 여태 배운 내용들을 모두 활용할 수 있도록 노력할 것 입니다. 프로젝트 진행 과정에서 쓰이는 Github 협업, 버전 관리, 그리고 여러가지 프로그래밍 기술들까지 최대한 응용하도록 할 것 입니다.

이와 더불어 취업 준비와 복습 또한 빼먹지 할 것이며, 이력서 디벨롭을 하면서 앞으로 어떤 직무로 나아갈 것인지와 장기적인 미래 계획에 대해서도 생각해볼 예정입니다.

0개의 댓글

관련 채용 정보