Database
Database
Nestλ λͺ¨λ λ°μ΄ν°λ² μ΄μ€λ‘ λͺ¨νμ μμνλ λ° νμν μμ©κ΅¬λ₯Ό μ€μ΄κΈ° μν΄ @nestjs/typeorm
ν¨ν€μ§λ₯Ό μ¬μ©ν μ€λΉκ° λμ΄ μμ΅λλ€. TypeORMμ μ§κΈκΉμ§ μ¬μ© κ°λ₯ν κ°μ₯ μ±μν ORM (Object Relational Mapper)μ΄λ―λ‘ μ ννμ΅λλ€. TypeScriptλ‘ μμ±λμμΌλ―λ‘ Nest νλ μ μν¬μμ μ μλν©λλ€.
λ¨Όμ νμν λͺ¨λ μ’ μμ±μ μ€μΉν΄μΌν©λλ€.
info μλ¦Ό μ΄ μ₯μμλ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νμ§λ§ TypeORMμ PostgreSQL, SQLite λ° MongoDB (NoSQL)μ κ°μ λ€μν λ°μ΄ν°λ² μ΄μ€λ₯Ό μ§μν©λλ€.
μ€μΉ κ³Όμ μ΄ μλ£λλ©΄ TypeOrmModule
μ λ£¨νΈ ApplicationModule
λ‘ κ°μ Έμ¬ μ μμ΅λλ€.
forRoot()
λ©μλλ TypeORM ν¨ν€μ§μμ createConnection()
κ³Ό λμΌν κ΅¬μ± κ°μ²΄λ₯Ό λ°μ΅λλ€. λνforRoot()
μ 무μμ΄λ μ λ¬νλ λμ νλ‘μ νΈ λ£¨νΈ λλ ν 리μ ormconfig.json
νμΌμ λ§λ€ μ μμ΅λλ€.
κ·Έλ° λ€μ κ°λ¨ν κ΄νΈλ₯Ό λΉμ λ μ μμ΅λλ€.
κ·Έλ° λ€μ Connection
λ° EntityManager
λ₯Ό μ¬μ©νμ¬ λ€μκ³Ό κ°μ΄ μ 체 νλ‘μ νΈμ λ€λ₯Έ λͺ¨λμ κ°μ Έ μ€μ§ μκ³ μ½μ
ν μ μμ΅λλ€.
Repository pattern
TypeORMμ 리ν¬μ§ν 리 λμμΈ ν¨ν΄μ μ§μνλ―λ‘ κ° μν°ν°μλ μ체 리ν¬μ§ν λ¦¬κ° μμ΅λλ€. μ΄ λ¦¬ν¬μ§ν 리λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μμ μ»μ μ μμ΅λλ€.
첫째, μ°λ¦¬λ μ΅μν νλμ μν°ν°κ° νμν©λλ€. 곡μ λ¬Έμμμ Photo
μν°ν°λ₯Ό μ¬μ¬μ© ν κ²μ
λλ€.
Photo
μν°ν°λ photo
λλ ν 리μ μν©λλ€. μ΄ λλ ν 리λ PhotoModule
μ λνλ
λλ€. λͺ¨λΈ νμΌμ μ΄λμ 보κ΄ν μ§ κ²°μ ν΄μΌ ν©λλ€. μ°λ¦¬μ κ΄μ μμ, ν΄λΉ λͺ¨λ λλ ν 리μμ λλ©μΈ κ·Όμ²μ μ μ§νλ κ°μ₯ μ’μ λ°©λ²μ
λλ€.
PhotoModule
μ λ³΄κ² μ΅λλ€:
μ΄ λͺ¨λμ forFeature()
λ©μλλ₯Ό μ¬μ©νμ¬ νμ¬ λ²μμ λ±λ‘ν 리ν¬μ§ν 리λ₯Ό μ μν©λλ€. λλΆμ@InjectRepository()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ PhotoRepository
λ₯Ό PhotoService
μ μ£Όμ
ν μ μμ΅λλ€.
warning μλ¦Ό
PhotoModule
μ 루νΈApplicationModule
λ‘ κ°μ Έ μ€λ κ²μ μμ§ λ§μμμ€.
Multiple databases
μΌλΆ νλ‘μ νΈμλ μ¬λ¬ κ°μ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ νμν μ μμ΅λλ€. λ€ννλ μ΄ λͺ¨λμ μ¬μ©νμ¬ μ΄ μμ μ μνν μλ μμ΅λλ€. μ¬λ¬ μ°κ²°λ‘ μμ νλ €λ©΄ κ°μ₯ λ¨Όμ ν΄μΌ ν μΌμ ν΄λΉ μ°κ²°μ λ§λλ κ²μ λλ€. μ΄ κ²½μ° μ°κ²° μ΄λ¦μ΄ νμκ° λ©λλ€.
Person
μν°ν°μ Album
μν°ν°κ° μκ³ κ°κ° μ체 λ°μ΄ν°λ² μ΄μ€μ μ μ₯λμ΄ μλ€κ³ κ°μ νμμμ€.
warning μλ¦Ό μ°κ²°μ
name
μ μ€μ νμ§ μμΌλ©΄ μ΄λ¦μ΄default
λ‘ μ€μ λ©λλ€. μ΄λ¦μ΄ μκ±°λ μ΄λ¦μ΄ κ°μ μ¬λ¬ κ°μ μ°κ²°μ΄ μμ΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ λ¨μν 무μλ©λλ€.
μ΄ μμ μμ κ°κ°μ Photo
, Person
λ° Album
μν°ν°κ° μ체 μ°κ²°μ λ±λ‘λμ΄ μμ΅λλ€. μ΄ μ€μ μμλTypeOrmModule.forFeature()
ν¨μμ @InjectRepository()
λ°μ½λ μ΄ν°μκ² μ΄λ€ μ°κ²°μ μ¬μ©ν΄μΌ νλμ§ μλ € μ£Όμ΄μΌ ν©λλ€. μ°κ²° μ΄λ¦μ μ λ¬νμ§ μμΌλ©΄ default
μ°κ²°μ΄ μ¬μ©λ©λλ€.
μ£Όμ΄μ§ μ°κ²°μ λν΄ Connection
λλ EntityManager
λ₯Ό μ½μ
ν μλ μμ΅λλ€.
Testing
μμ© νλ‘κ·Έλ¨μ λ¨μ ν
μ€νΈνλ κ²½μ° μΌλ°μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ νΌνμ¬ ν
μ€νΈ μνΈλ₯Ό λ
립μ μΌλ‘ λ§λ€κ³ μ€ν νλ‘μΈμ€λ₯Ό κ°λ₯ν ν 빨리 λ§λλλ€. κ·Έλ¬λ ν΄λμ€λ μ°κ²° μΈμ€ν΄μ€μμ κ°μ Έμ¨ μ μ₯μμ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€. κ·ΈλΌ λμΌ? ν΄κ²°μ±
μ κ°μ§ μ μ₯μλ₯Ό λ§λλ κ²μ
λλ€. μ΄λ₯Ό λ¬μ±νκΈ° μν΄ μ»€μ€ν
곡κΈμλ₯Ό μ€μ ν΄μΌ ν©λλ€. μ€μ λ‘ λ±λ‘λ κ° μ μ₯μλEntityNameRepository
ν ν°μΌλ‘ νμλ©λλ€. μ¬κΈ°μ EntityName
μ μν°ν° ν΄λμ€μ μ΄λ¦μ
λλ€.
@nestjs/typeorm
ν¨ν€μ§λ μ£Όμ΄μ§ μν°ν°λ₯Ό κΈ°λ°μΌλ‘ μ€λΉλ ν ν°μ λ°ννλ getRepositoryToken()
ν¨μλ₯Ό μ 곡ν©λλ€.
μ΄μ νλ μ½λ© λ mockRepository
κ° PhotoRepository
λ‘ μ¬μ©λ©λλ€. 곡κΈμκ° @InjectRepository()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ PhotoRepository
λ₯Ό μμ²ν λλ§λ€ Nestλ λ±λ‘ λ mockRepository
κ°μ²΄λ₯Ό μ¬μ©ν©λλ€.
Custom repository
TypeORMμ μ¬μ©μ μ μ μ μ₯μλΌλ κΈ°λ₯μ μ 곡ν©λλ€. μ΄μ λν μμΈν λ΄μ©μ μ¬κΈ° νμ΄μ§λ₯Ό λ°©λ¬Ένμμμ€. κΈ°λ³Έμ μΌλ‘ μ¬μ©μ μ μ μ μ₯μλ₯Ό μ¬μ©νλ©΄ κΈ°λ³Έ μ μ₯μ ν΄λμ€λ₯Ό νμ₯νκ³ λͺ κ°μ§ νΉμν λ°©λ²μΌλ‘ μ΄λ₯Ό κ°νν μ μμ΅λλ€.
컀μ€ν
μ μ₯μλ₯Ό λ§λ€λ €λ©΄ @EntityRepository()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νκ³ Repository
ν΄λμ€λ₯Ό νμ₯νμμμ€.
info ννΈ
@EntityRepository()
μRepository
λ λͺ¨λtypeorm
ν¨ν€μ§μμ λμ΅λλ€.
ν΄λμ€κ° μμ±λλ©΄ λ€μ λ¨κ³λ μΈμ€ν΄μ€ν μ±
μμ Nestμ λ겨주λ κ²μ
λλ€. μ΄λ₯Ό μν΄ AuthorRepository
ν΄λμ€λ₯Ό TypeOrm.forFeature()
λ©μλμ μ λ¬ν΄μΌ ν©λλ€.
κ·Έλ° λ€μ λ€μ ꡬμ±μ μ¬μ©νμ¬ μ μ₯μλ₯Ό μ£Όμ νμμμ€.
Async configuration
λͺ¨λ μ΅μ
μ 미리 μ λ¬νλ λμ λΉλκΈ°μμΌλ‘ μ λ¬νλ €λ κ²½μ°κ° μ’
μ’
μμ΅λλ€. μ΄ κ²½μ° λΉλκΈ° λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λͺ κ°μ§ λ€μν λ°©λ²μ μ 곡νλ forRootAsync()
λ©μλλ₯Ό μ¬μ©νμμμ€.
κ°λ₯ν 첫 λ²μ§Έ λ°©λ²μ ν©ν 리 κΈ°λ₯μ μ¬μ©νλ κ²μ λλ€.
λΆλͺ
ν, μ°λ¦¬ ν©ν 리λ λ€λ₯Έ λͺ¨λ κ²μ²λΌ νλν©λλ€ ( λΉλκΈ°(aync)
μΌ μλ μκ³ μ£Όμ
(inject)
μ ν΅ν΄ μμ‘΄μ±μ μ£Όμ
ν μλ μμ΅λλ€).
λλ ν©ν 리 λμ ν΄λμ€λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μμ ꡬμ±μ TypeOrmModule
λ΄μμ TypeOrmConfigService
λ₯Ό μΈμ€ν΄μ€ν νκ³ μ΄λ₯Ό νμ©νμ¬ μ΅μ
κ°μ²΄λ₯Ό λ§λλλ€. TypeOrmConfigService
λ TypeOrmOptionsFactory
μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ ν©λλ€.
TypeOrmModule
λ΄μ TypeOrmConfigService
κ° μμ±λλ κ²μ λ°©μ§νκ³ λ€λ₯Έ λͺ¨λμμ κ°μ Έμ¨ μ 곡μλ₯Ό μ¬μ©νλ €λ©΄ useExisting
ꡬ문μ μ¬μ©ν μ μμ΅λλ€.
νλμ μ€μν μ°¨μ΄μ μΌλ‘ useClass
μ λμΌνκ² μλν©λλ€. TypeOrmModule
μ κ°μ Έμ¨ λͺ¨λμ μ‘°ννμ¬ μ΄λ―Έ μμ±λ ConfigService
λ₯Ό μ체μ μΌλ‘ μΈμ€ν΄μ€ννλ λμ μ¬μ¬μ©ν©λλ€.
Example
μ€μ μμ λ μ¬κΈ°μμ λ³Ό μ μμ΅λλ€.
Last updated
Was this helpful?