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 |
---|