๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Book TIL

ํด๋ฆฐ์ฝ”๋“œ Day 16 - 17. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

by vividmin 2022. 5. 9.
320x100

โœ… ์ด ํฌ์ŠคํŒ…์€ ๋…ธ๋งˆ๋“œ ์ฝ”๋” ๋ถํด๋Ÿฝ  'ํด๋ฆฐ ์ฝ”๋“œ' ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•˜๋Š” TIL์ด๋ฉฐ,  ์ถœ์ฒ˜๋Š” Clean Code์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ“š ๋ฒ”์œ„ :  09. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

 

 

๐Ÿ““ ์ฑ…์—์„œ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ์จ๋ณด์„ธ์š”.
  • Test Code
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊นจ๋—ํ•˜๊ฒŒ ์ž‘์„ฑ
      • ๊ฐ€๋…์„ฑโฌ† (๋ช…๋ฃŒํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ถฉ๋ถ„ํ•œ ์„ค๋ช…์„ ๋ง๋ถ™์—ฌ์„œ ์ž‘์„ฑ)
    • ์‹ค์ œ ์ฝ”๋“œ๋งŒํผ ํšจ์œจ์ ์ด๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Œ
    • ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ์ž‘์„ฑ
    • ์‹ค์ œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ
    • ํ…Œ์ŠคํŠธ API ๊ตฌํ˜„ → DSL(๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด) ๋งŒ๋“ค๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ์‰ฌ์›Œ์ง„๋‹ค.
    • ์ข‹์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ž€?
      • ์œ ์—ฐ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์žฌ ์‚ฌ์šฉ์„ฑ โฌ† ๋งŒ๋“œ๋Š” ์ฝ”๋“œ
  • TDD (Test Driven Development) ๋ฒ•์น™ 3๊ฐ€์ง€ 
    • ์‹คํŒจํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊นŒ์ง€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๊ฒƒ.
    • ์ปดํŒŒ์ผ์€ ์‹คํŒจํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹คํ–‰์ด ์‹คํŒจํ•˜๋Š” ์ •๋„๋งŒ TDD๋ฅผ ์ž‘์„ฑ
    • ํ˜„์žฌ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ •๋„๋กœ๋งŒ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  • ๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋”ฐ๋ฅด๋Š” ๋‹ค์„ฏ๊ฐ€์ง€ ๊ทœ์น™ (F.I.R.S.T) 
    • ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ (Fast)
      ⇒ ์ž์ฃผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด์„œ
    • ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•จ (Independent)
      ⇒ ์˜์กด์„ฑ ๋‚ฎ์ถฐ์„œ ์•„๋ฌด ์ˆœ์„œ๋กœ ํ•ด๋„ ๊ฐ€๋Šฅํ•˜๋„๋ก
    • ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ๋ฐ˜๋ณตํ•˜๋“  ์‹คํ–‰๊ฐ€๋Šฅํ•ด์•ผ ํ•จ(Repearable)
      ⇒ ํ™˜๊ฒฝ ๋•Œ๋ฌธ์— ์‹คํŒจํ•œ ๊ฒƒ์„ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด์„œ๋ผ๊ณ  ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ์Œ
    • True or False ๊ฐ’์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•จ (Self-Validating)
      ⇒ ๊ฒฐ๊ณผ ํ™•์ธ ์œ„ํ•ด์„œ ์ž์„ธํ•œ ํŒŒ์ผ๊นŒ์ง€ ์ฝ๋Š” ๋‹ค๋ฉด ์‹œ๊ฐ„ ๋‚ญ๋น„
    • ์ ์ •ํ•œ ๋•Œ์— ๋ฐ”๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•จ (Timely)
      ⇒ ์‹ค์ œ ์ฝ”๋“œ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ ํ•˜๋ฉด ์‹ค์ œ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋”๋ผ๋„ ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ค์›€

 

 

โœ๐Ÿป ์˜ค๋Š˜ ์ฝ์€ ์†Œ๊ฐ์€? ๋– ์˜ค๋ฅด๋Š” ์ƒ๊ฐ์„ ๊ฐ€๋ณ๊ฒŒ ์ ์–ด๋ณด์„ธ์š”.

ํด๋ฆฐ ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐฐ์› ๋‹ค.
์ฒ˜์Œ์— React๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ TDD๋ฅผ ๋ฐฐ์›Œ ์‚ฌ์šฉํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ฒ˜์Œ์—๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ๋„ˆ๋ฌด ๋‚ฏ์„ค๊ฒŒ ๋Š๊ปด์กŒ๋‹ค.


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

 

 

๐Ÿ‘€ ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์ด ์žˆ๊ฑฐ๋‚˜, ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์ ์–ด๋ณด์„ธ์š”.

- ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด (DSL)์˜ ์˜๋ฏธ

 

DSL์ด๋ž€?

DSL : domain specific language DSL์ด๋ž€, ํŠน์ • ์˜์—ญ์„ ํƒ€๊ฒŸํ•˜๊ณ  ์žˆ๋Š” ์–ธ์–ด๋ฅผ ๋งํ•œ๋‹ค ์˜ˆ๋ฅผ ๋“ค์–ด SQL! DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ ๋ฆฌ๋Š” query๋Š” ๋ง ๊ทธ๋Œ€๋กœ "DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ "์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋˜

lannstark.tistory.com

- ์˜ค๋Š˜ 09์žฅ์— ๋‚˜์˜จ ๋‚ด์šฉ ์™ธ์— TDD๋ฅผ ์„ค๋ช…ํ•˜๋ ค๋ฉด ์ฑ… ํ•˜๋‚˜๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋” ๋งŽ์€ TDD ๊ทœ์น™์ด ๊ถ๊ธˆํ•˜๋‹ค

 

 

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์งœ๊ธฐ | Kooku's log

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

kooku0.github.io

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€