TypeORM: getting started

hwisaac·2023년 3월 23일
0

TypeORM

목록 보기
1/1

https://typeorm.io/

TypeORM은 NodeJS, 브라우저, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, Electron 플랫폼에서 실행할 수 있으며 TypeScript 및 JavaScript (ES5, ES6, ES7, ES8)와 함께 사용할 수 있는 ORM입니다. 목표는 항상 최신 JavaScript 기능을 지원하고 다중 데이터베이스를 사용하는 모든 종류의 애플리케이션 개발을 돕는 추가 기능을 제공하는 것입니다. 작은 테이블이 몇 개 있는 애플리케이션부터 여러 데이터베이스를 사용하는 대규모 기업 애플리케이션까지 개발할 수 있습니다.

TypeORM은 다른 JavaScript ORM과는 달리 Active Record 및 Data Mapper 패턴 모두를 지원하므로 고품질, 느슨하게 결합된, 확장 가능하고 유지보수가 용이한 애플리케이션을 가장 생산적인 방법으로 작성할 수 있습니다.

TypeORM은 Hibernate, Doctrine 및 Entity Framework와 같은 다른 ORM에 크게 영향을 받았습니다.

기능

  • DataMapper 및 ActiveRecord 모두 지원.
  • Entity 및 column.
  • 데이터베이스별 column 유형.
  • Entity manager.
  • Repositories 및 custom repositories.
  • Clean object relational model.
  • Associations (relations).
  • Eager 및 lazy relations.
  • 단방향, 양방향 및 self-referenced relations 지원.
  • 다중 상속 패턴 지원.
  • Cascades.
  • Indices.
  • Transactions.
  • Migrations 및 자동 migrations 생성.
  • Connection pooling.
  • Replication.
  • 다중 데이터베이스 인스턴스 사용.
  • 여러 데이터베이스 유형으로 작업.
  • Cross-database 및 cross-schema queries.
  • Elegant-syntax, flexible 및 powerful QueryBuilder.
  • Left 및 inner joins.
  • 조인을 사용하는 쿼리에 대한 적절한 페이징.
  • Query caching.
  • 스트리밍 raw results.
  • Logging.
  • Listeners 및 subscribers (hooks).
  • Closure table pattern 지원.
  • 모델 또는 별도의 구성 파일에서 스키마 선언.
  • json / xml / yml / env 형식에서 연결 구성.
  • MySQL / MariaDB / Postgres / CockroachDB / SQLite / Microsoft SQL Server / Oracle / SAP Hana / sql.js를 지원합니다.
  • NoSQL 데이터베이스인 MongoDB를 지원합니다.
  • NodeJS / 브라우저 / Ionic / Cordova / React Native / NativeScript / Expo / Electron 플랫폼에서 작동합니다.
  • TypeScript 및 JavaScript 지원.
  • ESM 및 CommonJS 지원.
  • 생성된 코드는 성능이 우수하며 유연하고 깨끗하며 유지보수가 용이합니다.
  • 모든 가능한 최상의 사례를 따릅니다.
  • CLI.

그리고 더 많은 기능...

TypeORM을 사용하면 모델이 다음과 같아집니다:

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    age: number
}

그리고 도메인 로직은 다음과 같이 작성할 수 있습니다:

const userRepository = MyDataSource.getRepository(User)

const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await userRepository.save(user)

const allUsers = await userRepository.find()
const firstUser = await userRepository.findOneBy({
    id: 1,
}) // id로 찾기
const timber = await userRepository.findOneBy({
    firstName: "Timber",
    lastName: "Saw",
}) // firstName과 lastName으로 찾기

await userRepository.remove(timber)

또는 Active Record 구현을 사용하려면 다음과 같이 할 수 있습니다:

import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm"

@Entity()
export class User extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    age: number
}

그리고 도메인 로직은 다음과 같이 작성할 수 있습니다:

const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await user.save()

const allUsers = await User.find()
const firstUser = await User.findOneBy({
    id: 1,
})
const timber = await User.findOneBy({
    firstName: "Timber",
    lastName: "Saw"
})

await timber.remove()

설치

  1. npm 패키지를 설치하세요:
    npm install typeorm --save

  2. reflect-metadata 쉼을 설치해야합니다:

npm install reflect-metadata --save

그리고 앱의 전역 위치 어디에서든 import해야합니다 (예 : app.ts) :

import "reflect-metadata"

  1. node typings를 설치해야 할 수 있습니다:
npm install @types/node --save-dev
  1. 데이터베이스 드라이버를 설치하세요:
  • MySQL 또는 MariaDB를 사용하는 경우
    npm install mysql --save (대신 mysql2도 설치할 수 있음)

  • PostgreSQL 또는 CockroachDB를 사용하는 경우
    npm install pg --save

  • SQLite를 사용하는 경우
    npm install sqlite3 --save

  • Microsoft SQL Server를 사용하는 경우
    npm install mssql --save

  • sql.js를 사용하는 경우
    npm install sql.js --save

  • Oracle을 사용하는 경우
    npm install oracledb --save

