NodeJS + NestJS를 쓰며 느낀 점 (vs Java, Spring)

코코블루·2024년 7월 3일


개인적으로 프로그래밍 입문을 C, Java로 하면서 자연스럽게 Spring Framework를 하게 됐고, 그 뒤로는 Spring Boot로 이어지는 계보였는데 NodeJS가 뜨면서 JavaScript로 백엔드, 프론트엔드 코드를 작성할 수 있는 시대가 열리고 산업에 빠른 영향을 주고 있는데요.
저는 하나의 프로젝트를 하면 백엔드를 거의 다 Spring으로 구성하기 때문에 백엔드를 NodeJS로 구성해본적이 없었고, 굳이 꼽자면 Express? 정도예요. 그래서 도대체 "왜 뜨는지 잘 모르겠으니 직접 해보자!"라고 해서 사이드 프로젝트를 NestJS로 사용해보면서 느낀점을 정리해볼려고 해요. 이게 NestJS만의 특징을 비교하기 보다 Java, JavaScript를 넘어 JVM, NodeJS 런타임에 대한 비교가 될 것 같아요.

빠르다!

프로젝트를 빌드하고 초기 로딩되는 속도가 가히 압권입니다. NestJS 특성상, TypeScript를 권장하기 때문에 ts를 js로 변환하는 과정을 거치지만, Spring에 비하면 정말 빠르다는 느낌을 받았습니다.
클라우드의 Serverless 서비스 중에 AWS Lambda라던지 Azure Function을 사용하면 Cold Start 이슈가 있는데, NodeJS + NestJS로 백엔드를 구성하면 레이턴시를 향상할 수 있지 않을까 싶었습니다.

어쩌면 단일 스레드가 장점일지도? (a.k.a. 비동기 처리)

NodeJS의 특징 중 하나는 단일 스레드로 작동한다는 것입니다. 이를 극복하기 위해서 비동기 처리를 적극적으로 활용하게 되는데, 최근에 나온 개념이 async/await 문법이죠. 이걸 잘 활용하면 처리 속도를 향상 시킬 수 있게 되는 것 같았어요.

const resultDataFromApiPromise: Promise<user[]> = this.userService.getAllUsers();

... Another Job

// User Data가 필요한 상황
const resultDataFromApi: user[] = await resultDataFromApiPromise;
const filteredUserData: user[] = this.userService.filterUsers(resultDataFromApi);

기존 Spring에서의 코드라면 멀티 스레드 처리를 하거나 데이터가 구해질때까지 Another Job을 진행하지 못 했을텐데 NodeJS에서는 위와 같이 뒤에 job을 수행되게 놔두고 필요할 때 꺼내 쓰는게 가능해집니다. 특히 Java에서 멀티스레드 작업을 하면 코드가 많이 복잡해지는데, NodeJS에서는 간단하게 async/await 문법으로 구현이 되니 개인적으로 장점으로 다가왔습니다.

Stack Trace가 부족한 것 같다..!

간단하게 Axios를 이용해 API에 요청을 보내서 데이터를 return 코드를 작성했는데, 400, 403 같은 에러가 발생한다. 이 때 Java의 Stack Trace에는 내가 만든 코드의 라인까지 표시되는데 NodeJS에서는 그런게 없었습니다. 그냥 Axios의 코드 어디에서 에러가 발생했다 정도여서 디버깅이 많이 어려웠습니다.
인터넷을 찾아보니까 Source Map Support를 구성하면 된다는데 아니... 안 되던데..? ㅠㅠ 조금 더 연구해야할 대상이고, 애초에 예외처리를 잘해야할 것 같았습니다.

NestJS의 Module import가 귀찮아!

NestJS는 Module 형태를 채택하고 있는데, 이게 귀찮게 다가올때가 좀 있었습니다. 특히, index.ts를 만들면 툭하면 생기는 순환 참조문제부터 이 모듈에서 어떤 모듈의 어떤 서비스를 import하고 있는지 다 꿰고 import에 추가해줘야하니깐 귀찮다는 느낌을 받았습니다. 그런데 이런 문제는 대부분 저와 같은 생각을 가지신 분이 많을거라서 더 숙달되면 어떻게든 솔루션을 찾을 수 있지 않을까 싶습니다..! 아직은 검색 능력이 좀 모자란 것 같아요.

일단 간단하게 이정도인 것 같은데, 기술적으로 분석한 것이 아닌 초보의 100% 감에 의한거라서 솔루션을 아는 분이 보시거든 한 번 길을 비추어 주시면 감사하겠습니다..!

profile
Have A Happy Coding Time!

0개의 댓글