Scala ์ •์  ์ฝ”๋“œ ๋„๊ตฌ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ

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

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

์ฝ”๋“œ ๋ณต์žก์„ฑ ํƒ์ƒ‰ํ•˜๊ธฐ

Smart TS XL์„ ์‚ฌ์šฉํ•˜์—ฌ Scala ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ•˜์œ„ ์‹œ์Šคํ…œ ๋ฐ ๊ณต์œ  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์›Œํฌ๋กœ๋“œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ํŒŒ์•…ํ•˜์‹ญ์‹œ์˜ค.

์ง€๊ธˆ ํƒ์ƒ‰

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

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

์ฐจ๋ก€

Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™์ž‘ ๊ฐ€์‹œ์„ฑ ๊ฒฉ์ฐจ์™€ Smart TS XL์˜ ์—ญํ• 

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

YouTube ๋™์˜์ƒ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ์‹œ์Šคํ…œ์ด ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ถ„์„์˜ ํ•œ๊ณ„๋ฅผ ๋›ฐ์–ด๋„˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๋Œ€๊ทœ๋ชจ ์กฐ์ง์—์„œ Scala ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ํ”Œ๋žซํผ ๊ฐ„์˜ ์กฐ์ • ๊ณ„์ธต ์—ญํ• ์„ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ ์ˆ˜์ค€์—์„œ ๊ตฌ๋ฌธ์  ๋˜๋Š” ์˜๋ฏธ์  ์ •ํ™•์„ฑ์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ํ˜„์‹ค์„ ์ œ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ์  ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

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

Smart TS XL์€ Scala ๋ถ„์„์— ์žˆ์–ด ๊ธฐ์กด๊ณผ๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜๋Š” ๋Œ€์‹ , ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ์‹คํ–‰ ๋™์ž‘์„ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ๊ธฐ์—… ํŒ€์ด Scala ๋กœ์ง์ด ์‹œ์Šคํ…œ ์ „์ฒด ํ๋ฆ„์— ์–ด๋–ป๊ฒŒ ๊ด€์—ฌํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Scala ์–ธ์–ด ๊ตฌ๋ฌธ์„ ๋„˜์–ด์„œ๋Š” ์‹คํ–‰ ์ค‘์‹ฌ ๋ถ„์„

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

Smart TS XL์€ ์–ธ์–ด ๊ธฐ๋Šฅ๋ณด๋‹ค๋Š” ์‹คํ–‰ ์˜๋ฏธ๋ก ์— ์ดˆ์ ์„ ๋งž์ถค์œผ๋กœ์จ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ถ„์„ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

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

Scala, JVM ๋ฐ ํ”Œ๋žซํผ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ์˜์กด์„ฑ ๋ถ„์„

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ์‹œ์Šคํ…œ์€ ๋“œ๋ฌผ๊ฒŒ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ณต์œ  ์ธํ”„๋ผ ์„œ๋น„์Šค, ๋ฐฐ์น˜ ์›Œํฌ๋กœ๋“œ ๋ฐ ์™ธ๋ถ€ API์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ Scala ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์–ธ์–ด ๊ฒฝ๊ณ„์—์„œ ๋ฉˆ์ถ”์–ด ํ”Œ๋žซํผ ๊ฐ„ ์ข…์†์„ฑ์„ ์•”๋ฌต์ ์œผ๋กœ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.

Smart TS XL์€ Scala ์ „์šฉ ๋„๊ตฌ๋ฅผ ๋„˜์–ด ํ™•์žฅ๋œ ์ข…์†์„ฑ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ๋„์ž…๋˜๋Š” ์ „์ด์  ์ข…์†์„ฑ
  • Scala ์„œ๋น„์Šค์™€ ๋ ˆ๊ฑฐ์‹œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์ˆจ๊ฒจ์ง„ ์—ฐ๊ฒฐ
  • ๋™๊ธฐ์‹ Scala ํ”Œ๋กœ์šฐ์™€ ๋น„๋™๊ธฐ์‹ ์ž‘์—… ๊ฐ„์˜ ์‹คํ–‰ ์ข…์†์„ฑ
  • ๊ณต์œ  ๋„๋ฉ”์ธ ๊ฐ์ฒด ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์˜ํ–ฅ ์‚ฌ์Šฌ

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

๋ฆฌํŒฉํ† ๋ง ๋ฐ ํ˜„๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ์˜ ์œ„ํ—˜ ์˜ˆ์ธก

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

Smart TS XL์€ ํ–‰๋™ ์œ„ํ—˜์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง ๋ถ„์„์„ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ํŒ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Scala ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์ธํ•ด ์–ด๋–ค ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์„์ง€ ์˜ˆ์ธกํ•ด ๋ณด์„ธ์š”.
  • ๋น„์ฆˆ๋‹ˆ์Šค ํ๋ฆ„์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋กœ์ง์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ์ „์— ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜ ์ „ํŒŒ ๊ฒฝ๋กœ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„๋Œ€ํ™” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์ œ ์‹คํ–‰ ์ข…์†์„ฑ์— ๋งž์ถฐ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ Scala ์„œ๋น„์Šค๊ฐ€ ๊ทœ์ œ ๋Œ€์ƒ, ์ˆ˜์ต์— ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ ๋˜๋Š” ์•ˆ์ „์— ๋ฏผ๊ฐํ•œ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Smart TS XL์€ ๋ฆฌํŒฉํ† ๋ง์„ ๊ตญ์†Œ์ ์ธ ํ™œ๋™์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋Œ€์‹ , ์ธก์ • ๊ฐ€๋Šฅํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ์ดํ•ด๊ด€๊ณ„์ž๋ฅผ ์œ„ํ•œ ์ „๋žต์  ๊ฐ€์น˜

Smart TS XL์˜ ๊ฐ€์น˜๋Š” Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋„๊ตฌ๋“ค์˜ ๋ถ„์„ ๋ชจ๋ธ์ด ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ๋Š” ๋ถ€๋ถ„์„ ๋ณด์™„ํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—… ์ดํ•ด๊ด€๊ณ„์ž๋“ค์—๊ฒŒ ์žˆ์–ด ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

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

