Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

Java๋Š” ๋‹ค๋ฅธ ์ธ๊ธฐ ์–ธ์–ด์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ? ์™œ ์ž๋ฐ”๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์–ธ์–ด๊ฐ€ ๋˜์–ด์•ผ ํ• ๊นŒ์š”? ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜์—ฌ Java๋ฅผ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ณ„ํš์„ ์„ธ์›Œ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Java๋กœ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์˜ ์ฐจ์ด์ ์„ ๋‚˜์—ดํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Mikhail Zatepyakin์€ ๋ฏธ๋ž˜ ์ฐธ๊ฐ€์ž๋“ค์„ ์œ„ํ•œ ํšŒ์˜์—์„œ ์ด ๋ณด๊ณ ์„œ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ด์‰ฝ Yandex ๋ฐ ๊ธฐํƒ€ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž - Java Junior ๋ชจ์ž„.


โ€” ์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ œ ์ด๋ฆ„์€ ๋ฏธ์ƒค์ž…๋‹ˆ๋‹ค. ์ €๋Š” Yandex.Market์˜ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Java๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ด์œ ์™€ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํ•ฉ๋ฆฌ์ ์ธ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ์™œ ๋‚ด๊ฐ€ ์ˆ˜๋…„๊ฐ„์˜ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ๊ฐ•๋ ฅํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์ด ์ด์•ผ๊ธฐ๋ฅผ ํ•  ๊ฒƒ์ธ๊ฐ€? ์‚ฌ์‹ค ์ €๋„ ์ตœ๊ทผ์— Java๋ฅผ ๊ณต๋ถ€ํ•œ ์ง€ XNUMX๋…„ ๋ฐ˜์ฏค ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์ด ์–ด๋• ๋Š”์ง€, ์–ด๋–ค ํ•จ์ •์ด ์žˆ์—ˆ๋Š”์ง€ ์•„์ง๋„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

XNUMX๋…„ ์ „ ์ €๋Š” Yandex.Market์—์„œ ์ธํ„ด์‹ญ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Beru์šฉ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ, Market ์ž์ฒด๋ฅผ ์œ„ํ•ด ์•„๋งˆ ์‚ฌ์šฉํ•˜์…จ์„ ๊ฒ๋‹ˆ๋‹ค. ์ด์ œ ์ €๋Š” ๊ทธ๊ณณ์—์„œ ๋‹ค๋ฅธ ํŒ€์œผ๋กœ ๊ณ„์† ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ํŒŒํŠธ๋„ˆ๋ฅผ ์œ„ํ•œ Yandex.Market ๋ถ„์„ ํ”Œ๋žซํผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

์‹œ์ž‘ํ•˜์ž. ์‹ค์šฉ์ ์ธ ๊ด€์ ์—์„œ Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‚ฌ์‹ค Java๋Š” ๋งค์šฐ ์œ ๋ช…ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋งค์šฐ ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ธ๊ธฐ ์ง€์ˆ˜์ธ TIOBE ์ง€์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๊ณณ์—์„œ Java๊ฐ€ XNUMX์œ„๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ตฌ์ธ ์‚ฌ์ดํŠธ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ณต์„์ด Java์— ๊ด€ํ•œ ๊ฒƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Java๋กœ ๊ฐœ๋ฐœํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ์ผ์ž๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ๋ฉด Stack Overflow๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ๋‹ต๋ณ€์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Java๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ์‹ค์ œ๋กœ JVM์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ JVM์„ ์‚ฌ์šฉํ•˜๋Š” Kotlin, Scala ๋ฐ ๊ธฐํƒ€ ์–ธ์–ด๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

์ด๋…์  ๊ด€์ ์—์„œ Java์˜ ์ข‹์€ ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Python์€ ๋น ๋ฅธ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ํ•œ ์ค„์งœ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ ์œผ๋กœ๋Š” ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋™์ฐจ, Yandex ๋ฌด์ธ ์ž๋™์ฐจ๊ฐ€ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํ”Œ๋Ÿฌ์Šค๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์™œ? Java์—๋Š” Garbage Collector๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๊ฐœ์ฒด์˜ RAM์„ ์ง€์›๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ž๋ฐœ์ ์œผ๋กœ ์‹œ์ž‘๋˜์–ด ์„ธ์ƒ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ์ค‘์ง€ํ•˜๊ณ  ๊ฐœ์ฒด ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐœ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์›๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒƒ์ด ๋“œ๋ก ์—์„œ ์ž‘๋™ํ•œ๋‹ค๋ฉด ๋ฉ‹์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋“œ๋ก ์€ ์ง์ง„ํ•˜๋ฉฐ ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์šฐ๊ณ  ๋„๋กœ๋ฅผ ์ „ํ˜€ ๋ณด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋“œ๋ก ์€ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

