2023๋…„ 11์›” 01์ผยท6๋ถ„ ์ฝ๊ธฐ

Java์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ: ์ „๋žต ๋ฐ ๋„๊ตฌ

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

Java์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ: ์ „๋žต ๋ฐ ๋„๊ตฌ

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

๊ฐœ๋ณ„ ์žฅ์น˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜๋งŽ์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

Java์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

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

ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ

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

ํ…Œ์ŠคํŠธ๋Ÿฌ๋„ˆ

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

์ฃผ์žฅ

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

ํ…Œ์ŠคํŠธ ๋”๋ธ”

ํ…Œ์ŠคํŠธ ๋”๋ธ”์€ ํ…Œ์ŠคํŠธ ์ค‘์ธ ์žฅ์น˜์˜ ์ข…์†์„ฑ์„ ๋Œ€์ฒดํ•˜์—ฌ ์ด๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ œ์–ด๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋”๋ธ”์€ ๋ชจ์˜(Mock), ์Šคํ…(Stub), ๋”๋ฏธ(Dummies), ํŽ˜์ดํฌ(Fake), ์ŠคํŒŒ์ด(Spy)๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋ณด๋‹ค ํšจ๊ณผ์ ์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

ํšจ์œจ์ ์ธ Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ „๋žต ๋ฐ ๊ธฐ์ˆ 

ํšจ์œจ์ ์ธ Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๋ณด์žฅํ•˜๋Š” ํšจ๊ณผ์ ์ธ ์ „๋žต๊ณผ ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ…Œ์ŠคํŠธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ์ œ์•ˆ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฒฝ๋กœ ํ…Œ์ŠคํŠธ์— ์ง‘์ค‘

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

์ ์ ˆํ•œ ์–ด์„ค์…˜์„ ์„ ํƒํ•˜์„ธ์š”.

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

ํ…Œ์ŠคํŠธ ์ค‘์ธ ์žฅ์น˜๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

ํšจ๊ณผ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ตฌ์„ฑ ๋ฐ ์ด๋ฆ„ ์ง€์ •

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

๊นจ๋—ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

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

๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”

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

์ด๋Ÿฌํ•œ ์ „๋žต๊ณผ ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋”์šฑ ํšจ์œจ์ ์ด๊ณ  ํšจ๊ณผ์ ์ธ Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, ์ฝ”๋“œ ํ’ˆ์งˆ์ด ํ–ฅ์ƒ๋˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋”์šฑ ์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Java์šฉ ์ธ๊ธฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„๊ตฌ

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

  • JUnit: JUnit์€ Java ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ฃผ์„, ์–ด์„ค์…˜ ๋ฐ ๊ตฌ์„ฑ ์„ ํƒ ์‚ฌํ•ญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • TestNG: TestNG๋Š” JUnit ๋ฐ NUnit์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๋˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ด์ง€๋งŒ ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ์œ ์—ฐํ•œ ํ…Œ์ŠคํŠธ ๊ตฌ์„ฑ, ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ง€์›๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Mockito: Mockito ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ชจ์˜ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑ, ๊ตฌ์„ฑ ๋ฐ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” Java ๋ชจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • PowerMock: PowerMock์€ Mockito ๋ฐ EasyMock๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ธ๊ธฐ ์žˆ๋Š” ๋ชจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ™•์žฅ์œผ๋กœ, ๋ชจ์˜ ์ •์  ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž, ์ตœ์ข… ํด๋ž˜์Šค ๋ฐ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • AssertJ: AssertJ๋Š” ํ‘œํ˜„์ ์ด๊ณ  ์„ค๋ช…์ ์ธ ํ…Œ์ŠคํŠธ ์–ด์„ค์…˜์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์œ ์—ฐํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์–ด์„ค์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • Spock: Spock์€ Groovy์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๋ช…ํ™•ํ•˜๊ณ  ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ ์‚ฌ์–‘ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจํ‚น๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Java ๋ฐ Groovy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ ํ…Œ์ŠคํŠธ ๋ฐ ์‚ฌ์–‘ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

๋งŽ์€ Java ๊ฐœ๋ฐœ์ž์™€ ํŒ€์€ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์„ ํ˜ธ ์‚ฌํ•ญ์— ๋งž๋Š” ๋„๊ตฌ ์กฐํ•ฉ์„ ์„ ํƒํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋ฉฐ ์•ˆ์ •์ ์ธ ๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

