๐Ÿ“Œ ๊น€์˜ํ•œ ๋‹˜์˜ "์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ" ๊ฐ•์˜ ๋“ฃ๊ณ  ์ •๋ฆฌ

๋ชฉ์ฐจ

     

    Section 1 . ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ์Šคํ”„๋ง

    ์Šคํ”„๋ง์ด๋ž€? 

     

    โ˜˜๏ธ ์Šคํ”„๋ง ์ƒํƒœ๊ณ„

    โญ• ํ•„์ˆ˜!

    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ
    • ์Šคํ”„๋ง ๋ถ€ํŠธ : ์Šคํ”„๋ง ๊ธฐ์ˆ ๋“ค์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์›€์„ ์ฃผ๋Š” ๊ธฐ์ˆ 

    ๐Ÿ‘† ์„ ํƒ

    • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๊ธฐ์ˆ  (๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š”๊ฒŒ Spring Data JPA)
    • ์Šคํ”„๋ง ์„ธ์…˜ : ์„ธ์…˜ ๊ธฐ๋Šฅ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ๊ธฐ์ˆ 
    • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ : ๋ณด์•ˆ
    • ์Šคํ”„๋ง Rest Docs : API ๋ฌธ์„œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์—ฎ์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋„์›€์„ ์ฃผ๋Š” ๊ธฐ์ˆ 
    • ์Šคํ”„๋ง ๋ฐฐ์น˜ : ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋œ ๊ธฐ์ˆ 
    • ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ : ํด๋ผ์šฐ๋“œ์— ํŠนํ™”๋œ ๊ธฐ์ˆ 
    • ๋“ฑ๋“ฑ 

     

    โ˜˜๏ธ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ

    • ํ•ต์‹ฌ ๊ธฐ์ˆ : ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ, AOP, ์ด๋ฒคํŠธ, ๊ธฐํƒ€ (๊ฐ•์˜์˜ ์ดˆ์ !!)
    • ์›น ๊ธฐ์ˆ : ์Šคํ”„๋ง MVC, ์Šคํ”„๋ง WebFlux
    • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ : ํŠธ๋žœ์žญ์…˜, JDBC, ORM ๊ธฐ์›, XML ์ง€์›
    • ๊ธฐ์ˆ  ํ†ตํ•ฉ: ์บ์‹œ, ์ด๋ฉ”์ผ, ์›๊ฒฉ์ ‘๊ทผ, ์Šค์ผ€์ฅด๋ง
    • ํ…Œ์ŠคํŠธ: ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ง€์›
    • ์–ธ์–ด: ์ฝ”ํ‹€๋ฆฐ, ๊ทธ๋ฃจ๋น„
    • ์ตœ๊ทผ์—๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ํ†ตํ•ด์„œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›ํฌ์˜ ๊ธฐ์ˆ ๋“ค์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ

     

    โ˜˜๏ธ ์Šคํ”„๋ง ๋ถ€ํŠธ

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

     

    โ˜˜๏ธ ์Šคํ”„๋ง ๋‹จ์–ด?

    ์Šคํ”„๋ง์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

    • ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ 
    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ
    • ์Šคํ”„๋ง ๋ถ€ํŠธ, ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ๋ชจ๋‘ ํฌํ•จํ•œ ์Šคํ”„๋ง ์ƒํƒœ๊ณ„ 

     

    โ˜˜๏ธ ์Šคํ”„๋ง ์™œ ๋งŒ๋“ค์—ˆ๋‚˜์š”?

    ํ•ต์‹ฌ ๊ฐœ๋…: ์ด ๊ธฐ์ˆ ์„ ์™œ ๋งŒ๋“ค์—ˆ๋Š”๊ฐ€? ์ด  ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ ์ปจ์…‰์€? (๋กœ๋“œ์กด์Šจ์ด๋ž‘ ์œ ๊ฒ ํž๋Ÿฌ๊ฐ€ ์™œ ๋งŒ๋“ค์—ˆ์„๊นŒ!?!?!)

     

         โ“์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ณ , DB ์ ‘๊ทผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ?

         โ“์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ?

         โ“์›น ์„œ๋ฒ„๋„ ์ž๋™์œผ๋กœ ๋„์›Œ์ฃผ๊ณ ?

         โ“ํด๋ผ์šฐ๋“œ, ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค?

     

    ์ธ๊ฑธ๊นŒ?? โŒ ์ด๊ฑด ๋‹ค ๊ฒฐ๊ณผ๋ฌผ์ผ ๋ฟ์ด๋‹ค

     

     * ์Šคํ”„๋ง์˜ ์ง„์งœ ํ•ต์‹ฌ

    • ์Šคํ”„๋ง์€ ์ž๋ฐ” ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ
    • ์ž๋ฐ” ์–ธ์–ด์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• - ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด
    • ์Šคํ”„๋ง์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๊ฐ€ ๊ฐ€์ง„ ๊ฐ•๋ ฅํ•œ ํŠน์ง•์„ ์‚ด๋ ค๋‚ด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
    • ์Šคํ”„๋ง์€ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

    ์‚ฌ๋žŒ๋“ค์ด ์Šคํ”„๋ง ๋“ฑ์žฅ์— ์—ด๊ด‘ํ–ˆ๋˜ ๊ฑด ์Šคํ”„๋ง ์ด์ „์˜ EJB๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์žฅ์ ์„ ๋ง์น˜๋Š” ๊ธฐ์ˆ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑธ ์‚ด๋ฆด ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ธฐ์ˆ ์— ์—ด๊ด‘ํ–ˆ๋˜ ๊ฑฐ๋‹ค!! 

     

     


    ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

     

    โ˜˜๏ธ ๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์ง•

    • ์ถ”์ƒํ™” 
    • ์บก์Šํ™”
    • ์ƒ์†
    • ๋‹คํ˜•์„ฑ

     

    โ˜˜๏ธ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

    ์œ ์—ฐํ•˜๊ณ , ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๋‹ค? 

    ๊ฐ์ฒด ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์—

    • ๋ ˆ๊ณ  ๋ธ”๋Ÿญ ์กฐ๋ฆฝ, ํ‚ค๋ณด๋“œ ๋งˆ์šฐ์Šค ๊ต์ฒด, ์ปดํ“จํ„ฐ ๋ถ€ํ’ˆ ๊ต์ฒด ์ฒ˜๋Ÿผ
    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

    ์ด๋Ÿฐ ๊ถ๊ทน์˜ ์œ ์—ฐํ•จ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ! ๋‹คํ˜•์„ฑ(Polymorphism) ์ด๋‹ค. 

     

     

    โ˜˜๏ธ ๋‹คํ˜•์„ฑ(Polymorphism) 

    ์ž๋™์ฐจ๋ผ๋Š” ์—ญํ• ์ด ์กด์žฌํ•˜๊ณ  ์ด ์ž๋™์ฐจ ์—ญํ• ์— ๊ทธ ์–ด๋–ค ์ข…๋ฅ˜์— ์ž๋™์ฐจ๊ฐ€ ๊ตฌํ˜„(K3๋“ , ์•„๋ฐ˜๋–ผ๋“ , ํ…Œ์Šฌ๋ผ๋“ ) ๋˜์–ด๋„ ์šด์ „์ž๋Š” ์ž๋™์ฐจ๋ฅผ ์šด์ „ํ•  ์ˆ˜ ์žˆ๋‹ค. ์šด์ „์ž๋Š” ์ž๋™์ฐจ ์—ญํ• ์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ์–ด๋–ค๊ฒŒ ์™€๋„ ์ƒ๊ด€์—†๋‹ค.

    ์ด๋Š” ์šด์ „์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

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

    ์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋‚˜๋ˆ ๋†จ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  (์—ฐ๊ทน์—์„œ ํ•˜๋‚˜์˜ ์—ญํ• ์„ ์—ฌ๋Ÿฌ์‚ฌ๋žŒ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„)

     

     

    โ˜˜๏ธ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ

    • ์—ญํ• ๊ณผ ๊ตฌํ˜„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ์„ธ์ƒ์ด ๋‹จ์ˆœํ•ด์ง€๊ณ , ์œ ์—ฐํ•ด์ง€๋ฉฐ ๋ณ€๊ฒฝ๋„ ํŽธ๋ฆฌ
    • ์žฅ์ 
      • ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€์ƒ์˜ ์—ญํ• (์ธํ„ฐํŽ˜์ด์Šค)๋งŒ ์˜์กด
      • ํด๋ผ์ด์–ธํŠธ๋Š” ๊ตฌํ˜„ ๋‚ด๋ถ€ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ๋ณ€๊ฒฝ๋„ ๋ชฐ๋ผ๋„ ๋˜๋ฉฐ, ์‹ฌ์ง€์–ด ๊ตฌํ˜„ ๋Œ€์ƒ ์ž์ฒด๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์˜ํ–ฅ X

    ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋„ ์ด๋Ÿฌํ•œ ์žฅ์ ์„ ๋ฐ›์•„๋“ค์ด๊ฒŒ ๋œ๋‹ค.

     

     

    โ˜˜๏ธ ์ž๋ฐ” ์–ธ์–ด์—์„œ๋Š” ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ๋ฐ›์•„๋“ค์˜€์„ ๊นŒ?

    ์ž๋ฐ” ์–ธ์–ด์˜ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ ๋ฐฉ์‹์€ ๊ฐ์ฒด ์„ค๊ณ„์‹œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

    ๊ฐ์ฒด ์„ค๊ณ„์‹œ ์—ญํ• (์ธํ„ฐํŽ˜์ด์Šค)์„ ๋จผ์ € ๋ถ€์—ฌํ•˜๊ณ , ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ์šฉ

    • ์—ญํ•  = ์ธํ„ฐํŽ˜์ด์Šค
    • ๊ตฌํ˜„ = ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค,  ๊ตฌํ˜„ ๊ฐ์ฒด

    ์—ญํ•  > ๊ตฌํ˜„. ์—ญํ• ์ด ๋” ์ค‘์š”ํ•˜๋‹ค

     

    ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋‹คํ˜•์„ฑ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ์‹คํ–‰ ์‹œ์ ์— ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ƒ์† ๊ด€๊ณ„์—์„œ๋„ ๋‹คํ˜•์„ฑ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์ ์šฉ ๊ฐ€๋Šฅ

     

     

    โ˜˜๏ธ ๋‹คํ˜•์„ฑ์˜ ๋ณธ์งˆ

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

     

    โ˜˜๏ธ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ : ์ •๋ฆฌ

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

    ๋”ฐ๋ผ์„œ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ž˜ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. 

     

     

    โ˜˜๏ธ ํ•˜์ง€๋งŒ ํ•œ๊ณ„๋„ ์žˆ๋‹ค

    ์—ญํ• (์ธํ„ฐํŽ˜์ด์Šค)์ด ๋ณ€ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ๋ชจ๋‘ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋”๋”์šฑ ์•ˆ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.  

     

     

    โ˜˜๏ธ ์Šคํ”„๋ง๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ

    ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฝƒ์€ ๋‹คํ˜•์„ฑ

    ์Šคํ”„๋ง์€ ์ด๋Ÿฐ ๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ด์„œ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

    ์Šคํ”„๋ง์—์„œ ๋งํ•˜๋Š” ์ œ์–ด์˜ ์—ญ์ „(IoC), ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI)์€ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค!

    ๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ! ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ธ”๋Ÿญ ์กฐ๋ฆฝํ•˜๋“  ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค!

     

    ๋‹คํ˜•์„ฑ์ด ์Šคํ”„๋ง์— ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ๋ฐ ์—ฌ๊ธฐ์„œ ํ•œ๊ฐ€์ง€๊ฐ€ ๋” ์žˆ์–ด์•ผ ์™„์ „ํžˆ ์Šคํ”„๋ง์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™, ์†Œ์œ„ SOLID ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์›์น™์ด๋‹ค.


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

     

    โ˜˜๏ธ SRP (๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™ / Single reponsibility principle)

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

     

    โ˜˜๏ธ OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ / Open-Closed principle)

    ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค. 

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

     

    ๊ทธ๋Ÿฐ๋ฐ, ๊ฐœ๋ฐœ ํ์‡„ ์›์น™์€ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. 

    ๋งŒ์•ฝ MemberRepository m = new MemoryMemberRepository(); ๋ฅผ 

    MemberRepository m = new JdbcMemberRepository();๋กœ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ

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

     

    ์ด ์—ญํ• ์„ ์Šคํ”„๋ง์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด์ค€๋‹ค! ์ด ์›์น™์„ ์ง€ํ‚ค๊ธฐ์œ„ํ•ด IoC(์ œ์–ด์˜ ์—ญ์ „)๋„ DI(์˜์กด์„ฑ ์ฃผ์ž…)๋„ ํ•„์š”ํ•œ ๊ฒƒ!

     

    โ˜˜๏ธ LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ / Liskov Substitution principle)

    ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

    ์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ์— ์ƒ์œ„ ํƒ€์ž…์ด ํ•˜์œ„ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๊ต์ฒด๋ฅผ ์„ฑ๊ณตํ•˜์—ฌ ์ปดํŒŒ์ผ์ด ์„ฑ๊ณตํ•˜๋Š” ๊ฑธ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค.  

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

     

    โ˜˜๏ธ ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ / Interface segregation principle)

    ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ๋‚ซ๋‹ค. 

     

    ์ž๋™์ฐจ ์ธํ„ฐํŽ˜์ด์Šค > ์šด์ „ ์ธํ„ฐํŽ˜์ด์Šค, ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค ๋กœ ๋ถ„๋ฆฌ

    ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ > ์šด์ „์ž ํด๋ผ์ด์–ธํŠธ, ์ •๋น„์‚ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ„๋ฆฌ

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

     

    โ˜˜๏ธ DIP (์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ / Dependency inversion principle)

    ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜์ง€ ๋ง๊ณ  ์ถ”์ƒํ™”์— ์˜์กดํ•ด๋ผ! = ๊ตฌํ˜„ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ๋ง๊ณ , ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋ผ๋Š” ๋œป

     

    SOLID์—์„œ ํŠนํžˆ ์ค‘์š”ํ•œ ์›์น™์ด OCP์™€ DIP

    ์•ž์„œ ์ด์•ผ๊ธฐํ•œ ์—ญํ• ์— ์˜์กดํ•ด์•ผํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์•ผ๊ธฐ! ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜์กดํ•ด์•ผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

     

    ๋งŒ์•ฝ MemberRepository m = new MemoryMemberRepository(); ๋ฅผ

    MemberRepository m = new JdbcMemberRepository();๋กœ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ

     

    ์ด ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜์กดํ•˜๋ฉด์„œ๋„ ๊ตฌํ˜„ ํด๋ž˜์Šค์—๋„ ๊ฒฐ๊ตญ ๊ฐ™์ด ์˜์กดํ•˜๊ณ  ์žˆ์–ด ๊ฒฐ๊ตญ ๊ตฌํ˜„์ฒด ๋ณ€๊ฒฝ์‹œ ์ฝ”๋“œ๊นŒ์ง€ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (DIP ์œ„๋ฐ˜)

    ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•˜๋ผ๋Š” ๊ฑฐ์ง€?

     

    โ˜˜๏ธ ์ •๋ฆฌ

    ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์€ ๋‹คํ˜•์„ฑ์ด์ง€๋งŒ ๋‹คํ˜•์„ฑ๋งŒ์œผ๋กœ๋Š” ์‰ฝ๊ฒŒ ๋ถ€ํ’ˆ์„ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์—†๋‹ค.
    ๊ฒฐ๊ตญ ๊ตฌํ˜„ ๊ฐ์ฒด ๋ณ€๊ฒฝ์‹œ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ๋˜ํ•œ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— OCP, DIP๋ฅผ ์ง€ํ‚ฌ์ˆ˜ ์—†๋‹ค.

    ์ด๊ฑธ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•œ๋ฐ ๊ทธ๊ฑธ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ๊ฒŒ ์Šคํ”„๋ง์ด๋‹ค!

     


    ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ์Šคํ”„๋ง

     

    โ˜˜๏ธ ์Šคํ”„๋ง ์ด์•ผ๊ธฐ๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ๋‚˜์˜ค๋Š” ์ด์œ ?

    ์Šคํ”„๋ง์€ ์•„๋ž˜ ๊ธฐ์ˆ ๋กœ ๋‹คํ˜•์„ฑ + OCP, DIP๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ง€์›ํ•œ๋‹ค

    • DI(Dependency Injection) : ์˜์กด๊ด€๊ณ„, ์˜์กด์„ฑ ์ฃผ์ž…
    • DI ์ปจํ…Œ์ด๋„ˆ ์ œ๊ณต

    ์ด ๊ธฐ์ˆ ๋“ค๋กœ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ๋ถ€ํ’ˆ ๊ต์ฒดํ•˜๋“ฏ ๋Œ€์ฒด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    โ˜˜๏ธ ์ •๋ฆฌ

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

    ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ์„ค๊ณ„์— ์ธํ„ฐํŽ˜์ด์Šค ๋ถ€์—ฌ ํ•˜์ง€๋งŒ ์ด๊ฑธ ๋„์ž…ํ•˜๋ ค๋ฉด ์ถ”์ƒํ™”๋ผ๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋‹ค๋ฉด ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ , ํ›„์— ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ

    + Recent posts