Spring, Node.js 차이

Yuri Lee·2021년 6월 9일
2

Intro

  • Spring, Node.js 차이에 관한 질문을 받았다. 하지만 난 섣불리 대답을 하지 못했다. 😓 질문에 대답하지 못한다면 실제 알고 있는 지식이 아니라고 했는데 .. (김민태 이사님의 말씀이 불현듯 떠올랐다ㅎㅎ) 하여튼! 그래서 이 둘의 차이를 알아보려고 한다.

Spring, Node.js

  • Spring : Java 를 이용하는 프레임 워크
  • Node.js : JavaScript runtime
    • 런타임(Runtime)과 컴파일타임(Compiletime) : 런타임(Runtime)과 컴파일타임(Compiletime)은 소프트웨어 프로그램개발의 서로 다른 두 계층의 차이를 설명하기 위한 용어이다.
    • 컴파일타임(Compiletime) : 프로그램을 생성하기 위해 개발자는 첫째로 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어코드로 변환 되어 실행 가능한 프로그램이 되며, 이러한 편집 과정을 컴파일타임(Compiletime) 이라고 부른다.
    • 런타임(Runtime): 컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다.
    • 더 자세한 내용이 궁금하다면? 👉 컴파일과 런타임의 차이

Spring

장점

  • 크기와 부하의 측면에서 경량이다.
  • Spring이 안정적이라는 말을 많이 한다. 그 이유는 레퍼런스가 많아 이슈를 쉽게 해결할 수 있고, 자유성이 낮다는 점에서 안정적이라고 생각한다.
  • 스프링은 2002년 로드 존슨이 최초로 개발하였기에 Spring을 다루는 개발자가 많아 인력 문제도 없다.
  • 많은 개발자들이 오랫동안 사용하고 유지해왔기 때문에 알려진 버그와 보안 문제는 많이 잡혀있어서 안정성이 우수하다.
  • 정형화된 패턴이 있다.
  • IOC/ DI로 느슨한 결합도를 유지한다.
    • IOC : 전에는 내가 new를 해서 주소를 관리했다면, 이제 스프링이 스캔을 해서 오브젝트를 메모리에 띄었기 이제 이건 내가 (개발자가)관리하는게 아니라 스프링이 관리하는 것이다. 이것을 ioc라고 한다.
    • DI : 스프링이 관리하는 이 객체를 내가 원하는 모든 클래스 메소드에서 다른 것들을 가져와서 사용할 수 있다. 다른 곳에서도 그대로 사용할 수 있다. 스캔을 하면 딱 한번만 공유해서 사용할 수 있다. 필요한 곳에서 가져가서 쓰는 것을 DI라고 한다.
    • ioc와 di를 하면 프로그램을 짜는 게 굉장히 편해진다.
  • 자유도는 낮지만 안정적이다.

단점

  • 설정이 복잡한 편이다.

Node.js

장점

  • V8 엔진을 기반으로 한 성능이 뛰어나다.
    • V8은 웹 브라우저를 만드는 데 기반을 제공하는 오픈 소스 자바스크립트 엔진이다. 구글 크롬 브라우저와 안드로이드 브라우저에 탑재되어 있다.
  • 싱글스레드, 비동기 IO 처리에 기반한 빠른 속도를 가진다.
  • 파일 I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능하다.
  • CPU의 대기시간을 최소화 할 수 있다.
  • CPU 부하가 적고, 많은 커넥션을 동시에 처리해야 하는 구조에 적합하다.
  • 자바스크립트를 이용해서 개발할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮다.
  • 기존 Java 서버에 비해 생산성이 훨씬 높다.

단점

  • 싱글스레드 모델이기 때문에 하나의 작업에 시간이 오래걸리면 시스템 전체의 성능이 급격하게 떨어진다.
  • 에러가 발생할 경우 프로세스 자체가 죽어버리므로 주의해야한다.(watch dog 등으로 처리 가능)
  • 멀티코어 활용을 위해서 cluster 모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 필요하다.
  • 비동기 제어가 까다롭다.

https://hees-dev.tistory.com/61
https://ko.wikipedia.org/wiki/V8_(%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%97%94%EC%A7%84)

profile
Step by step goes a long way ✨

0개의 댓글