๐Ÿ“˜ Programming/Spring

[Spring Framework] 1. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์˜ 3 Layer ์—ญํ•  (3)

ํ•œ์ฝ”๋”ฉ 2021. 8. 7. 16:34
728x90
728x90

ํ•™์Šต ๋ชฉํ‘œ

1. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ณ ๊ฐœ๋… ์ดํ•ด
2. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํŠน์ง• ์ดํ•ด

์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ž€ ์•„ํ‚คํ…์ฒ˜

ํด๋ผ์ด์–ธํŠธ์™€ DB ์‚ฌ์ด๋ฅผ ์ž‡๋Š” ๊ฐ ์ธต๋ณ„๋กœ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ

 

1. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ธต (Presentation Layer)

์—ญํ• 

  • UI์™€ ์ปจํŠธ๋กค๋Ÿฌ ์ œ๊ณต
  • UI ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋กœ์ง์„ ํ˜ธ์ถœ → ๊ฒฐ๊ณผ๋ฅผ UI๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…

๋ชจ๋ธ 1 ๋ฐฉ์‹

  • JSP๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ Java Bean์„ ํฌํ•จํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹
  • ๋ทฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํ˜ผ์žฌ์™ธ์–ด ๋ณต์žกํ•ด ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€

๋ชจ๋ธ 2 ๋ฐฉ์‹

  • ๋ชจ๋ธ (Model) : ๋ทฐ์— ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ ๋กœ์ง ์ฒ˜๋ฆฌ
  • ๋ทฐ (View) : ๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ํ™”๋ฉด ๋‹ด๋‹น
  • ์ปจํŠธ๋กค๋Ÿฌ (Controller) : ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ, ํ™”๋ฉด ํ๋ฆ„ ์ œ์–ด ๋‹ด๋‹น๋ชจ๋ธ 1 ๋ฐฉ์‹
    • JSP๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ Java Bean์„ ํฌํ•จํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹
    • ๋ทฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํ˜ผ์žฌ์™ธ์–ด ๋ณต์žกํ•ด ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€

 

2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ธต (Business Logic Layer)

์—ญํ• 

  • ์œ ์Šค์ผ€์ด์Šค๋กœ ํ‘œํ˜„๋˜๋Š” ํŠน์ • ์—…๋ฌด ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค ๋ฐ ๋„๋ฉ”์ธ

ํŠธ๋žœ์žญ์…˜ ์Šคํฌ๋ฆฝํŠธ ๋ฐฉ์‹

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ ์€ ์ผ๋ฐ˜์ ์ธ ์ž…์ถœ๋ ฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ผ ๊ฒฝ์šฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์„œ๋น„์Šค ํด๋ž˜์Šค์— ํฌํ•จ
  • ๋„๋ฉ”์ธ์€ ๊ฐ€๋Šฅํ•œ ํ•œ ๋กœ์ง์„ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํ•œ ๊ฐ’๋งŒ ์ €์žฅ
    • VO (Value Object)
    • DTO (Data Transfer Object)

๋„๋ฉ”์ธ ๋ชจ๋ธ

  • ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ๊ฐœ๋…
  • ๋ฐ์ดํ„ฐ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ ์‹œ, ์—…๋ฌด ๋„๋ฉ”์ธ ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด ์„ค๊ณ„
  • ์‹œ์Šคํ…œ ์š”๊ตฌ๋ฅผ ๊ธฐ์ˆ ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์ œ๊ณต
  • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐฉ์ง€ ๋Œ€์•ˆ
  • ๋„๋ฉ”์ธ ํŒจํ‚ค์ง€์— ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋‘๋Š” ๋ฐฉ์‹

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ

  • ํŠธ๋žœ์žญ์…˜์˜ ACID ํŠน์„ฑ ์ค‘ '์›์ž์„ฑ', '๋…๋ฆฝ์„ฑ'์„ ๊ด€๋ฆฌ
    • ์›์ž์„ฑ : ํŠธ๋žœ์žญ์…˜ ๋‚ด ๋ชจ๋“  ์ฒ˜๋ฆฌ๋Š” All or Nothing ์‹คํ–‰
    • ๋…๋ฆฝ์„ฑ : ๋ณ‘ํ–‰ํ•ด์„œ ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ๊ฐ„์„ญ x → ๋…๋ฆฝ์ 

ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„๋Š” ํ”„๋ ˆ์  ํ…Œ์ด์…˜๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ธต ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
  • ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ธต์— ๊ณต๊ฐœ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ธต์˜ ์„œ๋น„์Šค ํด๋ž˜์Šค๊ฐ€ ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘๊ณผ ๋

๋ช…์‹œ์  ํŠธ๋žœ์žญ์…˜

  • ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘๊ณผ Commit, Rollback๊ณผ ๊ฐ™์€ RDB์— ๋Œ€ํ•œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ์†Œ์Šค ์ฝ”๋“œ๋กœ ๋ช…์‹œ

์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜

  • ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ •์˜ ํŒŒ์ผ ์„ ์–ธ์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ

 

3. ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ธต (Data Access Layer)

  • RDB ์•ก์„ธ์Šค๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ์ˆจ๊น€
  • ORM (O/R ๋งคํ•‘) : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์—์„œ ์ทจ๋“ํ•ด ๊ฐ์ฒด์— ๋งคํ•‘ (๊ฐ์ฒด์ง€ํ–ฅ ๋ถ„์„์„ค๊ผ ๋‹จ๊ณ„์—์„œ์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ…Œ์ด๋ธ”๋กœ ์ž‘์„ฑํ•œ ํ˜•ํƒœ)

DB ์•ก์„ธ์Šค ํ”„๋ ˆ์ž„์›Œํฌ ์ข…๋ฅ˜

  • ํ•˜์ด๋ฒ„๋„ค์ดํŠธ(Hybernate) : ๋Œ€ํ‘œ์  ORM
  • ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค(MyBatis) : SQL๋ฌธ ์‚ฌ์šฉ ์ „์ œ

๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ธต ์„ค๊ณ„ ์ง€์นจ

  • ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉ
  • RDB ์ œํ’ˆ์ด ๋ฐ”๋€Œ์–ด๋„ ๊ตฌํ˜„์— ์˜ํ–ฅ X
  • ์ด์šฉํ•˜๋Š” RDB์— ์˜์กด์ ์ธ SQL๋ฌธ์„ ๊ธฐ์ˆ  X

๋ถ€ํ’ˆํ™”

  • ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํ‹ฐ์–ด or ๋ ˆ์ด์–ด๋ฅผ ํ†ตํ•ด ๋ถ€ํ’ˆํ™”
    • ํ‹ฐ์–ด > ๋ ˆ์ด์–ด > ํŒจํ‚ค์ง€ ≥ ์ปดํฌ๋„ŒํŠธ
  • ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ๋ถ€ํ’ˆ ๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค ํ•„์ˆ˜!
728x90
๋ฐ˜์‘ํ˜•