팀에서 Node.js 기반의 프로젝트를 하고싶기도 했고 담당을 하게 되어 기초 공부를 진행하려고 합니다.
시간여유가 많다고는 생각이 들지 않아 최대한 신속하게 공부하여 실무에 들어갈 수 있도록 글을 정리중이며
다행이 자바스크립트 문법은 숙지한 상태여서 node.js 의 특징과 express를 기반으로 공부 하려고 합니다.
React 와 nextJs로 먼저 자바스크립트를 익숙하게 접해본 저는 오히려
Require 를 사용한 모듈을 가져와 사용하는게 익숙하지는 않았지만 적응하는데 큰 어려움을 없을 것 같습니다
추후에는 import 와 require의 차이점, 그리고 나중에는 import를 더 선호하게 되었는지에 대한 주제도 다루어 보겠습니다.
저는 실습 준비가 모두 완료된 상태임을 사전에 말씀드립니다. (node 설치, 및 환경변수 세팅완료된 상태)
실습을 위한 파일 구조는 이렇습니다.
App.js 파일은 이렇습니다.
const http = require('http');
const express = require('express');
const app = express();
// 한글 깨짐 방지를 위한 설정
app.use((req, res, next) => {
res.setHeader('Content-Type', 'text/html; charset=utf-8');
next();
});
// 라우터 모듈 불러오기
const usersRouter = require('./routes/users');
// sample 예제
app.get('/sample', (request, response) => {
response.end(`<div>
샘플 페이지 테스트
</div>`);
});
// sample 예제2
app.get('/sample/:id', (request, response) => {
response.end(`<div>
샘플 페이지 테스트 아이디값 가져오기<br/>
${request.params.id}
</div>`);
});
// 라우터 모듈 사용
app.use('/users', usersRouter);
app.listen(3000); // 3000포트
app을 node app.js 를 실행시켰을 때 모두 정상작동하는 것을 알수 있다 그럼 모듈화 된 usersRouter를 확인해보자
Users.js 파일구조
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.end(`<div>사용자 페이지 입니다</div>`);
});
router.get('/:id', (req, res) => {
res.end(`<div>사용자 아이디가 담긴 요청이네요 : ${req.params.id}</div>`);
});
module.exports = router;
이렇게 모듈 실습까지 한 이유는 모듈화를 시켜 페이지별로 라우트를 분리하고 서비스단을 분리하면 될 것 같아 실습해 보았습니다. Express가 없다면 엔드포인트까지 들어온 uri를 직접 스플릿 처리하고 예외를 처리해주어야 하지만 express라는 프레임워크를 사용하면 이와 같이 요청을 편리하게 분기처리 할 수 있다는 장점이 있습니다.
요약
Node.JS 는 프레임워크가 아닌 실행환경이다.
서드파티묘듈이란 다른 개발자나 회사에서 공개 해둔 모듈이다 (maven repository에서 가져온 라이브러리정도로 생각하면 될 듯)
Express 는 그 써드파티모듈중 하나이며 동시에 강력한 프레임워크이다.
Express가 빠진 nodeJs는 약간 스프링 없는 순수 자바로 만든 웹서버 같은 느낌이다 (엔드포인트를 모두 / 스플릿해서 url 을 분기처리하는 코드를 직접짜는등의…)