MERN Stack이란?
- M : MongoDB
- E : Express
- R : React
- N : Node.js
MERN 스택은 위 네가지 요소를 사용하여 웹사이트를 개발하는 것을 말합니다
각 구성요소에 대해 간단히 설명해 보겠습니다
MongoDB
MongoDB는 NoSQL 중 가장 많이 쓰이는 비관계형 데이터베이스 관리 시스템으로 자유 오픈소스 소프트웨어입니다
몽고DB는 Document DB로써 JSON과 닮은 형태의 데이터를 문서 형태로 한번에 저장하고, MQL(MongoDB query Language)를 이용해 데이터베이스에 접근합니다.
*NoSQL이란, 비관계형 데이터베이스로 불리며, 관계형 데이터베이스 형태가 아닌 다른 형태로 데이터를 저장합니다. 테이블간의 분할이 없고, 데이터들을 구조 내에 모두 중첩해서 넣을 수 있는 특징이 있습니다. 비정형 데이터이기 떄문에 엄청난 양의 데이터들을 손쉽게 넣고 확인할 수 있습니다
MYSQL vs MongoDB | https://ckddn9496.tistory.com/96
Express
Express.js는 Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크라고 설명되어있습니다
간략히 말하면, Express란 NodeJS를 사용해 쉽게 서버를 구성할 수 있게 만든 클래스와 라이브러리의 집합체라고 볼 수 있습니다
React.js
React.js는 facebook에서 제공해주는 프론트엔드 라이브러리 입니다
라이브러리이므로 웹을 만드는데 꼭 필요한 도구들이 기본적으로 제공되지는 않지만 가볍다는 장점이 있습니다.
React.js는 뷰단을 조작합니다
Node.js
Node.js는 구글 크롬의 자바스크립트 엔진에 기반해 만들어진 서버 사이드 플랫폼입니다.
Node.js는 JavaScript의 runtime이며, JavaScript Program을 실행할 수 있게 도와줍니다.
Node.js는 이벤트기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다.
모노리틱 아키텍쳐
모노리틱 아키텍쳐란
모노리틱 아키텍쳐란 애플리케이션이 하나로 되어있어서 보통 동일한 개발 툴을 사용해 개발되며, 배포 및 테스트도 하나의 애플리케이션만 수행하면 되기 때문에 개발 및 환경설정이 간단하다.
장점
- 배포 및 테스트도 하나의 애플리케이션만 수행하면 되기 때문에 개발 및 환경설정이 간단
- 각 컴포넌트들이 함수로 호출되기 때문에 성능에 제약이 덜하고 운영 관리가 용이
- 작은 볼륨의 시스템을 개발할 때는 유용
단점
- 빌드/테스트 시간이 길어진다
- 선택적 확장이 불가능하다
- 하나의 서비스가 모든 서비스에 영향을 준다.
MSA
MSA란
MSA란 마이크로 서비스 아키텍처의 약자로 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법입니다.
장점
- 각 서비스는 독립된 서버로 타 컴포넌트와 의존성이 없기 때문에 독립된 배포가 가능
- 각 컴포넌트가 독립된 서비스로 개발되어있기 때문에 부분적인 확장이 가능하다
단점
- 모노리틱 아키텍처는 서비스간 호출이 하나의 프로세스 내에서 이루어지기 때문에 속도가 빠르지만 MSA의 경우 서비스간 호출을 API통신을 이용하기 떄문에 속도가 느리다
- 통신에 사용하기 위해 값을 데이터 모델로 변환시켜주는 오버헤드가 발생한다
특징
- 데이터 분리
- 데이터 저장 시 하나의 DB에 중앙 집중화를 하지 않고 별도의 데이터 베이스를 사용한다
- 데이터가 분산되어있기 때문에 다른 서비스 컴포넌트에 대한 의존성이 없어 서비스를 독립적으로 개발 및 배포/운영 할 수 있지만 다른 컴포넌트의 데이터를 API통신을 통해 가져와야 하기 때문에 성능상 문제가 발생할 수 있고, 트렌잭션으로 묶을 수 없는 문제가 발생하기도 한다
- API Gateway
- MSA문제점중 하나는 각 서비스가 다른 서버에 분리 배포되어있기 때문에 서버 URL이 각기 다를 수밖에 없다는 것이다. 이때 API Gateway는 API서버 앞 단에서 모든 API서버들의 end-point를 단일화하여 묶어주는 역할을 한다
- API요청을 한 곳에서 받아서 해당 서비스로 라우팅 기능
- 거미줄처럼 복잡한 서비스간의 API호출 구조도 단순화
- 라우팅, 로드 밸런싱, 인증과 인가, 보안, 트래픽제거 역할 수행
몽고DB에서 설명하는 MERN
Express 및 Node는 중간(응용 프로그램) 계층을 구성합니다. Express.js는 서버 측 웹 프레임워크이며 Node.js는 인기 있고 강력한 JavaScript 서버 플랫폼입니다. 어떤 변형을 선택하든 ME(RVA)N은 JavaScript 및 JSON 작업을 위한 이상적인 접근 방식입니다.
React
- MERN스택의 최상위 계청은 HTML로 동적 클라이언트 측 애플리케이션을 생성하기 위한 선언적 JS 프레임위크인 React.js입니다
- React를 사용하면 간단한 구성요소를 통해 복잡한 인터페이스를 구축하고 백엔드 서버의 데이터에 연결하고 HTML로 렌더링할 수 있습니다
Express.js 및 Node.js 서버 계층
- Node.js 서버 내부에서 실행되는 Express.js서버측 프레임워크
- Express.js에는 URL 라우팅(서버 기능과 수신 URL 일치)과 HTTP 요청 및 응답처리를 위한 강력한 모델이 있다
- React에서 HTTP요청, GET, POST를 작성하여 애플리케이션을 구동하는 Express.js 기능에 연결할 수 있습니다
- 이러한 함수는 MongoDB 데이터베이스의 데이터에 액세스 하고, 업데이트 하기 위해 Promises를 사용하기 위한 콜백을 위해 MongoDB의 Node.js드라이버를 사용합니다
MongoDB 데이터베이스 계층
- 애플리케이션이 데이터를 저장하는 경우 React, Express 및 Node.js만큼 쉽게 작업할 수 있는 데이터베이스
- React에서 생성된 JSON문서는 Express.js 서버로 보내진다. 여기서 문서를 처리하고 나중에 MongoDB에서 저장된 것을 검색할 수 있다.