TransactionManager와 TransactionSynchronizationManager

랏 뜨·2025λ…„ 8μ›” 9일

πŸ”Ž Overview

Β νŠΈλžœμž­μ…˜μ€ 데이터λ₯Ό λ‹€λ£¨λŠ” κ°œλ°œμžμ—κ²ŒλŠ” λ—„λ ˆμ•Ό λ—„ 수 μ—†λŠ” 핡심 μš”μ†Œμ΄λ‹€.
ν•„μž μ—­μ‹œ νŠΈλžœμž­μ…˜μ˜ μ€‘μš”μ„±μ„ μ•ŒκΈ°μ—, νŠΈλžœμž­μ…˜μ˜ 이해와 ν™œμš© 방식 등에 λŒ€ν•΄μ„œ μ‹œκ°„μ„ 적지 μ•Šκ²Œ μ†Œμš”ν–ˆμ—ˆλ‹€.

Β κ·Έλ ‡κ²Œ νŠΈλžœμž­μ…˜μ— λŒ€ν•œ 이해도가 μƒλ‹Ήνžˆ μ˜¬λΌμ™”λ‹€κ³  μƒκ°ν•˜κ³  이전 ν”„λ‘œμ νŠΈλ“€μ„ μ§„ν–‰ν–ˆμ—ˆλ‹€. 도쀑에 ν—·κ°ˆλ¦¬λŠ” 뢀뢄듀도 μžˆμ—ˆμ§€λ§Œ, κ·Έλž˜λ„ ν”„λ‘œμ νŠΈ 진행쀑 μΆ”κ°€μ μœΌλ‘œ κ³΅λΆ€ν•΄λ‚˜κ°€λ©° λΆ€μ‘±ν•œ 뢀뢄을 잘 λ©”κΏ€ 수 μžˆμ—ˆλ‹€.

 졜근, μŠ€ν”„λ§μ„ λ”μš± 더 깊이 μ΄ν•΄ν•˜κ³  κΈ°μˆ μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ 유λͺ…ν•œ κΉ€μ˜ν•œλ‹˜μ˜ μŠ€ν”„λ§ κ°•μ˜λ₯Ό λ“€μœΌλ©° μ΄ν•΄ν•˜κ³  μžˆλ‹€.
ν•™μŠ΅ λ‚΄μš© 쀑 νŠΈλžœμž­μ…˜μ— λŒ€ν•œ λ‚΄μš©μ΄ λ‚˜μ™”λŠ”λ°, 기쑴에 μ•Œκ³  있던 것듀이 생각보닀 더 얕은 μ§€μ‹λ“€μ΄μ—ˆλ‹€λŠ” κ±Έ 느끼게 λ˜μ—ˆλ‹€.

Β νŠΈλžœμž­μ…˜μ˜ λ™μž‘ 원리와 흐름, κ·Έ μ•ˆμ—μ„œ μž‘λ™ν•˜λŠ” 것듀에 λŒ€ν•΄μ„œ μ’€ 더 깊게 κ³΅λΆ€ν•˜μ˜€κ³ , κ·Έ 뢀뢄에 λŒ€ν•΄μ„œ μ •λ¦¬ν•˜λŠ” μ‹œκ°„μ„ 가져보렀고 ν•œλ‹€.