Smart TS XL์€ ๊ธฐ์กด Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„์— ์‹คํ–‰ ๋ฐ ์ข…์†์„ฑ ์ธํ…”๋ฆฌ์ „์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ์—…์ด ๊ทœ์น™ ์ค€์ˆ˜๋ฅผ ๋„˜์–ด ์ง„์ •ํ•œ ํ–‰๋™ ์ดํ•ด๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” Scala๋ฅผ ๋‹จ์ˆœํ•œ ์–ธ์–ด ์„ ํƒ์ด ์•„๋‹Œ ๋ณต์žกํ•˜๊ณ  ๋Š์ž„์—†์ด ์ง„ํ™”ํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žซํผ์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ

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

๋‹ค์Œ ์„ ์ • ๊ทธ๋ฃน์€ ๊ธฐ์—…์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋„๋ฆฌ ์ฑ„ํƒํ•œ ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค. ์ธ๊ธฐ๋‚˜ ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ๋ณด๋‹ค๋Š” ์„ฑ์ˆ™๋„, ์ƒํƒœ๊ณ„ ์ ํ•ฉ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์— ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชฉํ‘œ๋ณ„ ์ตœ๊ณ ์˜ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ์„ ์ •

  • ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์•ˆ์ „์„ฑ ๋ฐ ์–ธ์–ด ์ œํ•œ ์‹œํ–‰
    WartRemover๋Š” Scala ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค.
  • ์‹œ๋งจํ‹ฑ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ์ง„ํ™”
    Scalafix, SemanticDB ๊ธฐ๋ฐ˜ ํˆด
  • ๋ฒ„๊ทธ ํƒ์ง€ ๋ฐ ์ฝ”๋“œ ์Šค๋ฉœ ์‹๋ณ„
    ํฌ์ƒ์–‘, ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ (JVM ํ†ตํ•ฉ ์ปจํ…์ŠคํŠธ)
  • ์ค‘์•™ ์ง‘์ค‘์‹ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ๋ณด๊ณ 
    SonarQube(Scala ๋ถ„์„ ๋„๊ตฌ)
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋ฐ ํ”ผ๋“œ๋ฐฑ ์ž๋™ํ™”
    sbt ๋„ค์ดํ‹ฐ๋ธŒ ๋ถ„์„๊ธฐ, SonarQube ํŒŒ์ดํ”„๋ผ์ธ
  • JVM ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ์–ธ์–ด ๊ฐ„ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด
    SonarQube, JVM ์ „๋ฐ˜ ๋ถ„์„ ํ”Œ๋žซํผ
  • ์—ฌ๋Ÿฌ ํŒ€์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์นœ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๊ฐ•์ œ ์ ์šฉ
    ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SonarQube

์Šค์นผ๋ผํ”ฝ์Šค

๊ณต์‹ ์‚ฌ์ดํŠธ: ์Šค์นผ๋ผํ”„

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

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

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

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • ํ•ด์„๋œ ๊ธฐํ˜ธ ๋ฐ ์œ ํ˜• ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์˜๋ฏธ ๋ถ„์„
  • API ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๋ฆฌํŒฉํ† ๋ง ์บ ํŽ˜์ธ์„ ์œ„ํ•œ ์ž๋™ํ™”๋œ ์ฝ”๋“œ ์žฌ์ž‘์„ฑ
  • ์กฐ์ง๋ณ„ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ๊ฐœ๋ฐœ
  • ํŒŒ์ผ ๊ฐ„ ๋ฐ ๋ชจ๋“ˆ ๊ฐ„ ์ฐธ์กฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • sbt ๋ฐ ํ‘œ์ค€ CI ํŒŒ์ดํ”„๋ผ์ธ๊ณผ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ฌด๋ฃŒ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด๋‚˜ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ฐ˜ ๋น„์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ์ด ์†Œ์œ  ๋น„์šฉ์€ ๊ทœ์น™ ์ž‘์„ฑ, ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๊ฒ€์ฆ์— ํ•„์š”ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

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

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

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

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

์‚ฌ๋งˆ๊ท€ ์ œ๊ฑฐ์ œ

๊ณต์‹ ์‚ฌ์ดํŠธ: ์›ŒํŠธ๋ฆฌ๋จธ

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

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

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

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • Scala ์–ธ์–ด์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๊ฐ•์ œ ์ ์šฉ
  • ํ—ˆ์šฉ ๋ฐ ๊ธˆ์ง€ ํŒจํ„ด์˜ ์„ธ๋ฐ€ํ•œ ๊ตฌ์„ฑ
  • ์ •์ฑ… ์œ„๋ฐ˜ ์‹œ ์ฆ‰์‹œ ๋นŒ๋“œ ์‹คํŒจ
  • ์ปดํŒŒ์ผ๋Ÿฌ ๋‹จ๊ณ„ ์‹คํ–‰์œผ๋กœ ์ธํ•œ ์ตœ์†Œํ•œ์˜ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • ์˜คํ”ˆ ์†Œ์Šค ๋ฐ ๋ฌด๋ฃŒ ์‚ฌ์šฉ
  • ์ƒ์—…์šฉ ๋ผ์ด์„ ์Šค ๋“ฑ๊ธ‰์ด๋‚˜ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ฐ˜ ์š”๊ธˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

  • ๊ด‘๋ฒ”์œ„ํ•œ ๋นŒ๋“œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ๊ณ„์  ํ™œ์„ฑํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ์กด ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ ์„ ํƒ์  ์–ต์ œ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•ˆ์ „๊ณผ ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ•๋ ฅํ•œ ๊ฑฐ๋ฒ„๋„Œ์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

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

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ํ™˜๊ฒฝ์—์„œ WartRemover๋Š” ๋ถ„์„ ์—”์ง„์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์˜ˆ๋ฐฉ์  ์ œ์–ด ๋„๊ตฌ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ˜‘์ƒ ๋ถˆ๊ฐ€๋Šฅํ•œ ์–ธ์–ด ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฐ•์ œํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด์ง€๋งŒ, ์˜๋ฏธ๋ก ์  ์ •ํ™•์„ฑ, ์•„ํ‚คํ…์ฒ˜ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ์šด์˜ ์œ„ํ—˜์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†์ฃ„ ์—ผ์†Œ

๊ณต์‹ ์‚ฌ์ดํŠธ: ์†์ฃ„ ์—ผ์†Œ

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

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

Scapegoat๋Š” sbt์™€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ†ตํ•ฉ๋˜๋ฉฐ HTML ๋ฐ CI ํŒŒ์ดํ”„๋ผ์ธ์— ์ ํ•ฉํ•œ ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅ ์ถœ๋ ฅ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์—„๊ฒฉํ•œ ๊ฒฐํ•จ ๊ฐ•์ œ ์ ์šฉ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ๊ฒฐํ•จ ์ถ”์„ธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ํŒจํ„ด์€ Scapegoat๊ฐ€ ์—„๊ฒฉํ•œ ๊ฒฐํ•จ ๊ฐ•์ œ ์ ์šฉ ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€์ฐฐ ๋„๊ตฌ๋กœ์„œ ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ, Scapegoat๋Š” ๊ฐœ๋ณ„ Scala ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ๊ณ„ ๋‚ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ ๊ฐ„ ์ข…์†์„ฑ, ๋ถ„์‚ฐ ์‹คํ–‰ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๋™์ž‘์— ๋Œ€ํ•ด์„œ๋Š” ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Scapegoat์˜ ๋ถ„์„์€ ์ •์ ์ด๊ณ  ํŒจํ„ด ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ์•Œ๋ ค์ง„ ๋ฌธ์ œ๋ฅผ ํƒ์ง€ํ•˜๋Š” ๋ฐ๋Š” ํšจ๊ณผ์ ์ด์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ๋ณต์žกํ•œ ์ƒํ˜ธ ์ž‘์šฉ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒˆ๋กœ์šด ์œ„ํ—˜์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” Scala ๋ฒ„๊ทธ ๋ฐ ์ฝ”๋“œ ์Šค๋ฉœ ํƒ์ง€
  • ์†Œ๊ฒฌ์˜ ์‹ฌ๊ฐ๋„ ๊ธฐ๋ฐ˜ ๋ถ„๋ฅ˜
  • ๊ด‘๋ฒ”์œ„ํ•œ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ทœ์น™ ์„ธํŠธ
  • CI ์นœํ™”์ ์ธ ๋ณด๊ณ  ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” sbt ํ†ตํ•ฉ

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • ์˜คํ”ˆ ์†Œ์Šค ๋ฐ ๋ฌด๋ฃŒ ์‚ฌ์šฉ
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด๋‚˜ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ฐ˜ ๋น„์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ์ƒํƒœ๊ณ„ ์ œ๊ณต์—…์ฒด๋ฅผ ํ†ตํ•ด ์„ ํƒ์  ์ƒ์—…์  ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

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

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

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

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

SonarQube(Scala ๋ถ„์„ ๋„๊ตฌ)

๊ณต์‹ ์‚ฌ์ดํŠธ: ์†Œ๋‚˜ํ๋ธŒ

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

๊ธฐ์—… ์กฐ์ง์—์„œ SonarQube๋Š” ์—”์ง€๋‹ˆ์–ด๋ง, ์œ„ํ—˜ ๊ด€๋ฆฌ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜์˜ ๊ต์ฐจ์ ์— ์œ„์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Scala ํ”„๋กœ์ ํŠธ๋Š” Java, Kotlin ๋ฐ ๊ธฐํƒ€ JVM ์–ธ์–ด์™€ ํ•จ๊ป˜ ๋ถ„์„๋˜๋ฏ€๋กœ ํ”Œ๋žซํผ ์ฑ…์ž„์ž๋Š” ์ผ๊ด€๋œ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ๋ฐ ๋ณด๊ณ  ํ‘œ์ค€์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์–ธ์–ด ๊ฐ„ ๊ฐ€์‹œ์„ฑ์€ Scala ์„œ๋น„์Šค๊ฐ€ Java ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ ๋˜๋Š” ๊ณต์œ  ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์ด๊ธฐ์ข… ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

ํ†ตํ•ฉ์€ SonarQube์˜ ์ฃผ์š” ๊ฐ•์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ CI/CD ์‹œ์Šคํ…œ, ์†Œ์Šค ์ œ์–ด ํ”Œ๋žซํผ ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ID ๊ณต๊ธ‰์ž์™€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. Scala ์ค‘์‹ฌ ์กฐ์ง์—์„œ ์ด๋Ÿฌํ•œ ํ†ตํ•ฉ์€ ๋ชจ๋“  ํŒ€์— ์‹ฌ๋„ ์žˆ๋Š” Scala ์ „๋ฌธ ์ง€์‹์ด ํ•„์š”ํ•˜์ง€ ์•Š๋„๋ก ๋ถ„์„ ์›Œํฌํ”Œ๋กœ๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™” ๊ณ„์ธต์œผ๋กœ ์ธํ•ด SonarQube๊ฐ€ ๊ณ ๊ธ‰ Scala ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์‹ฌ์ธต์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ๋ฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • ๋‹ค์–‘ํ•œ ์–ธ์–ด์— ๊ฑธ์ณ ์ค‘์•™ ์ง‘์ค‘์‹ ์ฝ”๋“œ ํ’ˆ์งˆ ๋Œ€์‹œ๋ณด๋“œ
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋œ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ
  • ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ฐ ๊ฒฐํ•จ ์ถ”์„ธ์— ๋Œ€ํ•œ ๊ณผ๊ฑฐ ์ถ”์ 
  • Scala ๋ฐ JVM ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ํ†ตํ•ฉ ๊ฑฐ๋ฒ„๋„Œ์Šค
  • ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๊ฐ์‚ฌ ์นœํ™”์ ์ธ ๋ณด๊ณ  ๊ธฐ๋Šฅ

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • ๊ธฐ๋Šฅ์ด ์ œํ•œ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์—๋””์…˜์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์šฉ ๋ฒ„์ „์€ ๋ถ„์„๋œ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜์— ๋”ฐ๋ผ ๊ฐ€๊ฒฉ์ด ์ฑ…์ •๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์—…์šฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋” ๋†’์€ ๋“ฑ๊ธ‰์˜ ๊ตฌ๋…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

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

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

  • ๊ณ ๊ธ‰ Scala ๊ตฌ๋ฌธ ๋ฐ ๊ด€์šฉ๊ตฌ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
  • Scala ์ „์šฉ ๋ถ„์„๊ธฐ์— ๋น„ํ•ด ์˜๋ฏธ๋ก ์  ๊นŠ์ด๊ฐ€ ์–•์Šต๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ๋™์ž‘์ด๋‚˜ ์‹คํ–‰ ์ข…์†์„ฑ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์ด ์—†์Œ
  • ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ๋ณด๋‹ค๋Š” ๊ทœ์ • ์ค€์ˆ˜ ์‹ ํ˜ธ์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ SonarQube๋Š” ์ฃผ์š” ๋ถ„์„ ์—”์ง„์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ๊ฐ€์‹œ์„ฑ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ, ์ถ”์ ์„ฑ ๋ฐ ์กฐ์ง์  ์ •๋ ฌ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ฌ์ธต์ ์ธ ์˜๋ฏธ๋ก ์  ์ดํ•ด๋‚˜ ๋ฆฌํŒฉํ† ๋ง ์•ˆ์ „์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” Scala ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Scala ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ”Œ๋ž˜๊ทธ

