Skip to content

Latest commit

ย 

History

History
528 lines (455 loc) ยท 31.6 KB

etc.md

File metadata and controls

528 lines (455 loc) ยท 31.6 KB

11. ETC

๐Ÿ“– Contents


TDD๋ž€

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

โซTop โ†ฉ๏ธBack โ„น๏ธHome

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด ์ผ์–ด๋‚˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์„ค๋ช…

  • Ex. url์— 'www.naver.com' ์„ ์ž…๋ ฅํ–ˆ๋‹ค. ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•˜๋ผ.

โซTop โ†ฉ๏ธBack โ„น๏ธHome

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

๋ถ„์‚ฐ๋ฝ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด

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

โซTop โ†ฉ๏ธBack โ„น๏ธHome

64bit CPU์™€ 32bit CPU ์ฐจ์ด

โซTop โ†ฉ๏ธBack โ„น๏ธHome

CVS, SVN, Git

  • ํ˜•์ƒ๊ด€๋ฆฌ ํˆด
  • ์†Œ์Šค์˜ ๋ณ€ํ™”๋ฅผ ๋Š์ž„์—†์ด ๊ด€๋ฆฌํ•˜๋Š” ํˆด
  • ์†Œ์Šค๋ฅผ ๋ฒ„์ „๋ณ„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ์‹ค์ˆ˜ํ•  ๊ฒฝ์šฐ ์›๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํˆด

CVS

  • ๊ฐœ๋…
    • Concurrent Versions System
    • GNU ๋ผ์ด์„ผ์Šค
    • ์ค‘์•™์— ์œ„์น˜ํ•œ Repository์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ , ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„
    • checkout์œผ๋กœ ํŒŒ์ผ ๋ณต์‚ฌ, commit์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ €์žฅ
    • ์ตœ์ข… ๋ฒ„์ „์˜ ์†Œ์Šค๋งŒ ๊ด€๋ฆฌ
    • ๋จผ์ € ๋ฐ˜์˜ํ•œ ์†Œ์Šค๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ์‹œ์Šคํ…œ
  • ์žฅ์ 
    • ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ์ด ๋˜์—ˆ์œผ๋ฉฐ ์•ˆ์ •์ 
    • ํŒŒ์ผ ์ „์ฒด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ €์žฅํ•˜์—ฌ ์ ์€ ์šฉ๋Ÿ‰ ์‚ฌ์šฉ
  • ๋‹จ์ 
    • ํŒŒ์ผ ์ด๋™์ด๋‚˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ์€ ๋ฒ„์ „ ๋ณ€๊ฒฝ ๋ฏธ๋ฐœ์ƒ(ํŒŒ์ผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์ถ”๊ฐ€)
    • ๋ฒ„์ „ ๋ถ„๊ธฐ๊ฐ€ ํž˜๋“ค๊ณ , ์žฅ๊ธฐ๊ฐ„ ๋ถ„๊ธฐ๋œ ๋ฒ„์ „ ์šด์˜์— ๋Œ€ํ•ด ๋ฏธ์„ค๊ณ„
    • commit ์‹คํŒจ ์‹œ ๋กค๋ฐฑ ๋ถˆ๊ฐ€๋Šฅ
    • ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฐ ์†๋„
  • ํ˜ผ์ž ๊ฐœ๋ฐœํ•  ๊ฒฝ์šฐ ์ตœ์ข…๋ฒ„์ „๋งŒ ๊ด€๋ฆฌํ•˜๋Š” CVS ํˆด ์‚ฌ์šฉ์ด ํŽธ๋ฆฌ

