[Spring Data] Spring Data JDBC๋ฅผ ์ด์šฉํ•œ DB ์—ฐ๋™ (์‘์šฉํŽธ)

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ๊ธ€์—์„œ ์šฐ๋ฆฌ๋Š” Spring Data JDBC๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ด๋ฅผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ดค์Šต๋‹ˆ๋‹ค. 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์„œ๋กœ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ์— ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Entity

์ด๋ฒˆ ๊ธ€์—์„œ ์‚ฌ์šฉํ•  ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋ธ”๋กœ๊ทธ์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํฌ์ŠคํŠธ์™€ ์ฝ”๋ฉ˜ํŠธ์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŠธ์— ๋ธ”๋กœ๊ทธ์˜ ๊ฒŒ์‹œ๊ธ€์ด ๋‹ฌ๋ฆฌ๋ฉด ๊ทธ ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ํ•˜๋‚˜์˜ ๊ธ€์„ ์กฐํšŒํ–ˆ์„ ๋•Œ ๋Œ“๊ธ€์„ ๊ฐ™์ด ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ๋ฅผ ๋‹ด์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

SQL script

flyway์— ์•„๋ž˜์˜ SQL script๋ฅผ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

 

์ง€๋‚œ ๊ธ€์—์„œ์™€๋Š” ๋‹ฌ๋ฆฌ PRIMARY KEY์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๋‹ค๋ฅธ๋ฐ, CONSTRAINT ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž์‹ ์ด ์ง์ ‘ ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ์ด๋ฆ„์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ปฌ๋Ÿผ์— PRIMARY KEY๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค ๋žœ๋คํ•œ ์ด๋ฆ„์˜ PRIMARY KEY ์ด๋ฆ„์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉฐ,
์ฐจํ›„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ๋•Œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด ์ค„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ 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๋Š” ์ด๋ฅผ ์‚ฌ์ „ ๊ณต๋ถ€ํ•ด๋ณด๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š์„๊นŒ ์กฐ์‹ฌ์Šค๋ ˆ ๋‚จ๊ฒจ๋ด…๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments