๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋…์„œ

์Šคํ”„๋ง ์ธ ์•ก์…˜ (3ํŒ)

by moon101 2023. 3. 18.

 

1์žฅ ์Šคํ”„๋ง ์†์œผ๋กœ

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ : ๊ฐ์ฒด๊ฐ€ ํƒœ์–ด๋‚˜๊ณ , ์ž๋ผ๊ณ , ์†Œ๋ฉธํ•œ๋‹ค.
    • ๋นˆํŒฉํ† ๋ฆฌ(org.springframework.beans.factory.BeanFactory ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋จ)
      • DI์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ง€์›
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(org.springframework.context.ApplicationContext ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋จ)
      • ๋นˆํŒฉํ† ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์— ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์— ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฒคํŠธ ๋ฐœํ–‰ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์„œ๋น„์Šค ์ œ๊ณต
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ
    • ์ฝ”์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ
      • ๋นˆ์˜ ์ƒ์„ฑ, ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ.
      • ๋นˆ ํŒฉํ† ๋ฆฌ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ์— ํฌํ•จ๋œ๋‹ค.
      • ๋ชจ๋“  ์Šคํ”„๋ง์˜ ๋ชจ๋“ˆ์€ ์ฝ”์–ด ์ปจํ…Œ์ด๋„ˆ ์œ„์— ๊ตฌ์ถ•๋œ๋‹ค.
    • AOP ๋ชจ๋“ˆ(aspect-oriented programming)
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์นœ ๊ด€์‹ฌ์‚ฌ(ํŠธ๋žœ์ ์…˜์ด๋‚˜ ๋ณด์•ˆ ๋“ฑ)์™€ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋“ค์„ ๋‚ฎ์ถ”๋Š”๋ฐ ์ด์šฉ๋œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค์™€ ํ†ตํ•ฉ
      • ์Šคํ”„๋ง์˜ JDBC์™€ DAO(Data Access Objects) ๋ชจ๋“ˆ์€ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ(์ปจ๋„ฅ์…˜์„ ์–ป์–ด์˜ค๊ณ , ์งˆ์˜๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ปจ๋„ฅ์…˜์„ ๋‹ซ๋Š” ์ฝ”๋“œ)๋ฅผ ์ถ”์ƒํ™”ํ•œ๋‹ค.
    • ์›น๊ณผ ๋ฆฌ๋ชจํŒ…
    • ํ…Œ์ŠคํŒ…
  • Bean์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค
    • ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€, ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€

 

2์žฅ ๋นˆ ์™€์ด์–ด๋ง

  • DI
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.

 

