풀스택 웹개발 부트캠프 6주차 (3)

syxxne·2023년 8월 24일
0

부트캠프

목록 보기
16/42

Sequelize

  • javascript 구문을 알아서 SQL로 변환
  • DB 작업을 쉽게 할 수 있도록 도와주는 ORM (Object-Relation Mapping) 라이브러리 중 하나
  • Sequelize 공식 문서

Sequelize 설치

npm install sequelize sequelize-cli mysql2
npx sequelize init

Sequelize MVC

  • Model : 모델 (테이블) 정의
  • Controller : 데이터 CRUD, 렌더링 등의 작업
  • View : 화면에 보여줌

Sequelize 모델 정의

  • mysql에서 정의한 테이블을 sequelize에서도 정의 필요 → mysql 테이블sequelize 모델 대응
const model = Sequelize.define(
  "visitor", // 인자 1 : 모델 이름 설정
  {
    ... // 인자 2 : 컬럼 정의
  },
  {
    ... // 인자 3 : 모델의 옵션 정의 (선택)
  }
);
  • 인자 2 : 컬럼 정의

    • type : 데이터 타입 정의 (문자, 숫자, 날짜 등)
    • primaryKey : 기본키 설정 (default : false)
    • autoIncrement : 숫자 자동 증가 (default : false)
    • allowNull : Not Null 허용 여부 (default : true)
    • comment : column에 대한 설명
    • validate : 데이터 유효성을 검사하는 속성
  • 인자 3 : 모델의 옵션 정의 (선택)

    • charset : "utf8"
    • collate : "utf8_general_ci"
    • tableName : 테이블 이름 설정 (실제 DB에 생성될 테이블명, 모델 이름과 다름)
    • freezeTableName : true로 설정하면, 이름이 복수형으로 생성되지 않음
      (모델명을 user로 설정해도 sequelize를 실행할 경우, users 테이블이 생성됨)
    • timestamps : 기본 설정은 true

DB sync

  • root 디렉토리의 app.js에서 설정
db.sequelize.sync({ force: true }).then(() => {
  app.listen(PORT, () => {
    console.log(`http://localhost:${PORT}`);
  });
});
  • force: true → 항상 테이블을 삭제 후, 재생성
  • force: false (default) → 테이블 존재하면 pass, 없으면 생성

Sequelize query문

  • Promise 반환 → .then( )을 붙여서 결과값 사용 가능

findAll( )

  • SELECT
  • 배열 반환 (배열에 담긴 값은 객체)

findOne( )

  • SELECT
  • 단일 객체 반환

create( )

  • INSERT
  • 단일 객체 반환

update( )

  • UPDATE
  • 단일 객체 반환

destroy( )

  • DELETE
  • 단일 객체 반환

💥 where문의 조건은 항상 객체 형태로 만들어야 함

const profile = (req, res) => {
  User.findOne({
    where: { id: req.params.init },
  });
};

0개의 댓글