본문 바로가기
SideProject

[store]2. TypeORM, Datasource 설정

by 마운틴케이 2024. 8. 26.

2024.08.21

TypeORM, Datasource 설정 

객체-DB테이블 매핑을 위한 TypeORM 과 DB 드라이버 의존성 추가

npm install typeorm --save
npm install mysql --save # 사용 DB(mySQL) 드라이버 의존성 추가

 

 

* TypeORM 공식문서에 사용하는 typescript 버전이 4.5 이상일 경우 tsconfig.json 파일에 아래와 같은 옵션을 추가하라한다.

추가하려고 보니 이미 설정 되어있다. nest-cli로 생성하는 과정에서 자동으로 추가해주는 것 같다.

"emitDecoratorMetadata": true,
"experimentalDecorators": true,

 

Datasource 설정

공식문서의 Getting started 를 참고했다.

 

app.module의 imports 에 datasource를 작성하는 방법도 있지만, 코드가 길어져 별도의 파일로 관리하기 위해

따로 datasource.ts 를 작성했다.

 

export const AppDataSource = new DataSource({
  type: 'mysql', // 사용할 db
  host: 호스트,
  port: 포트번호,
  username: 사용자이름,
  password: 비밀번호,
  database: 사용할 데이터베이스 명,
  synchronize: true,
  logging: true,
  entities: [__dirname + '/../**/*.entity{.ts,.js}'],
});

 

  • synchronize : 어플리케이션을 실행할 때마다 엔터티가 데이터베이스와 동기화되도록 한다.
                           이 옵션이 true면 작성한 엔터티를 바탕으로 테이블이 생성되거나 수정된다.
  • entities : 동기화할 엔터티를 나열한다. 위와 같이 정규식을 사용해 해당되는 파일의 엔터티 정보를 가져올 수 있다.

 

그리고 저 datasource를 initialize 해줘야 하는데 처음에 공식문서를 잘못 이해해서 여기서 삽질을 좀 했다. 예제소스에 있는 주석도 제대로 읽자..

 

Nest-cli 로 프로젝트를 생성하면 main.ts 라는 파일이 생성된다.

여기서 app.module 정보를 불러오고 포트를 여는 작업을 하는 bootstrap() 메서드를 호출하여 어플리케이션이 시작되는데,

이 부분에서 bootstrap이 실행되고 난 뒤 datasource 초기화를 하도록 then절에 initialize 코드를 작성했다.

 

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap().then(() => {
  AppDataSource.initialize()
    .then(() => {
      console.log('Data Source has been initialized!');
      // here you can start to work with your database
    })
    .catch(err => {
      console.error('Error during Data Source initialization', err);
    });
});

 

그리고 테스트용 엔터티를 하나 작성하여 실행해보니 테이블이 잘 생성되는것을 확인할 수 있었다.

 


댓글 피드백은 언제나 환영합니다!

'SideProject' 카테고리의 다른 글

[store]1. 프로젝트 설계 & 생성  (0) 2024.08.14