-
[IT지식] Node.js 와 Spring Boot 의 차이점IT시사지식 및 용어 2021. 11. 9. 13:02
일단, Node.js와 Spring Boot는 서버 애플리케이션을 만들때 사용하는 플랫폼이다.
구인글을 보면 스타트업에선 Node.js, 정착된 기업에서는 Spring Boot 를 사용하기에, 막연하게 Node.js는 스크립트언어니까 작성이 쉬워서 초심자가 쓰기에 좋아서 그런건가 지레짐작하고 있었다. 당연히 Spring Boot 가 대기업에서 많이 쓰니, 훨씬 더 안정적이고 성능이 좋겠지? 라고 생각하고 있었다.
그런 와중, JS의 성능에 관한 글(C++ 성능에 도달했다는 글)을 읽게 되었고, Node.js 가 궁금하여 바로 사용해보았는데... Spring Boot로 만들때보다 훨씬 쉽고 가볍게 느껴지는게 아닌가....! 물론 JS자체가 Type Safe 하지 못해서, 코드의 진행을 내가 다 꿰고 있어야한다는 단점은 있지만..! 숙련도로 대체 가능하지않나 싶은 생각이 들어, Spring Boot 가 남아 있는 이유가 단지 개발자의 익숙함이라면, 대기업에선 누구보다 빠르게 리팩토링하려고 움직일텐데 왜 아직 Java개발자를 구하는가 싶어 검색을 하여 궁금증을 해소한 지식들을 여기에 정리하고자 한다.
# Node.js
- Non-blocking I/O 를 처리하는데 최적화된 플랫폼이다. (싱글 쓰레드 비동기 방식으로 운영된다)
- Single Thread 방식은 이벤트가 아무리 많아도 쓰레드는 1개이기 때문에 메모리 사용량과 시스템 리소스 사용량에는 변화가 거의 없다.
- 하지만, 쓰레드 하나가 무너진다면 프로그램 전체가 무너진다.
- 개발자는 메인 싱글쓰레드 하나를 관리하듯 코드를 작성하면 된다. (Node.js 가 알아서 여러쓰레드를 효율적으로 운용한다.)
- Single Thread 이기 때문에 하나의 작업자체가 오래 걸리는 웹서비스에는 어울리지 않는다.
- 반대로 가벼운 I/O가 많은 게시판, 채팅, 스트리밍과 같은 웹서비스에 매우 적합하다. (동시에 여러 request를 많이 처리해야하는 서비스)
- 서비스 로직이 복잡해지거나, 업무 난이도가 높은 경우, Type Safe 하지 못한 JS의 특징으로 인해 Type으로 인한 런타임에러를 수없이 직면할 수 있으며, IDE의 자동완성기능 또한 잘 지원 받지 못하여 프로젝트 단위가 커질수록 리팩토링과 확장에 애를 먹게 된다.
- TypeScript 는 이러한 배경에서 출현했다.
# Spring Boot
- Java 라는 언어 특성상 Type Safe 하여 Node.js에서 발생하는 어려움을 겪지 않는다. (Java는 컴파일 단계에서 화를낸다....)
- 언어의 역사 또한 길기 때문에, 매우 안정적이다.
- 따라서, 단위가 큰 프로젝트에 어울리며, 멀티쓰레드로 운용하기 때문에 단일작업의 수행시간이 오래걸리든 말든 메인 서비스자체는 죽지 않는다.
- 리팩토링과 확장에 용이하며, IDE의 지원을 받을 수 있다.
- 멀티쓰레드이기 때문에, 메모리 사용량은 Node.js보다 많다.
- Spring Boot 을 효율적으로 사용하기 위해선, 디자인패턴, 각 컴포넌트에 대한 이해, 사용하는 라이브러리들에 대한 이해등이 필요하므로, 러닝 커브가 존재한다. (JPA만 봐도, 영속성 1차캐쉬로 인해 파생되는 결과들을 이해하고 있어야 한다.)
# Reference
728x90'IT시사지식 및 용어' 카테고리의 다른 글
[IT 지식] 서버성능 테스트 자동화 (Base Info) (0) 2021.12.10 [IT지식] IT 비즈니스와 기술 동향을 파악하기에 좋은 웹 사이트들 (0) 2021.11.09 [IT지식] 블록체인 기본개념 (0) 2021.01.12 [IT지식] 코로나가 가속화 한 On-Demand 와 Cloud (0) 2020.10.23 [IT지식] 컴퓨터의 역사 & 컴퓨터의 분류 & 컴퓨터의 종류 (0) 2020.09.22