BE 구조 설계서
파일 구조
- index.ts, app.ts: 앱 진입점 파일
- settings.ts: 환경변수 및 설정 변수
- routes/: 라우트 함수 모음
- models/: 모델 클래스 모음
- utils/: 유틸리티 함수 및 객체 모음
- middlewares/: 미들웨어 함수 모음
Route
users.ts
POST | /login | 주어진 email, password로 로그인, JWT 쿠키 발급 |
POST | /logout | 로그아웃(쿠키 삭제) |
GET | /users/me | 사용자 자신의 정보 조회 |
POST | /users | 주어진 email, password로 회원가입 |
notes.ts
GET | /notes | 사용자가 작성한 노트 목록 |
GET | /notes/{id} | 노트 상세 조회 |
POST | /notes | 주어진 title과 content로 노트 생성 |
PUT | /notes/{id} | 주어진 title과 content로 노트 수정 |
DELETE | /notes/{id} | 노트 삭 |
healthcheck.ts
GET | /healthcheck | Docker 헬스체크를 위한 204 응 |
Model
- note.ts: 노트에 대한 CRUD 제공하는 모델 클래스
- user.ts: 사용자에 대한 CRUD 제공하는 모델 클래스, BCrypt로 비밀번호를 암호
Middleware
- authentication.ts: authenticateUser() 함수로 요청 객체의 jwt를 검증하고, User DAO를 요청 객체에 추가
- authorization.ts: authorizeNote() 함수로 요청 객체의 id param에 해당하는 노트가 있는지 확인, 노트의 주인과 요청자가 일치하는지 확인, Note DAP를 요청 객체에 추
DB
개발 환경 설정
1. 프로젝트 초기화
npm init -y
2. 기본 패키지 설치
npm i dotenv express express-async-errors
npm i -D typescript @types/express nodemon
3. package.json을 다음과 같이 작성한다.
{
...
"main": "build/index.js",
"script": {
"start": "nodemon",
"build": "tsc"
},
...
}
4. nodemon.json을 다음과 같이 작성한다.
{
"$schema": "https://json.schemastore.org/nodemon.json",
"watch": ["src"],
"ignore": ["src/**/*.test.ts"],
"ext": "ts.json",
"exec": "tsc && node .",
"legacyWatch": true
}
5. tsconfig.json 파일의 맨 아래에 다음 내용을 추가한다.
"exclude": ["src/**/*.test.ts", "src/**/__mocks__/*.ts"]
6. src/settings.ts 파일을 다음과 같이 작성한다.
import dotenv from "dotenv";
dotenv.config();
export const PORT = process.env.PORT||3031;
7. .env 파일을 다음과 같이 작성한다.
NODE_ENV=development
PORT=3031
8. src/app.ts 파일에 다음과 같이 서버 응용 코드를 작성한다.
import express, { NextFunction, Request, Response } from "express";
import "express-async-errors";
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use((err: unknown, req: Request, res: Response, next: NextFunction) => {
console.error(err);
res.sendStatus(500);
});
export { app };
9. src/index.ts 파일에 다음과 같이 서버 구동 코드를 작성한다.
import { app } from "./app";
import { PORT } from "./settings";
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}`);
});
'데브코스' 카테고리의 다른 글
[19주차 - DAY5] 웹 기반 문서 편집기 제작 프로젝트(4) (0) | 2024.07.05 |
---|---|
[19주차 - DAY4] 웹 기반 문서 편집기 제작 프로젝트(3) (0) | 2024.07.04 |
[19주차 - DAY2] 웹 기반 문서 편집기 제작 프로젝트(1) (0) | 2024.06.28 |
[18주차 - DAY5] 오픈소스 기여(4) (0) | 2024.06.28 |
[18주차 - DAY4] 오픈소스 기여(3) (0) | 2024.06.27 |