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를 이용하여 구현한 코드의 경우에는 기능별로 별도의 파일로 관리할 수 있다는 사실을 확인할 수 있었고, 이는 추후 더욱 복잡해질 디자인/아키텍쳐 패턴을 적용하는데 기본 원리로 적용 될 것 입니다.
'코딩 개발 > Javascript' 카테고리의 다른 글
Express와 TypeORM을 활용한 CRUD API 만들기 (0) | 2022.11.04 |
---|---|
Express 초기 환경세팅 가이드 (0) | 2022.11.03 |
Node.js (사용 이유) (0) | 2022.10.25 |
API (1) | 2022.10.23 |
Web 서비스의 역사와 발전 (0) | 2022.10.23 |