sequlize splint 질문을 통해 이해

Jaemin Jung·2021년 7월 29일
0

Today I Learned

목록 보기
57/62
post-thumbnail

splint 질문

  • 기본적으로 development, test, production 환경 중 어떤 환경을 사용하고 있나요?

기본적으로 development 환경을 사용중이며, 이를 확인할 수 있는 곳은
models/index.js에서 해당 코드로 확인 가능하다.

	const env = process.env.NODE_ENV || 'development';
	const config = require(__dirname + '/../config/config.json')[env];

환경변수가 지정되어있지 않다면, 기본값으로 development가 env 변수에 할당 되도록 되어있고,
env 변수를 이용해서 현재 위치에서 config에 있는 joson에 브라켓 노테이션을 이용해서 설정된 변수 값의 객체를 가져온다.

* __dirname은 현재 실행하는 파일의 절대경로이다.
  • 어떻게 다른 환경으로 전환할 수 있나요?
    process.env.NODE_ENV를 이용해 환경 전환이 가능
	if (process.env.NODE_ENV === "test") {
  		env = "테스트 환경";
	} else if (process.env.NODE_ENV === "dev") {
  		env = "개발 환경";
	} else if (process.env.NODE_ENV === "pro") {
    	env = "배포 환경"
    }
  • 여러 개의 환경이 분리되어 있는 이유는 무엇인가요?

각각 환경은 사용 목적이 다르기 때문에 하나의 환경에서 이 세가지(dev, test, pro)
작업을 진행 한다면, 혼란을 가져올 수 있다.(가독성, 유지 보수가 힘들어짐) 따로 나눠서
관리한다.

개발에서는 기본 뼈대를 만드는 개발을 위한 환경이 필요하고,
테스트에서는 데이터를 삭제 추가등 여러 작업을 하기위해서 필요하다.
배포에서는 유저 데이터가 저장되어있기때문에 함부로 테스트가 불가능하다.

  • (Optional) 설정 파일은 .gitignore에 등록되어 있습니다. 설정 파일을 git의 관리를 받게 하는 대신, 환경 변수를 사용하게 만들 수 있나요?

가능하다.
환경변수를 이용해 가능하다.
근데 이제 어떻게 하냐면,
우선 config.json파일을 js파일로 바꾸고
(json파일은 js문법이 안먹힘 환경 '변수'니까 js파일로 바꿔야함)

node환경에서 환경변수에 접근하려면 dotenv 모듈이 필요
그래서 js파일로 바꾼 config.js에서 dotenv 모듈을 불러옴

    const dotenv = require('dotenv');
	dotenv.config();

그다음에 보안상 중요한 데이터는 환경변수로 접근하게끔 한다.

const config = {
development: {
host: 'localhost',
user: 'root',
password: process.env.DATABASE_SPRINT_PASSWORD,
database: 'cmarket'
},
test: {
host: 'localhost',
user: 'root',
password: process.env.DATABASE_SPRINT_PASSWORD,
database: 'cmarket_test'
}
};

js의 객체 형식으로 바꿔주고 해당 config파일을 require하는 연결 파일에서는
적당한 수정이 필요할것

  • MySQL의 varchar나 int 타입은 Sequelize에서는 어떤 형태로 정의해야 하나요?

    int -> integer로 사용
    varchar -> string으로 사용

    Sequelize의 데이터 타입 정의 방식이 따로 존재한다.

    데이터 타입은 다음과 같이 객체 내부에서 key와 value값으로 정의한다.

url.init({
    url: DataTypes.STRING,
    title: DataTypes.STRING,
    visits: {
      type: DataTypes.INTEGER,
      defaultValue: 0
    }
  }, {
    sequelize,
    modelName: 'url',
  });
  • 왜 Sequelize의 타입 정의와 MySQL의 타입 정의가 다를까요?

    Sequelize는 여러 개의 관계형 데이터베이스 시스템(RDBMS)을 호환 하기 위해서
    공통의 문법으로 통일 하였기 때문이다.

  • 마이그레이션을 할 때 주의해야 할 점은 무엇인가요?

    모델의 기본값이나 데이터 타입이 잘 생성하였는지 확인해야함
    예를들어 기본값은 지정 못하니 세세한 옵션은 코드에 직접 작성해야함
    잘못 보냈다면 undo를 통해서 다시 마이그레이션 해야함
    마이그레이션을 진행하였어도 model파일은 자동으로 적용 되지 않기 때문에,
    model파일도 같이 수정해줘야한다.

profile
내가 보려고 쓰는 블로그

0개의 댓글