Java๋Š” ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ? ์ด๋Š” ์ฃผ๋กœ ์ˆ˜์‹ญ ๋˜๋Š” ์ˆ˜๋ฐฑ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์ˆ˜๋…„์— ๊ฑธ์ณ ์ž‘์„ฑํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ Yandex.Market์˜ ๋ฐฑ์—”๋“œ ์ค‘ ์ƒ๋‹น์ˆ˜๊ฐ€ Java๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋„์‹œ์— ๋ถ„์‚ฐ๋œ ํŒ€์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ ๋„์‹œ์—๋Š” XNUMX๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ๋Š” ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๊ณ  XNUMX๋…„ ์ด์ƒ ์ง€์›๋˜์—ˆ์œผ๋ฉฐ ๋™์‹œ์— ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค์ด ๋“ค์–ด์™€ ์ด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์–ธ์–ด์— ํฌํ•จ๋œ ์ฝ”๋“œ๊ฐ€ ์‰ฝ๊ฒŒ ์ง€์›๋˜๊ณ  ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ์–ธ์–ด์—๋Š” ์–ด๋–ค ํŠน์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์šฐ์„ , ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ์—ฌ์•ผ ํ•˜๊ณ , ๋ณต์žกํ•œ ์•„ํ‚คํ…์ฒ˜ ์†”๋ฃจ์…˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™” ๋“ฑ์„ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด Java๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”์™€ ๋ณต์žกํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ์‰ฝ์Šต๋‹ˆ๋‹ค.

Java์šฉ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด๊ฐ€ 15๋…„ ์ด์ƒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋‚ด์šฉ์ด ์—ฌ๊ธฐ์— ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์œ„ํ•œ ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

์ œ ์ƒ๊ฐ์—๋Š” ์ดˆ๋ณด JA ์„ ์ˆ˜๊ฐ€ ๊ฐ–์ถฐ์•ผ ํ•  ๊ธฐ๋ณธ ๊ธฐ์ˆ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”? ์šฐ์„  ์ž๋ฐ” ํ•ต์‹ฌ ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์‹์ด๋‹ค. ๋‹ค์Œ์€ ์ผ์ข…์˜ ์ข…์†์„ฑ ์ฃผ์ž… ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์—ฐ์‚ฌ์ธ Kirill์ด ์ด์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๊นŠ์ด ๋“ค์–ด๊ฐ€์ง€๋Š” ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์•„ํ‚คํ…์ฒ˜์™€ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๊ตฌ์กฐ์ ์œผ๋กœ ์•„๋ฆ„๋‹ค์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์œ„ํ•œ ์ผ์ข…์˜ SQL ๋˜๋Š” ORM์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ๋ฐฑ์—”๋“œ์— ๋” ๋งŽ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

