이전 게시글에서, 필자는 2번 정도 Express를 사용하여 프로젝트를 진행한 경험이 있다고 얘기했었다.
처음 Express를 배웠을 때만 해도 정말 신세계였다.
프레임워크 없이 NodeJS의 내장 모듈인 http로 서버를 열고 다음과 같이 엔드포인트와 HTTP METHOD에 따라 분기점을 생성해 그에 따른 response를 만들어줬었는데..
돌이켜보면 프로젝트를 진행했을 때 프레임워크 대신 이 방법을 채택했다고 하면..엄청 힘들었을 것 같다.
const requestReceiver = function (request, response) {
const { url, method } = request
if (method === 'GET') {
if (url === '/users_data'){
response.writeHead(200, {'Content-Type' : 'application/json'});
response.end(JSON.stringify({message : users}));
}
else if (url === '/post_list'){
response.writeHead(200, {'Content-Type' : 'application/json'});
response.end(JSON.stringify(posts_lists));
};
}
else if (method === 'POST') { // (3)
if (url === '/signup') {
let body = ''; // (4)
request.on('data', (data) => {body += data;})
request.on('end', () => { // (6)
const user = JSON.parse(body); //(7)
users.push({ // (8)
id : user.id,
name : user.name,
email: user.email,
password : user.password
})
response.end(JSON.stringify({message : "userCreated"}));
})
}
//.....생략
이렇게 복잡한 코드가..Express 프레임워크를 사용하면서 더욱 직관적이고 간결해졌다.
app.get("/posts", async (req, res) => {
const posts = await appDataSource.query(
`
SELECT
u.id as userId,
u.profile_image as userProfileImage,
p.user_id as postingId,
p.image_url as postingImageUrl,
p.content as postingContent
FROM users u
JOIN posts p ON u.id = p.user_id;
`
);
res.status(200).json({ data: posts });
});
상기 코드는 MySQL
이란 RDBMS 를 적용하면 방향성이 많이 달라졌지만 프레임워크의 중요성을 깨닫는 데에는 충분한 기여도를 했다.
하지만 프로그래밍 언어가 다양하듯이, NodeJS에도 이전 게시글에서 알아봤듯이 여러가지의 프레임워크가 있고 사용하는 상황이 다르기 때문에 한 가지 이상을 반드시 숙지하고 있어야 된다고 생각해 이번 기회에 한국에서 NodeJS를 사용하는 기업이라면 가장 많이 사용하고 있는 프레임워크 ExpressJS
와 NestJS
를 조금 더 깊게 알아보고자 한다.
Express의 공식 웹 사이트에 들어가보면 다음과 같이 정의되어있다.
Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.
해석해보면 Express는 웹과 모바일 앱 개발을 위해 견고한 최소한의 기능들을 제공하는 유연한 NodeJS의 웹 어플리케이션 프레임워크라고 한다.
기능들을 가볍게 살펴보면 다음과 같다.
이러한 다양한 기능들을 제공하기에 장/단점을 확실히 짚고 넘어가야 앞으로 있을 프로젝트에서 어떤 프레임워크를 사용해야 될지 결정 할 수 있다.
ExpressJS에 간략하게 알아보았으니 NestJS와 직접적으로 비교하기 전에 NestJS에 대해서도 알아보자
공식 웹사이트의 정의는 다음과 같다.
A progressive Node.js framework for building efficient, reliable and scalable server-side applications
해석해보면, 효율적이고 신뢰적이며 확장 가능한 서버 사이드 어플리케이션을 만드는 진보적인 NodeJS 프레임워크
사실..ExpressJS나 NestJS 그리고 각종 프레임워크 공식 웹사이트에 나와있는 설명구들은 거기서 거기기에..직접 파고들지 않는 이상 특이점을 찾기가 쉽지 않다.
위에 살펴본 특징들만 살펴보면 사실 직접 손을 대보고 각 각의 프레임워크를 활용하여 프로젝트를 진행해보지 않는 한 차이점이 명백하게 눈에 보이지 않지만 그래도 간단하게 알아보자.
기준 | ExpressJS | NestJS |
---|---|---|
제약 | 제약이 거의 없음 | 제약이 존재하기에 사전 에러 방지 |
아키텍쳐 | 특정 아키텍쳐가 없음 | 컨트롤러, 프로바이더, 모둘과 같은 바로 사용 가능한 컴포넌트가 제공됨 |
타입스크립트 | 타입스크립트 설정을 따로 잡아줘야함 | 타입스크립트가 거의 디폴트 수준이기에 조금 더 규모가 큰 프로그램에 견고하고 적절하게 적용 가능함 |
성능 | 비동기적이며 독립적으로 복수의 작업을 실행 할 수 있지만 확장성이 부족하다 | 코드 양 감소 및 Dependency Injection을 제공하며 서드 파티 플러그인을 지원한다. |
대중성 | 역사가 더 오래되어 커뮤니티가 크다 | 조금씩 대중성을 키워가고 있으며 NodeJS 기반프레임워크 중 2위를 기록하였다(GitHub 기준) |
사용되는 경우 | 파인테크 및 스트리밍 프로그램에 적합 | 엔터프라이즈 급 웹 개발 및 이커머스 웹에 적합 |
상기 차이점을 한 번씩 보고 앞으로 프로젝트 진행 시 상황에 맞는 프레임워크를 사용하면 될 것 같다.