JUnit - ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

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

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

  • @Test : ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • @BeforeEach : ํด๋ž˜์Šค์˜ ๊ฐ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ „์— ์‹คํ–‰๋  ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • @AfterEach : ํด๋ž˜์Šค์˜ ๊ฐ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ํ›„์— ์‹คํ–‰๋  ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒญ์†Œ ์ž‘์—…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • @BeforeAll : ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต์œ  ๋ฆฌ์†Œ์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ „์— ํ•œ ๋ฒˆ ์‹คํ–‰๋  ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • @AfterAll : ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต์œ  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํ›„์— ํ•œ ๋ฒˆ ์‹คํ–‰๋  ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • @DisplayName : ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ๋˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • @Nested : ์ค‘์ฒฉ ํด๋ž˜์Šค์— ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ค‘์ฒฉ๋œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JUnit์€ ์˜ˆ์ƒ๋˜๋Š” ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์–ด์„ค์…˜(์˜ˆ: assertEquals , assertTrue , assertNull ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, assertThrows ๋ฉ”์†Œ๋“œ๋Š” ์˜ˆ์ƒ๋˜๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์˜ˆ์™ธ ์‚ฌ๋ก€๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋ชจ์˜ ๋ฐ ์Šคํ„ฐ๋น™

์ž์ฃผ ์“ฐ์ด๋Š” ์•ฑ ๊ธฐ๋Šฅ ์ œ๊ณต
์ธ์ฆ, ๊ฒฐ์ œ, ๋ฉ”์‹œ์ง• ๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์ถ”๊ฐ€ํ•˜์„ธ์š”.
๋ชจ๋“ˆ ์‚ฌ์šฉ

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

Mockito ๋ฐ PowerMock๊ณผ ๊ฐ™์€ ๋ชจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ๋ชจ์˜ โ€‹โ€‹๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š” ์—†์ด ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ… ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ชจ์˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ˜ํ™˜ ๊ฐ’์ด๋‚˜ ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ค‘์ธ ์žฅ์น˜์™€ ํ•ด๋‹น ์ข…์†์„ฑ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ํŠน์ • ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ).

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

 MyService myServiceMock = Mockito.mock(MyService.class);

Mockito์˜ Stubbing ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์€ when ๋ฐ thenReturn ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 Mockito.when(myServiceMock.doSomething(arg)).thenReturn(someResult);

Mockito์˜ verify ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ๋ชจ์˜ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 Mockito.verify(myServiceMock).doSomething(arg);

๋˜ ๋‹ค๋ฅธ Java ๋ชจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ธ PowerMock์€ Mockito ๋ฐ EasyMock ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์ •์  ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž, ์ตœ์ข… ํด๋ž˜์Šค ๋ฐ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์€ Mockito์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ชจ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ API์— ์ต์ˆ™ํ•จ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ ˆ๊ฑฐ์‹œ ๋˜๋Š” ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Java์˜ TDD(ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ)

TDD(ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ)๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ๋” ๋‚˜์€ ์ฝ”๋“œ ํ’ˆ์งˆ, ์†์‰ฌ์šด ๋ฆฌํŒฉํ† ๋ง, ๋” ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. TDD ํ”„๋กœ์„ธ์Šค๋Š” Red-Green-Refactor๋ผ๊ณ ๋„ ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ(๋นจ๊ฐ„์ƒ‰) : ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” ์ƒˆ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ(๋…น์ƒ‰) : ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ๊ฒฐ๊ณผ ๊ตฌํ˜„์ด ์ตœ์ ์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ ์™„์ „ํ•˜์ง€ ์•Š๋”๋ผ๋„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.
  3. ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง(Refactor) : ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ํ•„์š”ํ•œ ์‚ฌํ•ญ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง ํ›„์—๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด ๋‹จ๊ณ„๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์นœํ™˜๊ฒฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ๊ธฐ๋Š” ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต๋˜์–ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ฒด๊ณ„์ ์ด๊ณ  ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. TDD ํ”„๋กœ์„ธ์Šค๋Š” Java ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— TDD๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด JUnit๊ณผ ๊ฐ™์€ ์ตœ์‹  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. TestNG ๋ฐ Mockito์™€ ๊ฐ™์€ ๊ธฐํƒ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋„๊ตฌ๋ฅผ JUnit๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java์˜ ์ง€์†์ ์ธ ํ†ตํ•ฉ ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

์†Œ์Šค ์ฝ”๋“œ๋กœ ํ†ต์ œ ์œ ์ง€
์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ ์ถœ๋ ฅ์„ ๋ฐ›์•„ ์ž์ฒด ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜์„ธ์š”.
์ฝ”๋“œ ๋‚ด๋ณด๋‚ด๊ธฐ

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

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

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

Java ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ชจ๋ฒ” ์‚ฌ๋ก€