4์žฅ ์• ์ŠคํŽ™ํŠธ์ง€ํ–ฅ ์Šคํ”„๋ง

  • ํšก๋‹จ๊ด€์‹ฌ์‚ฌ(cross-cutting concerns)
    • ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์— ๊ฑธ์ณ ์žˆ๋Š” ๊ธฐ๋Šฅ
    • ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ๋Š” ๊ฐœ๋…์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค.
    • ํšก๋‹จ๊ด€์‹ฌ์‚ฌ์™€ ์ด์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.
  • AOP๋ž€?
    • ํšก๋‹จ๊ด€์‹ฌ์‚ฌ๋ฅผ ์• ์ŠคํŒฉํŠธ(aspect)๋ผ๋Š” ํŠน๋ณ„ํ•œ ํด๋ž˜์Šค๋กœ ๋ชจ๋“ˆํ™”ํ•œ๋‹ค.
      • ์ „์ฒด ์ฝ”๋“œ ๊ธฐ๋ฐ˜์— ํฉ์–ด์ ธ ์žˆ๋Š” ๊ด€์‹ฌ์‚ฌํ•ญ์ด ํ•˜๋‚˜์˜ ์žฅ์†Œ๋กœ ์‘์ง‘๋˜๊ณ ,
      • ์„œ๋น„์Šค ๋ชจ๋“ˆ์ด ์ž์‹ ์˜ ์ฃผ์š”๊ด€์‹ฌ์‚ฌํ•ญ(ํ•ต์‹ฌ ๊ธฐ๋Šฅ)์— ๋Œ€ํ•œ ์ฝ”๋“œ๋งŒ ํฌํ•จํ•˜๊ณ  ๊ทธ ์™ธ์˜ ๊ด€์‹ฌ์‚ฌํ•ญ์€ ๋ชจ๋‘ ์• ์ŠคํŽ™ํŠธ๋กœ ์˜ฎ๊ฒจ์ ธ์„œ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด ์ง„๋‹ค.
  • AOP ์šฉ์–ด ์ •๋ฆฌ
    • ์–ด๋“œ๋ฐ”์ด์Šค(advice)
      • ์• ์ŠคํŽ™ํŠธ๊ฐ€ ํ•ด์•ผ ํ•  ์ž‘์—…
      • ‘๋ฌด์—‡’์„ ‘์–ธ์ œ’ ํ• ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค.
      • ์ฆ‰, ์• ์ŠคํŽ™ํŠธ๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๊ณผ ์–ธ์ œ ๊ทธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด ์–ด๋“œ๋ฐ”์ด์Šค๋‹ค.
      • ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์ •์˜ํ•˜๋Š” ‘์–ธ์ œ’๋Š” ์ž‘์—…์ด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ด์ „์ธ์ง€ ์ดํ›„์ธ์ง€, ์ด์ „/์ดํ›„ ๋ชจ๋‘์ธ์ง€, ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์กŒ์„ ๋•Œ๋งŒ ์ ์šฉ๋˜๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
        • ์ด์ „(before) : ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ์–ด๋“œ๋ฐ”์ด์Šค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        • ์ดํ›„(after) : ๊ฒฐ๊ณผ์— ์ƒ๊ด€์—†์ด ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— ์–ด๋“œ๋ฐ”์ด์Šค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        • ๋ฐ˜ํ™˜ ์ดํ›„(after-returning) : ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋œ ํ›„์— ์–ด๋“œ๋ฐ”์ด์Šค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        • ์˜ˆ์™ธ๋ฐœ์ƒ ์ดํ›„(after-throwing) : ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„ ํ›„์— ์–ด๋“œ๋ฐ”์ด์Šค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        • ์ฃผ์œ„(around) : ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ์‹ธ์„œ ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ „๊ณผ ํ›„์— ๋ช‡๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ์กฐ์ธํฌ์ธํŠธ(join point)
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ. ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ์• ์ŠคํŽ™ํŠธ๋ฅผ ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ง€์ (point)๋ฅผ ๋งํ•œ๋‹ค.
      • ์ง€์ ์€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ง€์ ์ด๋‚˜ ์˜ˆ์™ธ๋ฐœ์ƒ, ํ•„๋“œ ๊ฐ’ ์ˆ˜์ • ๋“ฑ์ด ์žˆ๋‹ค.
    • ํฌ์ธํŠธ์ปท(pointcut)
      • ์• ์ŠคํŽ™ํŠธ๊ฐ€ ์–ด๋“œ๋ฐ”์ด์Šคํ•  ์กฐ์ธํฌ์ธํŠธ์˜ ์˜์—ญ์„ ์ขํžˆ๋Š” ์ผ์„ ํ•œ๋‹ค.
      • ์• ์ŠคํŽ™ํŠธ๊ฐ€ ‘์–ด๋””์„œ’ ํ•  ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค.
      • ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์œ„๋น™(weaving)๋ผ์•ผ ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์กฐ์ธํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•œ๋‹ค.
    • ์• ์ŠคํŽ™ํŠธ(aspect)
      • ์–ด๋“œ๋ฐ”์ด์Šค + ํฌ์ธํŠธ์ปท
    • ์ธํŠธ๋กœ๋•์…˜(introduction)
      • ๊ธฐ์กด ํด๋ž˜์Šค์— ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด๋„ ์ƒˆ ๋ฉ”์†Œ๋“œ๋‚˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ
      • ์˜ˆ) ์–ด๋–ค ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ์–ธ์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋๋‹ค๋Š” ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ
        • ๊ฐ ํด๋ž˜์Šค๋งˆ๋‹ค ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋Œ€์‹ , Auditable ์–ด๋“œ๋ฐ”์ด์Šค ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ setLastModified(Date) ๋ฉ”์†Œ๋“œ์™€ ์ด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ์ธํŠธ๋กœ๋•์…˜์„ ์ ์šฉํ•˜๋ฉด ๊ธฐ์กด ํด๋ž˜์Šค์— ์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ์™€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์œ„๋น™(weaving)
      • ํƒ€๊นƒ ๊ฐ์ฒด์— ์• ์ŠคํŽ™ํŠธ๋ฅผ ์ ์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ ˆ์ฐจ
      • ์• ์ŠคํŽ™ํŠธ๋Š” ํƒ€๊นƒ ๊ฐ์ฒด์˜ ์กฐ์ธํฌ์ธํŠธ๋กœ ์œ„๋น™๋œ๋‹ค.
      • ์œ„๋น™์€ ๋Œ€์ƒ ๊ฐ์ฒด์˜ ์ƒ์•  ์ค‘ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡๊ฐ€์ง€ ์‹œ์ ์—์„œ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
        • ์ปดํŒŒ์ผ ์‹œ๊ฐ„(compile time)
        • ํด๋ž˜์Šค๋กœ๋“œ์‹œ๊ฐ„(classload time)
        • ์‹คํ–‰์‹œ๊ฐ„(runtime) : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘์— ์• ์ŠคํŽ™ํŠธ๊ฐ€ ์œ„๋น™๋œ๋‹ค. ๋ณดํ†ต ํƒ€๊นƒ ๊ฐ์ฒด์— ํ˜ธ์ถœ์„ ์œ„์ž„ํ•˜๋Š” ๊ตฌ์กฐ์˜ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์œ„๋น™ ์ค‘์— AOP ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ์Šคํ”„๋ง AOP ์• ์ŠคํŽ™ํŠธ๊ฐ€ ์œ„๋น™๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์Šคํ”„๋ง AOP ์• ์ŠคํŒฉํŠธ
    • ๋นˆ์„ ๊ฐ์‹ธ๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์‹คํ–‰์‹œ๊ฐ„์— ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์• ์ŠคํŽ™ํŠธ๊ฐ€ ์Šคํ”„๋ง ๊ด€๋ฆฌ ๋นˆ์— ์œ„๋น™๋œ๋‹ค. ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ํƒ€๊นƒ ๊ฐ์ฒด๋กœ ์œ„์žฅํ•ด์„œ ์–ด๋“œ๋ฐ”์ด์Šค ๋Œ€์ƒ ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ , ํƒ€๊นƒ ๊ฐ์ฒด๋กœ ํ˜ธ์ถœ์„ ์ „๋‹ฌ(forward)ํ•œ๋‹ค.
    • ์• ์ŠคํŒฉํŠธ์˜ ๋กœ์ง์€ ํ”„๋ก์‹œ๊ฐ€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ๋‚˜์„œ ์‹คํ–‰๋˜๋ฉฐ, ๊ทธ ๋‹ค์Œ์— ํƒ€๊นƒ ๋นˆ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
    • ์Šคํ”„๋ง AOP์—์„œ๋Š” ํ”„๋ก์‹œ๊ฐ€ ์‹คํ–‰์‹œ๊ฐ„์— ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์• ์ŠคํŽ™ํŠธ๋ฅผ ์œ„๋น™ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•„์š”์น˜ ์•Š๋‹ค.

 

