์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ

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

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

  • ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜
    • ๐Ÿ“ƒ๋ช…์„ธ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ : ์ฃผ์–ด์ง„ ๋ช…์„ธ๋ฅผ ๋น ์ง์—†์ด ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š”์ง€
      - ๋™์น˜๋ถ„ํ•  ๊ฒ€์‚ฌ, ๊ฒฝ๊ณ„๊ฐ’ ๋ถ„์„, ๊ฒฐ์ •ํ…Œ์ด๋ธ”, ์œ ์Šค์ผ€์ด์Šค ๋ถ„๋ฅ˜ํŠธ๋ฆฌ, ํŽ˜์–ด์™€์ด์ฆˆ ๋“ฑ
    • ๐Ÿ› ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ : ์†Œํ”„ํŠธ์›จ์–ด ๋‚ด๋ถ€ ๋…ผ๋ฆฌํ๋ฆ„์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ํ™•์ธ
      - ๊ตฌ๋ฌธ ๊ธฐ๋ฐ˜, ๊ฒฐ์ • ๊ธฐ๋ฐ˜, ์กฐ๊ฑด ๊ธฐ๋ฐ˜, ์กฐ๊ฑด๊ฒฐ์ • ๊ธฐ๋ฐ˜, ๋ณ€๊ฒฝ์กฐ๊ฑด ๊ฒฐ์ • ๊ธฐ๋ฐ˜ ๋“ฑ
    • ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ : ์œ ์‚ฌ ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์œ ์‚ฌ ๊ธฐ์ˆ  ํ‰๊ฐ€์—์„œ ํ…Œ์Šคํ„ฐ์˜ ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ ํ…Œ์ŠคํŠธ

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

  • ํ…Œ์ŠคํŠธ ์˜ค๋ผํด
    ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ์ง€ ๊ฑฐ์ง“์ธ์ง€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์ „์— ์ •์˜๋œ ์ฐธ ๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ ๋น„๊ตํ•˜๋Š” ๊ธฐ๋ฒ•

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

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

  • ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๋„๊ตฌ
    ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ํ…Œ์ŠคํŠธ ์ž‘์—…์„ ์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์‰ฝ๊ณ  ํšจ์œจ์ ์ธ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•
    • ์ •์  ๋ถ„์„ ๋„๊ตฌ (Static Analysis Tools) - ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฝ”๋“œ ํ‘œ์ค€, ์ฝ”๋”ฉ ์Šคํƒ€์ผ, ๋ณต์žก๋„ ๋“ฑ ๋ถ„์„
    • ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋„๊ตฌ (Test Execution Tools) - ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ - ๋ฐ์ดํ„ฐ ์ฃผ๋„ ์ ‘๊ทผ, ํ‚ค์›Œ๋“œ ์ฃผ๋„ ์ ‘๊ทผ
    • ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋„๊ตฌ (Performance Test Tools) - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒ˜๋ฆฌ๋Ÿ‰, ์‘๋‹ต์‹œ๊ฐ„, ๊ฒฝ๊ณผ ์‹œ๊ฐ„, ์ž์› ์‚ฌ์šฉ๋ฅ  ํ™•์ธ
    • ํ…Œ์ŠคํŠธ ํ†ต์ œ ๋„๊ตฌ (Test Control Tools) - ํ…Œ์ŠคํŠธ ๊ด€๋ฆฌ ๋„๊ตฌ, ํ˜•์ƒ ๊ด€๋ฆฌ ๋„๊ตฌ, ๊ฒฐํ•ฉ ์ถ”์ /๊ด€๋ฆฌ ๋„๊ตฌ
    • ํ…Œ์ŠคํŠธ ์žฅ์น˜ (Test Hardness) - ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ, ํ…Œ์ŠคํŠธ ํ•˜๋Š” ํ™˜๊ฒฝ์˜ ์ผ๋ถ€๋ถ„ 
      ๊ตฌ์„ฑ์š”์†Œ : ํ…Œ์ŠคํŠธ ๋“œ๋ผ์ด๋ฒ„, ํ…Œ์ŠคํŠธ ์Šคํ…, ํ…Œ์ŠคํŠธ ์ŠˆํŠธ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค, ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ, ๋ชฉ ์˜ค๋ธŒ์ ํŠธ 

๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ

