6개월간의 여정이 마무리 되었다.
22일경 드디어 25.10.28(OT)~26.04.22까지 6개월간의 일정이 마무리되었다.
그간 많은 것을 배우고 경험할 수 있던 시간이었고,
이 회고에 최대한 커리큘럼에 대한 것들과 느낀 것들에 대해 담아보고자 한다.
기본적인 SW공학부터 DevOps까지. 1명의 개발자로서 1인분의 몫을 해낼 수 있도록 도와주는 커리큘럼을 진행했다.
SW공학에서는 전반적인 방법론 및 기본적인 CS지식을
데이터베이스에서는 테이블간 관계, 스키마, 릴레이션 등 기본개념들을
Linux 에서는 가상머신을 통한 실습 및 데이터베이스에서 배운 개념을 활용하여 Replica구현을
Java, Spring에서는 Java문법과 Spring개념, Bean개념 및 spring cloud를 통한 MSA 구현을
Vue.js에서는 SPA, Pinia, Cookie, Session 등과 컴포넌트의 개념을
DevOps에서는 Docker, Kubernetes, Jenkins, Argocd를 배웠다.
학습하는 4개월간 빠듯하고 힘들었지만 새로운 것을 배우고 이해함에 있어 즐거움을 느낄 수 있어 다행이었다.
기반기술(SW공학, DB, Linux), 백엔드, 프론트엔드, DevOps로 구성된 4개의 주제로 4번의 단위프로젝트를 진행했다.
기반기술에서는 우리가 구현하고자 하는 서비스를 DB 구성까지 구현했다.
간략하게 서비스를 설명하자면, 간단한 설문을 통해 근골격계 질환을 예상하고 맞춤 운동가이드를 제안하는 서비스를 상상했다.
이때, 리눅스에 DB를 설치하여 Master DB를 Slave DB에서 변화를 감지하여 내부데이터를 동일하게 맞추도록 구현했다. 이를 통해 Replica DB를 구현함으로써 데이터 정합성, DB부하 분담, 나중에 배운 CQRS패턴에서 DB를 조회용과 수정용으로 나누는 식으로 구현할 수 있음을 알 수 있었다.

내가 제일 재밌게 했던 프로젝트이다.
자취생을 위한 서비스로 식재료를 기입하면, 해당 식재료 중 유통기한이 얼마 남지 않은 서비스를 재료를 기반으로 레시피를 추천해주는 서비스이다.
MSA기반의 백엔드 아키텍처를 고안했고, 내가 맡은 마이크로 서비스는 레시피 추천 서비스이다.
이때, 공공데이터를 활용하여 레시피를 추천하는 방식과 AI기반의 레시피 추천방식을 생각했었는데 프로젝트 상황에 맞게 AI기반의 레시피 추천방식을 채택하게 되었다.
Spring AI를 사용해 request와 response를 원하는 형태로 받아 구현하였다.
모두가 열심히 참여하고, 모두가 만족할만한 결과물을 낼 수 있던 프로젝트였다.
골라보숑이라는 이름의 프로젝트이고 이상형 월드컵/넌센스 퀴즈를 주제로 만들었다.
Json-server를 통해 간단한 nosql db를 구성했고, Vue.js를 통해 프론트엔드를 구현했다.
컴포넌트 모듈을 뽑아냄으로써 유지보수성을 높이기 위해 최대한 노력했다.

지도에 일기를 기록할 수 있는 서비스이다.
Docker, Jenkins, kubernetes, ArgoCD를 학습하며 CI/CD 파이프라인 자동화에 대해 학습했다. 이를 통해 무중단 배포를 경험해볼 수 있었다. 토스 어플을 사용하다보면 누구는 특정기능이 보이는데, 누구는 안보이는 이유에 대해 알 수 있었다. 배포전략 중 하나로 카나리 전략은 몇명에게만 보이도록하고 빠르게 문제를 해결하며 점진적으로 업데이트된 서비스를 여러명의 사용자에게 배포한다.
우리는 구현하며 지도를 보여주기 위해 KakaoMap API를 사용했고, 친구추가나 일기공유를 실시간으로 보여주기 위해 SSE를 사용했다.
Jenkins를 사용해서 CI 파이프라인 시각화를 했고, Argocd를 통해 CD 시각화를 했다.
그리고 Jenkins와 Discord를 연동하여 CI가 완료될때마다 알림을 보낼 수 있도록 했다. Jenkins는 항상 켜져있을 수 있도록 ngrok을 사용해서 터널링을 했다.


이 프로젝트는 SCM(Supply Chain Management)을 주제로 진행했다.
3PL(third-party logistic)을 대상으로 물류관리를 간단하게 시각화할 수 있도록 노력했다.
나는 CI/CD, 외부 API연결, 알림, 디버깅을 담당했다.
서로의 생각은 다를 수밖에 없다.
솔직히 맘고생이 제일 심한 프로젝트였었다.
이 프로젝트를 성공적으로 완수하고 싶다는 욕심에 비롯되어, 기한내에 프로젝트를 마치기 위해 스트레스를 많이 받았다.
내가 생각했을때 이 프로젝트에 아쉬움이 많이 남는 부분은 아래와 같다.
마지막에 내 머릿속에 남았던 생각은 설계란 구현이고, 구현이란 디버깅이라는 문장이다.
설계 당시 구현을 러프하게나마 고려했어야했고, 구현 당시에는 디버깅 및 유지보수성을 고려했어야됐다.
또한 개발환경을 미리 정의하여 팀원들이 개발시 즉각적으로 확인 가능하도록 만들었어야됐다.
온갖 핑계는 만들 수 있다. '나는 회사에서 팀장을 해본적이없어.', '나는 도메인 지식이 부족해', '나는 이미 많은 업무를 맡고 있어.', '나는 팀장이 아니야.'
하지만 과연 내가 회사에 들어가서 이 핑계를 얘기하는 상상을 해보니 너무나도 내 자신이 부끄러웠다.
사람들은 말한다. 스트레스 관리 또한 능력이라고.
이 프로젝트를 진행하며 스트레스가 정말 머리 끝까지 차올랐던 일들이 많았고, 나는 시간이 없단 핑계로 스트레스를 해소하지 못했다. 정작 잠시 한 걸음 물러서면 그리 큰 일이 아니었음에도 말이다.
이러한 아쉬움을 해소하고자 이 프로젝트에 대해 명세부터 구현, 배포까지 다시한번 차근차근 곱씹어보며 진행해보고자 한다.

수고도 많았고, 아쉬운 점도 많고, 극복해야할 것들도 많지만 다시한번 초심을 찾고 열심히 해보자!
고생많았다