5์žฅ ์Šคํ”„๋ง์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ฒ ํ•™

  • ์Šคํ”„๋ง์ด ๋น„๊ฒ€์‚ฌํ˜• unchecked exception ์ œ๊ณต
  • ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ
  • ์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ ˆ์ฐจ์ƒ์—์„œ ๊ณ ์ •๋œ ๋‹จ๊ณ„์™€ ๊ฐ€๋ณ€์ ์ธ ๋‹จ๊ณ„๋ฅผ ํ…œํ”Œ๋ฆฟ(template)๊ณผ ์ฝœ๋ฐฑ(callback)์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€์˜ ๋ณ„๋„ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
    • ํ…œํ”Œ๋ฆฟ์€ ํ”„๋กœ์„ธ์Šค์˜ ๊ณ ์ •๋œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•˜๊ณ , (ํŠธ๋žœ์ ์…˜ ์ œ์–ด, ์ž์› ๊ด€๋ฆฌ ๋ฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋“ฑ)
    • ์ฝœ๋ฐฑ์€ ๋งž์ถค ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (์งˆ์˜๊ฐ์ฒด/statement ์ƒ์„ฑ, ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ, ์งˆ์˜๊ฒฐ๊ณผ ์ถ”์ถœ๊ณผ ๋ณ€ํ™˜ ๋“ฑ)
  • ์ง€์—ฐ๋กœ๋”ฉ(lazy loading) : ๊ฐ์ฒด ๊ตฌ์กฐ๊ฐ€ ์ ์  ๋ณต์žกํ•ด์ง์— ๋”ฐ๋ผ ์ข…์ข… ๊ด€๋ จ์„ฑ ์žˆ๋Š” ๊ฐ์ฒด ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. ์ง€์—ฐ ๋กœ๋”ฉ์€ ํ•„์š”๋กœ ํ•˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ์กฐ๊ธฐ ์ธ์ถœ(eager fetching) : ์ง€์—ฐ ๋กœ๋”ฉ์˜ ๋ฐ˜๋Œ€ ๊ฐœ๋…์œผ๋กœ ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ์ „์ฒด ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. → ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ’๋น„์‹ผ ์™•๋ณต ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ผ€์Šค์ผ€์ด๋”ฉ(cascading) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ๋ณ€๊ฒฝ์„ ๊ฐ€ํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋„ ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋ผ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

