Home
>
Spring
>
๐[Spring] `@EnableTransactionManagement`์ด๋ ๋ฌด์์ผ๊น์?
Spring
Framework
๐[Spring] @EnableTransactionManagement
์ด๋ ๋ฌด์์ผ๊น์?
-
@EnableTransactionManagement
๋ Spring Framework์์ ์ ์ธ์ ํธ๋์ญ์
๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ ๋
ธํ
์ด์
์
๋๋ค.
- ์ด ์ ๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด Spring ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฉ์๋ ๋จ์์ ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
1๏ธโฃ ๊ธฐ๋ฅ.
1๏ธโฃ ํธ๋์ญ์
๊ด๋ฆฌ ํ์ฑํ.
-
@EnableTransactionManagement
๋ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ์์ ํธ๋์ญ์
๊ด๋ จ ๋น์ ์์ฑํ๊ณ ํธ๋์ญ์
๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค.
-
@Transactional
์ ๋
ธํ
์ด์
์ด ๋ถ์ ๋ฉ์๋์ ํธ๋์ญ์
๊ฒฝ๊ณ๋ฅผ ์ ์ํ๊ณ ์๋์ผ๋ก ํธ๋์ญ์
์ ๊ด๋ฆฌํฉ๋๋ค.
2๏ธโฃ ํ๋ก์ ๊ธฐ๋ฐ ํธ๋์ญ์
๊ด๋ฆฌ.
- Spring์ AOP(Aspect-Oriented Programming)๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์
๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
-
@Transactional
์ด ๋ถ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด Spring์ด ์๋์ผ๋ก ํ๋ก์๋ฅผ ์์ฑํ์ฌ ํธ๋์ญ์
์์, ์ปค๋ฐ, ๋กค๋ฐฑ ๋ฑ์ ์ฒ๋ฆฌํฉ๋๋ค.
2๏ธโฃ ์ฌ์ฉ ๋ฐฉ๋ฒ.
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
- ์์ ์ฝ๋์์:
-
-
@EnableTransactionManagement
: ํธ๋์ญ์
๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฑํ.
-
-
PlatformTransactionManager
: Spring์ด ํธ๋์ญ์
์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ ํธ๋์ญ์
๋งค๋์ ๋ฅผ ์ ์.
3๏ธโฃ ๋์ ์๋ฆฌ.
1๏ธโฃ @Transactional
์ ๋
ธํ
์ด์
์ด ๋ถ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด:
- Spring์ AOP ํ๋ก์๋ฅผ ํตํด ํธ๋์ญ์
์์.
- ๋ฉ์๋ ์คํ ํ ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ํธ๋์ญ์
์ปค๋ฐ.
- ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํธ๋์ญ์
๋กค๋ฐฑ.
4๏ธโฃ ์์ .
1๏ธโฃ ํธ๋์ญ์
๊ด๋ฆฌ ํ์ฑํ.
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
2๏ธโฃ ์๋น์ค ํด๋์ค์์ ํธ๋์ญ์
์ฌ์ฉ.
@Service
public class UserService {
@Transactional
public void createUser(User user) {
// ํธ๋์ญ์
์์์ ์คํ๋๋ ์ฝ๋
userRepository.save(user);
if (user.getName().equals("error")) {
throw new RuntimeException("Rollback test");
}
}
}
- ์ ์ฝ๋์์:
-
@Transactional
: createUser ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ํธ๋์ญ์
์ด ์์๋ฉ๋๋ค.
- ์์ธ ๋ฐ์ ์ ํธ๋์ญ์
์ด ๋กค๋ฐฑ๋ฉ๋๋ค.
5๏ธโฃ ์ต์
.
-
@EnableTransactionManagement
์๋ ๋ค์๊ณผ ๊ฐ์ ์ต์
์ด ์์ต๋๋ค.
1๏ธโฃ mode
- ํธ๋์ญ์
๊ด๋ฆฌ ๋ชจ๋๋ฅผ ์ค์ .
- ๊ธฐ๋ณธ๊ฐ์ AdviceMode, PROXY, AOP ํ๋ก์๋ฅผ ์ฌ์ฉ.
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
2๏ธโฃ proxyTargetClass
- CGLIB ๊ธฐ๋ฐ ํ๋ก์๋ฅผ ์์ฑํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ .
- ๊ธฐ๋ณธ๊ฐ์ false(์ธํฐํ์ด์ค ๊ธฐ๋ฐ ํ๋ก์ ์ฌ์ฉ).
@EnableTransactionManagement(proxyTargetClass = true)
6๏ธโฃ ์์ฝ.
-
@EnableTransactionManagement
๋ Spring์์ ์ ์ธ์ ํธ๋์ญ์
๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ์ ๋
ธํ
์ด์
์
๋๋ค.
-
@Transactional
์ ๋
ธํ
์ด์
๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ๋ฉ์๋ ๋จ์์ ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- Spring AOP๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์
๊ฒฝ๊ณ๋ฅผ ์ค์ ํ๊ณ , ํธ๋์ญ์
๋งค๋์ ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ์ ์ดํฉ๋๋ค.