๊ฐ€๋‹ค! ์ž๋ฐ” ์ฝ”์–ด. ์—ฌ๊ธฐ์„œ๋Š” ์‹ค์ œ๋กœ ๋ฏธ๊ตญ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ์ž์ฒด๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ. ์ฒซ์งธ, Java๋Š” ์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ ๋งŽ์€ ๋ฒ„์ „์„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, 2014-2015๋…„์— 4๋ฒˆ์งธ ๋ฒ„์ „์ด ์ถœ์‹œ๋œ ๋‹ค์Œ 8๋ฒˆ์งธ, XNUMX๋ฒˆ์งธ, XNUMX๋ฒˆ์งธ ๋ฒ„์ „, ๋งŽ์€ ์ƒˆ ๋ฒ„์ „๊ณผ ์ƒˆ๋กญ๊ณ  ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. , ์˜ˆ๋ฅผ ๋“ค์–ด Java Stream API, ๋žŒ๋‹ค ๋“ฑ. ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ๋งค์šฐ ๋ฉ‹์ง€๊ณ  ์‹ ์„ ํ•˜๋ฉฐ ๋ฉ‹์ง„ ๊ฒƒ๋“ค, ์ธํ„ฐ๋ทฐ์—์„œ ๋ฌป๋Š” ๋‚ด์šฉ, ์•Œ์•„์•ผ ํ•  ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Java-XNUMX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฑ…์žฅ์—์„œ ์ฑ…์„ ๊บผ๋‚ด์„œ ๋ฐฐ์›Œ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Java-XNUMX ์ด์ƒ์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Stream API, var ๋“ฑ๊ณผ ๊ฐ™์€ ํ˜์‹ ์— ์„ธ์‹ฌํ•œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ธํ„ฐ๋ทฐ ์ค‘์— ์งˆ๋ฌธ์„ ๋ฐ›๊ณ  ํ”„๋กœ๋•์…˜์—์„œ ์ง€์†์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, Stream API๋Š” ๋ฃจํ”„๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ฉ‹์ง€๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งค์šฐ ๋ฉ‹์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ผญ ์ฃผ์˜ํ•˜์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต์ž, ์˜ˆ์™ธ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ํ•œ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ˆ์™ธ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋ˆ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋‚˜ ์ธํ„ฐ๋ทฐ์—์„œ ํ™•์‹คํžˆ ์งˆ๋ฌธ์„ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋ฉฐ ์ œ์ž‘ ๊ณผ์ •์—์„œ ํ™•์‹คํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์™ธ, ๋ฐ˜๋ณต์ž ๋ฐ ๊ธฐํƒ€ ์‚ฌํ•ญ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. ๊ตฌ์กฐ ์—†์ด๋Š” ๊ฐˆ ์ˆ˜ ์—†์ง€๋งŒ, ์„ธํŠธ, โ€‹โ€‹์‚ฌ์ „, ์‹œํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ๋ชจ๋ฅธ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ตฌ์กฐ์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Java์˜ ๋™์ผํ•œ ์‚ฌ์ „์—๋Š” HashMap ๋ฐ TreeMap์„ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ ๊ทผ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€, ์–ธ์ œ ์–ด๋Š ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๋ฉด ๋งค์šฐ ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ ๊ทผ๋ฒ•(๋ฒ ํŒ…์ด ์–ผ๋งˆ๋‚˜ ์ž‘๋™ํ•˜๋Š”์ง€, ํŒจ์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ์‹œ๊ฐ„, ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋“ฑ)์„ ์•„๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด HashMap์˜ ๋ฒ„ํ‚ท์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํŠธ๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„์—๋„ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ๋Š” ๊ทธ๋‹ค์ง€ ํ”ํ•˜์ง€ ์•Š์ง€๋งŒ, ์ธํ„ฐ๋ทฐ์—์„œ๋Š” ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠธ๋ฆฌ, ๊ทธ๋ž˜ํ”„๋ฅผ ๋„ˆ๋น„์™€ ๊นŠ์ด๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ, ๋ณต์žกํ•œ ์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ, ๋‹ค์ค‘ ํด๋ž˜์Šค ์ฝ”๋“œ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ๋นŒ๋“œ ์‹œ์Šคํ…œ ์—†์ด ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ฃผ๋กœ Maven๊ณผ Gradle์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•œ ์ค„๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ์ค„์งœ๋ฆฌ XML์„ ์ž‘์„ฑํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์‹œ์Šคํ…œ. ๊ทธ๊ฒƒ๋“ค์€ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Maven์ด๋‚˜ Gradle ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋‹ค์Œ - ์ผ์ข…์˜ ๋ฒ„์ „ ์ œ์–ด ์‹œ์Šคํ…œ. ์ธ๊ธฐ ์žˆ๊ณ  ํŠœํ† ๋ฆฌ์–ผ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— Git์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์ด Git์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๋ฉ‹์ง„ ์ผ์ž…๋‹ˆ๋‹ค. Git ์—†์ด๋Š” ์‚ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ผ์ข…์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ. IntelliJ Idea๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์†๋„๋ฅผ ํฌ๊ฒŒ ๋†’์ด๊ณ , ๋งŽ์€ ๋„์›€์„ ์ฃผ๋ฉฐ, ๋ชจ๋“  ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ๋Š” ๋“ฑ ์ผ๋ฐ˜์ ์œผ๋กœ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