์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์— ํ•„์š”ํ•œ ๋„๊ตฌ

  • Ant 
    • ์•„ํŒŒ์น˜ ์žฌ๋‹จ ๊ฐœ๋ฐœ, XML ๊ธฐ๋ฐ˜์˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝ์Šค ์‚ฌ์šฉ
  • Maven
    • Ant ๋Œ€์•ˆ, ์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ๋“ค์„ ๋ถˆ๋Ÿฌ์˜ด
  • Gradle (๊ทธ๋ž˜๋“ค)
    • ์ž‘์—…์˜ ์ตœ์†Œ๋‹จ์œ„์ธ Task๋กœ ์‹คํ–‰, Groovy๋ฅผ ๊ธฐ๋ฐ˜, ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ๊ณต์‹ ๋นŒ๋“œ ์‹œ์Šคํ…œ
  • Jenkins (์  ํ‚จ์Šค)
    • ์ž๋ฐ”๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ
    • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ ์ง€์†์  ํ†ตํ•ฉ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํˆด

์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „๊ด€๋ฆฌ

SW ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ฝ”๋“œ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ด€๋ จ ๋ฌธ์„œ ๋“ฑ ์‹œ๊ฐ„์˜ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ™œ๋™

 

  • Repository - ํŒŒ์ผ์˜ ํ˜„์žฌ ๋ฒ„์ „๊ณผ ๋ณ€๊ฒฝ ์ด๋ ฅ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ
  • Import - ๋ฒ„์ „ ๊ด€๋ฆฌ ๋˜์ง€ ์•Š์€ ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ ํŒŒ์ผ์„ ์ฒ˜์Œ์œผ๋กœ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌ
  • Check-out - ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ํŒŒ์ผ ๋ฐ›๊ธฐ
  • Check-in - ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์— ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ๊ฐฑ์‹ 
  • Commit - ์ฒดํฌ์ธ ์‹œ ์ด์ „ ๊ฐฑ์‹  ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ถฉ๋Œ ์•Œ๋ฆผ, diff  ๋„๊ตฌ ์ด์šฉ ์ˆ˜์ •

๋ฒ„์ „๊ด€๋ฆฌ ๋„๊ตฌ ์œ ํ˜•

  • CVS - ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋‹ค์ˆ˜์˜ ์ธ์›์ด ๋™์‹œ์— ๋ฒ”์šฉ์ ์ธ ์šด์˜์ฒด์ œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฒ„์ „๊ด€๋ฆฌ
  • SVN - GNU์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์—…๊ณ„ ํ‘œ์ค€
  • RCS - ์ˆ˜์ •์„ ํ•œ ์‚ฌ๋žŒ๋งŒ์œผ๋กœ ์ œํ•œ, ๋‹ค์ˆ˜์˜ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก ํŒŒ์ผ์„ ์ž ๊ธˆ
  • Bitkeeper - SVN๊ณผ ๋น„์Šทํ•œ ์ค‘์•™ ํ†ต์ œ ๋ฐฉ์‹์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๋กœ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๋น ๋ฆ„
  • Git - ํ˜„์žฌ์˜ ๋ฆฌ๋ˆ…์Šค ๋ฒ„์ „ ์ปจํŠธ๋กค ๋ฐฉ์‹, SVN๊ณผ ๋‹ค๋ฅด๊ฒŒ Commit์€ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ด๋ค„์ง€๊ณ  push๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ €์žฅ๋จ
    • Git์˜ ์ž‘์—… ํด๋”๋Š” ๋ชจ๋‘ ์ „์ฒด ๊ธฐ๋ก๊ณผ ๊ฐ ๊ธฐ๋ก์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์™„์ „ํ•œ ํ˜•ํƒœ์˜ ์ €์žฅ์†Œ
    • ๋„คํŠธ์›Œํฌ๋‚˜ ์ค‘์•™ ์„œ๋ฒ„์— ์˜์กดํ•˜์ง€ ์•Š์Œ
  • Clear Case - IBM ์ œ์ž‘, ๋ณต์ˆ˜ ์„œ๋ฒ„์™€ ๋ณต์ˆ˜ ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ

ํ˜•์ƒ๊ด€๋ฆฌ (SCM : Software Configuration Management)

์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์‚ฐ์ถœ๋ฌผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ํ™œ๋™

(ํ”„๋กœ์ ํŠธ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ์ „ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ํ™œ๋™, ์œ ์ง€ ๋ณด์ˆ˜ ๋‹จ๊ณ„์—์„œ๋„ ์ˆ˜ํ–‰๋˜๋Š” ํ™œ๋™)

 

* ๋ฒ ์ด์Šค๋ผ์ธ - ํ˜•์ƒ ํ•ญ๋ชฉ์ด ํ•˜๋‚˜์˜ ์™„์„ฑ๋œ ์‚ฐ์ถœ๋ฌผ๋กœ์จ ์ฑ…์ž„์žˆ๋Š” ๊ธฐ๊ด€์ด๋‚˜ ๊ด€๋ฆฌ์ฃผ์ฒด์— ์˜ํ•ด ๊ณต์‹์ ์œผ๋กœ ์Šน์ธ๋œ ์ƒํƒœ

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