1️⃣ PlatformTransactionManager

  • νŠΈλžœμž­μ…˜ λ§€λ‹ˆμ € μΈν„°νŽ˜μ΄μŠ€
  • μ—¬λŸ¬ DB λ“œλΌμ΄λ²„μ—μ„œ νŠΈλžœμž­μ…˜κ³Ό κ΄€λ ¨λœ κΈ°λŠ₯듀을 μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€κ³„λœ μŠ€ν”„λ§ μΈν„°νŽ˜μ΄μŠ€
    • JDBC , JPA λ“± νŠΉμ • κΈ°μˆ μ— μ’…μ†λ˜μ§€ μ•Šκ³  μΌκ΄€λœ λ°©μ‹μœΌλ‘œ νŠΈλžœμž­μ…˜ 관리 κ°€λŠ₯
    • JDBC 만 μ‚¬μš©ν•˜λ©΄ DataSourceTransactionManager κ°€, JPA λ₯Ό μ‚¬μš©ν•˜λ©΄ JpaTransactionManager κ°€ μžλ™μœΌλ‘œ μŠ€ν”„λ§ λΉˆμ— λ“±λ‘λ˜κ³  μ‚¬μš©
  • μ‹€μ œ νŠΈλžœμž­μ…˜μ˜ μ‹œμž‘ 및 생성, 컀밋, 둀백을 λ‹΄λ‹Ήν•˜λŠ” κ·Έμ•Όλ§λ‘œ 핡심 μΈν„°νŽ˜μ΄μŠ€
  • 물리 νŠΈλžœμž­μ…˜(μ™ΈλΆ€ νŠΈλžœμž­μ…˜)에 λŒ€ν•œ 관리λ₯Ό μ§„ν–‰

πŸ’ͺ μ—­ν• 

1. νŠΈλžœμž­μ…˜ μ‹œμž‘

  • getTransaction() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ μƒˆλ‘œ μƒμ„±ν•˜κ³ , ν•΄λ‹Ή 컀λ„₯μ…˜μ˜ autoCommit(false)λ₯Ό 호좜
    • getTansaction() λ©”μ„œλ“œ 생성 μ‹œ, νŠΈλžœμž­μ…˜μ— λŒ€ν•œ μ „νŒŒ, 격리 μˆ˜μ€€ λ“±μ˜ 좔가적인 쑰건을 μ„€μ •ν•œ νŠΈλžœμž­μ…˜μ„ 생성 κ°€λŠ₯
  • 이 컀λ„₯μ…˜μ„ TransactionSynchronizationManager 에 등둝
  • 이후 DB μž‘μ—… 호좜이 ν•„μš”ν•  땐 λ“±λ‘λœ 컀λ„₯μ…˜μ„ μ‚¬μš©ν•¨μœΌλ‘œ autoCommit(false) μƒνƒœ μœ μ§€

2. 컀밋

  • commit() λ©”μ„œλ“œλ‘œ νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  μž‘μ—…μ„ DB 에 영ꡬ 반영
  • 물리적 DB 컀밋

3. λ‘€λ°±

  • rollback() λ©”μ„œλ“œλ‘œ νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  μž‘μ—… λ‘€λ°±
  • 물리적 DB λ‘€λ°±

4. μžμ› 관리

  • 컀밋, λ‘€λ°± 이후, 컀λ„₯μ…˜μ˜ autoCommit(true) λ₯Ό 호좜
  • νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €μ— λ“±λ‘λœ ν˜„μž¬ 컀λ„₯μ…˜μ„ 컀λ„₯μ…˜ ν’€λ‘œ λ°˜ν™˜


2️⃣ TransactionSynchronizationManager

  • νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €
  • ν˜„μž¬ μŠ€λ ˆλ“œμ—μ„œ μ§„ν–‰ 쀑인 νŠΈλžœμž­μ…˜μ— λŒ€ν•œ 정보λ₯Ό κ΄€λ¦¬ν•˜κ³ , ν•΄λ‹Ή 컀λ„₯μ…˜μ„ λ™κΈ°ν™”ν•˜λŠ” μ—­ν•  λ‹΄λ‹Ή
    • ν•΄λ‹Ή νŠΈλžœμž­μ…˜ 정보듀은 ThreadLocal 을 톡해 λ”°λ‘œ 보관
    • @Component 같은 μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ 직접 λ“±λ‘ν•˜λŠ” 일반적인 빈이 μ•„λ‹ˆλΌ, μŠ€ν”„λ§ μžμ²΄μ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€μ— κ·Όμ ‘
  • 논리 νŠΈλžœμž­μ…˜(λ‚΄λΆ€ νŠΈλžœμž­μ…˜)에 λŒ€ν•œ 관리λ₯Ό μ§„ν–‰
    • νŠΈλžœμž­μ…˜ μ»¨ν…μŠ€νŠΈλ₯Ό μŠ€λ ˆλ“œ λ‹¨μœ„λ‘œ 관리