์Šฌ๋ผ์ด๋“œ์˜ ๋งํฌ: SQLZOO, ํ•˜๋ธŒ๋ผํฌ์ŠคํŠธ

SQL. ๋ฐฑ์—”๋”์— ๋Œ€ํ•ด ์กฐ๊ธˆ. ์‹ค์ œ๋กœ ์—ฌ๊ธฐ์— ์žฌ๋ฏธ์žˆ๋Š” ์‚ฌ๊ฑด์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธํ„ด์‹ญ ์ธํ„ฐ๋ทฐ ์ดํ‹€ ์ „์— HR ๋‹ด๋‹น์ž๊ฐ€ ์ €์—๊ฒŒ ์ „ํ™”๋ฅผ ๊ฑธ์–ด ์ดํ‹€ ํ›„์— SQL๊ณผ HTTP์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณผ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” SQL์ด๋‚˜ HTTP์— ๋Œ€ํ•ด ๊ฑฐ์˜ ์•„๋Š” ๋ฐ”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ ๋ฉ‹์ง„ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์–ด์š” - SQLZOO. ์ €๋Š” 12์‹œ๊ฐ„ ๋งŒ์— SQL, ์ฆ‰ SQL ๊ตฌ๋ฌธ, SELECT ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐฉ๋ฒ•, JOIN ๋“ฑ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๋ฉ‹์ง„ ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. ์ ๊ทน ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค 12์‹œ๊ฐ„ ๋งŒ์— ์ง€๊ธˆ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์˜ 90%๋ฅผ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์•„๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ‚ค, ์ธ๋ฑ์Šค, ์ •๊ทœํ™”์ž…๋‹ˆ๋‹ค. Habrรฉ์—๋Š” ์ด์— ๊ด€ํ•œ ์ผ๋ จ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

Java์—๋Š” SQL ์™ธ์—๋„ JPA ๋“ฑ ์˜จ๊ฐ– ์ข…๋ฅ˜์˜ ๊ฐ์ฒด ๊ด€๊ณ„ํ˜• ๋งคํ•‘ ์‹œ์Šคํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์—๋Š” SQL ์ฝ”๋“œ(SELECT id name FROM info.users WHERE id IN userIds)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ID์™€ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ, ๊ธฐ๋ณธ ๊ฐœ์ฒด๋ฅผ Java ๊ฐœ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŠน์ • ๋งคํผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ์„ธ ๋ฒˆ์งธ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜์— ์ž‘์„ฑ๋œ ํ•œ ์ค„๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. All ByIdIn์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์•„์ฃผ ๋ฉ‹์ง„ ์ผ์ž…๋‹ˆ๋‹ค. ๋‚˜ ์ž์‹ ๋„ SQL์„ ๋ชฐ๋ž์„ ๋•Œ๋Š” JPA๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ฃผ์˜ํ•˜์„ธ์š”. ๋„ˆ๋ฌด ๊ฒŒ์œผ๋ฅด๋ฉด SQL์„ ๋ฐฐ์šธ ์ˆ˜ ์—†๋‹ค๋ฉด ์žฌ์•™์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํ™”์žฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค!

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

๋ด„. 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๊ณผ ๊ฐ™์€ ์„ฑ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ชฉ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ๋ฉ‹์ง„ ์ผ์ž…๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

์Šฌ๋ผ์ด๋“œ์—์„œ ๋งํฌ