๊ณต์‹ ์‚ฌ์ดํŠธ: ์Šค์นผ๋ผ

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

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

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

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

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • ๊ฒฝ๊ณ  ๋ฐ ์˜ค๋ฅ˜๋ฅผ ํ†ตํ•ด ์—„๊ฒฉํ•œ ์ปดํŒŒ์ผ ๊ทœ์น™์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ, ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” API ๋ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ˆ˜ ๊ฒ€์‚ฌ ๋˜๋Š” ๋ณ€ํ™˜์„ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ
  • ์‹คํ–‰ ์‹œ๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ „ํ˜€ ์—†๊ณ  ์™ธ๋ถ€ ๋„๊ตฌ์— ๋Œ€ํ•œ ์˜์กด์„ฑ๋„ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • Scala ํˆด์ฒด์ธ์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด๋‚˜ ๊ตฌ๋…๋ฃŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋งž์ถคํ˜• ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

  • ๋ชจ๋“  Scala ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ์ค€์„ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ์‹ฌ๋„ ์žˆ๋Š” ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”ผ๋“œ๋ฐฑ์€ ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

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

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ”Œ๋ž˜๊ทธ๋Š” ๋ถ„์„ ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ์ ์ธ ์•ˆ์ „์žฅ์น˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๊ทœ์น™์„ ๊ฐ•์ œํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ๋„์™€์ฃผ์ง€๋งŒ, ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์œ„ํ—˜, ์ง„ํ™” ๋ฐ ์šด์˜ ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๋ถ„์„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

SemanticDB ํˆด๋ง ์ƒํƒœ๊ณ„

๊ณต์‹ ์‚ฌ์ดํŠธ: SemanticDB

SemanticDB๋Š” ๋…๋ฆฝ์ ์ธ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์˜๋ฏธ ์ •๋ณด ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ Scala ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ถ”์ถœํ•œ ์‹ฌ๋ณผ, ํƒ€์ž…, ์ฐธ์กฐ์— ๋Œ€ํ•œ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ํ™˜๊ฒฝ์—์„œ SemanticDB๋Š” ๊ณ ๊ธ‰ ์ •์  ๋ถ„์„ ๋ฐ ๋ฆฌํŒฉํ† ๋ง ๋„๊ตฌ๊ฐ€ ์ฝ”๋“œ ๊ตฌ์กฐ์™€ ์˜๋ฏธ๋ฅผ ๋” ๊นŠ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

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

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

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

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • ์ปดํŒŒ์ผ ์ค‘ ํ’๋ถ€ํ•œ ์˜๋ฏธ๋ก ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • ํŒŒ์ผ ๋ฐ ๋ชจ๋“ˆ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ •ํ™•ํ•œ ๊ธฐํ˜ธ ๋ฐ ์œ ํ˜• ํ•ด๊ฒฐ
  • ๊ณ ๊ธ‰ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ •์  ๋ถ„์„ ๋„๊ตฌ์˜ ๊ธฐ์ดˆ
  • sbt, IDE ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ์˜ ํ˜ธํ™˜์„ฑ

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ฌด๋ฃŒ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ผ์ด์„ผ์Šค ๋น„์šฉ ์—†์Œ
  • ํ•˜์œ„ ์„ค๋น„ ๊ตฌ์ถ• ๋˜๋Š” ํ†ตํ•ฉ์— ํ•„์š”ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ํˆฌ์ž

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ธํ”„๋ผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ‘œ์ค€ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํฌ๊ธฐ์™€ ๋ณต์žก์„ฑ์ด ์ปค์งˆ์ˆ˜๋ก ์ด์ ๋„ ์ปค์ง‘๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

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

๊ธฐ์—…์šฉ Scala ์ƒํƒœ๊ณ„์—์„œ SemanticDB๋Š” ์ง์ ‘์ ์ธ ์†”๋ฃจ์…˜์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์˜๋ฏธ ๋ถ„์„์„ ์œ„ํ•œ ํ•ต์‹ฌ์ ์ธ ์กฐ๋ ฅ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. SemanticDB์˜ ๊ฐ€์น˜๋Š” ๋…๋ฆฝ์ ์ธ ๊ฒฐ๊ณผ๋ฌผ๋ณด๋‹ค๋Š” ๋ถ„์„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์š”์†Œ์— ์žˆ์œผ๋ฉฐ, ๋ณด๋‹ค ํฌ๊ด„์ ์ธ ๋ถ„์„ ์ „๋žต์— ํ†ตํ•ฉ๋  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์‹œ๋‚˜๋ฆฌ์˜ค (JVM ํ†ตํ•ฉ ์‹œ๋‚˜๋ฆฌ์˜ค)

