개발이야기

SPA 웹 #2: REST API Server: 노드(Node.js) vs 스프링부트(Spring Boot)

하늘흐늘 2022. 5. 3. 15:07
반응형

들어가면서 
이 글은 SPA 웹 #1: Vue.js + REST API Server에서 이어지는 글입니다. 
REST API 서버를 노드(Node.js)와 스프링부트(Spring Boot)로 몽고DB를 이용하여 구현하여 보았습니다. 몽고DB를 이용한 것은 만들고 있는 시스템트레이딩 프로그램이 몽고DB를 이용하고 있기 때문입니다. 워낙 기술적으로 유명한 것들이라 기술적 호기심으로 두 개의 기술로 다 구현하여 보았습니다. 어떻게 보면 이번에 만든 것이 간단한 것이라 기술적 프리뷰로 어느쪽으로 계속 개발할지를 알아보는 프로토타입의 의미도 있었습니다.


REST API를 이용하는 부분은 스크린샷의 1, 2, 3부분의 데이터 입니다.


노드(Node.js)

기본적으로는 앱 서버로 많이 이용되는 듯 보였습니다. 참고로 서블릿 형태의 웹 서버를 개발할 수도 있고 템플릿 엔진 모듈을 사용하는 형태로도 개발 할 수 있습니다. 노드를 사용하여 보니 아래와 같은 것들이 느껴졌습니다.

1. 언어적인 특성 
배우기 쉬은 간단한 언어인 자바스크립트가 이렇게 서버용으로 잘 사용될 수 있다는 것이 조금 놀라웠습니다. 비주얼 스튜디오 코드(Visual Studio Code)를 이용하면 인텔리젠스를 완벽하게 지원하여 줍니다. 언어적인 형 안전성이나 변수 관련 오타 등의 처리등 언어적인 한계가 느껴지는것은 여전히 조금 아쉽지만 Promise나 Asynch & Await와 같은 것들로 인하여 서버 프로그래밍을 이렇게 간단히 작성할 수 있다는 것은 신기할 정도 입니다. 

2. 생산성
작성하고 테스트로 서버 뜨는데 거의 시간이 들지 않습니다. 그런 관계로 빠르게 개발하고 테스트할 수 있어 서버 개발의 생산성이 좋게 느껴졌습니다. express와 같은 개발 관련 좋은 모듈들도 많고 요즘 언어들처럼 인스톨하기도 편하였습니다. 또한, 관련 업데이트도 빠르게 이루어지고 있었습니다. 특히 외부 프로그램을 쓰면 개발시 수정된 내용이 바로 실행중인 내용에 반영되어 개발이나 버그 수정을 빠르게 할 수 있었습니다.

3. 비동기 IO + 싱글쓰레드
비동기 IO와 싱글쓰레드 기반이라 디버깅하기도 편하였습니다. 하지만 싱글쓰레드 기반이고 스크립트라 컴파일이 없는 관계로 코드에 버그가 있어도 모르고 실행하기 쉬웠고 에러가 발생하면 서버가 바로 죽는 구조 였습니다. 실제로 서비스할려면 세심한 에러 처리와 커버리지 테스트가 필요하겠다고 느껴졌습니다.


스프링 부트(Spring Boot)

스프링 부트는 스프링 프레임워크(Spring Framework)의 자동 설정 버전 정도로 보면 됩니다. 좀 큰 앱 서비스용 서버로도 사용되는 듯 보였지만 주로 웹 어플리케이션 개발용으로 많이 사용되는 듯 보였습니다. 스프링 부트를 사용하여 보니 아래와 같은 것들이 느껴졌습니다.

1. 프레임워크
오랜 기간 웹 표준 프레임워크의 하나로 불린 프레임워크의 강력함은 놀라웠습니다. 애노테이션, 툴 편의 기능, 프레임워크 기능으로 인하여 반복적인 코드는 거의 작성하지 않아도 되었습니다. DB 관련 코드는 인터페이스만 정의하면 자동으로 결과가 나온다는 것이 신세상이었습니다. 대부분 많이 작성해야 하는 코드들은 프레임워크가 지원하여 주고 있었습니다. 아쉬운 점은 프로그램을 만드는 동안 프로그램을 만든다는 느낌보다는 프레임워크를 이해하고 필요한 부분을 추가시켜 준다는 느낌이 강했습니다. 프레임워크 특성상 코드가 직관적이지 않고 프레임워크에 대한 많은 이해를 필요로 하였습니다. 간단한 것을 만들어서 그런지는 몰라도 전반적으로 프로그래밍 보다는 프레임워크 학습에 많은 시간을 필요로 하였습니다.

2. 생산성
프레임워크만 이해하고 있다면 최소한의 코드로만 개발이 가능했습니다. 하지만 컴파일 시간과 서버 구동에 시간이 걸려서 하나 수정하고 확인하는 시간은 꽤 소요되었습니다. 코드 수준의 생산성은 최고지만 컴파일과 서버 구동으로 인한 생산성은 조금 아쉬웠습니다.

3. 멀티쓰레드
멀티 쓰레드라 한 곳의 오류로 서버가 멈추거나 하는 일은 없어 안정적이었습니다. 동작이 멀티쓰레드로 한다는 것이지 개발시 고려해야 한다는 것은 아닌 관계로 디버깅하기도 편합니다. 


REST API Server로서 노드(Node.js) vs 스프링부트(Spring Boot)

만약 REST API 서버를 개발하려고 두 기술 중 하나를 선택을 해야 한다면 저는 노드(Node.js)로 먼저 개발할 것을 추천하고 싶습니다. 스프링부트는 프레임워크를 잘 안다면 상관없겠지만 모르다면 학습시간을 많이 필요로 합니다. 또한 스프링부트는 필요한 곳에 필요한 애트리부트나 API를 사용하지 않으면 검색을 해서 알기전까지는 왜 에러가 나는지 직관적으로 이해하기 어렵습니다. 그에 비하여 노드는 큰 학습 시간을 필요로 하지 않고 빠르게 개발하고 확인할 수 있습니다. 물론 좀 더 안정적인 서버를 원하거나 도메인 로직이 크고 복잡하면 스프링부트가 더 좋다고 합니다. 대신 가볍고 빠르게 개발하려면, 특히 앱 서버로 빠른 개발을 원하면 노드를 추천하고 싶습니다. 반대로 웹을 서버 사이드 렌더링으로 개발한다고 한다면 스프링 부트가 좋을거 같습니다. 참고로 노드는 넷플릭스에서 스프링 부트는 구글과 같은 둘 다 큰 회사들에서 사용되어 검증된 기술입니다. 좀 더 기술적인 비교를 원하시면 영어로 되어 있지만 Node.js vs. Spring Boot — Which Should You Choose?를 참고 하시는 것도 좋을거 같습니다.

 

반응형