Inflearn brand logo image
Inflearn brand logo image
์ฑ„๋„ํ†ก ์•„์ด์ฝ˜
NEW

์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋Š” SQL, Kotlin๊ณผ jOOQ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

๋ฐ์ดํ„ฐ์ ‘๊ทผ ๊ธฐ์ˆ ์ธ jOOQ ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์Šคํ”„๋ง ๊ฐœ๋ฐœ์„ ๊ฒฝํ—˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5๋ช… ์ด ์ˆ˜๊ฐ•ํ•˜๊ณ  ์žˆ์–ด์š”.

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[์›น ๊ฐœ๋ฐœ, ๋ฐฑ์—”๋“œ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์Šคํ”„๋ง ๊ฐœ๋ฐœ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • ๋ฐ์ดํ„ฐ์ ‘๊ทผ ๊ธฐ์ˆ ๋กœ jOOQ ๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”

  • MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ด์š”

SQL ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ž‘์„ฑํ•ด๋ด์š”

kotlin ์œผ๋กœ ์Šคํ”„๋ง์„ ๊ฒฝํ—˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ๋กœ jOOQ ๋ฅผ ์‚ฌ์šฉํ•ด์š”

JPA ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿด ๋• jdbc template ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ native query ๋กœ ๋Œ€์‘ํ•ด์•ผ ํ•ด์š”. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋ฉด ์ž˜๋ชป๋œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์œ„ํ—˜์ด ์žˆ๊ณ  ์ž์นซ ์‹ค์ˆ˜๋กœ ๋Ÿฐํƒ€์ž„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์ถ”๊ตฌํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  jOOQ๋ผ๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

jOOQ์˜ ์ฃผ์š” ํŠน์ง•์ž…๋‹ˆ๋‹ค

  • ํƒ€์ž… ์•ˆ์ •์„ฑ


    1. ์ปดํŒŒ์ผ ํƒ€์ž„์— SQL ์ฟผ๋ฆฌ ์˜ค๋ฅ˜ ๊ฒ€์ถœ

    2. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”/์ปฌ๋Ÿผ ์ฐธ์กฐ ๋ฐฉ์ง€

    3. ์ž˜๋ชป๋œ ํƒ€์ž… ๋งคํ•‘ ์˜ˆ๋ฐฉ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ฝ”๋“œ ์ƒ์„ฑ


  • ๊ฐ•๋ ฅํ•œ ์ฟผ๋ฆฌ ๋นŒ๋” DSL

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…๋ฆฝ์„ฑ

  • ์ž๋™ ์ฟผ๋ฆฌ ์ตœ์ ํ™”

jOOQ ์— ๋Œ€ํ•œ ๊ฐœ๋… ๊ฐ•์˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค

jOOQ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ ์ธ CRUD ๋ฅผ ์—ฐ์Šตํ•ด๋ณด๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐœ๋…์„ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒ ๋ถ€์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š”

(1) ์ฝ”๋“œ๋กœ SQL ์ž‘์„ฑ(jooq)

jOOQ ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ์ฝ”๋“œ๋กœ SQL ์„ ์ž‘์„ฑํ•˜์—ฌ

ํƒ€์ž…์ด ์•ˆ์ „ํ•œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ SQL

(2) Kotlin ์œผ๋กœ ์Šคํ”„๋ง์„ ์—ฐ์Šตํ•ด์š”

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ๋ฐ›๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ์—ฐ์Šต์„ ํ•ด์š”

์ฝ”ํ‹€๋ฆฐ์˜ ํ™•์žฅํ•จ์ˆ˜ ๋“ฑ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”

GlobalExceptionHanlder ์ผ๋ถ€

(3) flyway ๋ฅผ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด๋ด์š”

flyway๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฒ„์ „๋ณ„๋กœ ๊ด€๋ฆฌ

  • Git์ฒ˜๋Ÿผ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌ

flyway ์Šคํ‚ค๋งˆ ํžˆ์Šคํ† ๋ฆฌ

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „(OS): Windows, macOS,

  • ์‚ฌ์šฉ ๋„๊ตฌ: ๊ฐ•์˜์—์„  IntelliJ IDEA ์œ ๋ฃŒ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด ๋ช‡๋ช‡ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฐธ์—ฌํ•˜์ง€ ๋ชป ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DB ์—ฐ๊ฒฐ๊ณผ HTTP API ์š”์ฒญ์„ IntelliJ IDEA ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์ด๋‚˜ POSTMAN ์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜์‹  ๋ถ„๋“ค์€ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” MySQL์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MySQL ์€ Docker๋กœ ์‹คํ–‰ํ•˜๊ณ  local ํ™˜๊ฒฝ์— MySQL ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น DB ๋กœ ๊ฐ•์˜๋ฅผ ๋”ฐ๋ผ์˜ค์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

  • PC ์‚ฌ์–‘: ์ผ๋ฐ˜์ ์ธ ์ปดํ“จํ„ฐ๋กœ๋Š” ์ „๋ถ€ ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•™์Šต ์ž๋ฃŒ

  • ํ•„์š”ํ•œ ํ•™์Šต์ž๋ฃŒ๋Š” ๊ฐ•์˜ ํ•˜๋‹จ์— docker-compose ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ์ ์–ด๋†“์•˜๊ณ  ์š”์ฒญ์‹œ ๊ฐ•์˜์ž๋ฃŒ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ณ ๋ ค ํ›„ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • jOOQ๋Š” SQL ์ฟผ๋ฆฌ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ SQL์„ ์•„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ SELECT, INSERT, UPDATE, DELETE SQL ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ•์˜ ์˜์ƒ ํ™”์งˆ์ด๋‚˜ ์Œ์งˆ์ด ์กฐ๊ธˆ ์ข‹์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๊ณ ๋ คํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์Šคํ”„๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•œ ์‚ฌ๋žŒ

  • jOOQ ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒฝํ—˜ ํ•ด๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ

  • ํƒ€์ž… ์•ˆ์ „ํ•œ SQL ์„ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ์ž๋ฐ”

  • ์ฝ”ํ‹€๋ฆฐ

  • MySQL

  • sql

์•ˆ๋…•ํ•˜์„ธ์š”
์ฝ”ํ‹€๋ฆฐ์ž๋ฐ”์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”

ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ์ฝ”ํ‹€๋ฆฐ์ž๋ฐ”์ž…๋‹ˆ๋‹ค

๋ฉ”์ธ์–ธ์–ด๋Š” ์ฝ”ํ‹€๋ฆฐ์ด๊ณ 

์š”์ฆ˜์€ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

28๊ฐœ โˆ™ (4์‹œ๊ฐ„ 9๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!