WIL 23-06-25

level·2023년 6월 25일

TIL

목록 보기
36/95

REST API란
REST 아키텍쳐를 따라 구현된 API
REST는 “Representational State Transfer”의 줄임 말

Validation
어떤것을 검증하기 위한 코드

Schema.virtual
JSON 타입으로 Schema를 변환할 때 가상값(virtual)을 반환하도록 설정하는 것

쿠키와 세션

쿠키

브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보냄
데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약할 수 있음
쿠키는 userId=user-1321;userName=sparta 와 같이 문자열 형식으로 존재하며 쿠키 간에는 세미콜론(;) 으로 구분됨

cookie-parser 미들웨어

요청에 추가된 쿠키를 req.cookies 객체로 만들어 줌
편리하게 쿠키를 관리

JWT

JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해줌
header.payload.signature 의 형식으로 3가지의 데이터를 포함
Stateless(무상태)와 Stateful(상태 보존)
Node.js 서버가 언제든 죽었다 살아나도 똑같은 동작을 하면 Stateless
서버가 죽었다 살아났을때 조금이라도 동작이 다른 경우 Stateful

미들웨어 (Middleware)

웹 서버의 요청/응답에 대해 공통적으로 관리
승인된 사용자만 API를 접근 허용
next: 다음 스택으로 정의된 미들웨어를 호출

Authorization: Bearer JWT토큰내용
HTTP 인증 유형중, Bearer 타입을 사용하여 토큰을 전달

참고자료: https://velog.io/@city7310/%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%80-%EC%9D%B4%EC%A0%95%EB%8F%84%EB%8A%94-%ED%95%B4%EC%A4%98%EC%95%BC-%ED%95%A8-5.-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D-%EA%B2%B0%EC%A0%95

(Authorization ?? "").split(" ");
??: 널 병합 연산자

attributes

migration 작성 시 테이블간의 관계
1:N 관계

references: {
          model: 'Users', // Users 모델을 참조합니다.
          key: 'userId', // Users 모델의 userId를 참조합니다.
        },

1:1 관계

 references: {
          model: 'Users', // Users 모델을 참조합니다.
          key: 'userId', // Users 모델의 userId를 참조합니다.
        },

Sequelize model 작성시 관계설정
1:1 관계

// 1. Users 모델에서
      this.hasOne(models.UserInfos, { // 2. UserInfos 모델에게 1:1 관계 설정을 합니다.
        sourceKey: 'userId', // 3. Users 모델의 userId 컬럼을
        foreignKey: 'UserId', // 4. UserInfos 모델의 UserId 컬럼과 연결합니다.
      });
      
 // 1. UserInfos 모델에서
      this.belongsTo(models.Users, { // 2. Users 모델에게 1:1 관계 설정을 합니다.
        targetKey: 'userId', // 3. Users 모델의 userId 컬럼을
        foreignKey: 'UserId', // 4. UserInfos 모델의 UserId 컬럼과 연결합니다.
      });

1:N 관계

// 1. Users 모델에서
this.hasMany(models.Posts, { // 2. Posts 모델에게 1:N 관계 설정을 합니다.
  sourceKey: 'userId', // 3. Users 모델의 userId 컬럼을
  foreignKey: 'UserId', // 4. Posts 모델의 UserId 컬럼과 연결합니다.
});

// 1. Posts 모델에서
this.belongsTo(models.Users, { // 2. Users 모델에게 N:1 관계 설정을 합니다.
  targetKey: 'userId', // 3. Users 모델의 userId 컬럼을
  foreignKey: 'UserId', // 4. Posts 모델의 UserId 컬럼과 연결합니다.
});

Sequelize의 include
include 문법을 사용하기 위해서는 model에서 hasMany, hasOne, BelongsTo와 같이 관계 설정이 되어야 현재 모델에서 참조하는 외래 키를 인식하고, SQL을 생성

// 라이브러리 설치
npm install express sequelize mysql2 cookie-parser jsonwebtoken

// sequelize-cli, nodemon 라이브러리를 DevDependency로 설치
npm install -D sequelize-cli nodemon

// 설치한 sequelize를 초기화 하여 sequelize 사용 초기 구조 생성
npx sequelize init

nodemon 실행

"scripts":{
"start":"nodemon app.js"
-$ npm start

// db:migrate 명령어
npx sequelize db:migrate:status
npx sequelize db:migrate:undo
npx sequelize db:migrate

// updatedAt

// schemas
updatedAt: {
      type: Date,
      default: Date.now,
    },
// routes
post.updatedAt = Date.now(); 

// sql 데이터베이스에서 삭제
post.destroy()

// 정규표현식
https://regexr.com/5mhou
https://regexone.com/

0개의 댓글