Java๋ ๋ค๋ฅธ ์ธ๊ธฐ ์ธ์ด์ ์ด๋ป๊ฒ ๋ค๋ฆ
๋๊น? ์ ์๋ฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋ฐฐ์์ผ ํ๋ ์ธ์ด๊ฐ ๋์ด์ผ ํ ๊น์? ์ฒ์๋ถํฐ ๋ค๋ฅธ ์ธ์ด์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ์ ์ฉํ์ฌ Java๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ๋์์ด ๋๋ ๊ณํ์ ์ธ์ ๋ณด๊ฒ ์ต๋๋ค. Java๋ก ํ๋ก๋์
์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ์ธ์ด๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ ์ฐจ์ด์ ์ ๋์ดํด ๋ณด๊ฒ ์ต๋๋ค. Mikhail Zatepyakin์ ๋ฏธ๋ ์ฐธ๊ฐ์๋ค์ ์ํ ํ์์์ ์ด ๋ณด๊ณ ์๋ฅผ ์ฝ์์ต๋๋ค.
โ ์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ์ด๋ฆ์ ๋ฏธ์ค์ ๋๋ค. ์ ๋ Yandex.Market์ ๊ฐ๋ฐ์์ ๋๋ค. ์ค๋์ Java๋ฅผ ๋ฐฐ์์ผ ํ๋ ์ด์ ์ ํจ๊ณผ์ ์ผ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋น์ ์ ํฉ๋ฆฌ์ ์ธ ์ง๋ฌธ์ ํ ์ ์์ต๋๋ค: ์ ๋ด๊ฐ ์๋ ๊ฐ์ ๊ฒฝํ์ ๊ฐ์ง ๊ฐ๋ ฅํ ๊ฐ๋ฐ์๊ฐ ์๋ ์ด ์ด์ผ๊ธฐ๋ฅผ ํ ๊ฒ์ธ๊ฐ? ์ฌ์ค ์ ๋ ์ต๊ทผ์ Java๋ฅผ ๊ณต๋ถํ ์ง XNUMX๋ ๋ฐ์ฏค ๋์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ์ด๋ ๋์ง, ์ด๋ค ํจ์ ์ด ์์๋์ง ์์ง๋ ๊ธฐ์ตํ๊ณ ์์ต๋๋ค.
XNUMX๋ ์ ์ ๋ Yandex.Market์์ ์ธํด์ญ์ ํ์ต๋๋ค. ์ ๋ Beru์ฉ ๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํ๋๋ฐ, Market ์์ฒด๋ฅผ ์ํด ์๋ง ์ฌ์ฉํ์ จ์ ๊ฒ๋๋ค. ์ด์ ์ ๋ ๊ทธ๊ณณ์์ ๋ค๋ฅธ ํ์ผ๋ก ๊ณ์ ์ผํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋น์ฆ๋์ค ํํธ๋๋ฅผ ์ํ Yandex.Market ๋ถ์ ํ๋ซํผ์ ๋ง๋ญ๋๋ค.
์์ํ์. ์ค์ฉ์ ์ธ ๊ด์ ์์ Java๋ฅผ ๋ฐฐ์ฐ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ฌ์ค Java๋ ๋งค์ฐ ์ ๋ช
ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์
๋๋ค. ๋งค์ฐ ํฐ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ธ๊ธฐ ์ง์์ธ TIOBE ์ง์๊ฐ ์๋๋ฐ, ๊ทธ๊ณณ์์ Java๊ฐ XNUMX์๋ฅผ ์ฐจ์งํฉ๋๋ค. ๋ํ ๊ตฌ์ธ ์ฌ์ดํธ์์๋ ๋๋ถ๋ถ์ ๊ณต์์ด Java์ ๊ดํ ๊ฒ์์ ์ ์ ์์ต๋๋ค. ์ฆ, Java๋ก ๊ฐ๋ฐํ๋ฉด ์ธ์ ๋ ์ง ์ผ์๋ฆฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ปค๋ฎค๋ํฐ๊ฐ ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด Stack Overflow๋ ๋ค๋ฅธ ์ฌ์ดํธ์์ ๋ต๋ณ์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ํ Java๋ก ๊ฐ๋ฐํ ๋ ์ค์ ๋ก JVM์์ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฏ๋ก JVM์ ์ฌ์ฉํ๋ Kotlin, Scala ๋ฐ ๊ธฐํ ์ธ์ด๋ก ์ฝ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
์ด๋
์ ๊ด์ ์์ Java์ ์ข์ ์ ์ ๋ฌด์์
๋๊น? ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Python์ ๋น ๋ฅธ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ํ ์ค์ง๋ฆฌ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
์ฅ์ ์ผ๋ก๋ ์คํ ์ฝ๋๋ฅผ ์์ ํ ์ ์ดํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์๋์ฐจ, Yandex ๋ฌด์ธ ์๋์ฐจ๊ฐ ์์ผ๋ฉฐ ํด๋น ์ฝ๋๋ ํ๋ฌ์ค๋ก ์์ฑ๋ฉ๋๋ค. ์? Java์๋ Garbage Collector๋ผ๋ ๊ฒ์ด ์์ต๋๋ค. ๋ถํ์ํ ๊ฐ์ฒด์ RAM์ ์ง์๋๋ค. ์ด ์์ ์ ์๋ฐ์ ์ผ๋ก ์์๋์ด ์ธ์์ ์ค์งํฉ๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ ๋๋จธ์ง ๋ถ๋ถ์ ์ค์งํ๊ณ ๊ฐ์ฒด ์๋ฅผ ๊ณ์ฐํ๊ณ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์๋๋ค. ๊ทธ๋ฐ ๊ฒ์ด ๋๋ก ์์ ์๋ํ๋ค๋ฉด ๋ฉ์ง์ง ์์ต๋๋ค. ๋๋ก ์ ์ง์งํ๋ฉฐ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ฐ๊ณ ๋๋ก๋ฅผ ์ ํ ๋ณด์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋๋ก ์ ์ ๋ฌธ๊ฐ์๊ฒ ์์ฑ๋ฉ๋๋ค.
Java๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๊น? ์ด๋ ์ฃผ๋ก ์์ญ ๋๋ ์๋ฐฑ ๋ช
์ ์ฌ๋๋ค์ด ์๋
์ ๊ฑธ์ณ ์์ฑํ ๋๊ท๋ชจ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ธ์ด์
๋๋ค. ํนํ Yandex.Market์ ๋ฐฑ์๋ ์ค ์๋น์๊ฐ Java๋ก ์์ฑ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋ฌ ๋์์ ๋ถ์ฐ๋ ํ์ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ๊ฐ ๋์์๋ XNUMX๋ช
์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฝ๊ณ XNUMX๋
์ด์ ์ง์๋์์ผ๋ฉฐ ๋์์ ์๋ก์ด ์ฌ๋๋ค์ด ๋ค์ด์ ์ด ์ฝ๋๋ฅผ ์ดํดํฉ๋๋ค.
์ธ์ด์ ํฌํจ๋ ์ฝ๋๊ฐ ์ฝ๊ฒ ์ง์๋๊ณ ๋๊ท๋ชจ ํ์์ ์ฝ๊ฒ ๊ฐ๋ฐ๋ ์ ์์ผ๋ ค๋ฉด ์ธ์ด์๋ ์ด๋ค ํน์ฑ์ด ์์ด์ผ ํฉ๋๊น? ์ฐ์ , ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋์ฌ์ผ ํ๊ณ , ๋ณต์กํ ์ํคํ ์ฒ ์๋ฃจ์ ์ ๊ตฌํํ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ์ฆ, ๋์ ์์ค์ ์ถ์ํ ๋ฑ์ ์์ฑํ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ด Java๊ฐ ์ฐ๋ฆฌ์๊ฒ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋๋ค. ๋์ ์์ค์ ์ถ์ํ์ ๋ณต์กํ ์ํคํ ์ฒ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ ๋ง ์ฝ์ต๋๋ค.
Java์ฉ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง์ด ์์ต๋๋ค. ์ธ์ด๊ฐ 15๋ ์ด์ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ๊ธฐ๊ฐ ๋์ ์์ฑํ ์ ์๋ ๋ชจ๋ ๋ด์ฉ์ด ์ฌ๊ธฐ์ ์์ฑ๋์์ผ๋ฏ๋ก ํ์ํ ๋ชจ๋ ๊ฒ์ ์ํ ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ ์๊ฐ์๋ ์ด๋ณด JA ์ ์๊ฐ ๊ฐ์ถฐ์ผ ํ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋ฌด์์ธ๊ฐ์? ์ฐ์ ์๋ฐ ํต์ฌ ์ธ์ด์ ๋ํ ์ง์์ด๋ค. ๋ค์์ ์ผ์ข
์ ์ข
์์ฑ ์ฃผ์
ํ๋ ์์ํฌ์
๋๋ค. ๋ค์ ์ฐ์ฌ์ธ Kirill์ด ์ด์ ๋ํด ๋ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ๋๋ฌด ๊น์ด ๋ค์ด๊ฐ์ง๋ ์๊ฒ ์ต๋๋ค. ๋ค์์ ์ํคํ
์ฒ์ ๋์์ธ ํจํด์ด๋ค. ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๋ ค๋ฉด ๊ตฌ์กฐ์ ์ผ๋ก ์๋ฆ๋ค์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ํ ์ผ์ข
์ SQL ๋๋ ORM์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๋ฐฑ์๋์ ๋ ๋ง์ด ์ ์ฉ๋ฉ๋๋ค.
๊ฐ๋ค! ์๋ฐ ์ฝ์ด. ์ฌ๊ธฐ์๋ ์ค์ ๋ก ๋ฏธ๊ตญ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ธ์ด ์์ฒด๋ฅผ ์์์ผ ํฉ๋๋ค. ์ฃผ์ํด์ผ ํ ์ฌํญ. ์ฒซ์งธ, Java๋ ์ต๊ทผ ๋ช ๋
๋์ ๋ง์ ๋ฒ์ ์ ์ถ์ํ์ต๋๋ค. ์ฆ, 2014-2015๋
์ 4๋ฒ์งธ ๋ฒ์ ์ด ์ถ์๋ ๋ค์ 8๋ฒ์งธ, XNUMX๋ฒ์งธ, XNUMX๋ฒ์งธ ๋ฒ์ , ๋ง์ ์ ๋ฒ์ ๊ณผ ์๋กญ๊ณ ๋ฉ์ง ๊ธฐ๋ฅ์ด ๋ง์ด ๋์
๋์์ต๋๋ค. , ์๋ฅผ ๋ค์ด Java Stream API, ๋๋ค ๋ฑ. ํ๋ก๋์
์ฝ๋์ ์ฌ์ฉ๋๋ ๋งค์ฐ ๋ฉ์ง๊ณ ์ ์ ํ๋ฉฐ ๋ฉ์ง ๊ฒ๋ค, ์ธํฐ๋ทฐ์์ ๋ฌป๋ ๋ด์ฉ, ์์์ผ ํ ๋ด์ฉ์
๋๋ค. ๋ฐ๋ผ์ Java-XNUMX ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑ
์ฅ์์ ์ฑ
์ ๊บผ๋ด์ ๋ฐฐ์์๋ ์ ๋ฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ์ ๊ณํ์
๋๋ค. ์ฐ๋ฆฌ๋ Java-XNUMX ์ด์์ ๋ฐฐ์๋๋ค.
์ฐ๋ฆฌ๋ Stream API, var ๋ฑ๊ณผ ๊ฐ์ ํ์ ์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ ๋๋ค. ์ด๋ ์ธํฐ๋ทฐ ์ค์ ์ง๋ฌธ์ ๋ฐ๊ณ ํ๋ก๋์ ์์ ์ง์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, Stream API๋ ๋ฃจํ๋ณด๋ค ํจ์ฌ ๋ ๋ฉ์ง๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ๋ฉ์ง ๊ฒ์ ๋๋ค. ๊ผญ ์ฃผ์ํ์ธ์.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต์, ์์ธ ๋ฑ๊ณผ ๊ฐ์ ๋ชจ๋ ์ข ๋ฅ์ ๊ฒ๋ค์ด ์์ต๋๋ค. ์์ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ๋ ํ ์ค์ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฌํ ์์ธ๋ ํ์ํ์ง ์์ต๋๋ค. ์ด์จ๋ ๋๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋ฌ๋ ์ธํฐ๋ทฐ์์ ํ์คํ ์ง๋ฌธ์ ๋ฐ๊ฒ ๋ ๊ฒ์ด๋ฉฐ ์ ์ ๊ณผ์ ์์ ํ์คํ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ธ, ๋ฐ๋ณต์ ๋ฐ ๊ธฐํ ์ฌํญ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ ๊ตฌ์กฐ. ๊ตฌ์กฐ ์์ด๋ ๊ฐ ์ ์์ง๋ง, ์ธํธ, โโ์ฌ์ , ์ํธ๊ฐ ์๋ค๋ ๊ฒ๋ง ๋ชจ๋ฅธ๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์
๋๋ค. ๋ํ ๊ตฌ์กฐ์ ๋ค์ํ ๊ตฌํ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Java์ ๋์ผํ ์ฌ์ ์๋ HashMap ๋ฐ TreeMap์ ํฌํจํ์ฌ ๋ง์ ๊ตฌํ์ด ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ์๋ก ๋ค๋ฅธ ์ ๊ทผ์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์๋ก ์ด๋ป๊ฒ ๋ค๋ฅธ์ง, ์ธ์ ์ด๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํ๋์ง ์์์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์๋ฉด ๋งค์ฐ ๋ฉ์ง ๊ฒ์ ๋๋ค. ์ฆ, ์ ๊ทผ๋ฒ(๋ฒ ํ ์ด ์ผ๋ง๋ ์๋ํ๋์ง, ํจ์ค๊ฐ ์๋ํ๋ ์๊ฐ, ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ฑ)์ ์๋ ๊ฒ์ด ์ฝ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด HashMap์ ๋ฒํท์ ๋ฌด์์ ๋๊น?
ํธ๋ฆฌ์ ๊ทธ๋ํ์๋ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํ๋ก๋์ ์ฝ๋์์๋ ๊ทธ๋ค์ง ํํ์ง ์์ง๋ง, ์ธํฐ๋ทฐ์์๋ ์์ฃผ ๋ฑ์ฅํ๋ ๊ฒ๋ค์ ๋๋ค. ๋ฐ๋ผ์ ํธ๋ฆฌ, ๊ทธ๋ํ๋ฅผ ๋๋น์ ๊น์ด๋ก ํ์ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๊ฒ๋ค์ ๋ชจ๋ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๋๊ท๋ชจ ์ฝ๋, ๋ณต์กํ ์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ, ๋ค์ค ํด๋์ค ์ฝ๋ ์์ฑ์ ์์ํ์๋ง์ ๋น๋ ์์คํ ์์ด ์ข ์์ฑ์ ํด๊ฒฐํ๋ ๊ฒ์ด ์ด๋ ต๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๋ค์ ์ฃผ๋ก Maven๊ณผ Gradle์ ๋๋ค. ์ด๋ฅผ ํตํด ํ ์ค๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ฆ, ํ ์ค์ง๋ฆฌ XML์ ์์ฑํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ๋ก ๊ฐ์ ธ์ต๋๋ค. ํ๋ฅญํ ์์คํ . ๊ทธ๊ฒ๋ค์ ๊ฑฐ์ ๋์ผํฉ๋๋ค. Maven์ด๋ Gradle ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ธ์.
๋ค์ - ์ผ์ข ์ ๋ฒ์ ์ ์ด ์์คํ . ์ธ๊ธฐ ์๊ณ ํํ ๋ฆฌ์ผ์ด ๋ง๊ธฐ ๋๋ฌธ์ Git์ ์ถ์ฒํฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ์ฌ๋์ด Git์ ์ฌ์ฉํฉ๋๋ค. ์ ๋ง ๋ฉ์ง ์ผ์ ๋๋ค. Git ์์ด๋ ์ด ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ผ์ข ์ ๊ฐ๋ฐ ํ๊ฒฝ. IntelliJ Idea๋ฅผ ์ถ์ฒํฉ๋๋ค. ๊ฐ๋ฐ ํ๋ก์ธ์ค ์๋๋ฅผ ํฌ๊ฒ ๋์ด๊ณ , ๋ง์ ๋์์ ์ฃผ๋ฉฐ, ๋ชจ๋ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์์ฑํด ์ฃผ๋ ๋ฑ ์ผ๋ฐ์ ์ผ๋ก ํ๋ฅญํฉ๋๋ค.
์ฌ๋ผ์ด๋์ ๋งํฌ: SQLZOO , ํ๋ธ๋ผํฌ์คํธ
SQL. ๋ฐฑ์๋์ ๋ํด ์กฐ๊ธ. ์ค์ ๋ก ์ฌ๊ธฐ์ ์ฌ๋ฏธ์๋ ์ฌ๊ฑด์ด์์์ต๋๋ค. ๋ ๋ฒ์งธ ์ธํด์ญ ์ธํฐ๋ทฐ ์ดํ ์ ์ HR ๋ด๋น์๊ฐ ์ ์๊ฒ ์ ํ๋ฅผ ๊ฑธ์ด ์ดํ ํ์ SQL๊ณผ HTTP์ ๋ํด ๋ฌผ์ด๋ณผ ๊ฒ์ด๋ฏ๋ก ๋ฐฐ์์ผ ํ๋ค๊ณ ๋งํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ SQL์ด๋ HTTP์ ๋ํด ๊ฑฐ์ ์๋ ๋ฐ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๋ฉ์ง ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ์ด์ -
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํคํ ์ฒ๋ฅผ ์๋ ๊ฒ๋ ์ข์ต๋๋ค. ์ด๋ค์ ๋ชจ๋ ์ข ๋ฅ์ ํค, ์ธ๋ฑ์ค, ์ ๊ทํ์ ๋๋ค. Habrรฉ์๋ ์ด์ ๊ดํ ์ผ๋ จ์ ๊ฒ์๋ฌผ์ด ์์ต๋๋ค.
Java์๋ SQL ์ธ์๋ JPA ๋ฑ ์จ๊ฐ ์ข
๋ฅ์ ๊ฐ์ฒด ๊ด๊ณํ ๋งคํ ์์คํ
์ด ์์ต๋๋ค. ์ผ๋ถ ์ฝ๋๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์๋ SQL ์ฝ๋(SELECT id name FROM info.users WHERE id IN userIds)๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ์์ ํด๋น ID์ ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค.
๋ค์์ผ๋ก, ๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ Java ๊ฐ์ฒด๋ก ๋ณํํ๋ ํน์ ๋งคํผ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ฝ๋๋ฅผ ์ค์ ๋ก ์คํํ๋ ์ธ ๋ฒ์งธ ๋ฉ์๋๊ฐ ์๋์ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ JPA๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ ์์ฑ๋ ํ ์ค๋ก ๋์ฒด๋ ์ ์์ต๋๋ค. ๋์ผํ ์์ ์ ์ํํฉ๋๋ค. All ByIdIn์ ์ฐพ์ต๋๋ค. ์ฆ, ๋ฉ์๋ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
์์ฃผ ๋ฉ์ง ์ผ์ ๋๋ค. ๋ ์์ ๋ SQL์ ๋ชฐ๋์ ๋๋ JPA๋ฅผ ์ฌ์ฉํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์ํ์ธ์. ๋๋ฌด ๊ฒ์ผ๋ฅด๋ฉด SQL์ ๋ฐฐ์ธ ์ ์๋ค๋ฉด ์ฌ์์ด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ํ์ฌ๊ฐ ๋ฐ์ํฉ๋๋ค!
๋ด. Spring ํ๋ ์์ํฌ ๊ฐ์ ๊ฒ์ ๋ค์ด๋ณธ ์ฌ๋์ด ์๋์? ์ฌ๋ฌ๋ถ ์ค ๋ช ๋ช
์ธ์ง ๋ณด์ด์๋์? ์ด์ ์์ด๋ ์๋๋๋ค. Spring์ ๋งค ๋ ๋ฒ์งธ Java ๋ฐฑ์๋ ๊ณต์์ ์๊ตฌ ์ฌํญ์ ํฌํจ๋ฉ๋๋ค. ๊ทธ๊ฒ ์์ด๋ ํฐ ๋ฐ์ ์ด ์ ํ ์์ต๋๋ค. ๋ด์ด๋ ๋ฌด์์
๋๊น? ์ฐ์ , ์ด๊ฒ์ ์ข
์์ฑ ์ฃผ์
ํ๋ ์์ํฌ์
๋๋ค. ์ด๊ฒ์ ๋ํด์๋
Spring Boot๋ ํ๋์ ๋ฒํผ์ผ๋ก ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ Spring์ ์ผ๋ถ์ ๋๋ค. THID๋ก ์ด๋ํ์ฌ ๋ช ๊ฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ด์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด localhost 8080์์ ์คํ๋ฉ๋๋ค. ์ฆ, ์์ง ํ ์ค์ ์ฝ๋๋ ์์ฑํ์ง ์์์ง๋ง ์ด๋ฏธ ์๋ํ๊ณ ์์ต๋๋ค. ์์ฃผ ๋ฉ์ง ์ผ์ ๋๋ค. ์์ ์ ๊ธ์ ์ฐ๋ฉด ๋ฐ์ฌ๋ฉ๋๋ค!
Spring์ ๋งค์ฐ ํฐ ํ๋ ์์ํฌ์ด๋ค. ์ด๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํํ๊ณ ์ข ์์ฑ ์ฃผ์ ์ ํด๊ฒฐํ ๋ฟ๋ง ์๋๋ผ REST API ๋ฉ์๋ ์์ฑ์ ํฌํจํ์ฌ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ฆ, ๋ช ๊ฐ์ง ๋ฉ์๋๋ฅผ ์์ฑํ๊ณ ์ฌ๊ธฐ์ Get ๋งคํ ์ฃผ์์ ์ฐ๊ฒฐํ์ต๋๋ค. ์ด์ Hello world๋ฅผ ์์ฑํ๋ localhost์ ๋ํ ๋ช ๊ฐ์ง ๋ฉ์๋๊ฐ ์ด๋ฏธ ์์ต๋๋ค. ๋ ์ค์ ์ฝ๋๊ฐ ์๋ํฉ๋๋ค. ๋ฉ์ง ๊ฒ.
Spring์ ๋ํ ํ ์คํธ ์์ฑ์ ๋ ์ฝ๊ฒ ํด์ค๋๋ค. ๋๊ท๋ชจ ๊ฐ๋ฐ์์๋ ํ ์คํธ ์์ด๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ ์คํธํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด Java์๋ ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ JUnit 5๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก JUnit์ด์ง๋ง ์ต์ ๋ฒ์ ์ ๋ค์ฏ ๋ฒ์งธ์ ๋๋ค. ํ ์คํธ๋ฅผ ์ํ ๋ชจ๋ ๊ฒ, ๋ชจ๋ ์ข ๋ฅ์ ์ฃผ์ฅ ๋ฐ ๊ธฐํ ์ฌํญ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฉ์ง Mockito ํ๋ ์์ํฌ๊ฐ ์์ต๋๋ค. ํ ์คํธํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์ธ์. ์ด ๊ธฐ๋ฅ์ ์๋ฅผ ๋ค์ด ์ค๊ฐ ์ด๋๊ฐ์์ ๊ทํ์ ID๋ก VKontakte์ ๋ก๊ทธ์ธํ๊ณ ํด๋น ID์์ VKontakte ์ฌ์ฉ์์ ์ด๋ฆ๊ณผ ์ฑ์ ๋ฐ๋ ๋ฑ ๋ง์ ์์ ์ ์ํํฉ๋๋ค. ์๋ง๋ ํ ์คํธ์ VKontakte๋ฅผ ํฌํจํ์ง ์์ ๊ฒ์ ๋๋ค. ์ด์ํฉ๋๋ค. ํ์ง๋ง ๊ธฐ๋ฅ์ ํ ์คํธํด์ผ ํ๋ฏ๋ก Mockito๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๋ชจ๋ฐฉํ์ต๋๋ค.
ID ๋ฑ์ ์ฌ์ฉํ์ฌ ์ด ํด๋์ค์ ์์ฒญ์ด ์ค๋ฉด Vasya Pupkin๊ณผ ๊ฐ์ ์ฑ์ ๋ฐํํ๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ค. ์ฆ, ๋ชฉ ํ๋์ ํด๋์ค์ ๋ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ ์คํธํ๊ฒ ๋ฉ๋๋ค. ์์ฃผ ๋ฉ์ง ์ผ์ ๋๋ค.
์ฌ๋ผ์ด๋์์ ๋งํฌ
๋์์ธ ํจํด. ๊ทธ๊ฒ์ ๋ฌด์์ ๋๊น? ์ด๋ ๊ฐ๋ฐ ์ค์ ๋ฐ์ํ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํ ํ๋ฆฟ์ ๋๋ค. ๊ฐ๋ฐ ์ค์๋ ๋์ผํ๊ฑฐ๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๋๋ฐ ์ด๋ป๊ฒ๋ ์ ํด๊ฒฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๋๋ค์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก, ํน์ ํ ํ๋ฆฟ์ ์๊ฐํด ๋์ต๋๋ค.
๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํจํด์ด ์๋ ์น์ฌ์ดํธ๊ฐ ์์ต๋๋ค. refactoring.guru๋ฅผ ์ฝ๊ณ ์ด๋ค ํจํด์ด ์๋์ง ์์๋ณด๊ณ ๋ค์ํ ์ด๋ก ์ ์ฝ์ด๋ณด์ธ์. ๋ฌธ์ ๋ ์ฌ์ค์ ์ธ๋ชจ๊ฐ ์๋ค๋ ์ ์ด๋ค. ์ค์ ๋ก ์ฐ์ต์ด ์๋ ํจํด์ ํน๋ณํ ์ ์ฉํ์ง ์์ต๋๋ค.
Singletone ๋๋ Builder์ ๊ฐ์ ์ผ๋ถ ํจํด์ ๋ํด ๋ฃ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋๊ฐ ์ด ๋ง์ ๋ค์๋์? ๋ง์ ์ฌ๋๋ค. ์ค์ค๋ก ๊ตฌํํ ์ ์๋ ๊ฐ๋จํ ํจํด์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ต, ๊ณต์ฅ, ์ธ๊ด ๋ฑ ๋๋ถ๋ถ์ ํจํด์ ์ด๋์ ์ ์ฉํด์ผ ํ๋์ง ๋ช ํํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋์์ ์ด ํจํด์ด ์ ์ฉ๋ ์์น๋ฅผ ๋ณผ ๋๊น์ง๋ ์ง์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํจํด์ ๋ํ ์ฐ์ต์ ๋งค์ฐ ์ค์ํฉ๋๋ค. refactoring.guru์์ ์ด์ ๋ํด ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ทธ๋ค์ง ๋์์ด ๋์ง๋ ์์ง๋ง ํ์คํ ํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
ํจํด์ด ํ์ํ ์ด์ ๋ ๋ฌด์์
๋๊น? ํน์ User ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ID์ ์ด๋ฆ์ด ์์ต๋๋ค. ๊ฐ ์ฌ์ฉ์๋ ID์ ์ด๋ฆ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค. ์ผ์ชฝ ์๊ฐ ๊ต์ค์ด๋ค.
์ฌ์ฉ์๋ฅผ ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์์ฑ์ ๋๋ ์ค์ ์๋ผ๋ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ๋ ์ ๊ทผ ๋ฐฉ์์ ๋จ์ ์ ๋ฌด์์ ๋๊น?
๊ฑด์ค์. ์๋ก์ด ์ฌ์ฉ์(7, "Bond"), ์๊ฒ ์ต๋๋ค. ์ด์ User ํด๋์ค๋ ์๊ณ XNUMX๊ฐ์ ์ซ์ ํ๋๊ฐ ์๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. XNUMX๊ฐ์ ์ฐ์ ์ซ์๋ฅผ ํฌํจํ๋ ์์ฑ์๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด ์ซ์๊ฐ ๋ฌด์์ธ์ง, ์ด๋ ์ซ์๊ฐ ์ด๋ค ์์ฑ์ ์ํ๋์ง๋ ๋ช ํํ์ง ์์ต๋๋ค. ๋์์ด๋๊ฐ ๋ณ๋ก๋ค์.
๋ ๋ฒ์งธ ์ต์ ์ setter์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ช ํํ๊ฒ ์์ฑํฉ๋๋ค: setId(7), setName(โBondโ). ์ด๋ค ์์ฑ์ด ์ด๋ค ํ๋์ ์ํ๋์ง ์ดํดํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ธํฐ์๊ฒ ๋ฌธ์ ๊ฐ ์๊ฒผ์ต๋๋ค. ์ฒซ์งธ, ๋ฌด์ธ๊ฐ๋ฅผ ํ ๋นํ๋ ๊ฒ์ ์์ด๋ฒ๋ฆด ์๋ ์๊ณ , ๋์งธ, ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ๋ช ๋ ์๋ ์์ต๋๋ค. ์ด๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ผ๋ฉฐ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ฝ๊ฐ ๋จ์ด์ง๋๋ค. ๊ทธ๋์ ์ฌ๋๋ค์ ๋น๋(Builder)๋ผ๋ ๋ฉ์ง ํจํด์ ์๊ฐํด๋์ต๋๋ค.
์ด๊ฒ์ ๋ฌด์์ ๊ดํ ๊ฒ์
๋๊น? setter์ ์์ฑ์๋ผ๋ ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฅ์ ์ ํ๋๋ก ๊ฒฐํฉํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ํน์ ๊ฐ์ฒด์ธ Builder๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์๋ Id ๋ฐ Name ํ๋๋ ํฌํจ๋๋ฉฐ ์์ฒด์ ์ผ๋ก setter๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋๊ณ ๋ชจ๋ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋ ์ ์ฌ์ฉ์๋ฅผ ๋ฐํํ๋ Build ๋ฉ์๋๊ฐ ํฌํจ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ถ๋ณ ๊ฐ์ฒด์ ์ธํฐ๋ฅผ ์ป์ต๋๋ค. ์์ํ!
๋ฌธ์ ๋ ๋ฌด์์ ๋๊น? ์ฌ๊ธฐ์๋ ํด๋์ ๋น๋๊ฐ ์์ต๋๋ค. ๋ฌธ์ ๋ ์ฌ์ ํ ์ผ๋ถ ํ๋๋ฅผ ํ์ธํ๋ ๊ฒ์ ์์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ID๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ์์๋ค๋ฉด ์ด ๊ฒฝ์ฐ Builder์์๋ int ์ ํ์ด null์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ID๊ฐ 0์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฆ์ "Bond"๋ก ์ค์ ํ๊ณ ID ์ฌ๋ฌด์ค์ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ ID๊ฐ "XNUMX"์ด๊ณ ์ด๋ฆ์ด "Bond"์ธ ์ ์ฌ์ฉ์๊ฐ ์์ฑ๋ฉ๋๋ค. ์ฟจํ์ง ์์.
์ด๊ฒ๊ณผ ์ธ์ฐ๋๋ก ๋ ธ๋ ฅํฉ์๋ค. Builder์์๋ int๋ฅผ int๋ก ๋ณ๊ฒฝํ์ฌ null์ด ๊ฐ๋ฅํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด์ ๋ชจ๋ ๊ฒ์ด ํ๋ฅญํฉ๋๋ค.
ID๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ ์์ด๋ฒ๋ฆฌ๊ณ "Bond"๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ฉด ID๊ฐ null์ ํ์ฉํ์ง ์๊ณ Builder์ null, ํนํ ํฌ์ธํฐ ์์ธ๊ฐ ์๊ธฐ ๋๋ฌธ์ null ํฌ์ธํฐ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ง๋ง ์ฌ์ ํ ์ด๋ฆ์ ์
๋ ฅํ๋ ๊ฒ์ ์์ด๋ฒ๋ฆด ์ ์์ผ๋ฏ๋ก ๊ฐ์ฒด ์ฌ์์ null๋ก ์ค์ ํฉ๋๋ค. ์ด์ Builder์์ ๊ฐ์ฒด๋ฅผ ๋น๋ํ๋ฉด ํด๋น ํ๋๊ฐ null์ ํ์ฉํ์ง ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์ ๋ถ๋ ์๋๋๋ค.
๋ง์ง๋ง ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ID ๋ฐํ์์ null์ ์ ๋ ฅํ๋ฉด ํด๋น ์์ ์ ์ํํ๋ค๋ ์ฌ์ค์ ์ฆ์ ์ ์ ์๋ ๊ฒ์ด ์ข์ง๋ง ์ง๊ธ ์ค์๋ฅผ ํ๊ณ ์๋ค๋ ๊ฒ์ ์ข์ง ์์ต๋๋ค.
User๋ฅผ ์์ฑํ๋ ์๊ฐ์ด ์๋๋ผ ID์ null์ ์ค์ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ Builder์์๋ setter Integer๋ฅผ int๋ก ๋ณ๊ฒฝํ๊ณ ์ฆ์ null์ ๋์ก๋ค๊ณ ๋งน์ธํฉ๋๋ค.
๊ฐ๋จํ ๋งํด์ ์์ ์ ๋ฌด์์ ๋๊น? ๊ฐ๋จํ ๋น๋ ํจํด์ด ์์ง๋ง ๊ตฌํ์๋ ์ฝ๊ฐ์ ๋ฏธ๋ฌํจ์ด ์์ผ๋ฏ๋ก ๋ค์ํ ํจํด ๊ตฌํ์ ์ดํด๋ณด๋ ๊ฒ์ด ๋งค์ฐ ์ข์ต๋๋ค. ๊ฐ ํจํด์๋ ์์ญ ๊ฐ์ ๊ตฌํ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๋ชจ๋ ๋งค์ฐ ํฅ๋ฏธ ๋กญ์ต๋๋ค.
ํ๋ก๋์
์ฝ๋์์ Builder๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋์? ์ฌ๊ธฐ ์ฐ๋ฆฌ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค. Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Builder ํ์ ์ ์ฌ๊ธฐ์ ์ฐ๊ฒฐํ๋ฉด ์์ฒด์ ์ผ๋ก Builder๊ฐ ์์ฑ๋ฉ๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์ง๋ง Java๋ ์ด๋ฏธ ์ด ํด๋์ค์ Builder๊ฐ ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก ์ด๋ ๊ฒ ํธ์ถํ ์ ์์ต๋๋ค.
Java์๋ ์์ฉ๊ตฌ ์์ฑ์ ํผํ ์ ์๋ ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Lombok์ ํฌํจํ์ฌ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๊ณ ์ด๋ฏธ ๋ง์๋๋ ธ์ต๋๋ค. ๋น๋, GET.
ํจํด์ ์ํคํ
์ฒ์ ์ผ ์ ์์ต๋๋ค. ์ฆ, ํ๋์ ํด๋์ค๋ฟ๋ง ์๋๋ผ ์์คํ
์ ์ฒด์๋ ๊ด๋ จ๋ฉ๋๋ค. ์์คํ
์ค๊ณ์๋ ๋จ์ผ ์ฑ
์ ์์น์ด๋ผ๋ ๋ฉ์ง ์์น์ด ์์ต๋๋ค. ๊ทธ๊ฐ ๋ฌด์จ ๋ง์ ํ๋ ๊ฑธ๊น์? ๊ฐ ํด๋์ค๊ฐ ์์ฒด ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ด๋นํด์ผ ํ๋ค๋ ์ฌ์ค์
๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์์ ํต์ ํ๋ ์ปจํธ๋กค๋ฌ์ธ JSON ๊ฐ์ฒด๊ฐ ์์ต๋๋ค. JSON ๊ฐ์ฒด๋ฅผ Java ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ํ ๋ชจ๋ธ๋ก ๋ณํํ๋ Facade๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ๊ณผ ์๋ํ๋ ๋ณต์กํ ๋
ผ๋ฆฌ๋ฅผ ๊ฐ์ง ์๋น์ค๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์ํ๋ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ฐ์ฒด๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๊ฐ ์์ต๋๋ค. ์ฆ, ํ๋์ ํด๋์ค์ ๋ชจ๋ ํฌํจ๋์ง๋ ์์ง๋ง ๋ค์ฏ ๊ฐ์ ์๋ก ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์๋ ๊ฒ์ด ๋ ๋ค๋ฅธ ํจํด์
๋๋ค.
Java๋ฅผ ์ด๋ ์ ๋ ๋ฐฐ์ด ํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ๊ณ ๋ค๋ฅธ API์ ํจ๊ป ์๋ํ๋ฉฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ REST API ํด๋ผ์ด์ธํธ์ ๋
ธ์ถํ๋ ํ๋ก์ ํธ๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ฒ์ ๊ทํ์ ์ด๋ ฅ์์ ์ถ๊ฐํ๊ธฐ์ ์ข์ ์ผ์ด ๋ ๊ฒ์ด๋ฉฐ ๊ทํ์ ๊ต์ก์ ๋ฉ์ง๊ฒ ๋ง๋ฌด๋ฆฌํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ผ๋ก ๋น์ ์ ๊ฐ์ ์ผ์๋ฆฌ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ค์์ ๋ด ์๋ฒ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์
๋๋ค. XNUMXํ๋
๋ ์น๊ตฌ๋ค๊ณผ ํ๊ธฐ๋ง ๋
ผ๋ฌธ์ ์ผ์ต๋๋ค. ๊ทธ๋ค์ ์ด๋ฒคํธ๋ฅผ ์กฐ์งํ๊ธฐ ์ํ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๊ณ ์์์ต๋๋ค. ๊ทธ๊ณณ์์ ์ฌ์ฉ์๋ VKontakte๋ฅผ ํตํด ๋ก๊ทธ์ธํ๊ณ , ์ง๋์ ์ง์ ์ ๋ฐฐ์นํ๊ณ , ์ด๋ฒคํธ๋ฅผ ๋ง๋ค๊ณ , ์น๊ตฌ๋ฅผ ์ด๋ํ๊ณ , ์ด๋ฒคํธ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๋ฑ์ ์์
์ ํ ์ ์์ต๋๋ค.
๋๋ ํ๋ก์ ํธ์์ ๋ฌด์์ ํ๋์? SQL์ ์ฌ์ฉํ์ง ์๊ณ Spring Boot์์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ์ต๋๋ค. ๋๋ ๊ทธ๋ฅผ ๋ชฐ๋๊ณ JPA๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฌด์์ ํ ์ ์์ต๋๊น? OAuth-2๋ฅผ ํตํด VK์ ๋ก๊ทธ์ธํฉ๋๋ค. ์ฌ์ฉ์์ ํ ํฐ์ ๊ฐ์ ธ์ VK๋ก ์ด๋ํ์ฌ ์ค์ ์ฌ์ฉ์์ธ์ง ํ์ธํ์ญ์์ค. VKontakte๋ฅผ ํตํด ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ต๋๋ค. JPA๋ฅผ ํตํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์์์ต๋๋ค. ์ฌ์ง๊ณผ ๊ธฐํ ํ์ผ์ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ฅ์ํ๊ฒ ์ ์ฅํ๊ณ ํด๋น ๋งํฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ์ญ์์ค. ๋น์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ CLOB ๊ฐ์ฒด๊ฐ ์๋์ง ๋ชฐ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ํ์ต๋๋ค. ์ฌ์ฉ์, ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ REST API๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋ํ ๋จ์ ํ ์คํธ๋ ์์์ต๋๋ค.
[...] ์ฑ๊ณต์ ์ธ Java ํ์ต์ ์์ ์์ ๋๋ค. ๋ํ๊ต XNUMXํ๋ ๋ ์ ๋ C#์ ๋ฐฐ์ ๊ณ OOP ํ๋ก๊ทธ๋๋ฐ(ํด๋์ค, ์ธํฐํ์ด์ค, ์ถ์ํ๊ฐ ๋ฌด์์ธ์ง, ์ ํ์ํ์ง)์ ๋ํด ๋ฐฐ์ ์ต๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ๋ง์ ๋์์ด ๋์์ต๋๋ค. ์ด๊ฒ์ด ์์ผ๋ฉด Java๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต๊ณ ํด๋์ค๊ฐ ํ์ํ ์ด์ ๊ฐ ๋ช ํํ์ง ์์ต๋๋ค.
๋ํ XNUMXํ๋
๋ ๋ค์ Java ์ฝ์ด๋ฅผ ๊ฐ๋ฅด์ณค์ง๋ง ์ ๋ ๊ฑฐ๊ธฐ์ ๋ฉ์ถ์ง ์๊ณ ์ง์ Spring์ ๊ณต๋ถํ๊ณ ์์์ ์ธ๊ธํ ํ๋ก์ ํธ์ธ ์ฝ์ค ๋
ผ๋ฌธ์ ์ผ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋ ๊ฒ์ ํตํด ์ ๋ Yandex์์ ์ธํด์ญ์ ํ๊ณ , ์ธํฐ๋ทฐ๋ฅผ ํต๊ณผํ๊ณ , Yandex.Market์ ๋ค์ด๊ฐ์ต๋๋ค. ๊ทธ๊ณณ์์ ์ ๋ Beru์ ๋ฐฑ์๋๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ์ ๋ง์ผํ๋ ์ด์ค์ด๊ณ Yandex.Market ์์ฒด๋ฅผ ์ํ ๊ฒ์
๋๋ค.
๊ทธ ํ XNUMX๊ฐ์ ์ ๊ฐ์ ๋ง์ผ ๋ด ๋ค๋ฅธ ํ์ผ๋ก ์ด์ ํ๊ฒ ๋์ด์. ์ฐ๋ฆฌ๋ ๋น์ฆ๋์ค ํํธ๋๋ฅผ ์ํ ๋ถ์์ ์ํํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ถ์ ํ๋ซํผ์ ์๊ณ ๋ฐฑ์๋์๋ ์ธ ๋ช ์ด ์์ผ๋ฏ๋ก ํ๋ก์ ํธ์ ๋ํ ์ํฅ๋ ฅ์ด ๋งค์ฐ ํฝ๋๋ค. ์ฌ์ค ๋งค์ฐ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ์ค์ ๋ก ์์ฅ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฆ, ๋น์ฆ๋์ค ํํธ๋, ์ ์๋ ค์ง ๋๊ท๋ชจ ํ์ฌ์ ๋ํ ํ๋งค, ์นดํ ๊ณ ๋ฆฌ, ๋ชจ๋ธ, ๋ชจ๋ธ ๋ฑ์ ์ ๊ณตํฉ๋๋ค. ์ฐ๋ฆฌ๋ XNUMX๋ช ๋ฟ์ด๊ณ ์ด ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์ ๋ง ๋ฉ์ง๋ค์.
๊ฐ์ฌํฉ๋๋ค! ์ ์ฉํ ๋งํฌ:
-
-
-
-
-
-
-
-
์ถ์ฒ : habr.com