䷿ 들어가기에 앞서
Node.js 백엔드 개발자로 입사한 지 10개월이 지났습니다.
인턴 회고를 먼저 쓰고 싶었지만 개인 블로그 세팅이 늦어져 이제야 첫 회고를 남깁니다.
아직은 많이 부족하지만, 지난 10개월을 돌아보며 잘한 점, 아쉬운 점, 그리고 앞으로의 방향을 정리해보려고 합니다.
💼 Keep (잘한 점)
1. 기록하는 습관
가장 잘했다고 생각하는 점은 기록하는 습관입니다.
회사에서 배운 내용이나 해결했던 문제 대부분을 옵시디언에 정리해왔고, 그 덕분에 언제든지 다시 찾아볼 수 있는 저만의 지식 저장소가 만들어졌습니다.
입사 전부터 옵시디언을 개인 기록 용도로 사용해왔는데, 운 좋게도 회사에서 열린 개발자 컨퍼런스에서 옵시디언을 주제로 발표할 기회도 있었습니다. 예전보다 나아진 발표 실력을 체감할 수 있어 개인적으로 의미 있는 경험이었습니다.
2. 실무에서의 문제 해결 경험, 배운 점
10개월 동안 단순 유지보수보다는 실제 서비스에서 발생하는 문제를 직접 경험하고 해결해볼 수 있었습니다.
✔ 데이터 정합성 오류 감지 배치 프로그램 개발
- 프론트엔드의 잘못된 코드로 인해 데이터 오류가 반복적으로 발생
- 30분 주기로 실병원 DB를 조회하여 정합성 오류를 감지하는 배치 프로그램 개발
- 감지 결과를 엑셀 파일로 가공 후 슬랙 봇을 통해 개발팀과 CS 팀에 공유
- 근본적인 수정 전, CS 팀이 빠르게 대응할 수 있는 환경을 마련
✔ N+1 문제 해결
- 차트 리스트 조회 후, 각 차트마다 오더를 조회하는 구조로 인해 N+1 문제 발생
- 스케줄과 오더 데이터를 한 번에 조회하도록 쿼리 구조 변경
- 병목 구간을 제거하여 API 성능 개선에 기여
✔ Race Condition 문제 해결 및 트랜잭션 도입
- 프론트엔드에서 교부 번호를 DB 최댓값 + 1 방식으로 생성하면서 중복 문제가 반복 발생
- 서버 쪽으로 교부 번호 생성 로직을 이전하고
SELECT … FOR UPDATE 기반의 배타적 락을 적용하기 위해 트랜잭션 및 데코레이터 도입 - 결과적으로 교부 번호 중복 문제를 해결 (추가적인 인프라 문제가 있어 보류)
✔ 쿼리 성능 최적화
- 보험 청구 환자 수가 많을 경우 쿼리 실행 시간이 1분 이상 소요되는 문제 발생
- EXISTS 절 내부의 복잡한 OR 조건과 불필요한 JOIN을 제거하고
UNION ALL 구조로 분리 SELECT 1 적용 - 인덱스를 제대로 탈 수 있게 수정
- 실행 시간을 1분 이상 → 2초 이내로 단축
✔ 사용자 세션 만료 문제 해결
- STOMP 기반 큐와 DB 세션 정보를 사용하는 배치 프로그램에서
정상 사용자 세션이 강제 만료되는 고질적인 문제 발생 - RabbitMQ, WAS, Client 전반의 아키텍처를 분석하고 세미나 진행
- 큐 비정상 종료가 원인임을 파악하여
Heartbeat API, Kill-Count 로직, MAC ADDRESS 기반 대안 구현 - 반복되던 세션 끊김 문제를 해결
✔ Docker 이미지 최적화
- 취업 전 개인 블로그 프로젝트에서 학습했던 Multi-stage build를 실제 서비스에 적용
- Docker 이미지 용량을 약 5GB → 1.7GB로 감소
✔ 레거시 프로젝트 마이그레이션
- 레거시 프로젝트를 NestJS 기반으로 마이그레이션
- 기존 기능을 하나씩 분석하며 API를 재구현하는 과정에서 시스템 구조와 새로운 기술을 학습
✔ 로그의 중요성 인지
- 로그를 통해 오류를 추적하고 해결한 경험을 통해 운영 환경에서 로그의 중요성을 인식
🤔 Problem (아쉬운 점)
코드 흐름을 빠르게 파악하는 능력이 아직 부족하다고 느꼈습니다.
오류가 발생했을 때 원인을 찾는데 많은 시간이 걸렸고, 이는 업무의 효율성을 떨어뜨리는 원인이 됐습니다.
또한 기능을 개발할 때 다양한 예외 케이스를 사전에 충분히 고려하지 못한 점도 아쉬웠습니다.
아직 도메인 지식과 시스템 구조에 대한 이해가 완전하지 않다는 점도 원인이겠지만,
무엇보다 깊이 고민하지 않은 상태로 개발은 진행한 경우가 있었음을 스스로 인식했습니다.
🎯 Try (앞으로 시도할 것)
앞으로는 단순 유지보수보다는 API 기능 개발과 설계 단계부터 참여하면서
시스템 구조를 더 깊이 이해하고 싶습니다.
현재 프로젝트에는 벨리데이션이 충분히 적용되어 있지 않아 크고 작은 문제가 자주 발생하고 있는데,
- 공통 벨리데이션 로직 추가
- 테스트 코드 도입
을 통해 조금 더 안전하고 예측 가능한 프로젝트로 개선해나가고 싶습니다.
아직은 배워야 할 것이 훨씬 많지만,
지난 10개월 동안은 “실제 서비스에서 문제가 어떻게 발생하고, 어떻게 해결할 수 있는지”를 몸으로 배울 수 있었던 시간이었다고 생각합니다. 다음 회고에서는 조금 더 성장한 모습으로 글을 남길 수 있기를 기대합니다!!