SVN

  • ๊ฐœ๋…
    • Apache Subversion
    • CVS์™€ ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ ์•ฝ๊ฐ„์˜ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ ๋Œ€์ฒด ์‹œ์Šคํ…œ์œผ๋กœ ๊ฐœ๋ฐœ
    • ์ค‘์•™ ๊ด€๋ฆฌ
    • ์ตœ์ดˆ 1ํšŒ์— ํ•œํ•ด ํŒŒ์ผ ์›๋ณธ ์ €์žฅ, ์ดํ›„์—๋Š” ์›๋ณธ๊ณผ ์ฐจ์ด์ ์„ ์ €์žฅ
    • ๋ฒ„์ „ ๋ถ„๊ธฐ๊ฐ€ ์‰ฝ๊ณ , ๋Œ€๊ทœ๋ชจ์˜ ๋ถ„๊ธฐ๋œ ํ”„๋กœ์ ํŠธ์— ๋„์›€
  • ์žฅ์ 
    • ์›์ž์  commit์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ commit๊ณผ ์—‰ํ‚ค์ง€ ์•Š์œผ๋ฉฐ commit ์‹คํŒจ ์‹œ ๋กค๋ฐฑ ์ง€์›
      • ์›์ž์  commit : ํŒŒ์ผ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ change set์ด commit ๋‹จ์œ„
    • ํšจ์œจ์ ์ธ ๋ฒ„์ „ ๋ถ„๊ธฐ, ์–ธ์ œ๋“ ์ง€ ์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ
    • ์ด์ง„ํŒŒ์ผ๋„ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ ๊ฐ€๋Šฅ
  • ๋‹จ์ 
    • ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ๋ณ€๊ฒฝ ๊ด€๋ จ ๋ฒ„๊ทธ
    • ๋ถˆ์ถฉ๋ถ„ํ•œ ์ €์žฅ์†Œ ๊ด€๋ฆฌ ๋ช…๋ น์–ด
    • CVS์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ถˆ์•ˆ์ •
    • Local Repository๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ๋งŒ์˜ version history ๊ด€๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ
    • commit์— ์‹ค์ˆ˜๊ฐ€ ์žˆ์„ ์‹œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฐ”๋กœ ์˜ํ–ฅ ๊ฐ€๋Šฅ์„ฑ