๊ณต์‹ ์‚ฌ์ดํŠธ: ๊ฒฝํ–ฅ์ด์žˆ๋Š” ์˜ค๋ฅ˜

Error Prone์€ ์›๋ž˜ Java ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™•์žฅํ•˜์—ฌ Java์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜๋ฅผ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Scala ํ™˜๊ฒฝ์—์„œ๋Š” Scala ์ „์šฉ ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ, Scala์™€ Java๊ฐ€ ๊ณต์กดํ•˜๋Š” ํ˜ผํ•ฉ ์–ธ์–ด ์‹œ์Šคํ…œ์—์„œ JVM ์ˆ˜์ค€์˜ ์ •ํ™•์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Scala ์„œ๋น„์Šค๊ฐ€ ๊ณต์œ  Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌ๊ฒŒ ์˜์กดํ•˜๊ฑฐ๋‚˜ JVM ์ „์ฒด ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์— ์ฐธ์—ฌํ•˜๋Š” ์กฐ์ง์—์„œ ๊ทธ ์ค‘์š”์„ฑ์ด ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ, Error Prone์€ Scala ์ „์šฉ ๋„๊ตฌ์™€๋Š” ๋‹ค๋ฅธ ์ถ”์ƒํ™” ๊ณ„์ธต์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Java ๋ฐ”์ดํŠธ์ฝ”๋“œ์™€ ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ JVM ์ˆ˜์ค€์—์„œ ์ •ํ™•์„ฑ, ์•ˆ์ „์„ฑ ๋˜๋Š” ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ํŒจํ„ด์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. Scala ์ฝ”๋“œ๊ฐ€ ๋งŽ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Scala ์†Œ์Šค ์ฝ”๋“œ ์ž์ฒด๋ณด๋‹ค๋Š” Scala ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋Š” Java ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฐ„์ ‘์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…๋“ค์€ ๊ณต์œ  Java ์ธํ”„๋ผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ์  ์œ„ํ—˜์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Error Prone์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. Scala ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ณตํ†ต Java ์œ ํ‹ธ๋ฆฌํ‹ฐ, ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์— ์˜์กดํ•˜๋Š” ํ”Œ๋žซํผ์—์„œ JVM ์ˆ˜์ค€์˜ ๊ฒฐํ•จ์€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๊ฑธ์ณ ํ™•์‚ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Error Prone์€ ์ด๋Ÿฌํ•œ ๊ฒฐํ•จ์„ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•˜์—ฌ Scala ๊ธฐ๋ฐ˜ ์›Œํฌ๋กœ๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ํ”„๋กœ๋•์…˜ ์žฅ์• ๋กœ ๋ฐœ์ „ํ•˜๊ธฐ ์ „์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ†ตํ•ฉ์€ ์ด๋ฏธ ํ†ตํ•ฉ๋œ JVM ๋นŒ๋“œ ํˆด์„ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. Error Prone์€ Java ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ Maven, Gradle๊ณผ ๊ฐ™์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉ๋˜๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ์–ธ์–ด ํ™˜๊ฒฝ์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ทœ์น™์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Scala๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฒ ์ด์Šค์— Scala ๊ตฌ๋ฌธ์ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ ์šฉ์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์—ญ๋Ÿ‰

  • ์ผ๋ฐ˜์ ์ธ JVM ์ˆ˜์ค€ ๋ฒ„๊ทธ ํŒจํ„ด ํƒ์ง€
  • ์กฐ๊ธฐ ํ”ผ๋“œ๋ฐฑ์„ ํฌํ•จํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ํ†ตํ•ฉ ๋ถ„์„
  • ์ •ํ™•์„ฑ๊ณผ ์•ˆ์ „ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ง‘์ค‘
  • Scala ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์œ  Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ๋ชจ๋ธ

  • ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ฌด๋ฃŒ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด๋‚˜ ๊ตฌ๋…๋ฃŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ†ตํ•ฉ ๋ฐ ๊ตฌ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์šด์˜ ๋น„์šฉ

๊ธฐ์—…์˜ ๋„์ž… ๊ณ ๋ ค ์‚ฌํ•ญ

  • Scala์™€ Java๊ฐ€ ํ˜ผํ•ฉ๋œ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • JVM ์ „๋ฐ˜์˜ ๋นŒ๋“œ ํ‘œ์ค€๊ณผ์˜ ์ผ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Scala ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณด์™„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ

  • ์Šค์นผ๋ผ ์–ธ์–ด ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ์  ์ถ”์ƒํ™” ๋˜๋Š” ์•”๋ฌต์  ๋™์ž‘์„ ๋ถ„์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ˆœ์ˆ˜ Scala ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ํ™œ์šฉ๋„๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • ๋ถ„์‚ฐ ์‹คํ–‰ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๋™์ž‘์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์ด ์—†์Œ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ Error Prone์€ Scala ๋ถ„์„ ์†”๋ฃจ์…˜์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” JVM ์•ˆ์ „๋ง ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Error Prone์˜ ๊ฐ€์น˜๋Š” Scala ์‹œ์Šคํ…œ์ด ์˜์กดํ•˜๋Š” ๊ณตํ†ต Java ๊ธฐ๋ฐ˜์„ ๋ณดํ˜ธํ•˜์—ฌ ์กฐ์ง์ด ์–ธ์–ด ๊ฐ„ ์ถฉ๋Œ ์œ„ํ—˜์„ ์ค„์ด๋Š” ๋ฐ ์žˆ์œผ๋ฉฐ, ์‹ฌ์ธต์ ์ธ Scala ๊ด€๋ จ ๋™์ž‘ ๋ถ„์„์—๋Š” ์ถ”๊ฐ€์ ์ธ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ธ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ๋น„๊ต ๊ฐœ์š”

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

