2023년도 상반기 인턴십 후기!
인턴십을 수행하며...
여기에 나온 기술적인 모든 내용은 기업으로부터 허락받고 올립니다.
동기
인턴십 이전에는 열정으로 학생들끼리 뭉쳐서하는 여러 프로젝트를 경험해봤습니다.
아무래도 학생으로 뭉친 프로젝트는 자원이 더 한정적이고 서로 바라는 것이 달라서 산으로 가고는 했습니다. 의사결정할 때도 이런 아주 한정된 비용에 맞춰서 이루어지고는 했습니다. 그러면서 많은 의문과 해결하지 못한 문제점들이 생겼고 실제 기업 업무를 경험해보고 싶어졌습니다.
그리고 쿠버네티스, 컨테이너, IaC 등을 개인 흥미로 공부했는데 이것으로 직접 서비스를 만들어보고도 싶었습니다. 책과 말보다는 제 경험을 쌓고 싶은 마음도 컸습니다.
그래서 이번에 인턴십을 DevOps 및 백엔드 개발로 지원하게 되었습니다.
한 일
저는 이번 인턴십을 하며 DevOps 파이프라인 개발, Backend 개발, 분산 로그 추적을 위한 로그 프로세서 및 대시보드 제작을 했습니다.
인턴십을 하며 대표적으로 다음과 같은 일을 수행했습니다.
1. 애플리케이션별 로그 프로세서 개발
애플리케이션별로 다른 형식으로 찍히는 로그를 분석하기 위한 로그 프로세서를 fluentbit을 사용해서 개발했습니다.
API Logger, Node Resource Logger, Worker Logger 등 전혀 다른 환경과 포맷을 가진 로그를 취합할 수 있도록 하는 로그 프로세서를 개발했습니다.
2. 대시보드를 위한 배포 파일(feat. IaC)
Grafana, Loki, Prometheus 등 로그 데이터의 종류별로 처리할 수 있는 DB와 Dashboard 컨테이너 환경 구성했습니다.
다른 사람도 README에 적힌 명령어 하나로 똑같은 환경을 배포할 수 있도록 노력했습니다. 최대한 가독성과 수정이 용이한 형태로 모든 배포 파일을 구성했습니다.
3. 모니터링 시스템 문서화
기능이 좋으면 뭐해! 결국 모니터링 시스템도 구성원들이 잘 활용해야 의미가 있더라고요!
최종적으로 구성하고 만든 모니터링 시스템을 문서화하여서 다른 사람들이 사용하거나 커스터마이징 가능하도록 했습니다.
별도로 제가 만든 시스템을 개발 팀원을 대상으로 세미나를 진행해서 인수 인계하고 나왔습니다.
이렇게 만든 문서만해도 수십 장이 넘고 제가 나가면 의미 없어질 것 같은 문서가 7개가 넘어가네요ㅎㅎ..
4. 백엔드 개발
API Call 동시 호출 제한, websocket 중복 알림 버그 수정, API Pagination 등 크고 작은 기능을 개발을 했습니다. 프레임워크를 이리 저리 뜯고 맛보고 짜고 다시 이해하며 더 좋은 코드에 관해 피드백을 받을 수 있어서 좋았습니다.
제가 필요 이상으로 코드를 복잡하게 짜는 경우가 많더라고요. 이런 부분에 대해서 생각해볼 기회가 있어서 좋았습니다.
5. 시스템 안정화
튜닝이라고 하기에는 노가다성이 짙고... 안정화를 하기 위해 여러가지를 설정을 조율했습니다.
RabbitMQ 설정도 바꿔보고 celery pool도 바꿔보고 백엔드와 deployment 레벨로 graceful shutdown을 적용하는 등 시스템을 안정화하기 위한 작업을 수행했습니다.
그리고 현재 잘 돌아가고 있지만 확장성이 부족한 클라이언트쪽 validation 코드를 개선했습니다.
제가 개선하거나 새로 만든 거의 모든 코드에 테스트코드를 남기려고 노력했습니다.
6. DB Trigger 개발
Database의 변경 기록을 백업하기 위한 Trigger를 개발했습니다. 이것으로 나중에 서비스에서 특정 파일의 영구적인 분실을 방지할 수 있는 안전 장치를 만들었습니다.
7. Test 환경 구조화 및 불안정 부분에 대한 Test 작성
테스트코드가 돌아갈 수 있는 기반을 설계하고 구현했습니다. 그 기반 아래에서 여러가지 테스트코드를 작성했으며 작성하면서 발견한 버그도 많이 수정했습니다.
(큰 의미는 없지만) 개수로만 따지면 제가 작성한 테스트코드가 회사 테스트 코드보다 2배 이상 많을 겁니다.
말고도 Jenkins Pipeline도 건드리고 Javadoc처럼 Python 코드에서 API 문서를 추출하는 것도 만들고 여러 IaC 파일도 건드리고 했습니다.
배우고 느낀점
단순히 인턴이라고 생각하지 않고 같은 팀원으로서 여러 기여를 하기 위해 노력했고 그런 과정에서 점점 신뢰를 받게 된 것 같아서 뿌듯합니다.
이러한 신뢰를 기반으로 개발, 빌드, 테스트, 릴리즈, 배포 단계까지 직접 개선해볼 수 있어서 정말 좋았습니다. 인턴이 경험해보기 힘든 특별하고 값진 경험을 했다고 생각합니다.
기술적으로는 다음과 같은 교훈?을 얻었습니다.
1. IaC 기술에 익숙해질 수 있었습니다.
분산화되어 있는 환경에서 문제를 빠르게 파악할 수 있도록하는 대시보드를 개발하며 IaC 기술에 익숙해질 수 있었습니다.
쿠버네티스와 도커 등 컨테이너 기술에 많이 익숙해질 수 있었으며 분산된 아키텍처에서 어떻게 로그를 집계할 것인지 고민하며 흔히 사용되는 패턴을 공부할 수 있었습니다.
말고도 4개월 동안 계속 사용한 Loki의 LogQL, Prometheus의 PromQL, Grafana 대시보드에 익숙해졌습니다.
2. 테스트하기 어려운 코드는 어떤지 직접 겪어볼 수 있었습니다.
테스트 코드를 짜며 테스트하기 좋은 구조가 어떤 코드이고 안 좋은 코드는 어떤 영향을 끼치는지 직접 경험해볼 수 있었습니다.
더 나아가서 제가 직접 테스트 가능한 환경으로 뜯어 고치면서 사이드이펙트를 다루기 위한 많은 고민을 할 수 있었습니다.
3. 레거시 코드를 왜 피하는지 알게 되었습니다.
레거시 코드가 왜 다들 손 데기 싫어하는 코드인지 알 수 있었습니다.
일단 코드 파악하는 것부터가 쉽지 않았고 디자인패턴에 너무 매몰되어서 남용하면 더 복잡해지고 머리 아파진다는 것도 경험할 수 있었습니다.
신입의 패기로 100가지 넘는 테스트코드를 짜고 모든 코드를 다 파악했다 생각하고 코드를 갈아엎었는데 바로 버그가 터져서 롤백했습니다. 그런 코드지만 계속 써야하만 하는 상황이 오기에 아주 골칫덩어리였습니다.
지금은 괜찮지만 나중에는 문제가 생길 수 있는 부분을 개선하며 재사용성이 좋은 코드에 관해 고민해 볼 수 있었습니다. 점진적으로 테스트하기 좋은 코드로 짜며 나중에는 문제가 생길 수 있는 부분을 개선했습니다.
기술적인 부분보다 소프트 스킬이 많이 늘었습니다.
1. 결국 쓸 사람과 소통해야 했습니다.
제가 만든 서비스의 사용자는 제 사수가 아니고 서비스를 쓸 사람입니다. 처음에는 이것을 잘 몰랐던 것 같습니다.
결국 최종 사용자의 요구사항을 파악해야 했습니다. 처음에는 어떤 사람이 무엇을 하는지 이것을 쓰게 될 것인지 몰라서 비효율적인 소통을 많이했지만 점차 서로 무엇을 하는지 알아가며 상황별로 어디에 어떤 질문을 해야하는지, 어떻게 질문하는 것이 좋은지 깨달았습니다.
2. 효율적인 소통에 대한 고민을 했습니다.
몇 명을 붙잡고 정리되지 않은 질문을 쏟아내기보다 회의를 잡는 등 서로를 위한 기본적인 소통 스킬을 배웠습니다. 최대한 서로 효율적으로 소통할 수 있게 노력했습니다.
3. 더 현실적인 결정을 하는 법을 배웠습니다.
실제 현장에 나가서 문제를 해결하며 제가 부족하다 느낀점입니다.
실제로 주어진 시간과 비용이 한정되어 있기 때문에 때로는 비효율적이더라도 빠른 방법을 택해야 했습니다(대충한다는 것이 아닙니다).
저도 나름 오버엔지니어링?을 안 한다고 생각했는데 항상 제일 좋은 방법을 공부하고 구현하려고 습관이 있어서 필요 이상으로 복잡하게 만드는 경향이 있었습니다. 다른 분들이 판단하시는 것과 그 근거를 저도 다시 생각해보며 좀 더 현실적인 아키텍처 결정과 우선순위 조정하는 법을 배울 수 있었습니다.
아쉬운 점
데일리 스크럼도 제가 알던 것과 성격이 달랐고 회고 문화가 없는 것이 개인적으로 아쉬웠습니다..ㅠ
이 방식이 현재 팀원들에게 최적화된 형태인가 싶긴했지만 아무래도 대규모팀이 아니라도 회고는 좋은 도구라고 생각이 들어서 몇 번 건의드렸습니다. 앞으로 부활될 것이라던데 제가 있는 동안은 없었습니다.
저는 회고가 없이 4개월 일을 해보니 회고의 중요성을 알 수 있었습니다.
댓글
이 글 공유하기
다른 글
-
wehavit 프로젝트의 두 번째 스프린트 회고 후 느낀 점
wehavit 프로젝트의 두 번째 스프린트 회고 후 느낀 점
2023.11.06 -
코딩하는 이유
코딩하는 이유
2023.10.30 -
2022년 회고 (소프트웨어 마에스트로 회고)
2022년 회고 (소프트웨어 마에스트로 회고)
2023.01.13 -
내 코드에 관한 고민 그리고 앞으로 해야 할 것들 (#NestJS Code Review)
내 코드에 관한 고민 그리고 앞으로 해야 할 것들 (#NestJS Code Review)
2022.12.17