Git

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

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Git Branch ์ข…๋ฅ˜

  1. Master Branch
    • ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋žœ์น˜
    • ๋ฐฐํฌ(Release) ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ์ฆ‰, ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋งŒ์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  2. Develop Branch
    • ๋‹ค์Œ ์ถœ์‹œ ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋“ค์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ์ฆ‰, ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜์–ด ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ •์ ์ธ ์ƒํƒœ๋ผ๋ฉด develop ๋ธŒ๋žœ์น˜๋ฅผ โ€˜masterโ€™ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ(merge)ํ•œ๋‹ค.
    • ํ‰์†Œ์—๋Š” ์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ๋‹ค.
  3. Feature branch
    • ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • feature ๋ธŒ๋žœ์น˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค โ€˜developโ€™ ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ๋ถ„๊ธฐํ•œ๋‹ค. feature ๋ธŒ๋žœ์น˜์—์„œ์˜ ์ž‘์—…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณต์œ ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ž์‹ ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด โ€˜developโ€™ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ(merge)ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•œ๋‹ค.
  4. Release Branch
    • ์ด๋ฒˆ ์ถœ์‹œ ๋ฒ„์ „์„ ์ค€๋น„ํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ „์šฉ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ•œ ํŒ€์ด ํ•ด๋‹น ๋ฐฐํฌ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŒ€์€ ๋‹ค์Œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋”ฑ๋”ฑ ๋Š์–ด์ง€๋Š” ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ธฐ์— ์•„์ฃผ ์ข‹๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, โ€˜์ด๋ฒˆ ์ฃผ์— ๋ฒ„์ „ 1.3 ๋ฐฐํฌ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค!โ€™๋ผ๊ณ  ํŒ€ ๊ตฌ์„ฑ์›๋“ค๊ณผ ์‰ฝ๊ฒŒ ์†Œํ†ตํ•˜๊ณ  ํ•ฉ์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.
  5. Hotfix Branch
    • ์ถœ์‹œ ๋ฒ„์ „์—์„œ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ • ํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • ๋ฐฐํฌํ•œ ๋ฒ„์ „์— ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •์„ ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, โ€˜masterโ€™ ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐํ•˜๋Š” ๋ธŒ๋žœ์น˜์ด๋‹ค. โ€˜developโ€™ ๋ธŒ๋žœ์น˜์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜์—ฌ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์„ ๋งŒ๋“ค๊ธฐ์—๋Š” ์‹œ๊ฐ„๋„ ๋งŽ์ด ์†Œ์š”๋˜๊ณ  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ๋„ ์–ด๋ ค์šฐ๋ฏ€๋กœ ๋ฐ”๋กœ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ โ€˜masterโ€™ ๋ธŒ๋žœ์น˜์—์„œ ์ง์ ‘ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ์ˆ˜์ •ํ•œ ํ›„ ๋‹ค์‹œ โ€˜masterโ€™๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜์—ฌ ์ด๋ฅผ ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Web Server์™€ WAS์˜ ์ฐจ์ด

  • Web Server
    • Web Server์˜ ๊ฐœ๋…
      • ์†Œํ”„ํŠธ์›จ์–ด์™€ ํ•˜๋“œ์›จ์–ด๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
        1. ํ•˜๋“œ์›จ์–ด
        • Web ์„œ๋ฒ„๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ
        1. ์†Œํ”„ํŠธ์›จ์–ด
        • ์›น ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์•„ **์ •์ ์ธ ์ปจํ…์ธ (.html .jpeg .css ๋“ฑ)**๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ
    • Web Server์˜ ๊ธฐ๋Šฅ
      • HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ์„ ์„œ๋น„์Šค ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค.
      • ์š”์ฒญ์— ๋”ฐ๋ผ ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ ์ค‘ ์ ์ ˆํ•˜๊ฒŒ ์„ ํƒํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • ๊ธฐ๋Šฅ 1)
        • ์ •์ ์ธ ์ปจํ…์ธ  ์ œ๊ณต
        • WAS๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ž์›์„ ์ œ๊ณตํ•œ๋‹ค.
      • ๊ธฐ๋Šฅ 2)
        • ๋™์ ์ธ ์ปจํ…์ธ  ์ œ๊ณต์„ ์œ„ํ•œ ์š”์ฒญ ์ „๋‹ฌ
        • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์„ WAS์— ๋ณด๋‚ด๊ณ , WAS๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ(์‘๋‹ต, Response)ํ•œ๋‹ค.
    • Web Server์˜ ์˜ˆ
      • Ex) Apache Server, Nginx, IIS(Windows ์ „์šฉ Web ์„œ๋ฒ„) ๋“ฑ
  • WAS(Web Application Server)
    • WAS์˜ ๊ฐœ๋…
      • DB ์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋™์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Application Server
      • HTTP๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ๋‚˜ ์žฅ์น˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด(์†Œํ”„ํŠธ์›จ์–ด ์—”์ง„)์ด๋‹ค.
      • **"์›น ์ปจํ…Œ์ด๋„ˆ(Web Container)" ํ˜น์€ "์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)"**๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
        • Container๋ž€ JSP, Servlet์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งํ•œ๋‹ค.
        • ์ฆ‰, WAS๋Š” JSP, Servlet ๊ตฌ๋™ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
    • WAS์˜ ๊ธฐ๋Šฅ
      • WAS = Web Server + Web Container
      • Web Server ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ณ ์žํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์ œ์‹œ๋˜์—ˆ๋‹ค.
        • ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ, ๋ฉ”์‹œ์ง•, ์“ฐ๋ ˆ๋“œ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
        • ์ฃผ๋กœ DB ์„œ๋ฒ„์™€ ๊ฐ™์ด ์ˆ˜ํ–‰๋œ๋‹ค.
    • WAS์˜ ์˜ˆ
      • Ex) Tomcat, JBoss, Jeus, Web Sphere ๋“ฑ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก ์ด๋ž€

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Servlet๊ณผ JSP

  • ๊ธฐ๋Šฅ์˜ ์ฐจ์ด๋Š” ์—†๊ณ  ์—ญํ• ์˜ ์ฐจ์ด๋งŒ ์žˆ๋‹ค. (ํ•˜๋Š” ์ผ์€ ๋™์ผ)
  • Servlet์ด๋ž€
    • ์›น ๊ธฐ๋ฐ˜์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ Server Side์—์„œ ๋Œ์•„๊ฐ€๋Š” Java Program
    • Java ์ฝ”๋“œ ์•ˆ์— HTML ์ฝ”๋“œ (ํ•˜๋‚˜์˜ ํด๋ž˜์Šค)
    • ์›น ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋งŒ๋“  ํ‘œ์ค€
    • data processing(Controller) ์— ์ข‹๋‹ค.
    • ์ฆ‰ DB์™€์˜ ํ†ต์‹ , Business Logic ํ˜ธ์ถœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ํ™•์ธํ•˜๋Š” ์ž‘์—… ๋“ฑ์— ์œ ์šฉํ•˜๋‹ค.
    • Servlet์ด ์ˆ˜์ •๋œ ๊ฒฝ์šฐ Java ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ(.class ํŒŒ์ผ ์ƒ์„ฑ)ํ•œ ํ›„ ๋™์ ์ธ ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผํ•œ ํ›„ ์žฌ๋ฐฐํฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. (๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜)
    • ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์€ https://gmlwjd9405.github.io/2018/10/28/servlet.html ์ฐธ๊ณ 
  • JSP๋ž€
    • Java ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Server Side ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด
    • HTML ์ฝ”๋“œ ์•ˆ์— Java ์ฝ”๋“œ
    • Servlet๋ฅผ ๋ณด์™„ํ•˜๊ณ  ๊ธฐ์ˆ ์„ ํ™•์žฅํ•œ ์Šคํฌ๋ฆฝํŠธ ๋ฐฉ์‹ ํ‘œ์ค€
      • Servlet์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ + ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ
    • presentation(View) ์— ์ข‹๋‹ค.
    • ์ฆ‰ ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” HTML ์ž‘์„ฑํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.
    • JSP๊ฐ€ ์ˆ˜์ •๋œ ๊ฒฝ์šฐ ์žฌ๋ฐฐํฌํ•  ํ•„์š”๊ฐ€ ์—†์ด WAS๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. (์‰ฌ์šด ๋ฐฐํฌ)
    • ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์€ https://gmlwjd9405.github.io/2018/11/03/jsp.html ์ฐธ๊ณ 

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Redis์™€ Memcached์˜ ์ฐจ์ด

