객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
= 코드에 있는 "객체"와 DB에 있는 "데이터"를 편하게 일치시켜주는 도구입니다
객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용하므로 객체 모델과 관계형 모델 간에 불일치가 존재하는데,
ORM을 통해 객체(Model, Entity) 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결(데이터 동기화)합니다
DB data <— Mapping —> Object field
-> 객체를 통해 간접적으로 데이터베이스 데이터를 다룹니다
django 기준, python 코드가 다음 SQL로 변환됩니다
TypeScript와 JavaScript(ES5 , ES6 , ES7) 용 ORM입니다
MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL 데이터베이스를 지원합니다
nestjs 공식문서 가이드대로 다음 명령어로 typeorm+db 모듈을 설치하며,
db는 postgresql을 사용하여 pg 패키지를 설치합니다
npm i typeorm @nestjs/typeorm pg
Nest는 데이터베이스를 연결하는 여러 방법을 제공하는데, 루트 디렉토리에 ormconfig.json파일이 있다면 TypeOrmModule.forRoot()에 옵션 객체를 전달하지 않아도 됩니다
로컬서버에서 데이터베이스를 생성 후, ormconfig.json 파일을 생성하여 다음과 같이 작성합니다
주의할 점 - JSON파일에는 엔티티의 경로를 __dirname으로 불러올 수 없기 때문에 빌드 후 생성되는 디렉토리이름인 dist를 붙여주어야 합니다!
{
"type": "postgres", // mysql은 "mysql"
"host": "localhost",
"port": 5432, // mysql은 3306
"username": "testUserName",
"password": "testUserPw",
"database": "testDbName",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true
}
synchronize 옵션은 서비스 구동시 소스코드 기반으로 데이터베이스 스키마를 동기화 할지 여부입니다. 로컬환경에서 구동할때는 개발의 편의를 위해 true로 합니다
⚠️ synchronize 옵션을 true로 하면 서비스가 실행되고 데이터베이스가 연결될 때 항상 데이터베이스가 초기화 되므로 절대 프로덕션에는 true로 하지 마세요!
이제 @nestjs/typeorm 패키지에서 제공하는 TypeOrmModule을 이용하여 DB에 연결할 수 있습니다