์ด์•ผ๊ธฐ - ์ž๋ฐ” ์ง„์˜์˜ ์ถ”์šด ๊ฒจ์šธ๊ณผ ์Šคํ”„๋ง์˜ ํƒ„์ƒ


2000๋…„๋Œ€ ์ดˆ๋ฐ˜, ์ž๋ฐ” ์ง„์˜์˜ ํ‘œ์ค€ ๊ธฐ์ˆ ์€ Enterprise Java Beans ์˜€๋‹ค. ์ด๋ก ์ด ์ข‹์€ ์ข…ํ•ฉ ์„ ๋ฌผ ์„ธํŠธ์˜€์ง€๋งŒ, ์ƒ๋‹นํžˆ ๋น„์‹ธ๊ณ  ๋ณต์žกํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ, ์ˆœ์ˆ˜ํ•œ Plain Old Java Object ๋กœ ๋Œ์•„๊ฐ€์ž๋Š” ์˜๊ฒฌ์ด ๋‚˜์˜ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด, EJB ๋ฅผ ๋Œ€์ฒดํ•  Spring ๊ณผ EJB ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋Œ€์ฒดํ•  JPA ์ด๋‹ค.

์Šคํ”„๋ง ์—ญ์‚ฌ

2002๋…„ ๋กœ๋“œ ์กด์Šจ์ด๋ผ๋Š” ์‚ฌ๋žŒ์ด EJB ์˜ ๋ฌธ์ œ์ ์„ ์ง€์ ํ•˜๋Š” ์ฑ…์„ ์ถœํŒํ•œ๋‹ค. ์ด ์ฑ…์— BeanFactory, ApplicationContext, POJO, IoC, DI ๋“ฑ๋“ฑ ์ง€๊ธˆ์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค. ์Šคํ”„๋ง์€ ์ข‹์€ ๋Œ€์‹ , ์„ค์ •์ด ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ๋Š”๋ฐ, ์ด๋ฅผ ๋ณด์™„ํ•˜์—ฌ ๋‚˜์˜จ ๊ฒƒ์ด ์Šคํ”„๋ง ๋ถ€ํŠธ์ด๋‹ค.

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


์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ

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

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

์Šคํ”„๋ง์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์Šคํ”„๋ง ๋ถ€ํŠธ์ด๋‹ค.

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

์Šคํ”„๋ง์ด๋ผ๋Š” ๋‹จ์–ด?

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

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

์Šคํ”„๋ง์„ ์™œ ๋งŒ๋“ค์—ˆ์„๊นŒ?

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

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


๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํŠน์ง•

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

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

๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ˜‘๋ ฅ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์œ ์—ฐํ•˜๊ณ  ๋ณ€๊ฒฝ์— ์šฉ์ดํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•Œ๋ฌธ์— ๋Œ€๊ทœํฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

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

๋ ˆ๊ณ  ๋ธ”๋ก์„ ์กฐ๋ฆฝํ•˜๋“ฏ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์ด๋‹ค. ์ฆ‰, ๋‹คํ˜•์„ฑ์ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ต์‹ฌ์ด๋‹ค.

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

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

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

์ž๋ฐ” ์–ธ์–ด์˜ ๋‹คํ˜•์„ฑ

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

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

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

์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ - ์ •๋ฆฌ

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

์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ - ํ•œ๊ณ„

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

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

๋‹คํ˜•์„ฑ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค! ์Šคํ”„๋ง์€ ๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ด์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค. ์Šคํ”„๋ง์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” IoC, DI ๋Š” ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์น˜ ๋ ˆ๊ณ  ๋ธ”๋Ÿญ์„ ์กฐ๋ฆฝํ•˜๋“ฏ์ด ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

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


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


๋‹ค์‹œ ์Šคํ”„๋ง์œผ๋กœ

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

  • DI - ์˜์กด์„ฑ ์ฃผ์ž…
  • DI ์ปจํ…Œ์ด๋„ˆ ์ œ๊ณต ์ด๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์—†์ด ๊ธฐ๋Šฅ ํ™•์žฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ์ฆ‰, ์‰ฝ๊ฒŒ ๋ถ€ํ’ˆ์„ ๊ต์ฒดํ•˜๋“ฏ์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ •๋ฆฌ

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

์Šคํ”„๋ง ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ


์›น์„ ๊ฐœ๋ฐœํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•

  • ์ •์  ์ปจํ…์ธ 
  • MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„
  • API

์ •์  ์ปจํ…์ธ 

resources/static ๊ฒฝ๋กœ์— ์ •์  html ์ปจํ…์ธ ๋ฅผ ์ €์žฅํ•œ๋‹ค. resources/static/hello-static.html

์ดํ›„ http://localhost:8080/hello-static.html ์ ‘์† ์‹œ ์ €์žฅํ•œ ์ปจํ…์ธ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„

@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
    model.addAttribute("name", name);
    return "hello-template";
}

Controller ์— Mapping ๋œ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

model ์— ์š”์ฒญ ์‹œ ์ „๋‹ฌ ๋ฐ›์€ ์ธ์ž RequestParam ์„ ์ถ”๊ฐ€ํ•˜์—ฌ hello-template ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

API

  • @ResponseBody ์‚ฌ์šฉ ์‹œ viewResolver ๋Œ€์‹ , HttpMessageConverter ๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

@ResponseBody ๋ฌธ์ž ๋ฐ˜ํ™˜

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
    return "hello " + name;
}
  • @ResponseBody ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP Body ์— ๋ฌธ์ž ๋‚ด์šฉ์„ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • StringHttpMessageConverter ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

@ResponseBody ๊ฐ์ฒด ๋ฐ˜ํ™˜

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
    Hello hello = new Hello();
    hello.setName(name);
    return hello;
}
  • @ResponseBody ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ ์‹œ, ๊ฐ์ฒด๊ฐ€ JSON ์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
    • MappingJackson2HttpMessageConverter ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.