Redis and Memcached

  • ๋ถ„์‚ฐ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ์‹œ์Šคํ…œ(์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ)
  • ๋ฐ์ดํ„ฐ๋ฅผ Key-Value ํ˜•ํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹(NoSql)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ ๋™์  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ ํŒŒํ‹ฐ์…”๋‹์„ ํ†ตํ•ด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
Memcached ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

memcached

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

Redis vs Memcached

Redis Memcached
๋ฐ์ดํ„ฐ ํƒ€์ž… String, Set, Sorted Set, Hash, List String
๋ฐ์ดํ„ฐ ์ €์žฅ Memory, Disk Memory
๋ฉ”๋ชจ๋ฆฌ ์žฌ์‚ฌ์šฉ X
๋ช…์‹œ์ ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๊ฐ€๋Šฅ
๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„ ์žฌ์‚ฌ์šฉ
์Šค๋ ˆ๋“œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ
์บ์‹ฑ ์šฉ๋Ÿ‰ Key, Value ๋ชจ๋‘ 512MB Key 250byte, Value 1MB
Redis๋งŒ์˜ ์žฅ์ 
  • ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ง€์›
  • ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ฐ€๋Šฅ ๋ฐ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ
    • Snapshots ๋ฐฉ์‹ : ํŠน์ • ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜์—ฌ ํŒŒ์ผ ๋ณด๊ด€
    • AOF ๋ฐฉ์‹ : ์ด๋ฒคํŠธ๋ฅผ ๋กœ๊ทธ์— ๋‚จ๊ฒจ์„œ ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ณต๊ตฌ
  • ๋งˆ์Šคํ„ฐ ์Šฌ๋ ˆ์ด๋ธŒ ๊ตฌ์กฐ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณต์ œ๋ณธ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ Eviction ์ •์ฑ… ์ง€์›
    • Eviction : ์บ์‹œ๊ฐ€ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„ ํ™•๋ณด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ
  • PUB/SUB ๊ธฐ๋Šฅ ์ œ๊ณต
    • ๊ฒŒ์‹œ์ž/๊ตฌ๋…์ž์˜ ๋ฉ”์‹œ์ง€ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ตฌํ˜„
    • ๊ฒŒ์‹œ๋œ ๋ฉ”์‹œ์ง€๋Š” ๊ตฌ๋…์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ณ  ์ฑ„๋„๋กœ ๊ตฌ๋ถ„
    • ๊ตฌ๋…์ž๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฑ„๋„์— ๊ด€์‹ฌ์„ ๊ฐ–๊ณ (๊ตฌ๋…), ๊ฒŒ์‹œ์ž๋Š” ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ ํ•„์š” ์—†์ด ๊ด€์‹ฌ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ 
  • ํŠธ๋žœ์žญ์…˜ ์ง€์›
  • ์œ„์น˜๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์›