πŸ’ͺ μ—­ν• 

1. ThreadLocal 관리

  • ν˜„μž¬ μŠ€λ ˆλ“œμ˜ νŠΈλžœμž­μ…˜ κ΄€λ ¨ 정보 바인딩 및 ν•΄μ œ
    • νŠΈλžœμž­μ…˜ 객체, 컀λ„₯μ…˜, rollbackOnly ν”Œλž˜κ·Έ ...

2. λ‘€λ°± μ „μš© ν”Œλž˜κ·Έ 관리

  • λ©”μ„œλ“œμ—μ„œ μ˜ˆμ™Έ λ°œμƒ μ‹œ setRollbackOnly() λ©”μ„œλ“œλ‘œ ν˜„μž¬ νŠΈλžœμž­μ…˜μ„ λ‘€λ°± μ „μš© νŠΈλžœμž­μ…˜μœΌλ‘œ λ§ˆν‚Ή
    • 이후 νŠΈλžœμž­μ…˜ λ§€λ‹ˆμ €λŠ” rollbackOnly ν”Œλž˜κ·Έ 유무λ₯Ό ν™•μΈν•œ ν›„ 컀밋 λ˜λŠ” λ‘€λ°± μ§„ν–‰

3. νŠΈλžœμž­μ…˜ 정보 확인

  • isActualTransactionActive() , isNewTransaction() λ“±, ν˜„μž¬ μž‘μ—… 쀑인 νŠΈλžœμž­μ…˜μ— λŒ€ν•œ 정보λ₯Ό 확인 κ°€λŠ₯

πŸ’Ύ TreadLocal μ €μž₯ ν•„λ“œ

1. TransactionStatus

  • ν˜„μž¬ νŠΈλžœμž­μ…˜μ˜ μƒνƒœλ₯Ό μ €μž₯ν•˜λŠ” 객체
  • νŠΈλžœμž­μ…˜μ˜ ν™œμ„± μƒνƒœ, λ‘€λ°± μ „μš© ν‘œμ‹œ, 컀밋/λ‘€λ°± μ—¬λΆ€, μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μΈμ§€ μ—¬λΆ€ λ“±μ˜ 정보 포함

2. Connection

  • DB μ™€μ˜ μ‹€μ œ 연결을 μ§„ν–‰ν•˜λŠ” Connection 객체
    • μŠ€ν”„λ§μ€ 기본적으둜 HikariCP 컀λ„₯μ…˜ 풀을 μ‚¬μš©
    • 컀λ„₯μ…˜ ν’€μ—μ„œ μž„μ˜μ˜ 컀λ„₯μ…˜μ„ 선택 ν›„ 등둝
  • ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œλŠ” λ°˜λ“œμ‹œ, λͺ¨λ“  DB μž‘μ—…μ—μ„œ 이 λ™μΌν•œ 컀λ„₯μ…˜ μ‚¬μš©
    • 데이터 μ •ν•©μ„± 보μž₯

3. EntityManager

  • νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λ  λ•Œ, νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €λŠ” EntityManagerFactory μ—μ„œ μƒˆλ‘œμš΄ Entitymanager μΈμŠ€ν„΄μŠ€ 생성
    • EntityManagerFactory λŠ” 싱글톀 빈으둜 λ“±λ‘λœ 객체
    • μ—¬κΈ°μ„œ λ§€ μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ EntityManager λ₯Ό μƒμ„±ν•˜λ―€λ‘œ, EntityManager λŠ” 싱글톀이 μ•„λ‹˜
  • μƒμ„±λœ EntityManager λ₯Ό ThreadLocal 에 μ €μž₯
    • EntityManager λŠ” ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ˜ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ λ‹΄λ‹Ή
    • JPA μ—μ„œ EntityManager λŠ” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ™€ 기본적으둜 1:1둜 맀칭되기 λ•Œλ¬Έ