6์žฅ ํŠธ๋žœ์ ์…˜ ๊ด€๋ฆฌ

  • ํŠธ๋žœ์ ์…˜(transaction)
    • ๋ชจ ์•„๋‹ˆ๋ฉด ๋„
    • ํŠธ๋žœ์ ์…˜์„ ์ด์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๋ฌถ์–ด์„œ ์ „์ฒด ์ž‘์—…์ด ๋‹ค ์ด๋ค„์ง€๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ํ•˜๋‚˜๋„ ์ด๋ค„์ง€์ง€ ์•Š๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํŠธ๋žœ์ ์…˜์€ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฆฌ์†Œ์Šค๋“ค์˜ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ํŠธ๋žœ์ ์…˜์˜ 4๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ
    • ์›์ž์„ฑ(Atomic) : ํŠธ๋žœ์ ์…˜์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ•˜๋‚˜์˜ ๋‹จ์œ„์ž‘์—…์œผ๋กœ ๋ฌถ์ธ ๊ฒƒ์ด๋‹ค. ์›์ž์„ฑ์€ ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—…์ด ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ ํ•˜๋‚˜๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ์•กํ‹ฐ๋น„ํ‹ฐ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•œ๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ•˜๊ณ  ๋กค๋ฐฑ๋œ๋‹ค.
    • ๋ฌด๊ฒฐ์„ฑ(Consistent) : ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์‹œ์Šคํ…œ์€ ๊ทธ ์‹œ์Šคํ…œ์ด ๋ชจ๋ธ๋งํ•œ ๋น„์ฆˆ๋‹ˆ์Šค์™€ ๋ฌด๊ฒฐ์„ฑ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ํ˜„์‹ค๊ณผ ๋ถ€์ •ํ•ฉ์„ ์ผ์œผํ‚ค์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
    • ๊ฒฉ๋ฆฌ์„ฑ(Isolated) : ํŠธ๋žœ์žญ์…˜์€ ์—ฌ๋Ÿฌ ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•ด๋„ ๊ฐ ์‚ฌ์šฉ์ž์˜ ์ž‘์—…์ด ์„œ๋กœ ๋’ค์—‰ํ‚ค์ง€ ์•Š๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ฝ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌ๋ผ์•ผ ํ•œ๋‹ค.
    • ์ง€์†์„ฑ(Durable) : ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋˜๋ฉด ์‹œ์Šคํ…œ์— ์ด์ƒ์ด ์ƒ๊ธฐ๋”๋ผ๋„ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜์†๋ผ์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์˜์†์ ์ธ ์ €์žฅ์†Œ์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.
  • ํŠธ๋žœ์ ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation level)
    • ๋”ํ‹ฐ ์ฝ๊ธฐ(dirty read) : ๋”ํ‹ฐ ์ฝ๊ธฐ ๋ฌธ์ œ๋Š” ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ๋ณ€๊ฒฝ๋์ง€๋งŒ ์•„์ง ์ปค๋ฐ‹๋˜์ง€๋Š” ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค๋ฐ‹๋˜์ง€ ์•Š๊ณ  ๋กค๋ฐฑ๋˜์–ด ๋ฒ„๋ฆฐ๋‹ค๋ฉด, ์ฒซ ๋ฒˆ์งธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์€ ์ด ๋ฐ์ดํ„ฐ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋œ๋‹ค.
    • ๋ฐ˜๋ณตํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ(nonrepeatable read) : ๋ฐ˜๋ณตํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ ๋ฌธ์ œ๋Š” ํŠธ๋žœ์žญ์…˜์ด ๊ฐ™์€ ์งˆ์˜๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ˆ˜ํ–‰ํ•  ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•œ๋‹ค. ์ด๋Š” ๋ณดํ†ต ๊ฐ ์งˆ์˜ ์ˆ˜ํ–‰ ์‚ฌ์ด์— ๋™์‹œ ์ง„ํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค.
    • ํŒฌํ…€ ์ฝ๊ธฐ(phantom read) : ํŒฌํ…€ ์ฝ๊ธฐ๋Š” ๋ฐ˜๋ณตํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ํŒฌํ…€ ์ฝ๊ธฐ๋Š” ์–ด๋–ค ํŠธ๋žœ์žญ์…˜(T1)์ด ๋‘˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ํ–‰์„ ์ฝ์€ ๋‹ค์Œ, ๋™์‹œ ์ง„ํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜(T2)์ด ์ถ”๊ฐ€ ํ–‰์„ ์‚ฝ์ž…ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. T1์—์„œ ๋™์ผํ•œ ์งˆ์˜๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๋ฉด, T1์€ ์ด์ „์—๋Š” ์—†๋˜ ๋ฐ์ดํ„ฐ ํ–‰๊นŒ์ง€ ์ฝ๊ฒŒ ๋œ๋‹ค.

 

