최근 지난 6월 중순 이직을 했다. php 를 쓰던 회사에서 TypeScript + NestJS 스택으로 시스템을 갈아엎으면서 MSA를 도입하는 중이었다.
기존 구성원들이 TypeScript와 NestJS 를 공부해서 프로젝트를 구성해두었다고 했다.
내가 입사했을 때 프로젝트를 확인해보고 어떤 문제들이 있는지, 고칠만한건 없을지 나에게 의견을 물어봤다.
프로젝트를 확인했고, 그 중 문제가 될만한 점들을 정리해보았다.
입사하고 물론 이런 개선작업만 할 수 있었던 것은 아니다. 내가 맡은 주 업무는 주문도메인의 API 개발이었다.
즉, 내 업무는 업무대로 하면서 이런 개선작업도 함께 해나가야만 했다.
1~4번중에 2,3,4번은 오래걸리는 작업은 아니었다. 빠르게 처리가 가능했다.
세부 도메인을 분리하면서 순환참조가 발생하고 있다.
도메인끼리 서로 순환참조가 발생하고있었다. service <—> service 끼리 import 하고있기 때문이다.
(nestjs 에서는 forwardRef
를 사용해서 순홤차조를 해결할 수 있다.)
해결로는 forwardRef
처리를 제거하고, 도메인간 레벨을 나눠서 참조하는 순서를 조정했다.
예를들어 FooService는 BarService를 import하지 못하고, BarService —> FooService 쪽으로만 의존성을 걸도록 한다.
npm dependency 의존성 분리가 전혀 되어있지 않다.
npm dependency 를 분리하는것은 개인적으로 중요하다고 생각하는 부분이다. 예를들어 moment와 같이 개발중단이 발생해버리는 모듈이 있다면 정말 골치아프다.
의존성이 분리되어있다면 비교적 빠르게 모듈을 다른것으로 갈아끼울 수 있다.
Test Code 의 잘못된 작성
프로젝트에 꽤나 많은 테스트코드는 많이 작성되어있었다. 다만 테스트코드에서 사용하는 DB가 개발디비를 바라보고있었다.
개발디비를 바라보고있으면 문제가 뭘까?
가장 많은 시간과 노력을 들였던 부분인 것 같다.
Test Code 의 필요성에 대해 개발자분들을 대상으로 발표를 하고, 본격적인 환경 구성에 시작했다.
테스트코드는 개인 로컬 Docker 환경을 사용하도록 한다. 그리고 Docker 의 MySQL을 사용하도록 한다.
누구나, 언제나 실행해도 성공하는 테스트케이스를 작성할 수 있고, 신뢰할 수 있다.
프로젝트 전체 테스트코드를 직접 수정하면서, 전체적인 로직도 확인할 수 있었던 경험이기도 했다.
그리고 입사 후 약 한달이 지난 오늘 드디어 초록불을 봤다. (감격의 순간)