Written by
Lee Jongseo
on
on
React Blog (1)
개발일지
리액트를 다루는 기술이라는 책에서 진행한 블로그 프로젝트를 따라해보며 쓰는 개발일지
Backend
Folder Structure
backend
- node_modules
- src
- api
- auth
- auth.ctrl.js
- index.js
- posts
- posts.ctrl.js
- index.js
index.js
- config
- index.js
- lib
- checkLoggedIn.js
- validateJwt.js
- models
- user.js
- post.js
express.js
index.js
main.js
server.js
.env
.eslintrc.json
.prettierrc
.gitignore
.package.json
서버는 다음과 같은 기능을 수행하는 API를 구성해야 한다.
Authentication
- 회원가입
- 로그인
- 로그아웃
- 로그인 체크
CRUD
- 포스트 Read
- 포스트 Create
- 포스트 Edit
- 포스트 Delete
- 포스트 목록 Read
Authorization이 필요한 포인트
- 포스트 Create
- 포스트 Edit
- 포스트 Delete
이 중에서도 Edit과 Delete는 추가적인 확인이 필요한 포인트
API
기능에 따라 두 가지로 나뉜다.
- /api/auth
- /api/posts
/api/auth
- GET /api/auth/check
- POST /api/auth/register
- POST /api/auth/login
- POST /api/auth/logout
/api/post
- GET /api/posts (포스트 목록 읽기)
- POST /api/posts (포스트 쓰기)
- GET /api/posts/:id (포스트 읽기)
- PATCH /api/posts/:id (포스트 수정하기)
- DELETE /api/posts/:id (포스트 삭제하기)
Model
데이터베이스는 Mongodb를 사용한다.
블로그 프로젝트에서 사용하는 데이터 모델을 크게 두 가지로 이루어져 있다.
- User
- Post
mongoose
패키지를 이용하여 모델을 구성한다.
모델 구성은 다음과 같은 뼈대를 가진다.
import {Schema}, mongoose from 'mongoose'
const UserSchema = new Schema({
field: type
})
UserSchema.methods = {
// methods
}
UserSchema.statics = {
// static methods
}
const User = mongoose.model('User', UserSchema)
export default User
Controller
Controller는 Model을 통해 데이터베이스에 접근하여 API 기능을 수행한다.
controller 구성은 다음과 같은 뼈대를 가진다.
export const list = async (req, res) => {
try {
// query를 수행한다.
const posts = await Post.find()
// 결과를 응답한다.
return res.status(202).json(posts)
} catch (err) {
return res.status(500).json({
error: err.message
})
}
}
mongodb에 쿼리하는 함수는 async 함수로 구현한다.