typeORM#2. typeORM migration

깡통·2024년 2월 24일

  • typeORM 의 ormconfig.json의 기능을 가지고 있는 파일임.
  • await dataSource.initialize()는 db를 사용하기 전 초기화시키는 메서드인데, 얘가 dataSource를 정의하는 코드랑 같이 있으면

  • 이런 에러를 발생시킬 수 있음. 그렇기 때문에 얘는 database와의 연결을 정의하는 파일에는 존재해서는 안됨.

  • dataSource.initialize()는 database와 프로젝트를 연결하는 메서드기 때문에 연결을 정의하는 파일 안에 있을 경우 '연결을 중복해서 할 수 없다'는 에러가 발생함.

  • 이쯤되면 차이점이 궁금할거임

    • 위의 '연결이 설정되지 않았다' 에러는 dataSource.initialize()를 저 위치에 작성했을 때 발생함. 비동기 메서드인데 await을 붙이지 않았기 때문에 아마도 위의 dataSource 인스턴스가 생성되어서 export 되는 중간에 dataSource.initialize()가 실행되고 종료되면서 연결 과정에 난입하지 않았을까 함. 그래서 연결이 설정되지 않았던 거임.
    • 그래서 await dataSource.initialize()를 해서 얘의 실행 순서를 보장해주면, '이미 연결된 mysql database를 다시 연결할 수 없다.'라는(3번째 사진) 에러가 발생함.
  • typeORM migration 하는 법

  • migration:create 명령어를 사용했을 때 생성될 migration 버전 파일들이 저장될 디렉토리를 migrationsDir에 설정하고,
typeorm migration:create ./src/typeorm/migrations/PostRefactoring
  • 위와 같이 CLI 명령어를 사용해주면

  • 이렇게 폴더에 파일이 생성됨(참고로 ts로 생성된다. js를 쓰려면 직접 바꿔줘야 함)

  • 파일 내부는 typeScript에 최적화된 상태로 제공된다. 그러니 그 파일을 지금 위의 사진에서
`ALTER TABLE restaurant CHANGE
 rating rating TINYINT NULL
 `

을 제외한 모든 부분을 똑같이 쓰면 된다.(참고로 UP은 적용, DOWN은 롤백 용이다)
참고로 ALTER ~ 부분은 실제로 본인이 적용하고 싶은 RAW QUERY 명령어를 작성하면 된다.

migrations는

공식: typeorm migration:run -- -d path-to-datasource-config
내케이스: typeorm migration:run --dataSource src/typeorm/index.js

작성했을 때 실제로 migration을 해야하는 문법이 작성돼있는 곳을 가리켜주는 프로퍼티다.

여기까지 잘 따라왔다면 migration에 성공했을 것이다.

profile
코딩하러 온 사람입니다.

0개의 댓글