๊ฐ ๋„๊ตฌ๋Š” ๊ณ ์œ ํ•œ ๋ถ„์„ ์˜์—ญ์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„๋„ ์žˆ์ง€๋งŒ, ์ ์šฉ ๋ฒ”์œ„์˜ ์ฐจ์ด๋Š” ์šฐ์—ฐ์ ์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ํŒ€, ์ €์žฅ์†Œ ๋ฐ ํ˜„๋Œ€ํ™” ๋‹จ๊ณ„๋ฅผ ์•„์šฐ๋ฅด๋ฉฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํˆด์ฒด์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์ˆ˜๋‹จ์ฃผ์š” ๋ถ„์„ ์ดˆ์ ์‹คํ–‰ ๋‹จ๊ณ„๊ธฐ์—…์˜ ๊ฐ•์ ๊ฐ€๊ฒฉ ๋ชจ๋ธ์ฃผ์š” ์ œํ•œ ์‚ฌํ•ญ
์Šค์นผ๋ผํ”ฝ์Šค์˜๋ฏธ๋ก ์  ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๊ฐ•์ œ ์ ์šฉSemanticDB๋ฅผ ์‚ฌ์šฉํ•œ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์•ˆ์ „ํ•œ ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง, API ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ชจ๋“ˆ ๊ฐ„ ์˜๋ฏธ๋ก ์  ์ผ๊ด€์„ฑ ์œ ์ง€์˜คํ”ˆ ์†Œ์Šค์‹คํ–‰ ์‹œ๊ฐ„์ด๋‚˜ ํ–‰๋™ ๋ถ„์„ ๊ธฐ๋Šฅ ์—†์Œ, ๊ทœ์น™ ์œ ์ง€ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์Œ
์‚ฌ๋งˆ๊ท€ ์ œ๊ฑฐ์ œ์–ธ์–ด ์ œํ•œ ๋ฐ ์•ˆ์ „ ์กฐ์น˜ ์‹œํ–‰์ปดํŒŒ์ผ ํƒ€์ž„(์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ)๊ฐ•๋ ฅํ•œ ์˜ˆ๋ฐฉ์  ํ†ต์ œ๋Š” ํ˜‘์ƒ ๋ถˆ๊ฐ€๋Šฅํ•œ ์–ธ์–ด์  ์ œ์•ฝ์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค.์˜คํ”ˆ ์†Œ์Šค์ด์ง„ ์ฝ”๋“œ ๊ฐ•์ œ ์ ์šฉ, ์ œํ•œ๋œ ๋ถ„์„ ๊นŠ์ด, ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์— ๋ถ€์ ํ•ฉ
์†์ฃ„ ์—ผ์†Œ๋ฒ„๊ทธ ํƒ์ง€ ๋ฐ ์ฝ”๋“œ ์Šค๋ฉœ ์‹๋ณ„ํ›„์ฒ˜๋ฆฌ๊ด‘๋ฒ”์œ„ํ•œ ๊ฒฐํ•จ ๊ฐ€์‹œ์„ฑ, ์‹ฌ๊ฐ๋„ ๊ธฐ๋ฐ˜ ๊ฒฐ๊ณผ, CI ์นœํ™”์ ์ธ ๋ณด๊ณ ์„œ์˜คํ”ˆ ์†Œ์ŠคํŒจํ„ด ๊ธฐ๋ฐ˜ ๋ถ„์„, ์ถ”์ƒ ์ฝ”๋“œ์—์„œ ์˜คํƒ๋ฅ  ์ฆ๊ฐ€, ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ ๋ถ€์กฑ
SonarQube(Scala ๋ถ„์„ ๋„๊ตฌ)์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋ถ„์„๋‹ค๊ตญ์–ด ์ง€์›, ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ, ๊ฐ์‚ฌ ์ค€๋น„ ์ƒํƒœ์ƒ์—…(LOC ๊ธฐ๋ฐ˜)์–•์€ Scala ์˜๋ฏธ๋ก , ์ผ๋ฐ˜์ ์ธ ๋ฉ”ํŠธ๋ฆญ, ์‹คํ–‰ ์ •๋ณด ์—†์Œ
Scala ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ”Œ๋ž˜๊ทธ์ €์ˆ˜์ค€ ์ •ํ™•์„ฑ ๋ฐ ๊ฒฝ๊ณ  ๊ฐ•์ œ ์ ์šฉ์ปดํŒŒ์ผ๋Ÿฌ ๋‹จ๊ณ„์ตœ์†Œํ•œ์˜ ๊ณต๊ตฌ ์‚ฌ์šฉ ๊ณต๊ฐ„, ์—„๊ฒฉํ•œ ๊ธฐ์ค€ ์ค€์ˆ˜Scala์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.๋‹จํŽธ์ ์ธ ํ”ผ๋“œ๋ฐฑ, ์ง‘๊ณ„ ๋ถ€์žฌ, ๋†’์€ ์ „๋ฌธ์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ
SemanticDB ํˆด๋ง ์ƒํƒœ๊ณ„์˜๋ฏธ๋ก ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒ์„ฑ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์•„ํ‹ฐํŒฉํŠธ๊ณ ๊ธ‰ ๋ถ„์„ ๋ฐ ๋ฆฌํŒฉํ† ๋ง ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜คํ”ˆ ์†Œ์Šค๋‹จ๋…์œผ๋กœ๋Š” ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ตฌ์ถ• ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ (JVM ํ†ตํ•ฉ)JVM ์ˆ˜์ค€์˜ ์ •ํ™•์„ฑ๊ณผ ์•ˆ์ „์„ฑ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ ๋‹จ๊ณ„ํ˜ผํ•ฉ ์–ธ์–ด ์‹œ์Šคํ…œ์—์„œ ๊ณต์œ ๋˜๋Š” Java ๊ธฐ๋ฐ˜์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.์˜คํ”ˆ ์†Œ์ŠคScala์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์ˆœ์ˆ˜ Scala ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ด€๋ จ์„ฑ์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

๊ทธ ์™ธ ์ฃผ๋ชฉํ•  ๋งŒํ•œ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ๋Œ€์•ˆ

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

