분류 전체보기 954

59. 트랜잭션 전파 활용 6

그럼 만약, 위의 상황에서 MemberService에서 try catch로 에러를 잡아서 복구시키려 한다면? 우선 트랜잭션에 대한 rollbackOnly를 풀어야 할 듯? 뭐 쓰레드로컬로 접근해서 가져오는 거니, 따로 생성하는게 아니라 static? 그런 것에 접근할 듯? 일단 비즈니스에 예를 들면, 회원가입을 하는 데 만약 로그남기는 것에서 오류가 발생해서 회원가입을 못하게 하면.. 정말 비즈니스 적으로 비효율적이다. 이럴경우, LogRepository에서 예외를 일으켜 rollback을 해도, 저녀석만 rollback하고 나머지는 제대로 Member 등록이 되도록 하는 게 좋다. 근데 일단, 그냥 LogRepository의 save의 트랜잭션 옵션을 REQUIRES_NEW로 하면 된다. 그럼 트랜잭션..

58. 트랜잭션 전파 활용 5

전은 commit의 경우만 알아봤는데, 이제 rollback의 경우를 직접 실습해 보자. REQUIRED이므로 묶여져 있다고 생각하고, 하나만 rollback이 되도 모두 rollback이다. 롤백 시 내부 트랜잭션들은 rollback해도 물리 트랜잭션을 rollback하는 것이 아니라 rollbackOnly로 마크를 새겨둠. 저 커넥션? 트랜잭션 동기화 매니저? 에다가. 외부 트랜잭션이 commit이나 rollback 해야 진짜 commit이나 rollback임.

57. 트랜잭션 전파 활용 4

이제야 본격적으로 트랜잭션 전파를 활용하기 시작했다. 리마인드 시켜보자면, 트랜잭션을 논리 트랜잭션과 물리 트랜잭션이라는 관점으로 나누면 상당히 관리하기가 편하다. 논리 트랜잭션은 말 그대로 어떤 논리적인 트랜잭션, 어.. 논리적이지, 실제로는 적용을 아직 안 했을 수도 있다는 그런 뜻이다. 논리적으로는 적용을 한 것이다. 물리 트랜잭션은 실제 물리적으로 트랜잭션을 적용 하는 것 이다. 그리고, 이 물리 트랜잭션은 가장 외부의 트랜잭션이나, REQUIRE_NEW 해서 새롭게 트랜잭션을 생성한 트랜잭션이나, 여튼 첫번째 트랜잭션만이 이 물리 트랜잭션을 다룰 수 있다. 이 물리 트랜잭션이 commit 혹은 rollback을 해야 비로소 진정 트랜잭션이 끝나는 것이다. 다른 것은 그냥 논리적으로 commit을..

56. 트랜잭션 전파 활용 3

MemberRepository와 LogRepository를 묶는 가장 간단한 방법은 Service에서 트랜잭션 하는 것이다. 몇가지 경우가 있는데, 먼저 아예 MemberRepository와 LogRepository에 있던 @Transactional을 주석처리 하고, Service에만 @Transactional을 추가해 @Transactional public void joinV1(String username){ Member member = new Member(username); Log logMessage = new Log(username); log.info("== memberRepository 호출 시작 =="); memberRepository.save(member); log.info("== member..

MySQL

일단 MySQL은 상업용 목적으로 사용해도 무료이다. Community Edition과 유료버전 몇가지가 있는데, 일단 무료버전은 GPL v2가 적용되었다. GPLv2는 수정 및 배포가 가능하나 수정한 모든 소스코드를 공개 하여야 한다. 어.. 오히려 더 헷갈리는데, 그냥 간단하게 말하자면, MySQL Community Edition을 상업용 목적으로 무료로 사용해도 되며, 단, MySQL 내부 소스를 변경하거나, 혹은 MySQL 자체를 판매, 혹은 MySQL을 다른 소프트웨어에 포함시켜서 외부에 영리 목적으로 판매한다는 것은 안된다. 뭐 MySQL을 따로 판매할 일은 없을 것 같고, 그냥 MySQL 내부 소스를 변경하지만 않으면 무료로 사용할 수 있다. 솔직히 MySQL 내부 소스를 변경할 일도 많이 ..

DB 2023.10.17