๋””์ž์ธ ํŒจํ„ด. ๊ทธ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋Š” ๊ฐœ๋ฐœ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ๋“  ์ž˜ ํ•ด๊ฒฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ๋“ค์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€, ํŠน์ • ํ…œํ”Œ๋ฆฟ์„ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํŒจํ„ด์ด ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. refactoring.guru๋ฅผ ์ฝ๊ณ  ์–ด๋–ค ํŒจํ„ด์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ณ  ๋‹ค์–‘ํ•œ ์ด๋ก ์„ ์ฝ์–ด๋ณด์„ธ์š”. ๋ฌธ์ œ๋Š” ์‚ฌ์‹ค์ƒ ์“ธ๋ชจ๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ์‹ค์ œ๋กœ ์—ฐ์Šต์ด ์—†๋Š” ํŒจํ„ด์€ ํŠน๋ณ„ํžˆ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Singletone ๋˜๋Š” Builder์™€ ๊ฐ™์€ ์ผ๋ถ€ ํŒจํ„ด์— ๋Œ€ํ•ด ๋“ฃ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์ด ๋ง์„ ๋“ค์—ˆ๋‚˜์š”? ๋งŽ์€ ์‚ฌ๋žŒ๋“ค. ์Šค์Šค๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ํŒจํ„ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „๋žต, ๊ณต์žฅ, ์™ธ๊ด€ ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ํŒจํ„ด์€ ์–ด๋””์— ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ์—์„œ ์ด ํŒจํ„ด์ด ์ ์šฉ๋œ ์œ„์น˜๋ฅผ ๋ณผ ๋•Œ๊นŒ์ง€๋Š” ์ง์ ‘ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŒจํ„ด์— ๋Œ€ํ•œ ์—ฐ์Šต์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. refactoring.guru์—์„œ ์ด์— ๋Œ€ํ•ด ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๊ทธ๋‹ค์ง€ ๋„์›€์ด ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ํ™•์‹คํžˆ ํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

ํŒจํ„ด์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํŠน์ • User ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ID์™€ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์‚ฌ์šฉ์ž๋Š” ID์™€ ์ด๋ฆ„์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ ์œ„๊ฐ€ ๊ต์‹ค์ด๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ƒ์„ฑ์ž ๋˜๋Š” ์„ค์ •์ž๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๋‹จ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฑด์„ค์ž. ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž(7, "Bond"), ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ User ํด๋ž˜์Šค๋Š” ์—†๊ณ  XNUMX๊ฐœ์˜ ์ˆซ์ž ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. XNUMX๊ฐœ์˜ ์—ฐ์† ์ˆซ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋Š ์ˆซ์ž๊ฐ€ ์–ด๋–ค ์†์„ฑ์— ์†ํ•˜๋Š”์ง€๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋””์ž์ด๋„ˆ๊ฐ€ ๋ณ„๋กœ๋„ค์š”.

๋‘ ๋ฒˆ์งธ ์˜ต์…˜์€ setter์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค: setId(7), setName(โ€œBondโ€). ์–ด๋–ค ์†์„ฑ์ด ์–ด๋–ค ํ•„๋“œ์— ์†ํ•˜๋Š”์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์„ธํ„ฐ์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ๋ฌด์–ธ๊ฐ€๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๊ณ , ๋‘˜์งธ, ๊ฐœ์ฒด๊ฐ€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์•ฝ๊ฐ„ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ๋žŒ๋“ค์€ ๋นŒ๋”(Builder)๋ผ๋Š” ๋ฉ‹์ง„ ํŒจํ„ด์„ ์ƒ๊ฐํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

์ด๊ฒƒ์€ ๋ฌด์—‡์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? setter์™€ ์ƒ์„ฑ์ž๋ผ๋Š” ๋‘ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ์ ์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํŠน์ • ๊ฐœ์ฒด์ธ Builder๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Id ๋ฐ Name ํ•„๋“œ๋„ ํฌํ•จ๋˜๋ฉฐ ์ž์ฒด์ ์œผ๋กœ setter๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜๊ณ  ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ ์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Build ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์™€ ์„ธํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์‹œ์›ํ•œ!

๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—๋Š” ํด๋ž˜์‹ ๋นŒ๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์ผ๋ถ€ ํ•„๋“œ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ID๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ๋‹ค๋ฉด ์ด ๊ฒฝ์šฐ Builder์—์„œ๋Š” int ์œ ํ˜•์ด null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ID๊ฐ€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฆ„์„ "Bond"๋กœ ์„ค์ •ํ•˜๊ณ  ID ์‚ฌ๋ฌด์‹ค์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ ID๊ฐ€ "XNUMX"์ด๊ณ  ์ด๋ฆ„์ด "Bond"์ธ ์ƒˆ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฟจํ•˜์ง€ ์•Š์•„.

