상세 컨텐츠

본문 제목

[모각코]React + Spring Boot + MongoDB로 Web App만들기

Reactjs/kediTalk

by <감귤> 2021. 7. 16. 17:53

본문

리액트에서 사용하는 node.js와 현업에서 많이 쓰인다는 Spring의 차이는 무엇일까?

SpringSpring Boot의 차이는 무엇일까?

프로젝트를 시작하기 앞서 궁금증이 많았다. 이번 기회에 확실하게 알아보고 진행하려고 한다.

먼저 node.js와 Spring의 차이 부터 알아보자.

항상 그렇듯 새로운 것을 접할땐 공식적인 자료로 부터 시작하는 것이 좋다.

Node.js란?

Node.js 공식 사이트에 들어가보면 아래와 같은 문구가 쓰여있는 것을 확인할 수 있다.

 

"Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.

1. Chrome V8 JavaScript 엔진이란?

: JavaScript를 컴파일(사람이 이해하는 프로그래밍언어( ex. C, C++ ) -> 컴퓨터가 이해하는 기계어 but JavaScript는 스크립트 언어이기 때문에 인터프린터를 사용한다. )하고 실행해주는 소프트웨어이다.

 => JavaScript가 다양한 환경(Windows, macOS, Linux 등)에서 실행될 수 있게 도와준다.

 

2. 런타임(Runtime)이란?

  a. 프로그래밍 언어가 실행되는 환경, 프로그램이 실행되는 동안의 시간( 런타임 환경( Runtime Environment ) )

  b. 컴파일 과정을 마친 프로그램은 사용자에 의해 실행되어지고, 이러한 응용프로그램(Application)이 동작되어지는 때       를 런타임이라고 한다. 

 

 

결론 => Node.js는 JavaScript로 코드를 짜면 그것을 실행해주는 환경이다.

※부연설명: Node.js의 탄생 배경

기존의 JavaScript들이 전부 브라우저에서 실행되는 형태였다면,

Node.js는 2009년에 출시된 서버사이드(=네트워크의 한 방식인 클라이언트 - 서버 구조의, 서버 쪽에서 행해지는 처리를 말한다.) Javascript이다. Node.js를 이렇게 말하는 이유는 서버사이이드에서 실행되는 Javascript 언어이기 때문이다. 여기서 서버사이드라는 단어를 좀 더 설명하자면 서버측에 있는 프로그램, 스크립트 형태의 프로그램을 지칭한다.

 

Node.js는 Google V8 JavaScript 엔진을 사용하여 코드를 실행하기 때문에 많은 기본 모듈이 JavaScript로 작성되어있다.

 

구글의 JavaScript 엔진 V8이 내장 되어있는 Node.js는 그외에도 Apache HTTP Server 또는 IIS와 같은 소프트웨어 없이 웹 서버의 역할을 할 수 있도록 하는 내장 라이브러리도 포함하고 있다. 그렇기에 JavaScript로 서버를 개발하는 것도 Node.js가 있기에 가능한 것이다.

 

초기 JavaScript는 web이라는 울타리에 갇혀있었기에 JavaScript는 과거 오랜시간 동안 브라우저 위에서만 동작할 수 있는 언어였다. 그럼에도 불구하고 JavaScript는 생산성이 매우 뛰어난 언어였기 때문에 개발자들은 브라우저 안에서만이 아니라 브라우저 밖에서도 JavaScript를 사용하고 싶어했다. 그리고 브라우저에서 동작하도록 작성한 소스를 그대로 가져와 브라우저가 아닌 그 외 다른 독립적 환경에서 동작시키고 싶어했고, 결국 이러한 요구속에서 Node.js가 탄생하게 되었다.

Spring이란?

Sping 공식 사이트에 들어가보면 아래와 같은 내용을 볼 수 있다.

"Spring은 Java 프로그래밍을 쉽고, 빠르고 안전하게 할 수 있는 Java framework다."

  1. 프레임워크(framework)란?
  2. "뼈대"의 개념이다. 우리가 이 뼈대에 맞춰서 코딩을 하면 정해진 규칙, 함수등을 활용해서 개발함에 있어 시간을 줄여주는 역할을 한다. => 특정 작업을 쉽게 완성하기 위한 라이브러리의 집합.
  3. IoC, AOP, DI기능이 대표적이다.

결론 => Spring은 framework이다.

따라서 Node.js과 Spring의 비교는 애초에 잘못된 비교대상이었다.

제대로 비교하기 위해선

Node.js VS JRE(Java Runtime Environment=Java 프로그램을 실행시킬 수 있는 환경)나

Express(Node.js의 Framework이고 get, post등과 같은 REST API를 사용할 수 있다.) VS Spring

이렇게 비교하고 검색하는 것이 올바른 방법이다.

그렇다면 Spring과 Spring Boot의 차이는?

Spring Boot

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

번역 -> Spring Boot를 사용하면 "그냥 실행할" 수 있는 독립적이고 상용화 수준인 Spring 기반 애플리케이션을 쉽게 만들 수 있습니다.

  Spring Spring Boot
Dependency 매우길고, 모든 dependency를 버전까지 정확하게 일일이 써줘야한다. 짧고, 버전 관리도 권장 버전으로 자동 설정해준다. (ex. spring-boot-starter-thymeleaf), gradle을 쓰면 더 짧아지기 때문에 gradle을 기반으로 개발을 많이 하는 추세이다.
Configuration 매우길고, annotaion 달아서 어떤 처리 해줄건지 Bean도 등록해주고 개발자가 직접 설정해줬어야했다. 별도로 configuration작성 필요없고, application.properties파일만 작성해주면 된다.(사람친화적인 yaml파일을 대신 써서 application.yml파일로 대체하기도 한다.)
Embedded Server 없다, 따라서 외부에서 갖고와서 설치하는 시간을 많이 잡아먹었다. tomcat이 있다, 서버 구동 시간이 절반 가까이 단축된다. tomcat이 싫다면 간단하게 jetty로 설정할 수 있다. 내장 서블릿 컨테이너 덕분에 jar 파일로 간단 배포를 할 수 있다.

따라서 Spring Boot의 장점을 정리해보면 다음과 같다.

  1. 간편한 설정
  2. 편리한 의존성 관리 & 자동 권장 버전 관리
  3. 내장 서버로 인한 간단한 배포 서버 구축
  4. Spring Security, Spring Data JPA 등의 다른 Spring Framework 요소를 쉽게 사용.

최종 결론 => Node.js를 통해 프론트엔드에서 Reactjs개발에 있어 필요한 패키지들을 관리하고 JavaScript 런타임환경을 구축한다. 그리고 백엔드에서 Spring Boot를 통해 안전하게 웹서버를 관리해서 Web App의 개발 및 유지-보수에 용이하도록 프로젝트를 진행할 예정이다.

Reference

https://www.youtube.com/watch?v=5DxMUShYHW8

https://www.youtube.com/watch?v=6h9qmKWK6Io

https://nodejs.org/ko/

https://spring.io/why-spring

https://han41858.tistory.com/41

https://sas-study.tistory.com/274

더 공부할 자료

https://syundev.tistory.com/229

관련글 더보기