์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง•

๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง• ์‹œ์— ๋””์ง€ํ„ธ ์ฝ˜ํ…์ธ ์˜ ์ง€์ ์žฌ์‚ฐ๊ถŒ์„ ๋ณดํ˜ธํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

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

 

์ €์ž‘๊ถŒ ๊ด€๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ

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

ํŒจํ‚ค์ง• ๋„๊ตฌ ๊ตฌ์„ฑ์š”์†Œ

  • ์•”ํ˜ธํ™”
    ์ฝ˜ํ…์ธ  ๋ฐ ๋ผ์ด์„ ์Šค๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์ „์ž ์„œ๋ช…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  (PKI, DiGital Signature ๋“ฑ)
  • ํ‚ค ๊ด€๋ฆฌ
    ์ฝ˜ํ…์ธ ๋ฅผ ์•”ํ˜ธํ™”ํ•œ ํ‚ค์— ๋Œ€ํ•œ ์ €์žฅ ๋ฐ ๋ฐฐํฌ ๊ธฐ์ˆ  (Centralized, Enveloping)
  • ์•”ํ˜ธํ™” ํŒŒ์ผ ์ƒ์„ฑ 
    ์ฝ˜ํ…์ธ ๋ฅผ ์•”ํ˜ธํ™”๋œ ์ฝ˜ํ…์ธ ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ  (Pre-packing, On-the-fly Packaging)
  • ์‹๋ณ„ ๊ธฐ์ˆ  
    ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์‹๋ณ„ ์ฒด๊ณ„ ํ‘œํ˜„ ๊ธฐ์ˆ (DOI, URL)
  • ์ €์ž‘๊ถŒ ํ‘œํ˜„
  • ์ •์ฑ… ๊ด€๋ฆฌ
  • ํฌ๋ž™ ๋ฐฉ์ง€
  • ์ธ์ฆ 

 

EAI

EAI๋Š” ๊ธฐ์—…๋‚ด์˜ ์‹œ์Šคํ…œ๋“ค๋ผ๋ฆฌ์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋ฏธ๋“ค์›จ์–ด

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

 

์œ ํ˜• ์„ค๋ช… ํŠน์ง• ๊ฐœ๋…๋„
Point  - to - Point ์ค‘๊ฐ„์— ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋‘์ง€ ์•Š๊ณ , ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ์—ฐ๊ฒฐ ์†”๋ฃจ์…˜ ๊ตฌ๋งค ์—†์ด ์ €๋ ดํ•˜๊ฒŒ ํ†ตํ•ฉ ๊ฐ€๋Šฅ, ๋ณ€๊ฒฝ๊ณผ ์žฌ์‚ฌ์šฉ ์–ด๋ ค์›€
Hub & Spoke ๋‹จ์ผ ์ ‘์ ์ด ํ—ˆ๋ธŒ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก ์ค‘์•™์ง‘์ค‘์ , ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ๋ณด์žฅ, ํ™•์žฅ ๋ฐ  ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด
Message Bus ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด ๋ฏธ๋“ค์›จ์–ด
(๋ฒ„์Šค)๋ฅผ ๋‘์–ด ์ฒ˜๋ฆฌ
์–ด๋Œ‘ํ„ฐ๊ฐ€ ๊ฐ ์‹œ์Šคํ…œ๊ณผ ๋ฒ„์Šค๋ฅผ ๋‘์–ด ์—ฐ๊ฒฐ, ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ, ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
Hybrid ๊ทธ๋ฃน ๋‚ด์—์„œ๋Š” Hub & Spoke ๋ฐฉ์‹, ๊ทธ๋ฃน ๊ฐ„์—์„œ๋Š” ๋ฉ”์‹œ์ง• ๋ฒ„์Šค ๋ฐฉ์‹  ํ‘œ์ค€ ํ†ตํ•ฉ ๊ธฐ์ˆ , ๋ฐ์ดํ„ฐ ๋ณ‘๋ชฉ ํ˜„์ƒ ์ตœ์†Œํ™” 

 

ESB 

ESB(Enterprise Service Bus)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ํ†ตํ•ฉ ์ธก๋ฉด์—์„œ EAI์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด๋‹ค๋Š” ์„œ๋น„์Šค ์ค‘์‹ฌ์œผ๋กœ ํ†ตํ•ฉ์„ ์ง€ํ–ฅํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” ๊ธฐ์ˆ 

  • ์›น ์„œ๋น„์Šค๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ‘œ์ค€ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„์Šค๋ฅผ ํ†ตํ•ด, ๊ธฐ์—… ๋‚ด/์™ธ ์ด๊ธฐ์ข… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์•ฝํ•˜๊ฒŒ ํ†ตํ•ฉํ•˜๋Š” ํ•ต์‹ฌ ํ”Œ๋žซํผ

 

