React Social Media App Tutorial #1 REST API with MongoDb

오젼·2022년 8월 23일
0

강의 #1

Installation

기본 패키지 설치 및 세팅

packages

npm install express mongoose dotenv helmet morgan nodemon
  • express: Node.js framework. 서버 돌리는 용
  • mongoose: MongoDB를. Node.js와 MongoDB를 연결해주는 ODM
  • dotenv: 환경변수 사용할 수 있게 해주는 패키지. 데이터베이스 내용 숨기는 용도로 사용.
  • helmet: 리퀘스트 헤더 값 관련 패키지. 리퀘스트 보안 위해 사용.
  • morgan: 로그 관리용
  • nodemon: 서버 변경된 내용 있음 알아서 restart 되도록. package.json에서 start script를 nodemon index.js로 변경해주면 npm start 할 때 알아서 nodemon으로 실행

MongoDB

  • mongoDB 가입 후 Connect your application으로 클러스터 연결.
  • 제공되는 url password 부분 채우고 social 데이터베이스로 지정해서 .env에 MONGO_URL 환경변수 저장
MONGO_URL = mongodb+srv://<username>:<password>@cluster0.puf8ahh.mongodb.net/social?retryWrites=true&w=majority

Mongoose

connections

dotenv.config();
mongoose.connect(process.env.MONGO_URL);

Middleware and First Request

express.js에 미들웨어 등록

//middleware
app.use(express.json());
app.use(helmet());
app.use(morgan("common"));

middleware란

express.json()

  • https://semtax.tistory.com/7
  • body parser
  • express.js에서 json으로 이루어진 request body를 제대로 처리하지 못하는 문제점을 해결하기 위해 사용

Creating User Router

rest api로 라우터 설정

API란

Application Programming Interface

REST

Representational State Transfer

REST API

  • REST 방식을 따르는 API

router

  • https://cotak.tistory.com/85
  • 클라이언트의 요청 경로(path)를 보고 이 요청을 처리할 수 있는 곳으로 기능을 전달해주는 역할을 한다

express.Router()

  • 클라이언트가 특정 경로로 보낸 요청을 처리할 함수를 따로 둘 수 있음

mongoose.Schema()

  • https://mongoosejs.com/docs/guide.html
  • mongoDB는 nosql. document에 아무거나 넣어도 에러가 안 남.
  • 그래서 mongoose에선 Schema를 사용.
    작성한 Shcema를 기준으로 DB에 넣기 전에 적합한지 먼저 검사

Login and Register System

  • register user - POST

  • login - POST

POST

async & await

  • 비동기 처리를 해주는 키워드
  • 비동기 함수를 동기적으로 처리하는 것처럼 보이게 만들어줌
  • async: 함수를 Promise로 만들어줌
  • await: async 함수에서만 쓸 수 있음. 작업이 끝날 때까지 기다려줌

postman

brew install --cask postman
  • API 개발 쉽게 할 수 있게 도와주는 플랫폼
  • 프론트를 기다리지 않고 바로바로 테스트 할 수 있음

bcrypt

  • https://ko.wikipedia.org/wiki/Bcrypt
  • 블로피시 암호에 기반을 둔 암호화 해시 함수
  • 브루트 포스 검색 공격에 대한 저항 유지
  • salt: 해시 함수에서 비밀번호 암호화할 때 추가되는 바이트 단위의 임의의 문자열
  • salt 값이 커질수록 해시를 생성하고 검증하는 시간이 느려진다.

Node.js Express CRUD

  • update user - PUT

  • delete user - DELETE

  • get a user - GET

PUT

DELETE

GET

... spread syntax

//user database 목록 중 password, updateAt을 제외한 나머지가 other 배열로 합쳐짐
const {password, updatedAt, ...other} = user._doc;

Follow and Unfollow User

  • follow a user

  • unfollow a user

mongoDB: $push

mongoDB: $pull

Creating Post Model

  • posting에 필요한 db schema를 정의하고
  • /api/posts 라우터를 설정해준다.

Node.js MongoDB Post CRUD

Promise.all()

Like and Disliked Post

Nested Asynchronous Fetch

0개의 댓글