Redis ๋‹จ์ 
  • Copy-on-Write ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‘ ๋ฐฐ ํ•„์š”
    • ๋ฆฌ๋ˆ…์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š”๋ฐ, ๊ณต์œ  ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์— ๋Œ€๋น„ํ•ด ๋ณต์‚ฌํ•œ ๋‹ค์Œ ์ˆ˜์ •ํ•˜๋Š” ํŠน์ง•
    • ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ์ž„์‹œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ํ•„์š”
    • Copy-on-Write๋Š” Redis์˜ ์ˆ˜์ • ๊ด€๋ จ ๋ช…๋ น ์‹คํ–‰ ์‹œ ๋ฐœ์ƒ
    • ์ฐธ๊ณ 
  • ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” ๋ฐœ์ƒ ๊ฐ€๋Šฅ
Memcached๋งŒ์˜ ์žฅ์ 
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•„ํ‚คํ…์ฒ˜ ์ง€์›
  • Redis์— ๋น„ํ•ด ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ
    • ์ •์ ์ธ ๋ฐ์ดํ„ฐ ์บ์‹ฑ ์‹œ ์œ ๋ฆฌ

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Maven๊ณผ Gradle์˜ ์ฐจ์ด

  • Maven
  • Gradle

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Blocking๊ณผ Non-Blocking

  • ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์ƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋ธ”๋ก/๋…ผ๋ธ”๋ก
  • ex. IO, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ๋™๊ธฐํ™”
  • Blocking
    • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ณ , ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ๋Œ€๊ธฐ
  • Non-Blocking
    • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ returnํ•ด์„œ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ฃผ์–ด ๋‹ค๋ฅธ ์ž‘์—… ์ง„ํ–‰ ๊ฐ€๋Šฅ

Blocking, Non-Blocking vs Synchronous, Asynchronous

blocking

  • ๋‘ ๊ทธ๋ฃน์˜ ์ฐจ์ด์ ์€ ๊ด€์‹ฌ์‚ฌ
  • Blocking/Non-Blocking
    • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ return ์—ฌ๋ถ€์— ๊ด€์‹ฌ
    • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์ œ์–ด๊ถŒ ์†Œ์œ  ์—ฌ๋ถ€๋กœ ๊ตฌ๋ถ„
  • Synchronous/Asynchronous
    • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‹ ๊ฒฝ์“ฐ๋Š” ์ฃผ์ฒด์— ๊ด€์‹ฌ
    • Asynchronous
      • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์— callback์„ ์ „๋‹ฌํ•˜์—ฌ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ž‘์—… ์™„๋ฃŒ ์‹œ callback์„ ์‹คํ–‰
      • ์ด ๋•Œ, ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋จ
    • Synchronous
      • ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ return์„ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ๋˜๋Š” ๋ฐ”๋กœ return ๋ฐ›๋”๋ผ๋„ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‹ ๊ฒฝ์“ฐ๋Š” ๊ฒƒ

Non-Blocking, Synchronous

nonb-sync

  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋Š” ๋ฐ”๋กœ return, ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€ ํ™•์ธ
  • ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ ๋ณธ์ธ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ›„ ๋ฐ”๋กœ ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๊ณ„์† ํ™•์ธํ•˜๋Š” ๋™์ž‘

Blocking, Asynchronous