์›น ์„œ๋น„์Šค 

๋„คํŠธ์›Œํฌ์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๋ฅผ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐฉํ•˜์—ฌ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๊ณต์œ ํ•˜๋Š” ๊ธฐ์ˆ  

์›น ์„œ๋น„์Šค ๊ตฌ์กฐ

  • SOAP 
    • HTTP, HTTPS, SMTP ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ XML ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๊ตํ™˜ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ
    • SOAP ๋Œ€์‹  ๋ ˆ์ŠคํŠธ ํ’€(RESTful) ํ”„๋กœํ† ์ฝœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
  • UDDI
    • ์›น ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •๋ณด์ธ WSDL์„ ๋“ฑ๋กํ•˜๊ณ , ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ €์žฅ์†Œ
    • ๊ณต๊ฐœ์ ์œผ๋กœ ์ ‘๊ทผ, ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ๋ ˆ์ง€์Šคํ† ๋ฆฌ
  • WSDL
    • ์›น ์„œ๋น„์Šค๋ช…, ์›น ์„œ๋น„์Šค ์ œ๊ณต์œ„์น˜, ํ”„๋กœํ† ์ฝœ ์ •๋ณด ๋“ฑ ์›น ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ธฐ์ˆ ํ•œ ํŒŒ์ผ
    • XML ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„ 

 

 

์ถœ์ฒ˜ -

https://m.blog.naver.com/bjgim21/221379460441

 

ํ—ˆ๋ธŒ ์•ค๋“œ ์Šคํฌํฌ Vs ํฌ์ธํŠธ ํˆฌ ํฌ์ธํŠธ

์„ค๋น™์ด 2์ธต์— ์žˆ๊ณ  `ํŒŒ๋ฐ”`์˜†์— `์•„๋”ธ`์ด ์žˆ๋Š” ์ด์œ [์›๋ฌธ]์Šคํƒ€๋ฒ…์Šค๋Š” ์œ ๋™์ธ๊ตฌ๊ฐ€ ๋งŽ์€ ํŠน์ • ์ง€์—ญ์— ๋งค์žฅ์„ ...

blog.naver.com

 

๋ฏธ๋“ค์›จ์–ด ๊ฐœ๋…

  • ์šด์˜ ์ฒด์ œ์™€ ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ค‘๊ฐ„์—์„œ ์กฐ์ •๊ณผ ์ค‘๊ฐœ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด(software glue)
  • ์‘์šฉ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋ฐ›๋Š” ์„œ๋น„์Šค ์ด์™ธ์˜ ์ถ”๊ฐ€์  ์„œ๋น„์Šค ์ œ๊ณต

 

๋ฏธ๋“ค์›จ์–ด ์ข…๋ฅ˜

  • RPC (remote procedure call) - ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ
    • ๋ณ„๋„์˜ ์›๊ฒฉ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์ฝ”๋”ฉ ์—†์ด ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ๊ธฐ์ˆ  
    • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฒฝ์šฐ ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์›๊ฒฉ ํ˜ธ์ถœ ๋˜๋Š” ์›๊ฒฉ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด๋ผ๊ณ  ํ•จ
    • ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๋ณด๋‹ค ํŽธํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅ
    • ๊ตฌ๊ธ€์˜ ProtocolBuffer, ํŽ˜์ด์Šค๋ถ Thrift, ํŠธ์œ„ํ„ฐ Finalge
 

RPC๋ž€?

์™œ RPC๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ? ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํŒจํ„ด์€? Client - Server ํŒจํ„ด Client๋Š” ์š”์ฒญํ•˜

nesoy.github.io

 

  • MOM(Message-oriented middleware) - ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด
    • ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด, ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์— ๊ธฐ์ดˆ
    • ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์ด ๋‹ค์ˆ˜, ๊ทธ์™ธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฐ ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ ๋ฐฉ์‹๋„ ์กด์žฌ
    • ์žฅ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ๋ผ์šฐํŒ… ๋ฐ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•จ
 

๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message-Oriented-Middleware)

1. What, ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ž€? 1.1 ๋ฏธ๋“ค์›จ์–ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?  - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์—ฐ๊ฒฐํ•ด ์ด๋“ค์ด ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด 1.2 ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ(=๋ฉ”์„ธ์ง• ์‹œ์Šคํ…œ)์€ ๋ฌด์—‡์ธ