πŸ’‘ μ „νŒŒ μˆ˜μ€€μ— λ”°λ₯Έ rollbackOnly ν”Œλž˜κ·Έ

  • rollbackOnly ν”Œλž˜κ·ΈλŠ” 'ν˜„μž¬ νŠΈλžœμž­μ…˜μ΄ μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μΈκ°€' λ₯Ό κΈ°μ€€μœΌλ‘œ μž‘λ™
    • isNewTransaction() == true :
      • 독립적인 νŠΈλžœμž­μ…˜, 즉 ν•˜λ‚˜μ˜ 물리적 νŠΈλžœμž­μ…˜ 으둜 νŒλ‹¨
      • ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜λ©΄, rollbackOnly ν”Œλž˜κ·Έ 체크 ν›„ μ‹€μ œ 컀밋 μ§„ν–‰
      • ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ΄ 둀백되면, setRollbackOnly() λ₯Ό ν•˜μ§€ μ•Šκ³  λ°”λ‘œ 물리 DB λ‘€λ°± μ§„ν–‰
    • isNewTransaction() == false :
      - 기쑴에 μ‘΄μž¬ν•˜λ˜ νŠΈλžœμž­μ…˜μ— ν•©λ₯˜, μƒˆλ‘œμš΄ 논리적 νŠΈλžœμž­μ…˜
      - ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜λ©΄, λ°”λ‘œ λ‹€μŒ μ‹œν€€μŠ€ μ§„ν–‰
      - ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ΄ 둀백되면, νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €μ— rollbackOnly() ν”Œλž˜κ·Έλ₯Ό true 둜 λ³€κ²½, 이후 ν•΄λ‹Ή 논리 νŠΈλžœμž­μ…˜μ΄ ν¬ν•¨λœ 물리 νŠΈλžœμž­μ…˜ 전체λ₯Ό λ‘€λ°±


3️⃣ νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ € - REQUIRES_NEW

  1. νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €λŠ” 기본적으둜 1개의 컀λ„₯μ…˜λ§Œμ„ 관리

  2. REUIQRES_NEW 둜 μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰λ˜λ©΄, ThreadLocal 에 μ €μž₯된 κΈ°μ‘΄ νŠΈλžœμž­μ…˜ 정보λ₯Ό λ‚΄λΆ€ μŠ€νƒμ— μž„μ‹œλ‘œ μ €μž₯
    • ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ€ Thread μ—μ„œμ˜ λΈ”λ‘œν‚Ή 처럼, 이후 νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜κΈ° μ „κΉŒμ§€ λŒ€κΈ°
    • 이후 νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜μ§€ μ•ŠμœΌλ©΄ 이후 μž‘μ—… λΆˆκ°€λŠ₯

  3. νŠΈλžœμž­μ…˜ λ§€λ‹ˆμ €κ°€ μƒˆλ‘œμš΄ 컀λ„₯μ…˜μ„ 생성, λ™μΌν•˜κ²Œ autoCommit(false) 둜 μ„€μ • ν›„ νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €μ˜ ThreadLocal 에 바인딩
    • 이 κ³Όμ •μ—μ„œ κΈ°μ‘΄ ThreadLocal νŠΈλžœμž­μ…˜ 정보λ₯Ό μƒˆλ‘œμš΄ 컀λ„₯μ…˜μ˜ νŠΈλžœμž­μ…˜ μ •λ³΄λ‘œ μ˜€λ²„λΌμ΄λ”©
    • 이후 μ§„ν–‰λ˜λŠ” DB μž‘μ—…μ€, 이 μƒˆλ‘œ ν• λ‹Ήλœ 컀λ„₯μ…˜μ„ 톡해 μ§„ν–‰

  4. μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ 컀밋, 둀백되면 μ΄λŠ” ν•˜λ‚˜μ˜ 독립적인 νŠΈλžœμž­μ…˜μ΄λ―€λ‘œ λ°”λ‘œ DB 에 반영, 이후 컀λ„₯μ…˜ ν’€λ‘œ 컀λ„₯μ…˜ λ°˜ν™˜

  5. νŠΈλžœμž­μ…˜ 동기화 λ§€λ‹ˆμ €λŠ” μž„μ‹œ μŠ€νƒμ— μ €μž₯λ˜μ–΄ 있던 κΈ°μ‘΄ νŠΈλžœμž­μ…˜ 정보λ₯Ό ThreadLocal 에 리바인딩 ν›„ λŒ€κΈ° μ€‘μ΄λ˜ 이전 νŠΈλžœμž­μ…˜ μ§„ν–‰


