[Spring Data] Spring Data JDBC๋ฅผ ์ด์ฉํ DB ์ฐ๋ (์์ฉํธ)
์ง๋ ๊ธ์์ ์ฐ๋ฆฌ๋ Spring Data JDBC๋ฅผ ์ด์ฉํด ๊ฐ๋จํ ์ฟผ๋ฆฌ๋ฅผ ์กฐํํ๊ณ ์ด๋ฅผ ํ ์คํธ ์ฝ๋๋ก ๋ง๋๋ ์๊ฐ์ ๊ฐ์ ธ๋ดค์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ ๊ฐ์ ํ ์ด๋ธ์ด ์๋ก ๊ด๊ณ๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋์ง์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
Entity
์ด๋ฒ ๊ธ์์ ์ฌ์ฉํ ํ ์ด๋ธ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
๋ธ๋ก๊ทธ์์ ํํ ๋ณผ ์ ์๋ ํฌ์คํธ์ ์ฝ๋ฉํธ์ ๋๋ค. ํฌ์คํธ์ ๋ธ๋ก๊ทธ์ ๊ฒ์๊ธ์ด ๋ฌ๋ฆฌ๋ฉด ๊ทธ ๋๊ธ์ ๋ฌ ์ ์๋ ํํ๋ก ํ๋์ ๊ธ์ ์กฐํํ์ ๋ ๋๊ธ์ ๊ฐ์ด ๋ถ๋ฅผ ์ ์๋ ์์๋ฅผ ๋ด์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
SQL script
flyway์ ์๋์ SQL script๋ฅผ ์ ๋ ฅํด์ค๋๋ค.
์ง๋ ๊ธ์์์๋ ๋ฌ๋ฆฌ PRIMARY KEY์ ์์ฑ ๋ฐฉ๋ฒ์ด ์กฐ๊ธ ๋ค๋ฅธ๋ฐ, CONSTRAINT ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ์์ ์ด ์ง์ ํด๋น ํค์ ๋ํ ์ด๋ฆ์ ์ ์ํ ์ ์์ต๋๋ค.
์ฐจํ ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํด ์ค ์ ์์ผ๋ฏ๋ก Flyway์ ๊ฐ์ ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ์ CONSTRAINT๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐ ๋ฐ๋์ ์ด๋ฆ์ ์ ํด๋๊ณ ์ฌ์ฉํ๋ ๊ฑธ ์ถ์ฒํฉ๋๋ค. (PostgreSQL)
์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ ๋, ์์ ๊ฐ์ด ํ ์ด๋ธ์ด ๋ง๋ค์ด์ง๋ฉด ์ฑ๊ณต์ ๋๋ค.
๋ชจ๋ธ ์ ์
์ด์ ๋ชจ๋ธ์ ์ ์ํ๊ณ Repository๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์ด์ ํฌ์คํธ์์ ๋ง๋ค์๋ ๊ทธ๋๋ก domain๊ณผ repository ํจํค์ง๋ฅผ ์ฌ์ฉํด ๊ฐ๊ฐ์ ๋ชจ๋ธ์ ๋ง๋ค์ด์ค์๋ค.
Comment๋ ์ง๋ ํฌ์คํธ์ ๊ฑฐ์ ๋์ผํ๊ฒ ๋ง๋ค์ด์ฃผ๋ฉด ๋์ง๋ง Post์ ๊ฒฝ์ฐ ์ด์ ์ ๋ ฅ๋ ๋๊ธ๊น์ง ๋ชจ๋ ๋ณด์ฌ์ค์ผ ํฉ๋๋ค. JPA์์๋ ์ด๋ฅผ OneToMany ๋ฑ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด Spring Data JDBC์์๋ MappedCollection์ด๋ผ๋ ์ด๋ ธํ ์ด์ ์ ๊ฐ์ง๊ณ ์์๊ณผ ์ฝ๊ธฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Mapped Collection์ ๋ค์ด๊ฐ๋ idColumn์ ์์ ์ํฐํฐ๊ฐ ๊ฐ์ง๋ ์ธ๋ํค๋ฅผ ์ ๋ ฅํ๊ณ , keyColumn์๋ ์์ ์ํฐํฐ์ ๊ธฐ๋ณธํค๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
ํ ์คํธ ์ฝ๋
์ด์ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋ ์์ฑ์ ๋๋ฌ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ตฌ์ฑํ๋๋ก ์ ๋์ํ๋์ง ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Post ๋ชจ๋ธ์ ๋๊ธ ๋ชจ๋ธ์ ๊ฐ์ด ์์ฑํ๊ณ ๋ฃ์ด์คฌ์ ๋ ์์์ด ์ ๋๋์ง ํ์ธํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ๋๋ ค๋ณด๋ฉด ์์์ ์๋๋ ๋๋์ด์ง๋ง ๊ฒฝ๊ณ ํ์๊ฐ ๋ํ๋ฉ๋๋ค. JDBC์์ ResultSet์ผ ์กฐํํ์ ๋ ID ์ปฌ๋ผ์ด ์ฌ๋ฌ๊ฐ ๊ฑธ๋ ค์๋ค๋ ๊ฒฝ๊ณ ๋ฌธ์ธ๋ฐ, ์ด๊ฒ์ด ์ ๋ฌธ์ ๊ฐ ๋๋์ง๋ ๊ณต๊ต๋กญ๊ฒ๋ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ใ ใ ์ฐจํ ๋ค์ ๊ธ์์ ์ด ๋ฌธ์ ์ ๋ํ ๊ฒ์ ์ข ๋ ๊ธ๋ก ์์ธํ๊ฒ ์ ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํด๋ณด๋ฉด ์์์ ์๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์์๊ณผ ์กฐํ ๋ชจ๋ ๋ฌธ์ ์์ด ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ง์น๋ฉฐ...
์์ฃผ ๊ฐ๋จํ ์์ ๋ฅผ ํตํด ๊ด๊ณ๊ฐ ์๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์์ํ๊ณ ์กฐํํ๋ ๊ฒ์ Spring Data JDBC๋ฅผ ์ด์ฉํด ์ดํด๋ดค์ต๋๋ค. ํ๊ธ ๋ฌธ์๊ฐ ์์ง ๋ง์ด ๋ถ์กฑํ๊ณ , Spring Data JPA๋ก ์ถฉ๋ถํ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ถ๋ถ์ด ๋ง์ ํ์ต์ ํด์ผ ํ ๋๊ธฐ ๋ํ ๋ถ์กฑํฉ๋๋ค.
ํ์ง๋ง ๊ธฐ๋ณธ์ ์ถฉ์คํ๊ณ ์ฑ๋ฅ ๊ฐ์ ์ ์ด์ ์ ๋๋ฉฐ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ข์ ๋ณด์ ๋๋ค. ๋ณ๋์ Entity๋ฅผ ์์ฑํ๊ฑฐ๋ DTO๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ NoSQL์ฒ๋ผ ๋ฐ๋ก ์ด์ฉ ๊ฐ๋ฅํ๋ฉฐ ๋ค๋ง ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ Jackson์ด๋ Gson ๊ฐ์ JsonEncoder๋ ์ข ๋ ํ์ํด ๋ณด์ ๋๋ค.
์์ง Spring ์ง์์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ORM์ ๋์ค์ง ์์๋๋ฐ, Spring Data R2DBC ์ฌ์ฉ์ ๊ณ ๋ คํ๊ณ ์๋ค๋ฉด Spring Data JDBC๋ ์ด๋ฅผ ์ฌ์ ๊ณต๋ถํด๋ณด๋ ๋ฐ ๋์์ด ๋์ง ์์๊น ์กฐ์ฌ์ค๋ ๋จ๊ฒจ๋ด ๋๋ค.
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring boot] Axon Framework๋ก ์์ํ๋ CQRS ๊ธฐ์ด (0) | 2022.02.21 |
---|---|
[Spring Data] Spring Data JDBC๋ฅผ ์ด์ฉํ ๋ค์ํ ID ์ ๋ต๊ณผ ์๋ ID ์ ๋ต ๊ตฌํ์ ์ฃผ์์ (0) | 2022.01.08 |
[Spring Data] Spring Data JDBC๋ฅผ ์ด์ฉํ DB ์ฐ๋ (๊ธฐ๋ณธํธ) (0) | 2021.06.05 |
[Spring Data] Spring Data module (0) | 2021.05.29 |
[Spring boot] Spring ํ ์คํธ ๋ฐฉ๋ฒ๊ณผ @SpringBootTest (0) | 2021.05.16 |