์ด๊ฒƒ๊ณผ ์‹ธ์šฐ๋„๋ก ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค. Builder์—์„œ๋Š” int๋ฅผ int๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ null์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

ID๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฌ๊ณ  "Bond"๋ผ๋Š” ์ด๋ฆ„์˜ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด ID๊ฐ€ null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  Builder์— null, ํŠนํžˆ ํฌ์ธํ„ฐ ์˜ˆ์™ธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— null ํฌ์ธํ„ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ์ฒด ์žฌ์ƒ์„ null๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Builder์—์„œ ๊ฐœ์ฒด๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ๊ฐ€ null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ID ๋Ÿฐํƒ€์ž„์— null์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์ง€๊ธˆ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

User๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ˆœ๊ฐ„์ด ์•„๋‹ˆ๋ผ ID์— null์„ ์„ค์ •ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Builder์—์„œ๋Š” setter Integer๋ฅผ int๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ฆ‰์‹œ null์„ ๋˜์กŒ๋‹ค๊ณ  ๋งน์„ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐ„๋‹จํ•œ ๋นŒ๋” ํŒจํ„ด์ด ์žˆ์ง€๋งŒ ๊ตฌํ˜„์—๋„ ์•ฝ๊ฐ„์˜ ๋ฏธ๋ฌ˜ํ•จ์ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ํŒจํ„ด ๊ตฌํ˜„์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ ํŒจํ„ด์—๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋‘ ๋งค์šฐ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ Builder๋ฅผ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•˜๋‚˜์š”? ์—ฌ๊ธฐ ์šฐ๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ Builder ํšŒ์ „์„ ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐํ•˜๋ฉด ์ž์ฒด์ ์œผ๋กœ Builder๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ Java๋Š” ์ด๋ฏธ ์ด ํด๋ž˜์Šค์— Builder๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ์ด๋ ‡๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java์—๋Š” ์ƒ์šฉ๊ตฌ ์ž‘์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ‹์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Lombok์„ ํฌํ•จํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ด๋ฏธ ๋ง์”€๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ๋นŒ๋”, GET.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

ํŒจํ„ด์€ ์•„ํ‚คํ…์ฒ˜์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ์ „์ฒด์™€๋„ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์„ค๊ณ„์—๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ด๋ผ๋Š” ๋ฉ‹์ง„ ์›์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ ๋ฌด์Šจ ๋ง์„ ํ•˜๋Š” ๊ฑธ๊นŒ์š”? ๊ฐ ํด๋ž˜์Šค๊ฐ€ ์ž์ฒด ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ด๋‹นํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์™€ ํ†ต์‹ ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ธ JSON ๊ฐœ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. JSON ๊ฐ์ฒด๋ฅผ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž‘๋™ํ•  ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Facade๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋ธ๊ณผ ์ž‘๋™ํ•˜๋Š” ๋ณต์žกํ•œ ๋…ผ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ฐœ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋ชจ๋‘ ํฌํ•จ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ๋‹ค์„ฏ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋˜ ๋‹ค๋ฅธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

Java๋ฅผ ์–ด๋Š ์ •๋„ ๋ฐฐ์šด ํ›„์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ–๊ณ  ๋‹ค๋ฅธ API์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฉฐ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ REST API ํด๋ผ์ด์–ธํŠธ์— ๋…ธ์ถœํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ท€ํ•˜์˜ ์ด๋ ฅ์„œ์— ์ถ”๊ฐ€ํ•˜๊ธฐ์— ์ข‹์€ ์ผ์ด ๋  ๊ฒƒ์ด๋ฉฐ ๊ท€ํ•˜์˜ ๊ต์œก์„ ๋ฉ‹์ง€๊ฒŒ ๋งˆ๋ฌด๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์œผ๋กœ ๋‹น์‹ ์€ ๊ฐ€์„œ ์ผ์ž๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