4️⃣ TransactionDefinition

  • νŠΈλžœμž­μ…˜ 행동 κ·œμΉ™ μ •μ˜ μΈν„°νŽ˜μ΄μŠ€
  • νŠΈλžœμž­μ…˜ λ§€λ‹ˆμ €μ˜ getTransaction() λ©”μ„œλ“œμ˜ νŒŒλΌλ―Έν„°μ— λ“±λ‘ν•˜μ—¬, μ›ν•˜λŠ” νŠΈλžœμž­μ…˜ 속성을 μ μš©μ‹œν‚¬ 수 있음
  • 일반적으둜 κΈ°λ³Έ κ΅¬ν˜„μ²΄μΈ DefaultTransactionDefinition ν˜Ήμ€ λͺ‡ κ°€μ§€ κΈ°λŠ₯이 μΆ”κ°€λœ DefaultTransactionAttributes() κ΅¬ν˜„μ²΄λ₯Ό 등둝
  • ex)

    // νŠΈλžœμž­μ…˜ 행동 κ·œμΉ™ 객체 (ν˜„μž¬ κΈ°λ³Έ κ΅¬ν˜„μ²΄)
    DefaultTransactionDefinition definition = new DefaultTransactionAttributes();
    
    // νŠΈλžœμž­μ…˜ λ§€λ‹ˆμ €λŠ” ν•΄λ‹Ή κ·œμΉ™μ΄ 적용된 νŠΈλžœμž­μ…˜ 생성
    PlatformTransactionManager txManager = new JpaTransactionManager(definition);

πŸ—‚οΈ 등둝 속성

1. μ „νŒŒ(Propagation)

// μ „νŒŒ 속성 λ³€κ²½ (Default : PROPAGATION_REQUIRED)
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

2. 격리 μˆ˜μ€€(Isolation Level)

// 격리 μˆ˜μ€€ λ³€κ²½ (DEFAULT :
//		MySQL : ISOLATION_REPEATABLE_READ	νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ 같은 데이터λ₯Ό λͺ‡ 번 읽어도 λ™μΌν•œ κ²°κ³Ό 보μž₯
//		일반 DB : ISOLATION_READ_COMMITED	   μ»€λ°‹λœ λ°μ΄ν„°λ§Œ 읽기 κ°€λŠ₯
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITED)

3. νƒ€μž„μ•„μ›ƒ(Timeout)

// νŠΈλžœμž­μ…˜ μ™„λ£ŒκΉŒμ§€μ˜ μ΅œλŒ€ ν—ˆμš© μ‹œκ°„ λ³€κ²½ (Default : -1, νƒ€μž„μ•„μ›ƒ μ—†μŒ)
definition.setTimeout(30);		// νŠΈλžœμž­μ…˜μ΄ 30초λ₯Ό μ΄‰κ³Όν•˜λ©΄ λ‘€λ°±
  • νŠΈλžœμž­μ…˜μ΄ μ§€μ •λœ μ‹œκ°„μ„ λ„˜μœΌλ©΄ λ‘€λ°±

4. 읽기 μ „μš©(Read-Only)

// 읽기 μ „μš© νŠΈλžœμž­μ…˜μž„μ„ λͺ…μ‹œ (Default : false)
// @Transactional(readOnly = true) κ³Ό 동일
definition.setReadOnly(true);
  • 읽기 μ „μš© νŠΈλžœμž­μ…˜μ€ μ‘°νšŒμ— νŠΉν™”λœ νŠΈλžœμž­μ…˜
  • 데이터 변경이 λΆˆκ°€λŠ₯ν•˜λ©°, 그만큼 μ‘°νšŒμ—μ„œ μ„±λŠ₯상 유리

πŸ’‘ 읽기 μ „μš© νŠΈλžœμž­μ…˜μ˜ 쑰회 μ„±λŠ₯ μ΅œμ ν™”

