Spring vs. Spring Boot(feat. Node.js)
Spring을 공부하면서 제일 귀찮고 성가신 작업은 환경 설정 및 의존성, 버전 관리 등 수동으로 설정해야 할 작업이었다. 한국에서 널리 사용되고 있는 프레임워크라고 하지만 개인적으로는 큰 매력을 느끼지 못했다.
그러던 중 Spring Boot를 경험하면서 Spring의 장점은 그대로 가져가면서, 번거로웠던 점이 많이 해소되었으며 내장된 서버가 존재한다는 점에서 확실히 개발자 입장에서 편리해졌다고 느꼈다.
지금까지 Spring Boot의 맛보기만 경험을 했는데 배운 내용을 다시 복습하며, 추후 진행할 프로젝트에도 적용해보고자 Spring Boot 시리즈를 시작한다.
본격적인 시작에 앞서 이번 포스팅에서는 간단하게 Spring과 Spring Boot를 비교해보자. 근데 이제 Node.js를 곁들인..😄
🌸 Spring
- Java 기반의 동적 웹 사이트 개발에 필요한 서비스를 제공하는 프레임워크
- 개발자가 비즈니스 로직에 집중할 수 있도록 설계됨
- 대한민국 전자정부 표준 프레임워크
장점
- 의존성 주입을 통해 느슨하게 결합(loosely-coupled) 된 애플리케이션 개발
- 추상화로 boilerplate 코드와 중복 코드의 양을 줄임
- 훌륭한 솔루션을 제공하는 다른 프레임워크와의 통합성
- 멀티 스레드 방식으로 긴 작업이나 반복되는 작업 같은 복잡한 트랜잭션을 다룰 때 유용함 → 안정성 보장
- Spring Security 프레임워크가 있어 보안적인 측면에서도 우세
- 성숙하고 안정적인 커뮤니티
단점
- 프로젝트마다 많은, 반복적인 설정이 필요함
- 높은 러닝 커브
- 많은 코드의 양
🌱 Spring Boot
- Spring Boot도 결국 Spring과 동일한 코드로 동작하므로 Spring MVC, Spring REST 등을 대체하지 않음
장점
- Production 급의 독립 실행형 애플리케이션을 쉽게 만들어 빠르게 시작
- Spring의 장점을 여전히 가짐
단점
- 높은 메모리 사용률, 무거움
- 사용하지 않은 의존성들로 인한 큰 사이즈
🪐 Node.js
- Chrome의 V8 JavaScript 엔진에서 돌아가는 비동기식 이벤트 기반 JavaScript 런타임
- 확장성 있는 네트워크 애플리케이션을 빌드하도록 설계됨
- 요청을 다루는 메인 스레드는 이벤트 기반의 단일 스레드
- Non-blocking I/O 모델 사용
장점
- 모든 스택에서 작업할 수 있어 효율적인 작업과 개발 비용 감소
- 낮은 메모리 사용률 및 저사양 유저를 위한 최적화로 사양 대비 성능 증가
- 매우 효율적이고 가벼워 실시간 작업이나 data-intensive 애플리케이션에 적합
- NPM(Node Package Manager)와 백엔드 개발에 적합한 많은 API
단점
- 엄격한 type checking이 적용되지 않기 때문에 runtime 중 문제 발생 가능(Java에 비해 비교적 안정적이지 않음) → Typescript로 보완 가능
- 컴퓨팅이 많은 작업에는 병목현상이 발생할 수 있기 때문에 적합하지 않음
마치며..
지금까지 Spring과 Spring Boot 그리고 Node.js의 대표적인 특징과 장단점을 살펴보았다. 사실 Node.js는 계획에 없었는데, 지난 캡스톤 프로젝트에서 Spring Boot와 Node.js를 두고 많은 고민을 했었던 터라 함께 정리해보았다. 다음 포스팅에서는 Spring Boot의 특징과 장점에 대해서 조금 더 자세히 다룰 예정이다.