Jdbi: StringTemplate4 ์ง€์› ์ค‘๋‹จ ๋ฐ ์‚ฌ์šฉ ์ค‘๋‹จ

์— ๋งŒ๋“  2018๋…„ 04์›” 25์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jdbi/jdbi

์ด ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์ง€์›์„ ๊ฒ€ํ† ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 2014๋…„ ์ดํ›„๋กœ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๊ฐ€ ์—†์—ˆ๊ณ  StringTemplate ์ž์ฒด์˜ ๋ฌธ์ œ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  JDBI์™€์˜ ํ†ตํ•ฉ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ ๋ฐ ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๋ฌธ์ œ ๋˜๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 2017๋…„ 11์›” ์ดํ›„ ๋ฌธ์ œ ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์—†์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ ํ™œ๋™์— ๋Œ€ํ•œ

์ตœ์†Œํ•œ์˜ ๊ฒƒ์€ ๋ฌธ์„œ์— ๊ณต์ง€๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌ

cleanup question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์ „์ด์ ์œผ๋กœ ํฌํ•จ๋œ ์ข…์†์„ฑ ์—†์ด๋Š” IDE์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ณผ ์ˆ˜๋„ ์—†๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. NoClassDefFoundError ๋Š” ์ •๋ง ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  14 ๋Œ“๊ธ€

StringTemplate ํ”„๋กœ์ ํŠธ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ๋‹ค๋Š” ๋ฌธ์„œ์˜ ์•Œ๋ฆผ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์›์ด Jdbi์˜ ST ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‹น๋ถ„๊ฐ„์€ ๊ณ„์† ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ์— ST4๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋Œ€์•ˆ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. SQL์šฉ ๋ณต์žกํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ ๊ฐ„์— SQL ๋น„ํŠธ์™€ ๋ถ€๋ถ„์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ๋‚ด์šฉ์„ ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €์—๊ฒŒ stringtemplate์„ ์ œ๊ฑฐํ•˜๋ฉด ๋‹ค๋ฅธ ๋Œ€์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” ๋งŽ์€ ์ค‘๋ณต์œผ๋กœ sql ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ NOTICE ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋Œ€์ฒดํ’ˆ์ด ์žˆ์œผ๋ฉด ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ jdbi์— ์ž˜ ๋งž๋Š” ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๊นŒ? mustache ์ข€ ์จ๋ดค๋Š”๋ฐ ๊ดœ์ฐฎ์•˜๋Š”๋ฐ ์ „๋ฌธ๊ฐ€์™€๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ‰๋‹ˆ๋‹ค...

@jarlah ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ๋‚ด๊ฐ€ ์ผํ•˜๋Š” FreeMarker์— ๋งค์šฐ ๋งŒ์กฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝง์ˆ˜์—ผ๋„ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

@jarlah์— ๋™์˜ - ๋Œ€์•ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ST๊ฐ€ ์—†์œผ๋ฉด ๋ณต์ œ๊ฐ€ ๋ฐฉ๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์•ˆ์€ ๋‹จ์ˆœํ•˜๊ณ  ํ‘œํ˜„๋ ฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ST์— ๋Œ€ํ•ด ์ œ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค๋ž˜์ „์— Freemarker๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด SQL ํ…œํ”Œ๋ฆฌํŠธ์— ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

BTW ์—ฌ๊ธฐ ์— ST์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. jdbi ํ†ตํ•ฉ ์ˆ˜์ค€์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

jdbi ๊ฐ€ ์ผ์„ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ํ™•์‹คํžˆ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€ templateEngine์€ ์–ด๋–ป๊ฒŒ jdbi์— ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ๋ชจ๋‘ core ์—์„œ ์›ํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ์ข…์†์„ฑ์„ ๊ฐ€์ ธ์˜ค๊ณ  1-ํด๋ž˜์Šค ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ \

IIRC stringtemplate์—๋Š” ์ž์ฒด mvn ๋ชจ๋“ˆ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ณ„์† ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์–ด์จŒ๋“  ์„ ํƒ์  ์ข…์†์„ฑ๋ณด๋‹ค ์‚ฌ์šฉ์ž์—๊ฒŒ ๋œ ๋ฒˆ๊ฑฐ๋กœ์šด ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