7์žฅ ์Šคํ”„๋ง MVC๋ฅผ ์ด์šฉํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

  • ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ
    1. ํ™”๋ฉด์—์„œ ์—…๋กœ๋“œํ•œ ํŒŒ์ผ์„ ๋ฐ›๋Š”๋‹ค (ํผ์— ํŒŒ์ผ ์—…๋กœ๋“œ ํ•„๋“œ ์ถ”๊ฐ€)
    2. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ๋ฐ›๋„๋ก ํ•œ๋‹ค (์—…๋กœ๋“œ ํŒŒ์ผ ์ˆ˜์‹ )
    3. multipart/form-data ์„ค์ • ํŒŒ์ผ ์‹œ์Šคํ…œ์— ํŒŒ์ผ ์ €์žฅ
  • 2๋ฒˆ ์—…๋กœ๋“œ ํŒŒ์ผ ์ˆ˜์‹ 
@RequestMapping(method=RequestMethod.POST)
public String addSpitterFromForm(@Valid Spitter spitter, BindingResult bindingResult,
								 @RequestParam(value="image", required=false) MultipartFile image) {
if(bindingResult.hasErrors()) {
		return "spitters/edit";
}

spitterService.saveSpitter(spitter);

try {
  if(!image.isEmpty()) {  // ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ
		validateImage(image); // ์ด๋ฏธ์ง€ ์œ ํšจ์„ฑ ๊ฒ€์ฆ

		saveImage(spitter.getId() + ".jpg", image); // ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ €์žฅ
	}
} catch (ImageUploadException e) {
	bindingResult.reject(e.getMessage());
  return "spitters/edit";
}

return "redirect:/spitters/" + spitter.getUsername();
}
  • ValidateImage() ๋ฉ”์†Œ๋“œ๋Š” ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์ด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ
  • jpeg ํŒŒ์ผ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์ฆ์— ์‹คํŒจํ•˜๋ฉด RuntimeException์„ ๊ฐ„๋‹จํžˆ ํ™•์žฅํ•œ ImageUploadException์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
private void validateImage(MultipartFile image) {
	if(!image.getContentType().equals("image/jpeg")) {
		throw new ImageUploadException("Only JPG images accepted");
	}
}
  • 3๋ฒˆ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ํŒŒ์ผ ์ €์žฅ
    • saveImage()๋Š” webRootPath์˜ ๊ฐ’ ๊ธฐ๋ฐ˜์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ–๋Š” java.io.File ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • File ๊ฐ์ฒด๊ฐ€ ์ค€๋น„๋˜๋ฉด, ์•„ํŒŒ์น˜ ์ปค๋จผ์Šค IO(Apache Commons IO)์˜ FileUtils๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์„œ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ImageUploadException์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ํŒŒ์ผ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋ฌธ์ œ
    • ํŒŒ์ผ ์ €์žฅ์„ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„ ํ™•๋ณด ์ฑ…์ž„
    • ํ•˜๋“œ์›จ์–ด ๋ฌธ์ œ ๋ฐœ์ƒ์— ๋Œ€๋น„ํ•œ ๋ฐฑ์—… ๋Œ€์ฑ…
    • ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ฑธ์ณ ์žˆ๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ

 

 

