๐ŸŒ Backend/๐Ÿƒ Spring

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

DevPoong 2022. 7. 2. 13:31

2022.06.29

1. Spring์˜ ํƒ„์ƒ

์ž๋ฐ” ์ง„์˜์— EJB(Enterprise Java Beans)๋ผ๋Š” ๊ธฐ์ˆ ์ด ์žˆ์—ˆ๋‹ค. ์ง€๊ธˆ์œผ๋กœ ๋”ฐ์ง€๋ฉด Spring + Jpa๋ฅผ ๋‹ค ํ•ฉ์ณ ๋†“์€ ๊ธฐ์ˆ .

 

์ปจํ…Œ์ด๋„ˆ, ๋ถ„์‚ฐ ๋“ฑ์˜ ๊ธฐ์ˆ ์ด ํš๊ธฐ์ ์ด์—ˆ๋Š”๋ฐ ๊ฐ€๊ฒฉ์ด ์ˆ˜์ฒœ๋งŒ์›์œผ๋กœ ๋น„์ŒŒ๋‹ค..

 

์ด๋ก ์ ์œผ๋กœ๋Š” ์ข‹์€๋ฐ EJB์— ์˜์กด์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•˜๊ณ  ๋Š๋ฆฐ๋ฐ๋‹ค๊ฐ€ ๋น„์‹ธ๊ธฐ๊นŒ์ง€ ํ•˜๋‹ˆ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์ด ํž˜๋“ค์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋˜๋‹ˆ ๋‹ค์‹œ ์˜ค๋ž˜๋œ ๋ฐฉ์‹์˜ ๊ฐ„๋‹จํ•œ ์ž๋ฐ”๋กœ ๋Œ์•„๊ฐ€์ž ํ•ด์„œ ๋‚˜์˜จ ์šฉ์–ด๊ฐ€ POJO(Plain Old Java Object)๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง์ ‘ ์Šคํ”„๋ง, hibernate๋“ฑ์˜ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์Šคํ”„๋ง์€ EJB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ฒดํ•˜๊ณ  ๋‹จ์ˆœํ•˜์˜€๋‹ค.

 

Hibernate๋Š” EJB์˜ ์—”ํ‹ฐํ‹ฐ๋นˆ ๊ธฐ์ˆ ์„ ๋Œ€์ฒดํ•˜์˜€๊ณ ,

์ด์ œ EJB๋Š” ๋งํ–ˆ๋‹ค๋Š”๊ฑธ ์ธ์ •ํ•˜๊ณ  Hiberante๋ฅผ ๊ฑฐ์˜ ๋ณต๋ถ™ํ•ด์„œ JPA(Java Persistence API) ์ƒˆ๋กœ์šด ์ž๋ฐ” ํ‘œ์ค€์„ ์ •์˜ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

ํ˜„์žฌ๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ JPA๊ฐ€ ์žˆ๊ณ  JPA์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

์Šคํ”„๋ง ์ด๋ฆ„์€ ์ „ํ†ต์ ์ธ J2EE(EJB)๋ผ๋Š” ๊ฒจ์šธ์„ ๋„˜์–ด ์ƒˆ๋กœ์šด ์‹œ์ž‘์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ง€์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์™œ ๋ด„์ด๋ผ๋Š” ์˜๋ฏธ์˜ Spring์ด์ง€ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ๊ณ ๋‚œ์˜ ์—ญ์‚ฌ๊ฐ€ ์žˆ์—ˆ๋‹ค..


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

์Šคํ”„๋ง์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ธฐ์ˆ ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ด๊ฑฐ ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ๋“ค์ด ์žˆ๋‹ค.

  • ํ•ต์‹ฌ ๊ธฐ์ˆ : ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ, AOP, ์ด๋ฒคํŠธ
  • ์›น ๊ธฐ์ˆ : ์Šคํ”„๋ง MVC, ์Šคํ”„๋ง WebFlux
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ : ํŠธ๋žœ์žญ์…˜, JDBC, ORM ์ง€์›, XML์ง€์›
  • ๊ธฐ์ˆ  ํ†ตํ•ฉ: ์บ์‹œ, ์ด๋ฉ”์ผ, ์›๊ฒฉ์ ‘๊ทผ, ์Šค์ผ€์ค„๋ง
  • ํ…Œ์ŠคํŠธ: ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ง€์›

 

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

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

3. ์Šคํ”„๋ง ๋ถ€ํŠธ?

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

ํŠน์ง•

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

4. ๊ฐ์ฒด์ง€ํ–ฅ

  • ์ถ”์ƒํ™”
  • ์บก์Šํ™”
  • ์ƒ์†
  • ๋‹คํ˜•์„ฑ
    • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์—ฐํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•œ๋‹ค.

(1) ์—ญํ• ๊ณผ ๊ตฌํ˜„ ๋ถ„๋ฆฌ

  • ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉ
  • ์—ญํ•  = ์ธํ„ฐํŽ˜์ด์Šค
  • ๊ตฌํ˜„ = ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค
  • ๊ฐ์ฒด ์„ค๊ณ„์‹œ ์—ญํ• ์„ ๋จผ์ € ๋ถ€์—ฌํ•˜๊ณ , ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
  • ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜๋ฉด ์„ธ์ƒ์ด ๋‹จ์ˆœํ•ด์ง€๊ณ , ์œ ์—ฐํ•ด์ง€๋ฉฐ ๋ณ€๊ฒฝ๋„ ํŽธ๋ฆฌํ•ด์ง„๋‹ค.

   ์žฅ์ 

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

(2) ์Šคํ”„๋ง๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ

  • ์Šคํ”„๋ง์€ ๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ด์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ์ œ์–ด์˜ ์—ญ์ „(IOC), ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI)์€ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.
  • ์Šคํ”„๋ง์€ DI, DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ๋กœ ๋‹คํ˜•์„ฑ + OCP + DIP๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ง€์›ํ•œ๋‹ค.
  • DI ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด๋„ฃ๊ณ  ๊ทธ ์•ˆ์—์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ  ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•ด์ค€๋‹ค.

5. ์ •๋ฆฌ

  • ๋ชจ๋“  ์„ค๊ณ„์— ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„๋„ ๊ณต์—ฐ์„ ์„ค๊ณ„ํ•˜๋“ฏ ๋ฐฐ์—ญ๋งŒ ๋งŒ๋“ค์–ด๋‘๊ณ  ๋ฐฐ์šฐ๋Š” ์–ธ์ œ๋“ ์ง€ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์ž.
  • ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ์„ค๊ณ„์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ€์—ฌํ•˜์ž

ํ•˜์ง€๋งŒ

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

6. ์ฐธ๊ณ 

์Šคํ”„๋ง ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ์œผ๋ฉด ์ข‹์€ ์ฑ… ์ถ”์ฒœ