๐ SpringBoot์์ ๋ฉํฐ ๋ฐ์ดํฐ์์ค ์ค์ ํ๊ธฐ - JPA
ํ๋์ ํ๋ก์ ํธ์์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ์, ์ด๋ฐ ๊ฒฝ์ฐ DataSource๋ฅผ ์ปค์คํ ์ผ๋ก ์ค์ ํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์ค์ ์ ํตํด ํ ํ๋ก์ ํธ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
์์ ์ฝ๋๋ GitHub์์ ํ์ธํ ์ ์์ต๋๋ค.
๐ application.yml
yml ํ์ผ์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(datasource, datasource-second)๋ฅผ ์ค์ ํฉ๋๋ค.
(๊ธฐ๋ณธ ์คํ๋ง ๋ถํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ๊ณผ ๋ฌ๋ฆฌ ๋ฉํฐ ๋ฐ์ดํฐ ์์ค HikariConfig์์๋ url์ด ์๋ jdbc-url์ผ๋ก ๋ค์ด๋ฐ์ ํด์ผํฉ๋๋ค.)
๐ DataSource Configuration
์๋ ์ฝ๋์์ ์ฌ์ฉํ ํจํค์ง๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- User Entity: package com.example.springmultidatasourcejpa.user.entity
- User Repository: package com.example.springmultidatasourcejpa.user.repository
- Product Entity: package com.example.springmultidatasourcejpa.product.entity
- Product Repository: package com.example.springmultidatasourcejpa.product.repository
UserDataSourceConfiguration
- @EnableJpaRepositories: JPA Repository Bean์ ํ์ฑํํด์ฃผ๋ ์ด๋
ธํ
์ด์
- basePackages: SpringBoot๊ฐ Bean Scan ๋ฒ์ ์ค์ (Repository ํจํค์ง ์ค์ )
- entityMaganerFactoryRef: DataSource, Hibernate Property, Entity ์ค์ (Entity ํจํค์ง ์ค์ )
- transactionManagerRef: ์คํ๋ง์ ํธ๋์ญ์ ์ค์
๋ฉํฐ ๋ฐ์ดํฐ์์ค์์ ํธ๋์ญ์ ์ ๋ฌถ์ด์ฃผ๋ ค๋ฉด ChainedTransactionManager ๋ผ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : https://taes-k.github.io/2020/06/09/chained-transaction-manager/
- @Primary: ์คํ๋ง์์ ํ๋์ ํ์ ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ Bean์ด ์กด์ฌํ ์ ์๊ธฐ๋๋ฌธ์ ์ฐ์ ์์๋ฅผ ์ค์ ํ๋ ์ด๋ ธํ ์ด์
- mainEntityManager(): ์ entityManagerFactoryRef ์์ฑ์ ์ฌ์ฉํ Bean ์์ฑ ๋ฉ์๋
- LocalContainerEntityManagerFactoryBean: JPA EntityManagerFactory๋ฅผ ์์ฑํ๋ FactoryBean์ผ๋ก DataSource, Entity๊ฐ ์์นํ ๊ฒฝ๋ก Scan ์ค์ , Hibernate ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๊ฒ์ ์ค์ ํ๋ JpaVenoderAdapter ๋ฑ์ ์ง์ ํฉ๋๋ค.
ProductDataSourceConfiguration
@Primary ์ด๋ ธํ ์ด์ ์ ์ ์ธํ๋ฉด UserDataSource์ ์ค์ ์ ๋์ผํฉ๋๋ค.
๐ Test
์์ ๊ฐ์ด ๊ฐ๋จํ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๊ณ User, Product API๋ฅผ ํธ์ถํด๋ณด๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ์ด๋ฉ๋๋ค.
๋๊ธ