์•„๋ž˜์— ๋‚˜์—ด๋œ ๋„๊ตฌ๋“ค์€ ์ฃผ์š” Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์ง์ ‘ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ํฌ๋งท ํ‘œ์ค€ํ™”, ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๋ถ„์„ ๋˜๋Š” JVM ์ „์ฒด ๊ฒ€์‚ฌ์™€ ๊ฐ™์€ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๋ถ„์•ผ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€์ฒด ๋„๊ตฌ

  • ์Šค์นผ๋ผ์Šคํƒ€์ผ
    ์Šคํƒ€์ผ ๋ฐ ์„œ์‹ ๊ทœ์น™์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์ผ๊ด€๋œ ์ฝ”๋“œ ๋ ˆ์ด์•„์›ƒ๊ณผ ๋ช…๋ช… ๊ทœ์น™์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜์ง€๋งŒ ์˜๋ฏธ๋ก ์  ๋˜๋Š” ๋™์ž‘ ๋ถ„์„์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • sbt-์ปค๋ฒ„๋ฆฌ์ง€
    ์ •์  ๋ถ„์„์ด ์•„๋‹Œ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ง€ํ‘œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ ˆ๊ฑฐ์‹œ Scala ์‹œ์Šคํ…œ์—์„œ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ๋กœ์ง ๊ฒฝ๋กœ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ •์  ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • IntelliJ Scala ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฒ€์‚ฌ
    IDE ๊ธฐ๋ฐ˜ ๊ฒ€์‚ฌ๋Š” ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋กœ์ปฌ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์—๋Š” ํšจ๊ณผ์ ์ด์ง€๋งŒ, ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ๋˜๋Š” CI ๊ฐ•์ œ ์ ์šฉ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ฒดํฌ์Šคํƒ€์ผ(JVM ์ปจํ…์ŠคํŠธ)
    ํ˜ผํ•ฉ ์–ธ์–ด ํ™˜๊ฒฝ์—์„œ JVM ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ๊ฑธ์ณ ์„œ์‹ ๋ฐ ๊ตฌ์กฐ ๊ทœ์น™์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Scala ๊ณ ์œ ์˜ โ€‹โ€‹์˜๋ฏธ๋ก ๊ณผ๋Š” ๊ด€๋ จ์„ฑ์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • PMD(JVM ์ปจํ…์ŠคํŠธ)
    ํŒจํ„ด ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋กœ, ์ฃผ๋กœ Java๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Scala์™€ Java์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ์—๋„ ๊ฐ„ํ˜น ์‚ฌ์šฉ๋˜์ง€๋งŒ, Scala ๊ด€๋ จ ๊ธฐ๋Šฅ์€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • FindBugs / SpotBugs
    JVM ๊ฒฐํ•จ ํƒ์ง€์— ์ดˆ์ ์„ ๋งž์ถ˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ˆ˜์ค€ ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ปดํฌ๋„ŒํŠธ๋‚˜ ๊ณต์œ  ์ปดํฌ๋„ŒํŠธ์˜ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, Scala ์–ธ์–ด์— ๋Œ€ํ•œ ์ธ์‹์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
  • Scalameta ๊ธฐ๋ฐ˜ ๋งž์ถคํ˜• ๋ถ„์„๊ธฐ
    ์กฐ์ง๋ณ„ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด Scalameta ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ๋‚ด๋ถ€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋งค์šฐ ํฐ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋งŒ ์‚ฌ์šฉ์ด ์ •๋‹นํ™”๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ Scala ์ƒํƒœ๊ณ„์—์„œ ์ด๋Ÿฌํ•œ ๋Œ€์•ˆ๋“ค์€ ์ „๋žต์  ๊ธฐ๋ฐ˜์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ „์ˆ ์  ๋ณด์กฐ ์ˆ˜๋‹จ์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ, ํฌ๋งท ์ผ๊ด€์„ฑ, JVM ์ˆ˜์ค€ ๊ฒ€์‚ฌ์™€ ๊ฐ™์€ ํŠน์ • ๊ฒฉ์ฐจ๋ฅผ ํ•ด์†Œํ•˜์ง€๋งŒ, ๋ณต์žกํ•˜๊ณ  ๋ถ„์‚ฐ๋œ Scala ์‹œ์Šคํ…œ์— ์ ์šฉํ•  ๋•Œ ์ •์  ๋ถ„์„์˜ ์ „๋ฐ˜์ ์ธ ๋ถ„์„ ํ•œ๊ณ„๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๋ฐ”๊พธ์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค.

Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•  ๋•Œ์˜ ์•„ํ‚คํ…์ฒ˜์  ์ ˆ์ถฉ์ 

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

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

๋ฒ• ์ง‘ํ–‰์˜ ์—„๊ฒฉ์„ฑ ๋Œ€ ์กฐ์ง ์ ์‘๋ ฅ

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

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

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

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

์‹ ํ˜ธ ์ค‘์ฒฉ ๋ฐ ๋ถ„์„์  ์žก์Œ

๋˜ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜์  ์ ˆ์ถฉ์ ์€ ์—ฌ๋Ÿฌ ๋ถ„์„ ๋„๊ตฌ์—์„œ ์ƒ์„ฑ๋˜๋Š” ์‹ ํ˜ธ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๋ฐ์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Scalafix, Scapegoat, SonarQube๋Š” ๋ชจ๋‘ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ์ง€์ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ถ„์„ ๊ด€์ ์—์„œ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋„๊ตฌ์—์„œ ์˜๋ฏธ๋ก ์  ์œ„๋ฐ˜์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅธ ๋„๊ตฌ์—์„œ๋Š” ์ฝ”๋“œ ์Šค๋ฉœ๋กœ, ๋˜ ๋‹ค๋ฅธ ๋„๊ตฌ์—์„œ๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๋กœ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ค‘๋ณต ์‹ ํ˜ธ๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ธ์ง€๋œ ์œ„ํ—˜์ด ๊ณผ์žฅ๋˜๊ณ  ๊ทผ๋ณธ ์›์ธ์ด ๊ฐ€๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

์‹œ์Šคํ…œ ์ˆ˜๋ช…์ฃผ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์นœ ๋‹จํŽธ์ ์ธ ๊ฐ€์‹œ์„ฑ

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

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

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

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

