Used Skill Set
NestJS
, Jest
, Scheduler
, slack-webhook
, docker
Jest 테스트 툴로 NestJS의 "품절난 모니터의 입고 알림" 애플리케이션 구현을 테스트 주도 개발론을 도입하여 개발하였다.
최근 프로그래머스:백엔드 웹 데브코스
교육과정을 들으면서 OOP, TDD 등 다양한 개념들을 접하면서 직장에서 NestJS를 사용하면서 그냥 넘겨 짚었던 개념들을 사이드 프로젝트를 만들면서 녹여내고 싶었다.
마침 모니터가 필요했는데 가성비가 좋은 V28UE 모니터를 보게 되었고 구입할려고 했는데 매일 재고가 없다고 하여 "재고 입고 알림 애플리케이션을 만들면 좋겠다."고 생각했다.
그리고 여기에 TDD를 곁들인...
실전 자바 소프트웨어 개발 책을 읽고 OOP 설계 5대 원칙, TDD 등 JAVA 뿐 만 아니라 다른 언어에서도 사용할 수 있는 개념들을 배웠고 이를 NestJS에 녹여보고자 하였다.
책에서 소개된 Given-When-Then 패턴을 적용하여 Test Code 스타일을 구현하였다.
Given
테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분
When
구체화하고자 하는 그 행동
Then
어떤 특정한 행동 때문에 발생할거라고 예상되는 변화에 대한 설명
(참고: Given-When-Then 패턴)
개발하면서 다양한 모듈을 개발하고 이를 프레임워크에 Dependency Injection 하게된다. 이제 각 모듈들에 대해 유닛 테스트를 해야하는데 여러 모듈들이 의존성에 의해 연결되어 있어서 이를 모킹해야하는데 이 부분이 많이 골칫거리였다.
하지만 HotHandCoding님의 Nest + Jest unit test 글들을 참고하게 되었고 많은 고민들을 해소할 수 있게 되었다. 모듈을 Mocking을 했는데 모듈에 대한 메서드를 spyOn하는 방법이나, TestModule에서 원래의 모듈을 주입 대신 목 객체 모듈을 주입하는 방법 등 많은 부분을 배웠다. (감사합니다)
이제 요청들을 매 5초 마다 실행하는 Scheduler를 실행해야 하는데, 이를 NestJS의 Cron Job을 통해서 해결 할 수 있었다.
예전에 회사에서 동료분께서 Batch 작업을 위해 Cron Job을 사용하신 것을 보았는데 이번 기회에 사용하는 기회가 와서 적용할 수 있었다.
단순히 스케쥴링 작업 뿐만아니라 Dynamic Scheduler를 통해 스케쥴러를 runtime에 등록하거나 해제할 수 있다는 점도 굉장히 인상적이었다.
도커는 책을 정독을 해야 할 것 같다. (그만 구글링 하고 싶다.)
MacOS에서 개발한 NestJS Application을 다른 환경 (ubuntu, window) 서버에 올려야 하므로 Docker Image로 빌드해야 하는 작업 필수적이라고 생각하였다.
그래서 DockerFile을 작성하고, Docker 작업(명령어 등)을 더 손 쉽게 쓸 수 있도록 docker-compose 파일을 작성하여 git repository에 같이 포함하여 올렸다.
그래서 개발한 어플리케이션은 나의 노트북에서 돌아가지 않고, 집에 있는 데스크탑(windows)에서 잘 돌아갈 수 있게 되었다.
(예정)
개발은 하고싶은 것을 하고 만들고 싶은 것을 개발하는게 정말 매력적이라고 생각한다.
아직 못 한 부분들이 많다. 교육과정의 과제들과 회사 업무들이 거의 정리되는 시점에 다시 적용해 보도록 해야겠다.