데이터 지속성 관리
μ΄ μΉμ μμλ Linoκ° Entity Framework Coreλ₯Ό μ΄λ»κ² ꡬμ±νμ¬ λλ©μΈ κ³μΈ΅μ΄ μμ ν 격리λ μνλ‘ μ μ§λκ³ λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ νλ‘μΈμ€κ° μμΈ‘ κ°λ₯νλ©° μ μ΄λλμ§ λ°°μ°κ² λ©λλ€ β μ ν΅μ μΈ λͺ¨λ리μ μλΉμ€λ λͺ¨λμ μλΉμ€λ μκ΄μμ΅λλ€.
lino new service λͺ λ Ήμ΄λ‘ μλΉμ€λ₯Ό μμ±ν λ CLIλ λ κ°μ§ μ€μν κ²°μ μ μμ²ν©λλ€:
- μν€ν μ² β μ ν΅μ μΈ μλΉμ€ λλ λͺ¨λν μλΉμ€.
- λ°μ΄ν° 곡κΈμ β
SqlServer
λλPostgreSql
(ν₯ν λ²μ μμ λ€λ₯Έ 곡κΈμκ° μΆκ°λ μμ μ λλ€).
μ ν΅μ μΈ(λͺ¨λ리μ) μλΉμ€λ λͺ¨λν(λͺ¨λ리μ λͺ¨λ) μλΉμ€ λͺ¨λ μλΉμ€λΉ λ¨μΌ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν©λλ€. κ·Έλ¬λ λͺ¨λν μλΉμ€μμλ κ° λͺ¨λμ΄ λμΌν λ°μ΄ν°λ² μ΄μ€ λ΄μ λ³λ μ€ν€λ§μ λ§€νλ©λλ€. μ΄λ κ° bounded contextκ° λ³λμ λ Όλ¦¬μ λ€μμ€νμ΄μ€λ₯Ό μ μ§νμ¬ κΈ°λ₯μ 격리, λ 립μ λ²μ κ΄λ¦¬ λ° λ μ‘°μ§μ μ΄κ³ μμ ν λ§μ΄κ·Έλ μ΄μ μ 보μ₯ν©λλ€.
μν°ν° νμ ꡬμ±
Linoλ PersistenceβIgnorant μμΉμ λ°λ¦
λλ€: λλ©μΈ μν°ν°λ μΈνλΌ μΈλΆ μ¬νμ μμ§ λͺ»ν©λλ€.
μ΄λ₯Ό μν΄ λͺ¨λ ORM λ§€νμ IEntityTypeConfiguration<T>
λ₯Ό ꡬννλ ν΄λμ€μ μμΉνλ©°, Configurations/<EntityName>Configuration.cs
μ μ μ₯λ©λλ€.
- κ° μν°ν°λ μ μ© κ΅¬μ± νμΌμ κ°μ§λλ€.
- μ μ κ·μΉ(μ:
decimal(18,2)
, μ λ ¬,DateTime
μutc
λ‘ μ§μ )μModelConfiguration
μ μ€μ μ§μ€νν μ μμ΅λλ€. - ꡬμ±μ
DbContext
μOnModelCreating
μμmodelBuilder.ApplyConfigurationsFromAssembly(...)
λ₯Ό ν΅ν΄ μ μ©λ©λλ€.
DbContexts
DbContext
λ μ ν리μΌμ΄μ
μ νΈλμμ
λ¨μλ₯Ό λνλ
λλ€. Linoλ μλμΌλ‘ μμ±ν©λλ€:
- μ ν΅μ μΈ μλΉμ€ β λͺ¨λ
DbSet<TEntity>
λ₯Ό ν¬ν¨νλ λ¨μΌAppDbContext
. - λͺ¨λν μλΉμ€ β κ° bounded contextλ§λ€ λ³λμ
<Module>DbContext
. μ΄λ κ² νλ©΄ κ° λͺ¨λμ΄ λ λΉ λ₯΄κ² μ»΄νμΌλκ³ , λ§μ΄κ·Έλ μ΄μ μ¬μ΄ν΄μ΄ μ§§μμ§λ©°, λ³ν© μΆ©λ μνμ΄ μ€μ΄λλλ€.
λͺ¨λ DbContext
λ <Module>/Infrastructure.Persistence
μ λ±λ‘λκ³ , IUnitOfWork
λ₯Ό ν΅ν΄ λ
ΈμΆλλ©°, dependency injection
μΌλ‘ ν΄κ²°λ©λλ€.
λ ν¬μ§ν 리
ꡬ체μ μΈ λ ν¬μ§ν 리λ <Module>/Infrastructure.Persistence.Repositories
μ μμΉνλ©° <Module>/Domain.Repositories
λ€μμ€νμ΄μ€μ μ μλ μΈν°νμ΄μ€λ₯Ό ꡬνν©λλ€.
κ° λ ν¬μ§ν 리λ:
- 볡μ‘ν 쿼리(LINQ,
FromSql
, DTO νλ‘μ μ )λ₯Ό μΊ‘μνν©λλ€. - λλ©μΈμ νμν λ©μλλ§ λ ΈμΆν©λλ€ (μ κ·Έλ¦¬κ±°νΈ λ£¨νΈ μ€μ¬).
μ λ μ€λΈ μν¬ (Unit of Work)
μ λ μ€λΈ μν¬λ μ¬λ¬ 리ν¬μ§ν 리λ₯Ό μ‘°μ νλ νΈλμμ
κ²½κ³ μν μ νμ¬ λͺ¨λ μμ
μ΄ μμμ μΌλ‘ μ€νλλλ‘ λ³΄μ₯ν©λλ€.
κ°λ¨ν μλ리μ€μμλ DbContext
μμ²΄λ‘ μΆ©λΆν κ²½μ°κ° λ§μ΅λλ€. κ·Έλ¬λ Linoλ λ λ§μ μ μ΄μ μ μ°μ±μ μ 곡νλ μ μ© κ΅¬ν(UnitOfWork
)μ μμ±ν©λλ€.
- νμν κ²½μ°
BeginTransaction
,Commit
,Rollback
μ ν΅ν΄ μλμΌλ‘ νΈλμμ μ μ μ΄ν μ μμ΅λλ€. - νμ¬ νΈλμμ
λ΄μμ λλ©μΈ μ΄λ²€νΈλ₯Ό κ²μνμ¬ λμΌν
commit
μ¬μ΄ν΄ λ΄μμ μ€νλλλ‘ λ³΄μ₯ν©λλ€. - μμλ°μ€μ ν΅ν© μ΄λ²€νΈλ₯Ό μ§μνμ¬ νΈλμμ μμλ°μ€ ν¨ν΄μ λ°λ₯΄λ©°, λΆμ° μν€ν μ² μλ리μ€μμ μ λ’°ν μ μλ μ λ¬μ 보μ₯ν©λλ€(μ μ© κ°λ₯ν κ²½μ°).
λ§μ΄κ·Έλ μ΄μ κ΄λ¦¬
Linoλ Entity Framework Coreμ ν¨κ» λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ νλ‘μΈμ€λ₯Ό μμ ν κ°μννκ³ μλννμ¬ λ°λ³΅ μμ κ³Ό μΌλ°μ μΈ λΆμΌμΉ μνμ μ κ±°ν©λλ€. μ λ§μ΄κ·Έλ μ΄μ μ μμ±νλ €λ©΄ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννμΈμ:
lino database migrations add
λͺ λ Ήμ μ€ννλ©΄ μΈν°λν°λΈ λμ°λ―Έκ° λ€μ μ 보λ₯Ό μμ²ν©λλ€:
- μλΉμ€ — λ§μ΄κ·Έλ μ΄μ μ΄ μ μ©λ νλ‘μ νΈ μ΄λ¦μ λλ€.
- λͺ¨λ — (λͺ¨λν μλΉμ€μμλ§) λ³κ²½ μ¬νμ΄ μν λͺ¨λμ λλ€.
-
λ§μ΄κ·Έλ μ΄μ
μ΄λ¦ — λ³κ²½ λ΄μ© μ€λͺ
μ μ
λ ₯νμΈμ (μ:
AddCustomerIsActive
). Linoλ.sql
μ€ν¬λ¦½νΈλ₯Ό μμ±ν λ νμ¬ λ²μ κ³Ό μ¦κ° μμλ₯Ό μλμΌλ‘ κ΄λ¦¬νλ©°, λ€μ ν¨ν΄μ λ°λ¦ λλ€:/Scripts/v1.2.3/001_AddCustomerIsActive.sql
.
.cs
νμΌ μΈμλ Linoλ DDL λͺ
λ Ήμ΄κ° ν¬ν¨λ ν΄λΉ .sql
μ€ν¬λ¦½νΈλ₯Ό μλμΌλ‘ μμ±ν©λλ€.
μ΄λ λ³κ²½ μ¬νμ μλμΌλ‘ μ€ννκ±°λ μΈνλΌ ν λ° DBAκ° κ²ν νκΈ° μ½κ² ν©λλ€.