호소세 2022. 11. 1. 13:07
728x90
반응형

node.js 기반으로 서버를 개발한다는 것은 자유도가 높고 무한한 확장 가능성을 이야기합니다. express.js 와 같이 Server-side Framework들이 무수히 많기 때문입니다.

 

이러한 server-side Framework 를 사용하지 않고 node.js 에 내장된 http로 진행을 하게 된다면 매우 복잡한 로직을 진행하는 어플리케이션이나 큰 규모의 서비스를 제공해야하는 경우 코드가 지저분해지게 됩니다. 그래서 이러한 불편함을 해소하기 위해서 탄생한 것이 바로 express와 같은 프레임워크입니다.

 

 Express is fast, unopinionated, minimalist web framework for node.js.” 

빠르고 자유롭고 가벼운 것이랍니다. 시작부터 벌써 개운하군요.

 

Express 는 Node 개발자들이 다수 채택하는 프레임워크로서, 앞서 언급한 라우팅  로직의 모듈화 를 위해 사용 됩니다. 이는 곧 Express가 개발자로 하여금 더욱더 읽기 쉽고 유연하며 지속가능한 백엔드 앱을 개발할 수 있게끔 돕는 도구 라는 것을 의미합니다.

// serverWithExpress.js

const modularizedFunctions = require('./modularizedFunctions.js')

const express = require('express')

const app = express() app.use(express.json())

//get 요청 처리 라우팅

app.get('/ping', (req, res) => {res.json({ message: '/pong'})})

app.get('/users', modularizedFunctions.getUsers)

app.get('/users/:userId', modularizedFunctions.getUserByUserId)

app.get('/posts', modularizedFunctions.getPosts) //post 요청 처리 라우팅

app.post('/users', modularizedFunctions.createUser)

app.post('/posts', modularizedFunctions.createPost)

//patch 요청 처리 라우팅

app.patch('/posts/:postId', modularizedFunctions.updatePost)

//delete 요청 처리 라우팅

app.delete('/posts/:postId', modularizedFunctions.deletePost)

app.listen(3000, "127.0.0.1", function() {

console.log('listening on port 3000')

})

 

http를 사용하는 것 보다 확실이 간단해졌습니다.

 

const getUsers = (req, res) => { res.json({ users }) }

const getUserByUserId = (req, res) => { const userId = req.params.userId const user = users.find((user) => user.id == userId) res.json({ user }) }

const getPosts = (req, res) => { res.json({ posts }) }

const createUser = (req, res) => { const user = req.body

const newUser = users.push({ id: user.id, name: user.name, email: user.email, password: user.password, }); res.json({ message: 'created!', 'user_id' : newUser }) }

const createPost = (req, res) => { const post = req.body const newPost = posts.push({ id: post.id, title: post.title, content: post.content, }); res.json({ message: 'created!', 'post_id' : newPost }) }

const updatePost = (req, res) => { const inputPost = req.body const postId = req.params.postId const post = posts.find((post) => post.id == postId) post.title = inputPost.title; post.content = inputPost.content; res.json({ message: 'updated!', 'updatedPost' : post }) }

const deletePost = (req, res) => { const postId = req.params.postId const indexOfPostId = posts.findIndex((post) => post.id == postId) delete posts[indexOfPostId] res.json({ message: 'deleted!'}) }

// serverWithExpress.js 에서 사용하기 위해 모듈로 내보냅니다.

module.exports = { getUsers, getUserByUserId, getPosts, createUser, createPost, updatePost, deletePost };

 

Express를 적용하기 전/후의 가장 큰 차이점은 바로 라우팅의 분리, 로직의 모듈화 라고 볼 수 있습니다. node.js의 http 모듈을 이용하여 만든 코드의 경우 if-elif의 중첩 적용으로 인해 코드가 불필요하게 복잡해지고 가독성 또한 많이 떨어지게 되었습니다. 하지만 Express를 이용하여 구현한 코드의 경우에는 기능별로 별도의 파일로 관리할 수 있다는 사실을 확인할 수 있었고, 이는 추후 더욱 복잡해질 디자인/아키텍쳐 패턴을 적용하는데 기본 원리로 적용 될 것 입니다.

 

 

반응형