๋…ธ์ฝ”๋“œ์™€ Java ์—ฐ๊ฒฐ
๋ฐฑ์—”๋“œ์™€ UI๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•œ ๋’ค REST API๋กœ Java ์„œ๋น„์Šค์™€ ํ†ตํ•ฉํ•˜์„ธ์š”.
AppMaster ์ฒดํ—˜

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

  1. ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์›Œ์•ผ ํ•˜๋ฉฐ ์ฝ”๋“œ์˜ ๋‹จ์ผ ์ธก๋ฉด์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”. ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ์ดํ•ด๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ…Œ์ŠคํŠธ ์ค‘์š” ๊ฒฝ๋กœ : ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๊ฐ€ ์„ฑ๊ณต ์‹œ๋‚˜๋ฆฌ์˜ค, ์—ฃ์ง€ ์‚ฌ๋ก€, ์‹คํŒจ ์‹œ๋‚˜๋ฆฌ์˜ค ๋“ฑ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ•„์ˆ˜ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋…ผ๋ฆฌ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ๊ฒฌ๊ณ ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  3. ์ ์ ˆํ•œ ์–ด์„ค์…˜ ์‚ฌ์šฉ : ๊ฐ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€์— ์ ํ•ฉํ•œ ์–ด์„ค์…˜์„ ์„ ํƒํ•˜๊ณ  ์‹คํŒจํ•  ๊ฒฝ์šฐ ์˜๋ฏธ ์žˆ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํ‰๊ฐ€ํ•˜๊ณ  ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  4. ํ…Œ์ŠคํŠธ ์ค‘์ธ ๋‹จ์œ„ ๊ฒฉ๋ฆฌ : ๋ชจ์˜ ๋ฐ ์Šคํ„ฐ๋น™๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ค‘์ธ ๋‹จ์œ„๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ์™ธ๋ถ€ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ์ข…์†์„ฑ์˜ ๋™์ž‘์ด ์•„๋‹Œ ํ…Œ์ŠคํŠธ ์ค‘์ธ ์žฅ์น˜์˜ ๋™์ž‘์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ˜์˜ํ•˜๋„๋ก ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.
  5. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ตฌ์„ฑ ๋ฐ ์ด๋ฆ„ ์ง€์ • : ํŒจํ‚ค์ง€์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์„ค๋ช…์ ์ธ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ์ผ๊ด€๋œ ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ฐพ๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. TDD(ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ) ์‚ฌ์šฉ : TDD๋ฅผ ์ฑ„ํƒํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•๋ก ์€ ๋” ๋‚˜์€ ์ฝ”๋“œ ํ’ˆ์งˆ, ๋ชจ๋“ˆ์‹ ์„ค๊ณ„ ๋ฐ ๋ฆฌํŒฉํ† ๋ง ์šฉ์ด์„ฑ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.
  7. ์ง€์†์ ์ธ ํ†ตํ•ฉ ํŒŒ์ดํ”„๋ผ์ธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ†ตํ•ฉ : ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๋ฉด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ œ์ถœ๋  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ์— ๋Œ€ํ•œ ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ  ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๊ฐ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

๊ฒฐ๋ก 

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

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

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

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

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Java์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

JUnit์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

JUnit์€ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋งŽ์€ ์ฃผ์„, ์–ด์„ค์…˜ ๋ฐ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JUnit์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋ฐ ์‹คํ–‰์„ ์œ„ํ•œ Java ์ƒํƒœ๊ณ„์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.

Java์˜ TDD(ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ)๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

TDD(ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ)๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ๋ฏผ์ฒฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. TDD์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๋ณด์žฅํ•˜๊ณ , ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ, ๊ฐœ๋ฐœ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ์กฐ๋กฑ ๋ฐ ์Šคํ…์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ๊ด€๋ จํ•˜์—ฌ ์ง€์†์  ํ†ตํ•ฉ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ชจ๋ฒ” ์‚ฌ๋ก€์—๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋‚˜์š”?

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

๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Java์šฉ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Java์šฉ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋กœ๋Š” JUnit, Mockito, TestNG, Spock, PowerMock ๋ฐ AssertJ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๋ชจ์˜ ๋ฐ ์Šคํ„ฐ๋น™์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ฉฐ, ์ฝ”๋“œ ์ •ํ™•์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ์–ด์„ค์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— AppMaster๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

AppMaster Go(golang)์˜ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, Vue3์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, Kotlin ๋ฐ SwiftUI ์˜ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์ง€๋งŒ AppMaster์˜ ๊ฐ•๋ ฅํ•œ no-code ํ”Œ๋žซํผ์€ REST API ๋ฐ ๊ธฐํƒ€ ์ˆ˜๋‹จ์„ ํ†ตํ•ด Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ†ตํ•ฉ์˜. AppMaster ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€์˜ Java ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

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

์‹œ์ž‘ํ•˜๋‹ค
Java์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ: ์ „๋žต ๋ฐ ๋„๊ตฌ | AppMaster