Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 9. νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ

hello_u 2023. 3. 25. 16:48

 

νŠΈλžœμž­μ…˜ μ‚¬μš© μ½”λ“œ

//νŠΈλžœμž­μ…˜ μ‹œμž‘
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());

  try {
    //λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
   bizLogic(fromId, toId, money);
   transactionManager.commit(status); //μ„±κ³΅μ‹œ 컀밋
   } catch (Exception e) {
       transactionManager.rollback(status); //μ‹€νŒ¨μ‹œ λ‘€λ°±
      throw new IllegalStateException(e);
   }

 

νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•˜λŠ” λ‘œμ§μ„ μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό 같은 νŒ¨ν„΄μ΄ λ°˜λ³΅λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

 

이런 ν˜•νƒœλŠ” 각각의 μ„œλΉ„μŠ€μ—μ„œ λ°˜λ³΅λœλ‹€. λ‹¬λΌμ§€λŠ” 뢀뢄은 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 뿐이닀.

 

이럴 λ•Œ ν…œν”Œλ¦Ώ 콜백 νŒ¨ν„΄μ„ ν™œμš©ν•˜λ©΄ 이런 반볡 문제λ₯Ό κΉ”λ”ν•˜κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

 

 

 

νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ

 

TransactionTemplate λΌλŠ” ν…œν”Œλ¦Ώ 클래슀λ₯Ό 제곡

 

public MemberServiceV3_2(PlatformTransactionManager transactionManager,
                   MemberRepositoryV3 memberRepository) {
   this.txTemplate = new TransactionTemplate(transactionManager);
   this.memberRepository = memberRepository;
}

 

TransactionTemplate 을 μ‚¬μš©ν•˜λ €λ©΄ transactionManager κ°€ ν•„μš”ν•˜λ‹€.

 

μƒμ„±μžμ—μ„œ transactionManager λ₯Ό μ£Όμž… λ°›μœΌλ©΄μ„œ TransactionTemplate 을 μƒμ„±ν–ˆλ‹€.

 

 

 

νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ μ‚¬μš© 둜직

    txTemplate.executeWithoutResult((status) -> {
      try {
//λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
         bizLogic(fromId, toId, money);
      } catch (SQLException e) {
         throw new IllegalStateException(e);
      }
   });

νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ 덕뢄에 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³ , μ»€λ°‹ν•˜κ±°λ‚˜ λ‘€λ°±ν•˜λŠ” μ½”λ“œκ°€ λͺ¨λ‘ μ œκ±°λ˜μ—ˆλ‹€.

 

νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώμ˜ κΈ°λ³Έ λ™μž‘μ€ λ‹€μŒκ³Ό κ°™λ‹€.

 

λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 정상 μˆ˜ν–‰λ˜λ©΄ μ»€λ°‹ν•œλ‹€.


언체크 μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ λ‘€λ°±ν•œλ‹€.

 

 

 

정리

νŠΈλžœμž­μ…˜ ν…œν”Œλ¦Ώ 덕뢄에, νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•  λ•Œ λ°˜λ³΅ν•˜λŠ” μ½”λ“œλ₯Ό μ œκ±°ν•  수 μžˆμ—ˆλ‹€.

 


ν•˜μ§€λ§Œ 이곳은 μ„œλΉ„μŠ€ 둜직인데 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 뿐만 μ•„λ‹ˆλΌ νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” 기술 둜직이 ν•¨κ»˜ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.


μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” λ‘œμ§μ„ 핡심 κΈ°λŠ₯κ³Ό λΆ€κ°€ κΈ°λŠ₯으둜 κ΅¬λΆ„ν•˜μžλ©΄

 

μ„œλΉ„μŠ€ μž…μž₯μ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ 핡심 κΈ°λŠ₯이고, νŠΈλžœμž­μ…˜μ€ λΆ€κ°€ κΈ°λŠ₯이닀.


μ΄λ ‡κ²Œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” 기술 둜직이 ν•œ 곳에 있으면 두 관심사λ₯Ό ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ μ²˜λ¦¬ν•˜κ²Œ λœλ‹€.

 

결과적으둜 μ½”λ“œλ₯Ό μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ–΄λ €μ›Œμ§„λ‹€.


μ„œλΉ„μŠ€ λ‘œμ§μ€ 가급적 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직만 μžˆμ–΄μ•Ό ν•œλ‹€.

 

ν•˜μ§€λ§Œ νŠΈλžœμž­μ…˜ κΈ°μˆ μ„ μ‚¬μš©ν•˜λ €λ©΄ μ–΄μ©” 수 없이 νŠΈλžœμž­μ…˜ μ½”λ“œκ°€ λ‚˜μ™€μ•Ό ν•œλ‹€.

 

 

 

 

μ–΄λ–»κ²Œ ν•˜λ©΄ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ„κΉŒ?

 

μ„œλΉ„μŠ€ 계측에 μˆœμˆ˜ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직만 λ‚¨κΈ΄λ‹€λŠ” λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” 

 

μŠ€ν”„λ§ AOPλ₯Ό 톡해 ν”„λ‘μ‹œλ₯Ό λ„μž…ν•˜λ©΄ 문제λ₯Ό κΉ”λ”ν•˜κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

 

μŠ€ν”„λ§ DB 1편 - 데이터 μ ‘κ·Ό 핡심 원리 - μΈν”„λŸ° | κ°•μ˜

λ°±μ—”λ“œ κ°œλ°œμ— ν•„μš”ν•œ DB 데이터 μ ‘κ·Ό κΈ°μˆ μ„ κΈ°μ΄ˆλΆ€ν„° μ΄ν•΄ν•˜κ³ , μ™„μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술의 원리와 ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κ³ , 더 κΉŠμ΄μžˆλŠ” λ°±μ—”λ“œ 개발자둜 μ„±μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€., - κ°•μ˜

www.inflearn.com