StringSubstitutor ์—”์ง„์„ ๊ธฐ์—ฌํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๊ณ (์•„์ง ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) Mustache๋„ ๊ฝค ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ <optional> ์ข…์†์„ฑ์ด ์žˆ๋Š” ์ž์ฒด ํฌํ•จ๋œ ๋‹จ์ผ ํด๋ž˜์Šค์ด๊ฑฐ๋‚˜ ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๊ฐ€๋ฒผ์šด ๊ฒฝ์šฐ ์ฝ”์–ด์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“ˆ์„ ํšŒ์ „์‹œ์ผœ ๋ด…์‹œ๋‹ค. ์ œ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๊ธฐ์ค€์€ ํ†ต๊ณผ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ธฐ์ค€์ด ์•„๋‹ˆ๋ผ ๊ธฐ์ค€์ด์—ˆ์Šต๋‹ˆ๋‹ค :)

๊ทธ๊ฒƒ์€ stringtemplate4 ๋ชจ๋“ˆ์— ์˜ํ•ด ์„ค์ •๋œ ํŒจํ„ด์œผ๋กœ ๊นจ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๋กœ์„œ maven, ํŠนํžˆ ๋‚ด ์ข…์†์„ฑ์˜ ์ข…์†์„ฑ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์‹ซ์–ดํ•˜๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@UseTemplateEngine ์กด์žฌํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  stringtemplate์— @UseStringTemplateEngine ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ชจ๋“  ํ…œํ”Œ๋ฆฟ ์—”์ง„์— ๋ฐ”๋žŒ์งํ•œ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ง€๊ธˆ๋ถ€ํ„ฐ ์ผ๋ฐ˜ ์ฃผ์„๋งŒ ๊ณ ์ˆ˜ํ•ฉ๋‹ˆ๊นŒ?

๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์ „์ด์ ์œผ๋กœ ํฌํ•จ๋œ ์ข…์†์„ฑ ์—†์ด๋Š” IDE์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ณผ ์ˆ˜๋„ ์—†๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. NoClassDefFoundError ๋Š” ์ •๋ง ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ณผ๊ฑฐ์— freemarker๋กœ ๋งŽ์€ ์ž‘์—…์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€์›์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์žฌ๋ฏธ์žˆ๋Š” ์‹œ๋„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘์ ์œผ๋กœ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ ์„ ์ž˜ ๋ด์•ผ ํ•œ๋‹ค.

๋‹ค๋ฅธ ๊ฒƒ์ด ์—†์œผ๋ฉด ์ŠคํŒŒ์ดํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ํ•ฉ๋ฆฌ์ ์ธ ์ž‘์—… ๊ฐœ๋… ์ฆ๋ช…์„ ๊ฐ–๊ธฐ ์ „์— ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์—ด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ๋กœ๋“œ๋Š” ์ •์ ์ด ์•„๋‹ˆ๋ผ ๋™์ ์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ํ…œํ”Œ๋ฆฟ์„ ์ˆ˜๋™์œผ๋กœ ๋กœ๋“œํ•˜๊ณ  ์บ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. stringtemplate4 ๋ชจ๋“ˆ์„ ๋ณต์ œํ•˜๊ณ  ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด jdbi ํฌํฌ์˜ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•œ ์ƒํ™ฉ์ด ๋‹ค์Œ์˜ ์กฐํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • StringTemplate 4๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ์—์„œ ์˜ˆ์™ธ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ์˜ˆ์ธก ๊ฐ€๋Šฅ).
  • StringTemplate 4๋Š” ๋™์‹œ ์‚ฌ์šฉ์„ ํŠน๋ณ„ํžˆ ๊ฐ•์กฐํ•˜์—ฌ ์„ค๊ณ„๋˜์ง€ ์•Š์•„ ๊ธฐ์กด ์‚ฌ์šฉ์ž๋ฅผ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๊ณ ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

StringTemplate 5๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์•ˆ์ „ํ•œ ๋™์‹œ์„ฑ(๋ฐ ๋ถˆ๋ณ€์„ฑ)์ด ๊ธฐ๋ณธ ์„ค๊ณ„์—์„œ ํฐ ์—ญํ• ์„ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