Oracle 드라이버를 작동하려면 사이트에서 설치 지침을 따르셔야합니다.

  • SAP Hana를 사용하는 경우
npm install @sap/hana-client
npm install hdb-pool

SAP Hana 지원은 Neptune Software의 후원으로 가능해졌습니다.

  • Google Cloud Spanner를 사용하는 경우
npm install @google-cloud/spanner --save

환경 변수 GOOGLE_APPLICATION_CREDENTIALS를 설정하여 인증 자격 증명을 애플리케이션 코드에 제공하세요:

# Linux/macOS
export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

# Windows
set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH

# KEY_PATH를 서비스 계정 키가 포함된 JSON 파일의 경로로 대체하세요.

에뮬레이터와 함께 Spanner를 사용하려면 SPANNER_EMULATOR_HOST 환경 변수를 설정해야합니다:

# Linux/macOS
export SPANNER_EMULATOR_HOST=localhost:9010

# Windows
set SPANNER_EMULATOR_HOST=localhost:9010
  • MongoDB (실험적 기능)을 사용하는 경우
    npm install mongodb@^3.6.0 --save

  • NativeScript, react-nativeCordova를 사용하는 경우
    지원되는 플랫폼의 설명서를 확인하세요.

TypeScript 구성

또한 TypeScript 버전 4.5 이상을 사용하고 다음 설정을 tsconfig.json에서 활성화해야합니다:

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

컴파일러 옵션의 lib 섹션에서 es6을 활성화하거나 @typeses6-shim을 설치해야 할 수도 있습니다.

Quick Start

TypeORM을 시작하는 가장 빠른 방법은 CLI 명령을 사용하여 스타터 프로젝트를 생성하는 것입니다. 퀵 스타트는 NodeJS 애플리케이션에서 TypeORM을 사용하는 경우에만 작동합니다. 다른 플랫폼을 사용하는 경우, 단계별 가이드를 따르세요.

CLI를 사용하여 새 프로젝트를 만들려면 다음 명령을 실행하세요:

npx typeorm init --name MyProject --database postgres

여기서 name은 프로젝트 이름이고 database는 사용할 데이터베이스입니다. database는 다음 값 중 하나 일 수 있습니다: mysql, mariadb, postgres, cockroachdb, sqlite, mssql, sap, spanner, oracle, mongodb, cordova, react-native, expo, nativescript.

이 명령은 다음 파일이 있는 MyProject 디렉토리에 새 프로젝트를 생성합니다:

MyProject
├── src                   // TypeScript 코드가 있는 곳
│   ├── entity            // 엔티티 (데이터베이스 모델)가 저장되는 곳
│   │   └── User.ts       // 샘플 엔티티
│   ├── migration         // 마이그레이션 파일이 저장되는 곳
│   ├── data-source.ts    // 데이터 소스 및 모든 연결 구성
│   └── index.ts          // 애플리케이션의 시작점
├── .gitignore            // 표준 gitignore 파일
├── package.json          // 노드 모듈 종속성
├── README.md             // 간단한 readme 파일
└── tsconfig.json         // TypeScript 컴파일러 옵션

기존 노드 프로젝트에서도 typeorm init을 실행할 수 있지만, 이미 가지고 있는 일부 파일을 덮어쓸 수 있으므로 주의해야합니다.

다음 단계는 새 프로젝트 종속성을 설치하는 것입니다:

cd MyProject
npm install

종속성을 모두 설치한 후, data-source.ts 파일을 편집하여 자신의 데이터베이스 연결 구성 옵션을 입력하세요:

export const AppDataSource = new DataSource({
    type: "postgres",
    host: "localhost",
    port: 5432,
    username: "test",
    password: "test",
    database: "test",
    synchronize: true,
    logging: true,
    entities: [Post, Category],
    subscribers: [],
    migrations: [],
})

일반적으로 대부분의 경우 host, username, password, database 및 필요에 따라 port 옵션만 구성하면 됩니다.

구성을 마치고 모든 노드 모듈이 설치되면 애플리케이션을 실행할 수 있습니다:

npm start

이것으로, 당신의 애플리케이션이 성공적으로 실행되고 데이터베이스에 새로운 사용자가 삽입됩니다. 이 프로젝트를 계속해서 작업하고 필요한 다른 모듈을 통합하고 더 많은 엔티티를 생성할 수 있습니다.

ESM 프로젝트를 생성하려면 다음과 같은 npx typeorm init --name MyProject --database postgres --module esm 명령을 실행할 수 있습니다.

Express가 설치된 더 발전된 프로젝트를 생성하려면 npx typeorm init --name MyProject --database mysql --express 명령을 실행할 수 있습니다.

docker-compose 파일을 생성하려면 npx typeorm init --name MyProject --database postgres --docker 명령을 실행할 수 있습니다.

0개의 댓글