๋‹ค์Œ์€ ๋‚ด ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. XNUMXํ•™๋…„ ๋•Œ ์นœ๊ตฌ๋“ค๊ณผ ํ•™๊ธฐ๋ง ๋…ผ๋ฌธ์„ ์ผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด๋ฒคํŠธ๋ฅผ ์กฐ์งํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ ์‚ฌ์šฉ์ž๋Š” VKontakte๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜๊ณ , ์ง€๋„์— ์ง€์ ์„ ๋ฐฐ์น˜ํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์นœ๊ตฌ๋ฅผ ์ดˆ๋Œ€ํ•˜๊ณ , ์ด๋ฒคํŠธ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌด์—‡์„ ํ–ˆ๋‚˜์š”? SQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Spring Boot์—์„œ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋ฅผ ๋ชฐ๋ž๊ณ  JPA๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? OAuth-2๋ฅผ ํ†ตํ•ด VK์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํ† ํฐ์„ ๊ฐ€์ ธ์™€ VK๋กœ ์ด๋™ํ•˜์—ฌ ์‹ค์ œ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. VKontakte๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. JPA๋ฅผ ํ†ตํ•ด์„œ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ง„๊ณผ ๊ธฐํƒ€ ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ๋Šฅ์ˆ™ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ๋งํฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹œ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— CLOB ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ๋ชฐ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ REST API๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

[...] ์„ฑ๊ณต์ ์ธ Java ํ•™์Šต์˜ ์ž‘์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ•™๊ต XNUMXํ•™๋…„ ๋•Œ ์ €๋Š” C#์„ ๋ฐฐ์› ๊ณ  OOP ํ”„๋กœ๊ทธ๋ž˜๋ฐ(ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™”๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ํ•„์š”ํ•œ์ง€)์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—†์œผ๋ฉด Java๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ต๊ณ  ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Java๋ฅผ ๋ฐฐ์šฐ๋Š” ์ด์œ ์™€ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. Yandex ๋ณด๊ณ ์„œ

๋Œ€ํ•™ XNUMXํ•™๋…„ ๋•Œ ๋‹ค์‹œ Java ์ฝ”์–ด๋ฅผ ๊ฐ€๋ฅด์ณค์ง€๋งŒ ์ €๋Š” ๊ฑฐ๊ธฐ์„œ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์ง์ ‘ Spring์„ ๊ณต๋ถ€ํ•˜๊ณ  ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ”„๋กœ์ ํŠธ์ธ ์ฝ”์Šค ๋…ผ๋ฌธ์„ ์ผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ†ตํ•ด ์ €๋Š” Yandex์—์„œ ์ธํ„ด์‹ญ์„ ํ•˜๊ณ , ์ธํ„ฐ๋ทฐ๋ฅผ ํ†ต๊ณผํ•˜๊ณ , Yandex.Market์— ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ ์ €๋Š” Beru์˜ ๋ฐฑ์—”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์ด๊ณ  Yandex.Market ์ž์ฒด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ํ›„ XNUMX๊ฐœ์›” ์ „ ๊ฐ™์€ ๋งˆ์ผ“ ๋‚ด ๋‹ค๋ฅธ ํŒ€์œผ๋กœ ์ด์ ํ•˜๊ฒŒ ๋์–ด์š”. ์šฐ๋ฆฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ํŒŒํŠธ๋„ˆ๋ฅผ ์œ„ํ•œ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ถ„์„ ํ”Œ๋žซํผ์— ์žˆ๊ณ  ๋ฐฑ์—”๋“œ์—๋Š” ์„ธ ๋ช…์ด ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์˜ํ–ฅ๋ ฅ์ด ๋งค์šฐ ํฝ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋งค์šฐ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ์‹œ์žฅ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋น„์ฆˆ๋‹ˆ์Šค ํŒŒํŠธ๋„ˆ, ์ž˜ ์•Œ๋ ค์ง„ ๋Œ€๊ทœ๋ชจ ํšŒ์‚ฌ์— ๋Œ€ํ•œ ํŒ๋งค, ์นดํ…Œ๊ณ ๋ฆฌ, ๋ชจ๋ธ, ๋ชจ๋ธ ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” XNUMX๋ช…๋ฟ์ด๊ณ  ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ •๋ง ๋ฉ‹์ง€๋„ค์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์œ ์šฉํ•œ ๋งํฌ:
- "Java 8. ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ".
- ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ.
- SQLZOO.
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”.
- ๋””์ž์ธ ํŒจํ„ด.
- ๋””์ž์ธ ํŒจํ„ด.
- ๊นจ๋—ํ•œ ์ฝ”๋“œ.
- ํšจ๊ณผ์ ์ธ ์ž๋ฐ”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€