doridorigang.tistory.com

 

  • ORB(Object Request Broker) - ๊ฐ์ฒด ์š”์ฒญ ๋ธŒ๋กœ์ปค
    • ๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์—์„œ ๊ฐ์ฒด ๋ฐ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ „์†กํ• ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด
    • ์ฝ”๋ฐ”(CORBA) ํ‘œ์ค€ ์ŠคํŽ™์„ ๊ตฌํ˜„

 

  • DB ์ ‘์† ๋ฏธ๋“ค์›จ์–ด 
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด

 

  • TP ๋ชจ๋‹ˆํ„ฐ (Transaction Processing moniter)
    • ๊ฐ์ข… ํ”„๋กœํ† ์ฝœ์—์„œ ๋™์ž‘ํ•˜๋Š” ์„ธ์…˜๊ณผ ์‹œ์Šคํ…œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ตœ์†Œ ์ฒ˜๋ฆฌ ๋‹จ์œ„์ธ ํŠธ๋žœ์žญ์…˜์„ ๊ฐ์‹œํ•˜์—ฌ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋ณด๊ด€ ๋ฐ ์œ ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฏธ๋“ค์›จ์–ด

 

  • WAS (Web Application Server)
    • ์›น/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด
    • ์›น์„œ๋ฒ„๋Š” ์ •์ ์ธ ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ, WAS๋Š” ๋™์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌ
    • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋‚˜์•„๊ฐ€ ์›น ํ™˜๊ฒฝ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฏธ๋“ค์›จ์–ด 
 

Web Server์™€ WAS(Web Application Server)์˜ ์ฐจ์ด( feat. ๋ฏธ๋“ค์›จ์–ด)

์•„๋ž˜์˜ ๋‘๊ฐœ์˜ ๊ทธ๋ฆผ์€ ์‚ฌ์‹ค์ƒ ๊ฐ™์€ ๊ทธ๋ฆผ์ด๋‹ค ใ…‡ใ…‡. ํด๋ผ์ด์–ธํŠธ /์„œ๋ฒ„ ๊ตฌ์กฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์—๊ฒŒ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์›น์„œ๋ฒ„์™€ ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋Œ€ํ‘œ

sphere-sryn.tistory.com

 

์ฐธ์กฐ - 

https://gggggeun.tistory.com/140?category=986591 

 

๋ฏธ๋“ค์›จ์–ด(Middleware)

1. ๋ฏธ๋“ค์›จ์–ด์˜ ์ •์˜๋“ค ๋‘ ๋งค๊ฐœ์ฒด ์–‘์ชฝ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์—์„œ ๋งค๊ฐœ ์—ญํ• (๋ ˆ์ด์–ด)์„ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋‘ ๋งค๊ฐœ์ฒด๋Š” ์šด์˜์ฒด์ œ/์‘์šฉ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๊ณ  ํด๋ผ์ด์–ธ

gggggeun.tistory.com

 

MTCNN์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€๋‚˜ ์˜์ƒ๋ฐ์ดํ„ฐ์˜ ์–ผ๊ตด ์ธ์‹์„ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๋‚˜์ด/์„ฑ๋ณ„ ์˜ˆ์ธก์„ ์œ„ํ•ด ํ›ˆ๋ จ๋œ CAFFE ๋ชจ๋ธ๊ณผ Cascade ๋“ฑ์„ ์‚ดํŽด๋ณด์•˜์ง€๋งŒ, 

๋‹จ์ˆœํžˆ ์–ผ๊ตด์ธ์‹๋งŒ ์œ„ํ•ด์„œ๋Š” MTCNN์ด ๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐ„ํŽธํ•˜๊ณ , ์–ผ๊ตด์ธ์‹ ์„ฑ๋Šฅ๋„ ๋›ฐ์–ด๋‚˜๋‹ค.

์ด๋ฒˆ ์ฝ”๋“œ ๊ตฌํ˜„์—์„œ๋Š” ์˜์ƒ๋ฐ์ดํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ์–ผ๊ตด์„ ์ธ์‹ํ•˜๋Š” ๊ฒŒ ์ฃผ์š”๋ชฉ์ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์ฝ”๋“œ์— ๋ฐ˜๋ณต๋ฌธ์„ ์ถ”๊ฐ€ํ•ด๋ณด์•˜๋‹ค.

 

1. MTCNN ์„ค์น˜ ๋ฐ import

# ์ฝ”๋žฉ์ด๋ฉด ์ฝ”๋žฉ ์ฝ”๋“œ์—, ์ฃผํ”ผํ„ฐ๋ฉด ์ฃผํ”ผํ„ฐ cmd์ฐฝ์— ์„ค์น˜
pip install mtcnn 
import mtcnn

# ์ด๋ฏธ์ง€ ํ™•์ธ ๋“ฑ์„ ์œ„ํ•ด matplotlib๋„ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
from matplotlib import pyplot

2. ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋กœ MTCNN ์–ผ๊ตด์˜์—ญ ๊ธฐ๋Šฅ ํ™•์ธํ•˜๊ธฐ

# load image from file
pixels = pyplot.imread('/content/sampley.jpeg')
# example of face detection with mtcnn
from matplotlib import pyplot
from PIL import Image
from numpy import asarray
from mtcnn.mtcnn import MTCNN
 
# extract a single face from a given photograph
def extract_face(filename, required_size=(224, 224)):
	# load image from file
	pixels = pyplot.imread(filename)
	# create the detector, using default weights
	detector = MTCNN()
	# detect faces in the image
	results = detector.detect_faces(pixels)
	# extract the bounding box from the first face
	x1, y1, width, height = results[0]['box']
	x2, y2 = x1 + width, y1 + height
	# extract the face
	face = pixels[y1:y2, x1:x2]
	# resize pixels to the model size
	image = Image.fromarray(face)
	image = image.resize(required_size)
	face_array = asarray(image)
	return face_array
 
# load the photo and extract the face
pixels = extract_face('/content/sampley.jpeg')
# plot the extracted face
pyplot.imshow(pixels)
# show the plot
pyplot.show()

์ฝ”๋“œ ๊ฒฐ๊ณผํ™”๋ฉด

3. MTCNN์œผ๋กœ ์ฃผ๋ณ€ ์˜์—ญ ์œ„์น˜๊ฐ’ ํ™•๋ณดํ•˜๊ธฐ

pixels = pyplot.imread('/content/sampley.jpeg')
	# create the detector, using default weights
detector = MTCNN()
	# detect faces in the image
results = detector.detect_faces(pixels)
print(results)

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค.

[{'box': [104, 70, 143, 179], 'confidence': 0.9999216794967651, 'keypoints': {'left_eye': (148, 145), 'right_eye': (211, 136), 'nose': (195, 167), 'mouth_left': (172, 210), 'mouth_right': (219, 202)}}]

 

x1, y1, width, height = results[0]['box']
x2, y2 = x1 + width, y1 + height
	# extract the face
face2 = pixels[y1-30:y2+30, x1-30:x2+30]
# resize pixels to the model size
image = Image.fromarray(face2)
image = image.resize((254,254))
face_array = asarray(image)
pyplot.imshow(image)
# show the plot
pyplot.show()

