jh
@leejohy
Reviews Written
8
Average Rating
5.0
Posts
Q&A
@Transaction ์ ํ ๊ด๋ จ ๋ฌธ์
๋ต๋ณํด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! osiv๋ฅผ ์ฐธ๊ณ ํ์ฌ on/off ์กฐ๊ฑด์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํด๋ณด์์ต๋๋ค. ์ถ๊ฐ ์ง๋ฌธ์ ๋งจ ๋ง์ง๋ง์ ์์ฑํ์์ต๋๋ค. @RequiredArgsConstructor@Componentpublic class TestComponent { private final MemberRepository memberRepository; private final EntityManager em; @Transactional(propagation = Propagation.REQUIRES_NEW) public void capsule(Long id) { Member member2 = em.find(Member.class, id); System.out.println("member2 = " + member2); }} @GetMapping("/em/{id}")// @Transactional public void findMember5(@PathVariable("id") Long id) { Member member1 = memberRepository.findById(id).get(); System.out.println("member1 : " + member1); testComponent.capsule(id); } requires_new๋ก ์ ์ฉ > 1) osiv on(์์์ํ ์ ์ง(๋จ, ์์ ๋ถ๊ฐ๋ฅ). ์ฆ ํธ๋์ญ์ ๋ฒ์ ์ธ์์๋ ์์ ์ํ ์ ์ง o) ์กฐ๊ฑด 1 : ์ธ๋ถ ๋ฉ์๋์ @Transactional ์ -> ๋ค๋ฅธ member ์กฐํ ์กฐ๊ฑด 2 : ์ธ๋ถ ๋ฉ์๋์ @Transactional ๋ฌด -> ๊ฐ์ member ์กฐํ 2) osiv off(ํธ๋์ญ์ ์ข ๋ฃ ์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๋ซ๋๋ค. ์ฆ ํธ๋์ญ์ ๋ฒ์ ๋ฐ์์๋ ์์์ํ ์ ์ง x) ์กฐ๊ฑด 3 : ์ธ๋ถ ๋ฉ์๋์ @Transactional ์ -> ๋ค๋ฅธ member ์กฐํ ์กฐ๊ฑด 4 : ์ธ๋ถ ๋ฉ์๋์ @Transactional ๋ฌด -> ๋ค๋ฅธ member ์กฐํ ์กฐ๊ฑด 1, 3์ ๊ฒฝ์ฐ osiv on/off ์ฌ๋ถ์ ์๊ด ์์ด ์ธ๋ถ์ @Transactional์ด ์๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ๋ ๋ฒจ์์ transaction์ด ์์๋๋ฉฐ, ๋ด๋ถ์ requires_new๊ฐ ์ ๋์ํ์ฌ ๊ฐ๊ฐ ๋ค๋ฅธ member๊ฐ ์กฐํ๋ฉ๋๋ค. ์กฐ๊ฑด 2,4์ ๊ฒฝ์ฐ osiv on/off ์ฌ๋ถ์ ๋ฐ๋ผ member ์กฐํ ๊ฒฐ๊ณผ์ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ฒ ๋ฉ๋๋ค. ์กฐ๊ฑด 4(osiv off)๋ ์ธ๋ถ ๋ฉ์๋ ๋ด์ "repository.findById" ๋ถ๋ถ์ด ๋๋์๋ง์ ์์์ฑ์ด ์ฌ๋ผ์ง๊ฒ ๋๋ฏ๋ก, ๋ด๋ถ ๋ฉ์๋์ transaction์ด ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๊ฐ ๋์ด ์ํ๋๋๋ก ๋์ํจ์ ํ์ธํ์ต๋๋ค.(๋ด๋ถ @transactional์ default๋ก ์ค์ ํด๋ ๋์ผํ๊ฒ ๋์) ์กฐ๊ฑด 2(osiv on)๋ ์ธ๋ถ ๋ฉ์๋ ๋ด์ "repository.findById" ์คํ ์ดํ์๋ (์กฐํ์ฉ)์์์ํ๊ฐ ์ธ๋ถ ๋ฉ์๋ ์ข ๋ฃ์์ ๊น์ง ์ ์ง๋๋ ๊ฒ์ผ๋ก ์ดํดํ์ต๋๋ค. ํ์ง๋ง ์ด๋ฌํ ์กฐ๊ฑด์ด ๋ด๋ถ ๋ฉ์๋์ ์ ์ฉ๋ requires_new๋ก ๋ถ๋ฆฌ๊ฐ ๋์ง ์๋ ์ ์ด ์ดํด๊ฐ ์ ๊ฐ์ง ์์ต๋๋ค.. ใ
- 1
- 5
- 827
Q&A
@Transaction ์ ํ ๊ด๋ จ ๋ฌธ์
๋ค ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค! ๋ง์ํ์ ๋๋ก ์งํํด์ ์ ๋ฆฌํด๋ดค๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค. AOP๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณธ๊ฑฐ๋ผ, ์กฐ๊ธ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์์ด์์~ใ ์ถ๊ฐ ์ง๋ฌธ 2๊ฐ์ง๊ฐ ์์ต๋๋ค. 1) ์์ ์ง๋ฌธ์ ๋ด๋ถ์์ ํธ์ถ๋ ๋ฉ์๋ "capsule"์ ๋ณ๋ ํด๋์ค(TestComponent)๋ก ๋ถ๋ฆฌํ์์ต๋๋ค. @RequiredArgsConstructor@Componentpublic class TestComponent { private final MemberRepository memberRepository; private final EntityManager em; @Transactional(propagation = Propagation.REQUIRES_NEW) public void capsule(Long id) { Member member2 = em.find(Member.class, id); System.out.println("member2 = " + member2); }} 2.1) ํธ์ถํ๋ ๋ฉ์๋์ @Transactional ์ ์ฉ ์ํจ Controller์ "findMember5" ๋ฉ์๋์์ member find๋ฅผ ์งํํ๊ณ , 1)์ "capsule"๋ฉ์๋๋ฅผ ํธ์ถํ์์ต๋๋ค. ์ด ๋ "findMember5" ๋ฉ์๋์ @Transactional์ ์ ์ฉํ์ง ์์์ต๋๋ค. @GetMapping("/em/{id}")// @Transactional public void findMember5(@PathVariable("id") Long id) { Member member1 = memberRepository.findById(id).get(); System.out.println("member1 : " + member1); testComponent.capsule(id); } ์ด ๊ฒฝ์ฐ, ๋์ผํ member๊ฐ ํธ์ถ๋์์ต๋๋ค. ๊ฐ๋จํ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. (์ฌ์ง) 2.2) ํธ์ถํ๋ ๋ฉ์๋์ @Transactional ์ ์ฉ(์ฃผ์ ์ ๊ฑฐ) (์ฌ์ง) @Transactional์ ์ธ๋ถ์๋ ์ ์ฉํ์ ๊ฒฝ์ฐ์๋ member1, member2๊ฐ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ด๋ถ ๋ฉ์๋์ @Transactional(REQUIRES_NEW)๊ฐ ์ ์์ ์ผ๋ก ๋์ํ ๊ฒ์ผ๋ก ์ดํดํ์ต๋๋ค. ์ง๋ฌธ 1 : ์ธ๋ถ ๋ฉ์๋์ @Transactional ์ ์ฉ ์ฌ๋ถ์ ๋ฐ๋ผ ์์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ฐ, ์ด์ ๋ฅผ ์ค๋ช ํด์ฃผ์ค ์ ์์ผ์ค๊น์? ์คํ๋ ค 2.1)์ ํธ๋์ญ์ ์ด ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๊ฐ ๋ ๊ฒ์ผ๋ก ์๊ฐํ์ต๋๋ค. ์ง๋ฌธ 2 : ๋ค๋ฅธ AOP์ ๊ฒฝ์ฐ์๋ @Transacional์ case(๋ด๋ถ @Transactional์๋ง Requires_new ์ ์ฉ)์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด๋ถ ์ด๋ ธํ ์ด์ ์ ๋ค๋ฅธ ๊ธฐ๋ฅ(์ต์ )์ ๋ถ์ฌํ ์ ์๋์?
- 1
- 5
- 827
Q&A
@MainDiscountPolicy ์ญ์ ์ ์ค๋ฅ
์๋ ํ์ธ์ ์ํ๋! ๋น์ทํ ๊ฒ์ผ๋ก ๊ถ๊ธํด์ ์ถ๊ฐ ์ง๋ฌธ๋๋ฆฝ๋๋ค. ๊ทธ๋ผ ํด๋น ์๋ฌ๋ AllBeanTest์ ์ปจํ ์ด๋ ์์ฑ ๊ณผ์ ์ค -> AutoAppConfig.class๋ฅผ ํตํด Component Scan์ ํตํ OrderServiceImpl์ ์์ฑ๊ณผ์ ์ ์๊ธฐ๋ NoUniqueBeanDefinitionException์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋ ๊น์?
- 0
- 2
- 391




