반응형
해당 글에서는 Node.js에 대한 환경 구성을 하는 방법과 Express와 Mongoose 라이브러리를 통해서 MongoDB와 연결하는 방법에 대해서 이해하는 글입니다.
[참고] 이전에 작성한 ‘Node.js 이해하기-1(정의, 장단점)'을 이해하고 오시면 더 쉽게 이해가 가능합니다
1) Node.js 환경 구성
💡 해당 환경 구성에서는 node.js로 간단히 구성하는 방법, express를 이용하여서 구성하는 방법, 최종 express, mongoose를 이용하여서 Restful API 구조의 MongoDB를 구성하는 것을 최종 목표로 하고 있습니다.
1. Node.js 만을 이용한 서버 구성 방법
💡 Node.js는 node 설치 이후에 javascript 파일을 즉시 실행할 수 있기에 간단하게 환경 구성이 가능합니다.
최초 환경 구성 - 터미널 이용
# node.js 설치
$ brew install node@16.13.1
# 특정 위치에 server.js 파일 생성
$ touch server.js
server.js 소스코드
💡 해당 소스코드에서는 127.0.0.1(localhost)에 임의의 port를 지정하여서 서버를 구성하는 방법을 설명하고 있습니다.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at <http://$>{hostname}:${port}/`);
});
실행 방법 및 실행 결과
# 생성한 파일을 node.js로 수행시킨다
$ node server.js
2. Express 웹 프레임워크를 이용한 서버 구성 방법
💡 Express는 웹 프레임워크 이므로 웹 애플리케이션을 만들기 위한 각종 라이브러리와 미들웨어 등이 내장되어 있어서 개발하기 편하고 수많은 개발자들에게 개발 규칙을 강제하여 코드 및 구조의 통일성을 제공합니다.
[참고] Express 공식 사이트
최초 환경 구성 - 터미널 이용
# node.js 설치
$ brew install node@16.13.1
# dependecy 관리를 위한 pacakage.json 파일 생성
$ yarn init -y
# express 설치
$ yarn add express
# 특정 위치에 server.js 파일 생성
$ touch server.js
server.js 소스코드
💡 해당 소스코드에서는 node.js 보다 조금 더 간단한 방식으로 127.0.0.1(localhost)에 임의의 port를 지정하여서 서버를 구성하는 방법을 설명하고 있습니다.
const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send("Hello World!");
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
실행 방법 및 실행 결과
# 생성한 파일을 node.js로 수행시킨다
$ node server.js
3. Express + mongoose(MongoDB)로 서버 구성하기
💡 최종적으로 Node.js를 서버로 구성하기 위해서 데이터베이스는 mongoose 라이브러리를 통해 ‘MongoDB’로 구성하고 데이터 통신을 위해서 express를 사용합니다.
3.1. 초기 환경 구성
최초 환경 구성 - 터미널 이용
# node.js 설치
$ brew install node@16.13.1
# mongoDB 설치
$ brew tab mongodb/brew
$ brew install mongodb-community
# dependecy 관리를 위한 pacakage.json 파일 생성
$ yarn init -y
# Express / Mongoose 설치
$ yarn express@4.18.1 mongoose@6.3.8
[더 알아보기]
💡 mongoose.js 란?
- Mongoose는 애플리케이션 데이터를 모델링하기 위한 간단한 스키마 기반 설루션을 제공해주며, 기본 제공 유형 캐스팅, 유효성 검사, 쿼리 작성, 비즈니스 로직 훅 등을 즉시 사용할 수 있습니다.
💡 RDB, No-SQL 용어 차이
- 하단 표 참고
RDB(Relational Database) | No-SQL |
데이터베이스 | 데이터베이스 |
테이블 | 컬렉션(Collection) |
컬럼 | 필드(Filed) |
행(row) | 다큐먼트(Document) |
[참고] Mongoose.js 공식 사이트
로컬 MongoDB를 연결만 해둔 상태입니다. - 해당 툴은 ‘Robo 3T’를 이용하였습니다.
3.2. 소스코드
MongoDBConfig.js 소스코드
💡 해당 페이지에서는 로컬 MongoDB와 연결을 하고 Express를 초기화해주고 미리 만들어둔 UserRoute, BoardRoute 라우터를 연결합니다.
const mongoose = require("mongoose");
const express = require("express"); // Express 모듈을 가져옴
const app = express();
// Express Option : JSON 형태로 데이터 통신
app.use(express.json());
/**
* MongoDB URL 지정
* @formatting : mongodb://localhost/my_database'
*/
const MONGO_URL = `mongodb://localhost:27017`;
const MONGO_DB_NAME = "mongooseTestDB";
// Express Cofig
const EXPRESS_ROUTER_PORT = "3000";
/**
* [STEP1] MongoDB Connection
*/
mongoose
.connect(MONGO_URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
dbName: MONGO_DB_NAME,
})
.then(() => {
console.log(`[+] mongoseDB Connection`);
})
.catch((err) => console.error(`[-] mongoseDB ERROR :: ${err}`));
/**
* [STEP2] Express Route 구성
*/
app.listen(EXPRESS_ROUTER_PORT, () => {
console.log(`Example app listening on port ${EXPRESS_ROUTER_PORT}`);
});
/**
* [STEP3] Express Option으로 구성한 Router를 등록
*/
app.use("/", require("../routes/UserRoute"));
app.use("/", require("../routes/BoardRoute"));
[결과 화면] 위에 코드를 실행하면 MongoDB내에 데이터베이스가 생기고 Collection들이 생성됩니다.
UserModel.js
💡 해당 부분에서는 User 테이블에 사용할 컬럼들을 정의합니다.
const mongoose = require("mongoose");
const { Schema } = mongoose;
/**
* 테이블의 구조 - 컬럼(Document) 구성
*/
const Board = new Schema({
boardSq: { type: Number, required: true, unique: true },
boardTitle: { type: String, required: false, unique: false },
boardContent: { type: String, required: false, unique: false },
});
// Create Model & Export
module.exports = mongoose.model("Borad", Board);
UserRoute.js
💡 해당 부분에서는 만들어 든 User 테이블에 URL 호출이 수행할 쿼리를 정의합니다.
const express = require("express");
const User = require("../models/UserModel");
const routers = express.Router();
routers.get("/user", (req, res, next) => {
User.find((err, result) => {
console.log(result);
res.json(result);
});
});
routers.post("/user", (req, res, next) => {
const { userSq, userId, userName } = req.body;
const UserValues = new User({
userSq: userSq,
userId: userId,
userName: userName,
});
UserValues.save()
.then((result) => {
console.log("[+] INSERT SUCCESS");
res.json(result);
})
.catch((err) => console.error("[-] INSERT ERROR"));
});
module.exports = routers;
[결과 화면]
💡 해당 소스코드의 구성이 완료되면 ‘PostMan’ 툴을 이용하여서 JSON형태의 데이터를 구성하고 RestfulAPI의 ‘post’ 방식을 통해서 http://localhost:3000/user를 호출하여서 나온 결과입니다. 그리고 INSERT 된 데이터를 ‘get’ 방식을 통해 MongoDB에 등록된 데이터를 확인합니다.
post 방식으로 데이터 INSERT
GET 방식으로 데이터 SELECT
2) 오늘의 결론
💡 Node.js를 통해서 back-end(서버)를 간단하게 구현해보았습니다.
대표적으로 Back-end와 비교되는 Java를 기반으로 한 Spring을 이용하는 방식이 있는데, 각각의 장/단점이 있다고 생각합니다. 이를 확인하여서 장점을 최대로 올릴 수 있는 언어를 선택하면 좋을 것 같습니다.
반응형
'Node > 이해하기' 카테고리의 다른 글
[Node] Socket.io 기반 소켓 서버 구축 방법 -2 : Room, Namespace 별 소켓 통신 방법 (1) | 2024.08.25 |
---|---|
[Node] Socket.io 기반 소켓 서버 구축 방법 -1 : 구성 요소 및 흐름 + React 기반 채팅 화면 구성 (0) | 2024.08.18 |
[Node] Node 버전 상황에 따라 변경 방법 : 라이브러리 n 활용 (0) | 2024.04.22 |
[Node] 자바스크립트 패키지 매니져(npm/yarn) 이해하기 -1 (2) | 2022.06.26 |
[Node] Node.js 이해하기-1(정의, 장단점) (0) | 2022.06.17 |