face2 = pixels[y1-30:y2+30, x1-30:x2+30

face2๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”ฝ์…€ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•ด์„œ ์–ผ๊ตด์˜์—ญ์„ ๋„“ํ˜€์ฃผ์—ˆ๋‹ค.

์ฝ”๋“œ ๊ฒฐ๊ณผํ™”๋ฉด 

 

4. MTCNN์œผ๋กœ ์—ฌ๋Ÿฌ ์–ผ๊ตด ์ธ์‹ํ•˜๊ธฐ

(MTCNN์€ ๊ธฐ๋ณธ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ œ์ผ ๋จผ์ € ์ธ์‹ํ•œ ์–ผ๊ตด์—ญ์—ญ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, for๋ฌธ์„ ์จ์„œ ์—ฌ๋Ÿฌ ์–ผ๊ตด๋„ ํ™•๋ณด๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๋‹ค.)

pixels = pyplot.imread('/content/PEOPLE.jpeg')
	# create the detector, using default weights 
detector = MTCNN()
	# detect faces in the image
for results in detector.detect_faces(pixels):
  print(results)

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

{'box': [23, 62, 52, 71], 'confidence': 0.9998407363891602, 'keypoints': {'left_eye': (40, 87), 'right_eye': (64, 92), 'nose': (52, 103), 'mouth_left': (37, 113), 'mouth_right': (57, 117)}} {'box': [106, 118, 53, 69], 'confidence': 0.9998244643211365, 'keypoints': {'left_eye': (115, 145), 'right_eye': (138, 142), 'nose': (123, 158), 'mouth_left': (118, 168), 'mouth_right': (143, 165)}} {'box': [146, 15, 40, 50], 'confidence': 0.9995580315589905, 'keypoints': {'left_eye': (160, 32), 'right_eye': (177, 39), 'nose': (165, 47), 'mouth_left': (152, 48), 'mouth_right': (169, 55)}} {'box': [165, 107, 64, 78], 'confidence': 0.9987497329711914, 'keypoints': {'left_eye': (176, 135), 'right_eye': (203, 144), 'nose': (178, 158), 'mouth_left': (168, 161), 'mouth_right': (198, 170)}} {'box': [76, 73, 39, 53], 'confidence': 0.9984415173530579, 'keypoints': {'left_eye': (85, 93), 'right_eye': (104, 95), 'nose': (93, 107), 'mouth_left': (83, 109), 'mouth_right': (104, 111)}} {'box': [100, 21, 45, 58], 'confidence': 0.9919271469116211, 'keypoints': {'left_eye': (112, 43), 'right_eye': (132, 43), 'nose': (122, 57), 'mouth_left': (110, 62), 'mouth_right': (133, 62)}} {'box': [190, 28, 62, 73], 'confidence': 0.970379650592804, 'keypoints': {'left_eye': (205, 52), 'right_eye': (227, 63), 'nose': (203, 70), 'mouth_left': (191, 79), 'mouth_right': (211, 89)}}

 

๊ฒฐ๊ณผ๊ฐ’์—์„œ box๊ฐ’๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด  results['box']๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

#๊ฒฐ๊ณผ๋ฅผ ์ด๋ฏธ์ง€๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
for results in detector.detect_faces(pixels):
      x, y, w, h = results['box']
      print(results['box'])
      cv2.rectangle(pixels, (x,y), (x+w, y+h), (255,255,255), thickness=2)
cv2_imshow(pixels)

๋‹ค์ค‘์–ผ๊ตด ์ด๋ฏธ์ง€๋ฅผ ํˆฌ์ž… ํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ

 

5. ์˜์ƒ์—์„œ ์–ผ๊ตด์ธ์‹ ํ•˜๊ธฐ (์ฝ”๋žฉ ํ™˜๊ฒฝ)

#์ฝ”๋žฉ์—์„œ๋Š” ๊ฒฐ๊ณผํ™”๋ฉด์œผ๋กœ ๋™์˜์ƒ์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์•„, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
from google.colab.patches import cv2_imshow
def videoFaceDetector(cam, required_size=(224, 224)): #์˜์ƒ์—์„œ ์–ผ๊ตด์„ ๊ฒ€์ถœํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ ์ •์˜
  while True:
    ret, img = cam.read() #์˜์ƒ ์บก์ณ
    try:
      img= cv2.resize(img,dsize=None, fx=1.0,fy=1.0) #์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ ˆ
    except:break

    detector=MTCNN() #detector๋กœ MTCNN ์‚ฌ์šฉ 
    for results in detector.detect_faces(img): #์–ผ๊ตด ๋‹ค์ค‘ ์ธ์‹์„ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ
      x, y, w, h = results['box'] #์–ผ๊ตด ์œ„์น˜๊ฐ’
      cv2.rectangle(img, (x,y), (x+w, y+h), (255,255,255), thickness=2) #์ด๋ฏธ์ง€์— ์–ผ๊ตด์˜์—ญ ์ƒ์žํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ
      
    cv2_imshow(img)#์ฝ”๋žฉ์—์„œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ณด๊ธฐ(์˜์ƒ์€ ํ”„๋ ˆ์ž„ํ™”๋˜์–ด ํ‘œ์‹œ)
      
    if cv2.waitKey(1) > 0: break # while ๋ฃจํ”„์—์„œ 1msec ๋™์•ˆ์˜ ์ถœ๋ ฅ์„ ๋ณด์—ฌ์คŒ
cam = cv2.VideoCapture('/content/sample.mp4') #์˜์ƒ์—…๋กœ๋“œ
videoFaceDetector(cam) #์‹คํ–‰ (์ฝ”๋žฉ์€ ํ•œ ํ”„๋ ˆ์ž„์”ฉ ๊ฒฐ๊ณผ๊ฐ€ ๋Š๊ธฐ๋ฉด์„œ ํ‘œ์‹œ๋œ๋‹ค.)

 

๊ฐ์ฒด์ง€ํ–ฅ ๋ถ„์„(OOA, Object Orientied Analysis)๋Š” ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜์—ฌ

์š”๊ตฌ๋œ ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ํด๋ž˜์Šค(๊ฐ์ฒด) ์ด์™€ ๊ด€๋ จ๋œ ์†์„ฑ, ์—ฐ์‚ฐ, ๊ทธ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„ ๋“ฑ์„ ์ •์˜ํ•˜์—ฌ ๋ชจ๋ธ๋งํ•˜๋Š” ์ž‘์—…

 

๊ฐ์ฒด์ง€ํ–ฅ ๋ถ„์„์˜ ๋ฐฉ๋ฒ•๋ก 

  • Rumbaugh(๋Ÿผ๋ฐ”์šฐ) ๋ฐฉ๋ฒ•๐ŸŽŠ
  • Booch(๋ถ€์น˜) ๋ฐฉ๋ฒ• - ๋ฏธ์‹œ์ , ๊ฑฐ์‹œ์  ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉ
  • Jacobson ๋ฐฉ๋ฒ• - Use Case๋ฅผ ๊ฐ•์กฐ
  • Coad์™€ Yourdon ๋ฐฉ๋ฒ• - E-R ๋‹ค์ด์–ด๊ทธ๋žจ ์‚ฌ์šฉ
  • Wirfs-Brock ๋ฐฉ๋ฒ• - ๊ณ ๊ฐ ๋ช…์„ธ์„œ๋ฅผ ํ‰๊ฐ€ํ•ด์„œ ์„ค๊ณ„๊นŒ์ง€ ์—ฐ์†์œผ๋กœ ์ˆ˜ํ–‰

 

๋Ÿผ๋ฐ”์šฐ(Rumbaugh)์˜ ๋ถ„์„ ๊ธฐ๋ฒ•

๋Ÿผ๋ฐ”์šฐ์˜ ๋ถ„์„ ๊ธฐ๋ฒ•์€ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ทธ๋ž˜ํ”ฝ ํ‘œ๊ธฐ๋ฒ•๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ๋ง

  • ๊ฐ์ฒด ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ•(OMT, Object-Modeling Technique)
  • ๋ถ„์„ํ™œ๋™์€ ๊ฐ์ฒด→๋™์ →๊ธฐ๋Šฅ ๋ชจ๋ธ๋ง ์ˆœ์œผ๋กœ ์ด๋ค„์ง

 

1. ๊ฐ์ฒด ๋ชจ๋ธ๋ง

์‹œ์Šคํ…œ์—์„œ ์š”๊ตฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„๋‚ด ์†์„ฑ๊ณผ ์—ฐ์‚ฐ ์‹๋ณ„ ๋ฐ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ทœ์ •ํ•˜์—ฌ ๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ํ‘œ์‹œ

๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ (์ถœ์ฒ˜:์œ„ํ‚ค๋ฐฑ๊ณผ)

 

2. ๋™์  ๋ชจ๋ธ๋ง

์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ด์šฉํ•˜์—ฌ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ฅธ ๊ฐ์ฒด ๊ฐ„์˜ ์ œ์–ด ํ๋ฆ„, ์ƒํ˜ธ ์ž‘์šฉ, ๋™์ž‘ ์ˆœ์„œ ๋“ฑ ๋™์ ์ธ ํ–‰์œ„ ํ‘œํ˜„ 

์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ (๋ฌธ์—ด๊ธฐ์™€ ๋‹ซ๊ธฐ, ์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ)

 

3. ๊ธฐ๋Šฅ ๋ชจ๋ธ๋ง

์ž๋ฃŒ ํ๋ฆ„๋„๋ฅผ์ด์šฉํ•˜์—ฌ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์˜ ์ž๋ฃŒํ๋ฆ„์„ ์ค‘์‹ฌ์œผ๋กœ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ํ‘œํ˜„

์ž๋ฃŒํ๋ฆ„๋„(์ถœ์ฒ˜:์œ„ํ‚ค๋ฐฑ๊ณผ)

 

 

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ (SOLID ์›์น™)

SRP, Single Responsibility Principle ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ๊ฐ์ฒด๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„
(์‘์ง‘๋„ โฌ† , ๊ฒฐํ•ฉ๋„ โฌ‡)
OCP, Open-Closed Principle ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ ๊ธฐ์กด์˜ ์ฝ”๋“œ ์ˆ˜์ •์— ํ์‡„โŽ ๊ธฐ๋Šฅ ํ™•์žฅโœ…
(๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฌถ์–ด ์บก์Аํ™”)
LSP, Liskov Substitution Principle ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ ์ž์‹ ํด๋ž˜์Šค๋Š” ์ตœ์†Œํ•œ ์ž์‹ ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋Š” ์ˆ˜ํ–‰ (์ž์‹ ํด๋ž˜์Šค๋Š” ํ™•์žฅ๋งŒ ์ˆ˜ํ–‰) ๐Ÿ‘ฉ๐Ÿ‘ถ
ISP, Interface Segregation Principle ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ ์ž์‹ ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์˜์กด ๊ด€๊ณ„ โŒ
(SRP๋Š” ๊ฐ์ฒด ํ•˜๋‚˜, ISP๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜์˜ ์ฑ…์ž„)
DIP, Dependency Inversion Principle ์˜์กด ์—ญ์ „ ์›์น™ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋  ๋•Œ, ์ถ”์ƒ์„ฑ์ด ๋†’์€ ํด๋ž˜์Šค์™€์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค. (์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ) ๐Ÿš—/๐Ÿš“๐ŸšŒ๐Ÿš–

 

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

(์ถœ์ฒ˜-https://steady-coding.tistory.com/388)

 

 

์ฐธ์กฐ 

- 2021 ์‹œ๋‚˜๊ณต ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ ํ•„๊ธฐ (๊ธธ๋ฒ—)

+ Recent posts