9์žฅ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ

  • ๋ชจ๋“  ์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ HttpServletRequest๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ์š”์ฒญ์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์ (access point)์ด๋ผ๋ฉด, ๋ฐ”๋กœ ๊ทธ ์š”์ฒญ์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋ณด์•ˆ์ด ์‹œ์ž‘๋˜๋Š” ๊ณณ์ด๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ํ”„๋ก์‹ฑ
    • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ๋‹ค์–‘ํ•œ ๋ณด์•ˆ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ web.xml ํŒŒ์ผ์— ๋‹ค์–‘ํ•œ <filter>๋ฅผ ์„ ์–ธํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
    • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์ผ๋ จ์˜ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์Šคํ”„๋ง MVC ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํฌํ•จํ•ด ์›น ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์• ์ŠคํŽ™ํŠธ๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์— ๋ณด์•ˆ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

10์žฅ ์Šคํ”„๋ง ํ†ตํ•ฉ

  • ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฆฌ๋ชจํŒ…
    • ๋ฆฌ๋ชจํŒ…(remoting)์€ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค ๊ฐ„์˜ ๋Œ€ํ™”๋‹ค.
    • ์›๊ฒฉ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ(RMI)
  • RMI๋Š” ์ž๋ฐ”์˜ ํ‘œ์ค€ ๊ฐ์ฒด ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฐฉํ™”๋ฒฝ์„ ๊ฐ€๋กœ์งˆ๋Ÿฌ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.
  • ์Šคํ”„๋ง์˜ HTTP ํ˜ธ์ถœ์ž(invoker)๋Š” ๋ฐฉํ™”๋ฒฝ์ด ์žˆ์–ด๋„ ๊ดœ์ฐฎ๊ณ , HTTP๋ฅผ ๊ฐ€๋กœ์งˆ๋Ÿฌ ๋ฆฌ๋ชจํŒ…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์‹œ์— ์ž๋ฐ”์˜ ์ง๋ ฌํ™”๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

11์žฅ ์Šคํ”„๋ง์—๊ฒŒ ์•ฝ๊ฐ„์˜ ํœด์‹(REST)์„

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

 

12์žฅ ์Šคํ”„๋ง ๋ฉ”์‹œ์ง•

๋น„๋™๊ธฐ์‹ ๋ฉ”์‹œ์ง•

  • ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š” ํ†ต์‹  ๋ฐฉ์‹

์ž๋ฐ” ๋ฉ”์‹œ์ง€ ์„œ๋น„์Šค(Java Message Service, JMS)

  • ๋ฉ”์‹œ์ง€ ์ค‘๊ฐœ์ž(message broker)
  • ๋ชฉ์ ์ง€(destination)
    • ํ(queue)
      • ์  ๋Œ€ ์  ๋ชจ๋ธ(point to point)
    • ํ† ํ”ฝ(topic)
      • ๋ฐœํ–‰๊ตฌ๋…(publish-subscribe)

 

13์žฅ ๊ธฐํƒ€ ์ฃผ์š”์‚ฌํ•ญ

์„ค์ • ์™ธ๋ถ€ํ™”

  • ํ”„๋กœํผํ‹ฐ ๊ฐ’ ์„ค์ •์„ ์Šคํ”„๋ง ์„ค์ •์˜ ๋ฐ–์œผ๋กœ ์ด๋™์‹œ์ผœ ์™ธ๋ถ€ ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ๋ฌถ์ง€ ์•Š์•„๋„ ๊ด€๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
    • ํ”„๋กœํผํ‹ฐ ๋Œ€์น˜ ๋ณ€์ˆ˜ ์„ค์ •์ž(property placeholder configurers)
    • ํ”„๋กœํผํ‹ฐ ์˜ค๋ฒ„๋ผ์ด๋”(property overriders)

JNDI(Java Naming and Directory Interface) ๊ฐ์ฒด ์™€์ด์–ด๋ง

 

 

 

// TODO

์Šคํ”„๋ง ์ธ ์•ก์…˜ 6ํŒ ์ฝ๊ธฐ

๋Œ“๊ธ€