프로젝트 목적: React 프로젝트로 CRUD 게시판 만들기.
챕터 1. 백엔드 개발.
웹 서버 - Koa 프레임워크를 사용했다. Django와의 고민이 있었지만, python을 추가로 설치할 필요 없이 nodejs로 개발할 수 있다는 점이 큰 장점으로 작용했다.
백엔드 라우팅은 Koa-router를 사용하여 다른 주소로 요청이 들어올 때 다른 작업 처리하도록 했다.
REST API를 사용하여 직접 데이터를 변경하지 않고 클라이언트와 DB 사이에 REST API(서버)를 두어 작업을 처리했다. (요청 종류에 따라 다른 HTTP 메서드 사용함. 포스트 작성: POST, 포스트 목록 조회: GET, 포스트 삭제: DELETE, 포스트 업데이트: PATCH ... )
폴더 / 파일 관리:
폴더 - 라우팅 종류를 구분하기 어렵기 때문에 폴더를 따로 만들어 사용하기 편하게 만들어 주었다. (전체 라우트 처리: api/ 포스팅 관련: api/posts/ , 회원관리 관련: api/auth/)
파일 - 라우트 처리 함수들을 모아놓은 컨트롤러 파일(auth.ctrl.js / posts.ctrl.js)과 함수를 불러와 라우트에 연결하는 index.js 파일로 분리해주었다.
DB - NoSQL DB인 MongoDB를 사용했다. (테이블마다 같은 스키마를 가지고 있는 RDBMS와는 다르게, NoSQL은 한 컬렉션 안에서 다른 스키마를 가진 문서들이 공존할 수 있다.) 댓글 기능을 포스트 문서 내부에 넣는다던가, 이후 추가할 기능의 확장성 면을 생각하여 선택.
mongoose(MongoDB기반 ODM(Object Data Modeling))를 사용하여 DB 객체들을 JS 객체처럼 사용 가능하도록 했다.
포스팅 관련:
{title, body, tags, publishedDate} 네 가지 필드가 있는 Posts 스키마와 모델을 만들어주었다.
포스팅 생성, 조회, 특정 포스팅 조회, 삭제, 수정 기능을 구현.
ObjectId 검증(같은지), Request Body 검증(필수 필드가 모두 있는지 미들웨어 작업)을 통해 에러 시 status 400으로.
페이지네이션 기능 - 포스트 역순, 보이는 개수 제한, 페이지 기능, 마지막 페이지 번호 알려주기.(sort, limit, skip) + 내용 길이 제한 기능
회원 인증 시스템 관련:
토큰 기반 인증 시스템 (장점: 사용자 로그인 정보를 기억하기 위한 리소스가 적음, 사용자쪽에서 로그인 상태 토큰을 가지고 있으므로 서버끼리 상태를 공유할 필요 없음, 관리하기 편함) 사용.
{username, hashedPassword} 두 가지 필드가 있는 User 스키마와 모델을 만들어주었다.
회원가입, 로그인, 로그인 확인, 로그아웃 기능을 구현.
토큰 발급(쿠키에 담아), 토큰 검증(쿠키 토큰 있는지 미들웨어 작업) 처리.
로그인 시에만 포스팅 생성/수정/삭제 가능하도록 로그인 상태 확인 미들웨어 작업 후 라우터에서 사용, 포스트 작성 시 사용자 정보 넣고, 수정/삭제 시 권한 확인하기.
특정 포스팅 필터링 기능 - 유효한 username, tags로 query 객체 선언.
라이브러리 -
dotenv: 환경변수들을 파일에 넣고 편리하게 관리했다.
esm: nodejs에서 import / export 문법을 사용했다.
@hapi/joi: 객체를 검증했다.
bcrypt: 해시로 패스워드 저장.
jsonwebtoken: JWT 토큰 발급, 검증.
nodemon: 서버를 매번 재시작하는 번거로움 해결.
Es-lint: 문법 검사.
prettier: 코드 정리.
그 외 사용한 툴 -
Postman: POST, GET, DELETE, PATCH api를 입력하여 테스트했다. 커스텀 Header(사용자 인증 비밀번호 해시를 담을 쿠키)를 확인하거나, Body에 값이 잘 들어갔는지나, Status를 확인할 수 있어 유용하다.
MongoDB Compass: MongoDB를 GUI로 확인할 수 있다. 실제 DB에 값이 어떻게 들어오는지 눈으로 확인할 수 있어서 편리하다.
해결한 오류 -
HTTP Status 405 Method now allowed: POST -> GET로 Request Method를 매칭을 시켜주어야 한다.
posts API에 회원 인증 시스템(auth) 적용 오류: 다른 계정 포스팅 지우려고 할때 403이 아닌 404 에러 뜸: 해결! userID가 아니고 ObjectID라는 걸.. 잊지 말자.
이제 드디어 프론트 개발이다! 신난다.
곧 프로젝트 완료하면 README.md 정리해서 올릴 예정... 커밍쑨.
'Programming > React' 카테고리의 다른 글
[React] React onClick에 여러 함수를 넣고 싶다면 (+주의사항) (0) | 2021.07.23 |
---|---|
React, React-Native 한 번에 여러 스타일 적용하는 법 (0) | 2021.07.23 |
[Redux] 새로고침 유지: Redux Persist 테스트 후기 (0) | 2021.07.23 |
React 빌드, 배포 시 주의할 점 (2) | 2021.07.23 |
[React] CRUD 블로그 만들기 - 2. 프론트엔드 (0) | 2020.03.09 |
댓글