주마다 하나의 프로그램을 다루는 과제이긴 하지만 그냥 프로그램 12개 설치하는 것 보다 서로 연결된 하나의 프로젝트를 해보고 싶었다. 처음에는 뭐할 지 고민하면서 우분투 개발환경 꾸미기를 했었고 그냥 디코봇이나 하나 만들어봐야겠다 라고 생각했었다. 이후에 devops를 학교에서 배운 뒤 디코봇 배포에 이걸 적용해보면 어떨까라는 생각이 들었다.

중간고사 시험을 볼 땐 plan-create-verify-package-release-configure-monitor 단순히 외우기만 했지만 각각의 해당하는 부분의 기능을 혼자 구축하려니 어려움도 많았다. 각 단계를 다음과 같이 해봤다.
plan: 내 머릿속에서 원하는 디코봇의 기능을 추가하는 부분이다.
create: 디코 봇 코드를 vsc에서 작성하는 단계다.
verify: mockup코드를 따로 작성해서 테스트 하는 단계다.
package: docker hub에 새로운 버전의 코드를 업로드 하는 과정이다.
release: kubernetes를 통해 배포하는 과정이다.
configure: 인프라를 코드로 관리하기 위한 도구로 jenkins를 통한 파이프라인 구성을 이용했다.
monitor: 서비스 작동 현황과 같은 것을 보기 위한 것으로 prometheus, grafana를 이용했다.
얼마 전에 칼리 리눅스를 사용하는 영상을 봤는데 그 영상에서 리눅스를 공부하는 방법은 os를 리눅스로 설치하고 사용하는 것이라고 했다. windows도 생각해보면 따로 공부하면서 이용한게 아니다보니 이해가 되는 말이었다. 그래서 ubuntu를 사용해보면서 명령어랑 환경에 좀 익숙해진 것 같다.
docker는 진짜 편했다. 이전에 종속성 관리를 conda를 이용해서만 했었는데 컨테이너 방식의 패키지 관리는 진짜 새로웠다. 잘못된 것 같다 싶으면 삭제하고 다시 설치하면 된다는게 편했다.
k8s는 거기에 더해서 yaml를 이용한 deployment로 배포가 더 쉬워진다는게 좋았다. rolling update는 내 서비스가 끊기지 않고 업데이트를 할 수 있다는 점에서 신기했고, secret을 통한 민감한 정보의 관리도 편했다.
jenkins는 k8s, dockerhub, github와의 연결이 잘 되지않아 파이프라인 만드는게 어렵긴 했다. webhook 개념, 토큰을 통한 인증을 직접 해보면서 배웠다. 그래도 한번 파이프라인 만들고 나니 add, commit, push만 해주면 verify부터 release까지 자동으로 해준다는게 진짜 편했다.
prometheus를 통해 디코봇으로 부터 메트릭을 받고, alertmanager를 이용해서 슬랙으로 알림까지 보내주고, grafana를 이용해서 예쁜 모니터링 대시보드까지 만들고 나니 뿌듯했다. 물론 회사에 사용하는 치밀한 devops에는 발끝에도 못 미치지만 찍먹 정도 해봤다고 생각한다. 불편했던 건 로컬에서 하다보니 컴퓨터 리소스 부족으로 컴퓨터가 작업 중에 죽어버린다는 것이다. 그러면 ngrok으로 터널링도 다시 해야하고, jenkins와 github에서 webhook 설정도 바뀐 url로 고쳐야 했다. 그래서 다음엔 클라우드 환경이나 데스크탑에서 제대로 해보고 싶다는 생각이 들었다. os도 회사에서 사용하는 redhat계열로 사용해보고 싶다. 전체 프로젝트를 하면서 각 프로그램의 연결과 작동에 집중하다 보니 각 프로그램의 세세한 기능들은 잘 알지 못한다. 물론 자주 사용하면서 알게된 kubectl명령이라던가, git, docker명령어들은 익숙하긴 하다. 다음으로 해보고 싶은 건 k8s공부다. 회사 채용 공고만 봐도 devops 요구 기술 스택의 맨 위에 k8s+istio라고 적혀있는데 istio를 사용해본 적이 없어서 k8s와 istio를 공부해 보고 싶다. 그래도 얻어가는게 꽤 있던 한학기라고 생각한다. 매주 시간 쏟는게 아깝다는 생각이 안들 정도로 어느새 열중하고 있는 나를 볼 수 있었다.