b-async

  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋Š” ๋ฐ”๋กœ returnํ•˜์ง€ ์•Š๊ณ , ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€ ๋ฏธํ™•์ธ
  • Blocking, Synchronous ๋ฐฉ์‹๊ณผ ํฐ ์ฐจ์ด ์—†์Œ
  • [์ฐธ๊ณ ] Non-Blocking, Asynchronous ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋˜ ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ Blocking, Asynchronous ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌ
    • ex. Node.js์™€ MySQL ์กฐํ•ฉ
    • Node.js๊ฐ€ Async ๋™์ž‘์„ ํ•ด๋„, DB ํ˜ธ์ถœ ์‹œ MySQL ๋“œ๋ผ์ด๋ฒ„๊ฐ€ Blocking ๋ฐฉ์‹
    • Non-Blocking, Asynchronous ๋ฐฉ์‹ ์‚ฌ์šฉ ์ค‘ ํ•˜๋‚˜๋ผ๋„ Blocking ๋™์ž‘์„ ํ•œ๋‹ค๋ฉด ์˜๋„์น˜ ์•Š๊ฒŒ Blocking, Asynchronous ๋™์ž‘

โซTop โ†ฉ๏ธBack โ„น๏ธHome

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

  • ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ตฌ๋ฌธ์˜ ๊ด€์ ์—์„œ ์—ฐ์‚ฐ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹
    • ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ํ‘œํ˜„
      • ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€ ํ‘œํ˜„
      • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ•จ์ˆ˜ํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ ๊ณ„๊ธฐ

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

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…

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

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน์ง•

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

โซTop โ†ฉ๏ธBack โ„น๏ธHome

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€

๊ฐœ๋…

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

ํŠน์ง•

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

โซTop โ†ฉ๏ธBack โ„น๏ธHome

Mock์ด๋ž€

Mock ๊ฐœ๋…

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

Mock ์‚ฌ์šฉ ์˜ˆ์‹œ

  • ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ์œ„ํ•œ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • ํ…Œ์ŠคํŠธ๊ฐ€ ํŠน์ • ๊ฒฝ์šฐ๋‚˜ ์ˆœ๊ฐ„์— ์˜์กด์ ์ธ ๊ฒฝ์šฐ
  • ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ
  • ๊ฐœ์ธ PC๋‚˜ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ๋™์ž‘์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