1. JPA/Hibernate μ΅œμ ν™”

  • ORM ν”„λ ˆμž„μ›Œν¬λŠ” μŠ€λƒ…μƒ·μ„ μœ μ§€ν•˜κ³  더티 체킹을 μˆ˜ν–‰ν•˜λŠ” 것이 κΈ°λ³Έ
  • 읽기 μ „μš© νŠΈλžœμž­μ…˜μ€ μŠ€λƒ…μƒ·μ„ μƒμ„±ν•˜μ§€ μ•Šκ³  더티 체킹도 μƒλž΅
    • μŠ€λƒ…μƒ· λ―Έμƒμ„±μœΌλ‘œ μΈν•œ λ©”λͺ¨λ¦¬ μ ˆμ•½
    • 더티 체킹 μƒλž΅μœΌλ‘œ μΈν•œ 처리 속도 ν–₯상

2. DB λ“œλΌμ΄λ²„ μ΅œμ ν™”

  • Write Lock μƒλž΅
    • 일반적인 νŠΈλžœμž­μ…˜μ€ λ™μ‹œμ„±μ„ κ³ λ €ν•˜μ—¬, 데이터 λ³€κ²½ μ‹œ Write Lock을 νšλ“ν•΄μ•Ό 함
    • 읽기 μ „μš© νŠΈλžœμž­μ…˜μ€ Lock νšλ“ 과정을 μƒλž΅ κ°€λŠ₯
    • 병λͺ© ν˜„μƒ μ €ν•˜ 및 νŠΈλžœμž­μ…˜ 처리 속도 ν–₯상
  • 캐싱 μ΅œμ ν™”
    • λ‚΄λΆ€ 캐싱 λ©”μ»€λ‹ˆμ¦˜ μ΅œμ ν™” κ°€λŠ₯
    • 컀λ„₯μ…˜ ν’€ λ¦¬μ†ŒμŠ€λ₯Ό 더 효율적으둜 κ΄€λ¦¬ν•˜μ—¬ μ‹œμŠ€ν…œ μ„±λŠ₯ ν–₯상 κ°€λŠ₯

3. 볡제 ν™˜κ²½(Replication) μ΅œμ ν™”

  • 읽기 λΆ€ν•˜ λΆ„μ‚°
    • Master-Slave ꡬ쑰의 DB 볡제 ν™˜κ²½μ—μ„œλŠ” 일반적으둜, Master DB λŠ” μ“°κΈ° λ‹΄λ‹Ήλ§Œ, Slave DB λŠ” 읽기 λ‹΄λ‹Ήλ§Œ ν•˜λ„λ‘ λΆ„μ‚° 처리
    • 읽기 μ „μš© νŠΈλžœμž­μ…˜μ€ μš”μ²­μ„ Slave DB 둜 μžλ™ λΌμš°νŒ… κ°€λŠ₯
  • Master DB λΆ€ν•˜ κ°μ†Œ
    • 읽기 μš”μ²­μ„ Slave DB 둜 λΆ„μ‚°μ‹œν‚΄μœΌλ‘œ, Master DB λŠ” 였직 λ³€κ²½ μž‘μ—…μ—λ§Œ 집쀑 κ°€λŠ₯
    • Master DB 의 λΆ€ν•˜λ₯Ό 크게 μ€„μž„μœΌλ‘œμ¨, DB 의 μ•ˆμ •μ„±μ„ 높이고, μ“°κΈ° μ„±λŠ₯의 ν–₯상을 보μž₯ κ°€λŠ₯
  • ν™•μž₯μ„± ν–₯상
    • 쑰회 μš”μ²­μ΄ λ§Žμ•„μ§€λ”λΌλ„, Slave DB μ„œλ²„ μΆ”κ°€λ§ŒμœΌλ‘œ μ„œλ²„ μ•ˆμ •ν™” 및 μ„±λŠ₯ ν™•μž₯ κ°€λŠ₯


κ²€μˆ˜) Google Gemini ( https://gemini.google.com/app )

profile
기둝

0개의 λŒ“κΈ€