์ด ํ๋ ์์ํฌ์ ๋ํ ์ง์์ ๊ฒํ ํ ๊ฒ์ ์ ์ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ง์๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. 2014๋ ์ดํ๋ก ์์ ๋ฆด๋ฆฌ์ค๊ฐ ์์๊ณ StringTemplate ์์ฒด์ ๋ฌธ์ ์๊ฐ ์ฆ๊ฐํ๊ณ JDBI์์ ํตํฉ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฐ ํผ๋์ด ๋ฐ์ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ํ ํ๋ฆฟ ํ์ผ์ ๋ก๋ํ๋ ๋ฌธ์ ๋๋ ์ค์ํ์ง ์์ ํด๋์ค๋ก๋ฉ์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. 2017๋ 11์ ์ดํ ๋ฌธ์ ์ ๋ํ ์๋ต์ด ์์ผ๋ฉฐ ํ๋ก์ ํธ ํ๋์ ๋ํ
์ต์ํ์ ๊ฒ์ ๋ฌธ์์ ๊ณต์ง๋ฅผ ์ฌ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
๊ฐ์ฌ
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์ ๋ฒ๋ค๋ก ์ ๊ณต๋ฉ๋๊น? ๊ทธ๋ค์ ๋ชจ๋ IIRC stringtemplate์๋ ์์ฒด mvn ๋ชจ๋์ด ์์ผ๋ฏ๋ก ๊ณ์ ๊ทธ๋ ๊ฒ ํด์ผ ํ ๊น์? ์ด์จ๋ ์ ํ์ ์ข
์์ฑ๋ณด๋ค ์ฌ์ฉ์์๊ฒ ๋ ๋ฒ๊ฑฐ๋ก์ด ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. StringSubstitutor ์์ง์ ๊ธฐ์ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์๊ณ (์์ง ํ์ง ์์ ๊ฒฝ์ฐ) Mustache๋ ๊ฝค ์ฌ๋ฏธ์์ ๊ฒ ๊ฐ์ต๋๋ค.core
์์ ์ํ์ง ์๋ ์ธ๋ถ ์ข
์์ฑ์ ๊ฐ์ ธ์ค๊ณ 1-ํด๋์ค ๋ชจ๋์ ๋ง๋ค๊ฑฐ๋ \
๋จ์ผ <optional>
์ข
์์ฑ์ด ์๋ ์์ฒด ํฌํจ๋ ๋จ์ผ ํด๋์ค์ด๊ฑฐ๋ ์ด์ ์ ์ฌํ๊ฒ ๊ฐ๋ฒผ์ด ๊ฒฝ์ฐ ์ฝ์ด์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชจ๋์ ํ์ ์์ผ ๋ด
์๋ค. ์ ๊ฐ ์ ํธํ๋ ๊ธฐ์ค์ ํต๊ณผ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ธฐ์ค์ด ์๋๋ผ ๊ธฐ์ค์ด์์ต๋๋ค :)
๊ทธ๊ฒ์ stringtemplate4 ๋ชจ๋์ ์ํด ์ค์ ๋ ํจํด์ผ๋ก ๊นจ์ง ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๋ก์ maven, ํนํ ๋ด ์ข ์์ฑ์ ์ข ์์ฑ์ ์๋ง์ผ๋ก ๋ง๋๋ ๊ฒ๋ณด๋ค ๋ ์ซ์ดํ๋ ๊ฒ์ด ๊ฑฐ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
@UseTemplateEngine
์กด์ฌํจ์๋ ๋ถ๊ตฌํ๊ณ stringtemplate์ @UseStringTemplateEngine
์์ต๋๋ค. ์ด๊ฒ์ด ๋ชจ๋ ํ
ํ๋ฆฟ ์์ง์ ๋ฐ๋์งํ ํธ๋ฆฌํ ๊ธฐ๋ฅ์
๋๊น, ์๋๋ฉด ํ์ํ์ง ์๋ ํ ์ง๊ธ๋ถํฐ ์ผ๋ฐ ์ฃผ์๋ง ๊ณ ์ํฉ๋๊น?
๊ฐ์ธ์ ์ผ๋ก ๋๋ ๊ทธ๊ฒ๋ค์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ํด๋์ค ๊ฒฝ๋ก์ ์ ์ด์ ์ผ๋ก ํฌํจ๋ ์ข
์์ฑ ์์ด๋ IDE์์ ํด๋์ค๋ฅผ ๋ณผ ์๋ ์๋๋ก ํ๊ณ ์ถ์ต๋๋ค. NoClassDefFoundError
๋ ์ ๋ง ๊ณ ํต์ค๋ฌ์ธ ์ ์์ต๋๋ค.
๋๋ ๊ณผ๊ฑฐ์ freemarker๋ก ๋ง์ ์์ ์ ํ์ต๋๋ค. ์ง์์ ๊ตฌํํ๋ ๊ฒ์ ์ฌ๋ฏธ์๋ ์๋๊ฐ ๋ ์ ์์ต๋๋ค. ์ง์ ์ ์ผ๋ก ์๋ฏธํ๋ ๊ฒ์ ์๋๋๋ค. ํ์ง๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ค์ ์ ์ ๋ด์ผ ํ๋ค.
๋ค๋ฅธ ๊ฒ์ด ์์ผ๋ฉด ์คํ์ดํฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํ์ฌ ์์ ์ค์ ๋๋ค. ํฉ๋ฆฌ์ ์ธ ์์ ๊ฐ๋ ์ฆ๋ช ์ ๊ฐ๊ธฐ ์ ์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ด์ง ์์ ๊ฒ์ ๋๋ค. ํ ํ๋ฆฟ ๋ก๋๋ ์ ์ ์ด ์๋๋ผ ๋์ ์ด์ด์ผ ํ๋ฏ๋ก ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํ ํ๋ฆฟ์ ์๋์ผ๋ก ๋ก๋ํ๊ณ ์บ์ํด์ผ ํฉ๋๋ค. stringtemplate4 ๋ชจ๋์ ๋ณต์ ํ๊ณ ํด๋์ค ์ด๋ฆ์ ๋ณ๊ฒฝํ์ต๋๋ค. ๋๊ตฐ๊ฐ ๊ด์ฌ์ด ์๋ค๋ฉด jdbi ํฌํฌ์ ๋ง์คํฐ ๋ธ๋์น์์ ์์ ํ๊ณ ์์ต๋๋ค.
๋๋ ์ด ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ํฉ์ด ๋ค์์ ์กฐํฉ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
StringTemplate 5๊ฐ ์์ฑ๋๋ฉด ์์ ํ ๋์์ฑ(๋ฐ ๋ถ๋ณ์ฑ)์ด ๊ธฐ๋ณธ ์ค๊ณ์์ ํฐ ์ญํ ์ ํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ธ์ ์ผ๋ก ๋๋ ๊ทธ๊ฒ๋ค์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ํด๋์ค ๊ฒฝ๋ก์ ์ ์ด์ ์ผ๋ก ํฌํจ๋ ์ข ์์ฑ ์์ด๋ IDE์์ ํด๋์ค๋ฅผ ๋ณผ ์๋ ์๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
NoClassDefFoundError
๋ ์ ๋ง ๊ณ ํต์ค๋ฌ์ธ ์ ์์ต๋๋ค.