๋ฉ‹์‚ฌ Backend Plus 22์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 11์›” 21์ผ

์˜ค๋Š˜์€ ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  Maria DB (๋งˆ๋ฆฌ์•„ DB)๋ฅผ ๋กœ์ปฌ์ด ์•„๋‹Œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ ํ•˜์˜€๊ณ , ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฐฐ์šด ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ์˜ ๋Œ€ํ•ด ์ •๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„์ปค ๋ฐ์Šคํฌํƒ‘ Maria DB ๋„์šฐ๊ธฐ

  • ๊ธฐ์ดˆ์ ์ธ ๋„์ปค ๋ฐ์Šคํฌํƒ‘ ์„ค์น˜์™€ ๋„์ปค ๋ช…๋ น์–ด๋Š” ์ƒ๋žตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
    OS๋Š” ์œˆ๋„์šฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ๋„์ปค ๋ฐ์Šคํฌํƒ‘์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


์œˆ๋„์šฐ์˜ ํŒŒ์›Œ์‰˜์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
โžก docker pull mariadb ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋งˆ๋ฆฌ์•„ DB ์ตœ์‹  ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์Šต๋‹ˆ๋‹ค.

โžก ๋‹ค์šด์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ docker images ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

โžก mariadb๋ฅผ ์„ค์น˜ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค

docker run --name ${์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„} -d -e MYSQL_ROOT_PASSWORD=${๋น„๋ฐ€๋ฒˆํ˜ธ} -p 3306:3306 mariadb

โžก mariadb ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์† ํ•ฉ๋‹ˆ๋‹ค.
docker exec -it ${์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„} /bin/bash

โžก ๋ฃจํŠธ ๊ณ„์ •์œผ๋กœ ์ ‘์† ํ•ฉ๋‹ˆ๋‹ค.
mysql -u root -p ์ ‘์†ํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์„ ์š”๊ตฌํ•˜๋Š”๋ฐ ์„ค์น˜ํ• ๋•Œ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด mariadb์— ์›ํ™œํ•˜๊ฒŒ ์ ‘์†์ด ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘ ๊ฒช์€์ 

  • ์ƒํ™ฉ์œผ๋กœ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ Spring Data Jpa๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์˜€์œผ๋ฉฐ, ์ƒํ’ˆ์˜ ๋“ฑ๋ก (Save) ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

โžก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋Š” H2 ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค ์ด์œ ๋Š” ๋ญ˜๊นŒ ?

@DataJpaTest ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ์‹œ ์ฐธ์กฐํ•  DB์˜ default (๊ธฐ๋ณธ)๊ฐ€ H2 ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.
โžก Mock ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด H2 DB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.
์ƒํ™ฉ์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

@Transactional ์–ด๋…ธํ…Œ์ด์…˜๋„ ์ค‘์š”ํ•œ๋ฐ, ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์ถ”ํ›„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.
์ด๋ฒˆ ๋ธ”๋กœ๊ทธ์—์„œ ์ฃผ๋ชฉํ•  ๋ถ€๋ถ„์€ @TestPropertySource(๊ฒฝ๋กœ) ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
(์šฐ์„ ์ˆœ์œ„ ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜์ง€๋งŒ, ์กฐ๊ธˆ deepํ•œ ๊ฐœ๋…์ด๋ผ ์‹ค๋ ฅ์ด ์–ด๋А์ •๋„ ์ถฉ์กฑ๋ ๋•Œ ํ™•์ธํ•ด์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค.)

  • ๋Œ€๋ถ€๋ถ„ application.yml ์ด๋ผ๋Š” ์„ค์ • ํŒŒ์ผ์„ default๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ ์ด๋‹ค.
    @TestPropertySource(๊ฒฝ๋กœ)๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฝ๋กœ์— ์œ„์น˜ํ•œ
    ์ƒˆ๋กœ ๋งŒ๋“  application-test.yml ์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ๋‹ค. (DB ์„ค์ • ๋“ฑ๋“ฑ)

์žฅ์ ์œผ๋กœ๋Š” yml์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋งˆ๋ฌด๋ฆฌ

์˜ค๋Š˜ ์ƒํ’ˆ ๋“ฑ๋ก ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด PR๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐํ›„ develop ๋ธŒ๋žœ์น˜๋กœ ๋จธ์ง€๋ฅผ ์‹œ์ž‘ ํ•˜์˜€๋‹ค.
์ ์  ๊ณ ๋„ํ™” ํ•ด ๋‚˜๊ฐ€์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค.
(@RestControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ ์ปค์Šคํ…€, ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ์ปค์Šคํ…€, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋“ฑ๋“ฑ๋“ฑ๋“ฑ ํ• ๊ฒŒ ์ข€ ๋งŽ๋‹ค)

REFERNCE

https://dongjuppp.tistory.com/92
(@DataJpaTest ์—์„œ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ด์œ )

0๊ฐœ์˜ ๋Œ“๊ธ€