Mock ๊ด€๋ จ ์šฉ์–ด

  1. ํ…Œ์ŠคํŠธ ๋”๋ธ”(Test double)

    • ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ, ๋Œ€์‹  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ์ฒด
    • Mock ๊ฐ์ฒด์™€ ๋น„์Šทํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ๋”๋ธ”์ด Mock ๊ฐ์ฒด๋ณด๋‹ค ์ƒ์œ„ ๊ฐœ๋…
  2. ๋”๋ฏธ๊ฐ์ฒด(Dummy object)

    • ๋‹จ์ˆœํžˆ ์ธ์Šคํ„ด์Šคํ™” ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์œผ๋กœ๋งŒ ๊ฐ์ฒด ๊ตฌํ˜„
    • ์ธ์Šคํ„ด์Šคํ™” ๋œ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ํ•„์š”๋กœํ•˜๊ณ , ํ•ด๋‹น ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ๊นŒ์ง€๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ
  3. ํ…Œ์ŠคํŠธ ์Šคํ…(Test stub)

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

    • ์‹ค์ œ ๋กœ์ง์ด ๊ตฌํ˜„๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฐ์ฒด
    • ์‹ค์ œ๋กœ DB์— ์ ‘์†ํ•ด์„œ ๋น„๊ตํ•  ๋•Œ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ณด์ด๋„๋ก ๊ฐ์ฒด ๋‚ด๋ถ€์— ๊ตฌํ˜„ ๊ฐ€๋Šฅ
      • ๋ณดํ†ต List๋‚˜ Map์„ ์ด์šฉ
    • ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž‘์„ฑ ์‹œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๊ณผ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    • ํŽ˜์ดํฌ ๊ฐ์ฒด ๋งŒ๋“ค ๋•Œ ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ ์ ˆํ•œ ์ˆ˜์ค€์œผ๋กœ๋งŒ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ Mock ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ ๋˜๋Š” ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ํ…Œ์ŠคํŠธ
  5. ํ…Œ์ŠคํŠธ ์ŠคํŒŒ์ด(Test spy)

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

    • ํ–‰์œ„๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด
      public class MessageSender {
        private CellphoneService service;
      
        public MessageSender(CellphoneService service) {
          this.service = service;
        }
      
        public void send(String msg) {
          service.sendMMS(msg);
        }
      }
      • CellphoneService์™€ MessageSender ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, ์‹ค์ œ๋กœ ๋ฌธ์ž๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ CellphoneService์˜ ์ฑ…์ž„์ด๋ฉฐ, MessageSender๋Š” CellphoneService์˜ sendMMS() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• 
      • ํ˜ธ์ถœ ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ํ–‰์œ„๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ
        • stub๊ณผ์˜ ์ฐจ์ด
          • stub์€ ๊ฐ์ฒด์˜ ๋ฐ˜ํ™˜๊ฐ’์ด๋‚˜ ์ƒํƒœ๊ฐ’์„ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ
          • mock์€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์—ฌ๋ถ€, ๋ฉ”์†Œ๋“œ์˜ ๋™์ž‘ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ
      • MessageSender ํ…Œ์ŠคํŠธ ์‹œ, CellphoneService์˜ ๊ฐ€์งœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๊ฐ€์งœ ๊ฐ์ฒด๊ฐ€ Mock ๊ฐ์ฒด
        • Mock ๊ฐ์ฒด ์ˆ˜๋™ ์ƒ์„ฑ
          public class CellphoneServiceMock extends CellphoneService {
            private boolean isSendMMSCalled = false;
            private String sendMsg = "";
          
            @Override
            public void sendMMS(String msg) {
              // ์‹ค์ œ ๋™์ž‘ํ•˜๋Š” ๋ถ€๋ชจ ๊ฐ์ฒด ํ˜ธ์ถœ ๋Œ€์‹  ํ…Œ์ŠคํŠธ ๋™์ž‘ ์ฒ˜๋ฆฌ ํ˜ธ์ถœ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋„๋ก ๊ตฌํ˜„
              // super.sendMMS(msg);
              
              isSendMMSCalled = true;
              sendMsg = msg;
            }
          
            public boolean isSendMMSCalled() {
              return isSendMMSCalled;
            }
          
            public Stirng getSendMsg() {
              return sendMsg;
            }
          }
          // Mock ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
          public class MessageSenderTest {
            @Test
            public void testSend() throws Exception {
              // Given
              final String message = "ํ…Œ์ŠคํŠธ ๋ฌธ์ž ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.";
              CellphoneServiceMock mock = new CellphoneServiceMock();
              MessageSender sender = new MessageSender(mock);
          
              // When
              sender.send(message);
          
              // Then
              assertTrue(mock.isSendMMSCalled());
              assertEqual(message, mock.getSendMsg());
            }
          }
        • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ Mock ๊ฐ์ฒด ์ƒ์„ฑ
          • ๋Œ€ํ‘œ์ ์œผ๋กœ Mockito๊ฐ€ ์ง€์›ํ•˜๋Š” mock์„ ์‚ฌ์šฉํ•ด ๋ณ„๋„์˜ Mock ๊ฐ์ฒด(CellphoneServiceMock)๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  Mock ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ€๋Šฅ
          public class MessageSenderTest {
            @Test
            public void testSend() throws Exception {
              // Given
              final String message = "ํ…Œ์ŠคํŠธ ๋ฌธ์ž ๋ฉ”์‹œ์ง€";
              CellphoneService mock = mock(CellphoneService.class);
              MessageSender sender = new MessageSender(mock);
          
              // When
              sender.send(message);
          
              // Then - CellphoneService์˜ sendMMS() ํ˜ธ์ถœ ์—ฌ๋ถ€ ๊ฒ€์ฆ
              verify(mock).sendMMS(message);
            }
          }
    • ํ–‰์œ„ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ๋Š” ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ

โซTop โ†ฉ๏ธBack โ„น๏ธHome


Reference

-

๐Ÿ  Home