๋ถ„์‚ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„์˜ ํ•œ๊ณ„

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

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

๋Ÿฐํƒ€์ž„ ๋™์ž‘ ๋ฐ ์‹คํ–‰ ์ˆœ์„œ ๊ด€๋ จ ์‚ฌ๊ฐ์ง€๋Œ€

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

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

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

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

๋น„๋™๊ธฐ ํ†ต์‹  ๋ฐ ์ˆจ๊ฒจ์ง„ ์˜ค๋ฅ˜ ์ „ํŒŒ

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

์‹ค์ œ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์˜ค๋ฅ˜ ์ „ํŒŒ๋Š” ์žฌ์‹œ๋„ ๋กœ์ง, ํƒ€์ž„์•„์›ƒ ๊ตฌ์„ฑ, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ๋ฐ ๋ฉฑ๋“ฑ์„ฑ ๋ณด์žฅ์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ž‘์€ ์ข…์ข… Scala ์†Œ์Šค ์ฝ”๋“œ ์™ธ๋ถ€์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‚˜ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„ ์˜ค๋ฅ˜๋‚˜ ์—ฐ์‡„ ์žฌ์‹œ๋„๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค.

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

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

์‹œ์Šคํ…œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐ ์ƒํƒœ ์ผ๊ด€์„ฑ ๋ฌธ์ œ

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

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

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

๊ธฐ์—…์˜ ๊ฒฝ์šฐ, ์ด๋Š” ์ •์  ๋ถ„์„์ด ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ด€์ฐฐํ•˜๋Š” ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ๊ฒ€์ฆ ๊ธฐ์ˆ ๋กœ ๋ณด์™„๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Scala ์ •์  ๋ถ„์„์€ ์ฝ”๋“œ์˜ ์˜๋„์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์„ ๋Œ€์ฒดํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

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

ํ˜„๋Œ€ํ™” ํ”„๋กœ๊ทธ๋žจ์—์„œ Scala ์ •์  ์ฝ”๋“œ ๋ถ„์„์˜ ์œ„์น˜ ์„ ์ •

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

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

์ ์ง„์  ๋ณ€ํ™”๋ฅผ ์•ˆ์ •ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ •์  ๋ถ„์„ ํ™œ์šฉ

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

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

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

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

์ •์  ๋ถ„์„๊ณผ ์•„ํ‚คํ…์ฒ˜ ๋ถ„ํ•ด์˜ ์—ฐ๊ณ„

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

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

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

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

ํ”Œ๋žซํผ ๋ฐ ๊ธฐ์ˆ  ์ „ํ™˜ ๊ณผ์ •์—์„œ์˜ ์œ„ํ—˜ ๊ด€๋ฆฌ

Scala ํ˜„๋Œ€ํ™”๋Š” ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์ธํ”„๋ผ๋กœ์˜ ์ด์ „์ด๋‚˜ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ๊ณผ์˜ ํ†ตํ•ฉ๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ ์ „ํ™˜๊ณผ ๋™์‹œ์— ์ง„ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ •์  ์ฝ”๋“œ ๋ถ„์„์€ ์ด์ „ ํ™˜๊ฒฝ์— ๊ธฐ๋ฐ˜ํ•œ ๊ฐ€์ •๋“ค์„ ๋“œ๋Ÿฌ๋‚ด์–ด ์œ„ํ—˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ€์ •์—๋Š” ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ, ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ํŒจํ„ด ๋˜๋Š” ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ์œผ๋กœ ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜๋˜์ง€ ์•Š๋Š” ํ†ตํ•ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ํ”Œ๋žซํผ ์ „ํ™˜ ์‹œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ตฌ๋ฌธ์ด๋‚˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํŒจํ„ด์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํŒ€์ด Scala ์ฝ”๋“œ๊ฐ€ ํ”Œ๋žซํผ๋ณ„ ๋™์ž‘์— ์˜์กดํ•˜๋Š” ์˜์—ญ์„ ์‹๋ณ„ํ•˜์—ฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „์— ์ ์ ˆํ•œ ์ˆ˜์ •์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์ „ ๋ถ„์„์„ ํ†ตํ•ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ผ์ • ์ง€์—ฐ์„ ์ดˆ๋ž˜ํ•˜๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ •์  ๋ถ„์„๋งŒ์œผ๋กœ๋Š” ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ์„ ๋‹จ๋…์œผ๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ๊ตฌ์„ฑ, ๋„คํŠธ์›Œํฌ ๋™์ž‘ ๋˜๋Š” ์šด์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ถ„์„์˜ ์—ญํ• ์€ ํ™•์ •์ ์ธ ๊ฒ€์ฆ๋ณด๋‹ค๋Š” ์ค€๋น„ ๋‹จ๊ณ„์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ๊ธฐ์—…์€ ์ด๋ฅผ ํ†ตํ•ด ๋ถˆํ™•์‹ค์„ฑ์„ ์ค„์ด๊ณ  ์œ„ํ—˜๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋ถ€๋ถ„์— ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ ๋…ธ๋ ฅ์„ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์œ„ํ—˜์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๊ทธ ํ˜•ํƒœ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ

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

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

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

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

์Šค์นผ๋ผ๊ฐ€ ์žฅ๊ธฐ์ ์ธ ํ•ต์‹ฌ ์‹œ์Šคํ…œ์— ๊ณ„์† ์‚ฌ์šฉ๋จ์— ๋”ฐ๋ผ ์ •์  ๋ถ„์„์ด๋ผ๋Š” ๋ถ„์•ผ๋Š” ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋กœ ๋‚จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์˜ ๊ฐ€์žฅ ํฐ ๊ณตํ—Œ์€ ๊ธฐ์—…์ด ๊ทœ๋ชจ, ๋ถ„ํฌ ๋ฐ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์œ„ํ—˜์ด ์ฆํญ๋˜๊ธฐ ์ „์— ์œ„ํ—˜์˜ ์œค๊ณฝ์„ ์กฐ๊ธฐ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค.