Spring๐ŸŒธ

Spring Framework ๊ธฐ๋ณธ, ํŠน์ง•, ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Jeein0313 2023. 4. 2. 14:18

๐Ÿ’กFramework vs Library

 

Java Collection Framework์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณต ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์ด๋‹ค.

์ฆ‰, Framework๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋– ํ•œ ํ‹€์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Framework๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ •ํ•ด์ง„ ๊ทœ์•ฝ์ด ์žˆ์–ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ, ์ž์œ ๋กญ๊ณ  ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ์ด ์–ด๋ ต๊ณ , ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” Framework์— ๋Œ€ํ•œ ํ•™์Šต์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค.

 

Library๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค.

์ฆ‰, ๊ฐœ๋ฐœ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†’์€ ์ง‘ํ•ฉ์ฒด๋กœ์„œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ๋Š” ๊ฒƒ.

 

๊ทธ๋Ÿฌ๋‚˜ Framework๋Š” ์ฝ”๋“œ ์ƒ์—๋Š” ์ง์ ‘์ ์œผ๋กœ ๋ณด์ด์ง€ ์•Š๋Š” ์ƒ๋‹นํžˆ ๋งŽ์€ ์ผ๋“ค์„ ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์„œ๋“œ ๋‚ด์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋‘๋ฉด, Framework์—์„œ ์•Œ์•„์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.

 

์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด Framework์—๊ฒŒ ์žˆ๋Š” ๊ฒƒ(IOC)

 

 

๐Ÿ’กSpring Framework๋งŒ์˜ ์žฅ์ ์€?

 

  • POJO(Plan Old Java Object) ๊ธฐ๋ฐ˜์˜ ๊ตฌ์„ฑ
  • DI(Dependency Injection) ์ง€์›
  • AOP(Aspect Oriented Programming) ์ง€์›
  • Java ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป๋Š” ์žฅ์ ๋“ค

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

 

๋˜, Spring Framework๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์— ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” Framework์˜ ๊ธฐ๋ณธ ๋ชฉ์  ๊ทธ ์ด์ƒ์„ ๋‹ฌ์„ฑ ๊ฐ€๋Šฅ. ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ์ž˜ ๋งž๋Š” ์žฌ์‚ฌ์šฉ๊ณผ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์Šคํ‚ฌ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณด๋‹ค ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์ด ํ•„์š”ํ•œ ๋ณต์žกํ•œ ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์„ ์ œ๋Œ€๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ์Œ.

 

 

 

๐Ÿ’กSpring ์ด์ „์—๋Š”...

 

  • JSP๋ฅผ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ : ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” View ํŽ˜์ด์ง€์ชฝ ์ฝ”๋“œ์™€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„์ชฝ ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ์žˆ๋Š” ํ˜•ํƒœ์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์œผ๋กœ ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ตœ์•…์˜ ๋ฐฉ์‹.
  • ์„œ๋ธ”๋ฆฟ(Servlet)์„ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ :JSP ๋ฐฉ์‹ ์—ญ์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ Servlet ๋ฐฉ์‹์„ ์‚ฌ์šฉ. Spring์„ ์‚ฌ์šฉํ•œ ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Servlet์„ ์‚ฌ์šฉํ•จ. (Servlet์„ ์œ„ํ•œ java ์ฝ”๋“œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ๋ณ„๋„์˜ Java ํด๋ž˜์Šค๋กœ ๊ด€๋ฆฌ๋จ) ์„œ๋ธ”๋ฆฟ ๋ฐฉ์‹์˜ ์ฝ”๋“œ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ์˜ค๋Š” ์ž‘์—…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ณ , ์บ๋ฆญํ„ฐ์…‹๋„ ์ง€์ •ํ•ด์•ผ ํ•จ.
  • Spring MVC : Spring MVC ์„ค์ • ํŒŒ์ผ web.xml์˜ ๋ณต์žกํ•œ ์„ค์ •๊ณผ์ •..
  • Spring Boot : Spring MVC ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ๋ฅผ Spring Boot ๊ธฐ๋ฐ˜์—์„œ ๊ฐœ์„ . ๋ณต์žกํ•œ ์„ค์ • ์ž‘์—… ๋งˆ์ €๋„ Spring ์ด ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ.

 

cf. 

 

Java ์„œ๋ธ”๋ฆฟ 

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Servlet ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๊ทœ์น™์„ ์ง€ํ‚จ ์ž๋ฐ” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ .(์›น ์š”์ฒญ์— ๋Œ€ํ•ด ๋™์ ์ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ์ž๊ฐ€ URL์„ ์ž…๋ ฅํ•˜๋ฉด HTTP Request๊ฐ€ Servlet Container๋กœ ์ „์†ก๋˜๊ณ , ์š”์ฒญ์„ ์ „์†ก๋ฐ›์€ Servlet Container๋Š” HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ. web.xml์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL์ด ์–ด๋А ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€๋ฅผ ์ฐพ๊ณ , ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์—์„œ service ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ GET,  POST ์—ฌ๋ถ€์— ๋”ฐ๋ผ doGet(), doPost() ๋กค ํ˜ธ์ถœํ•จ. doGet(), doPost() ๋ฉ”์„œ๋“œ๋Š” ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ ํ›„ HttpServletResponse ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋ณด๋ƒ„. ์‘๋‹ต์ด ๋๋‚˜๋ฉด HttpServletRequest, HttpServletResponse ๋‘ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋จ.

 

์„œ๋ธ”๋ฆฟ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์œ„ํ•œ 3๊ฐ€์ง€ ํ•„์ˆ˜ ๋ฉ”์†Œ๋“œ : init() (์„œ๋ธ”๋ฆฟ ์ƒ์„ฑ) -> service() (์ฒ˜๋ฆฌ ์ง„ํ–‰) -> destroy() (์„œ๋ธ”๋ฆฟ ์‚ญ์ œ)

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ 

์„œ๋ธ”๋ฆฟ์ด ๋™์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณต. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์›น ์„œ๋ฒ„์™€ ์†Œ์ผ“์œผ๋กœ ํ†ต์‹ .

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ•  

1. ์›น ์„œ๋ฒ„์™€ ํ†ต์‹ 

2. ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ

3. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์ง€์› ๋ฐ ๊ด€๋ฆฌ

4. ์„ ์–ธ์ ์ธ ๋ณด์•ˆ ๊ด€๋ฆฌ

 

๋™์ž‘ ๋ฐฉ์‹

1. ์›น ์„œ๋ฒ„๊ฐ€ HTTP ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.

2. ์›น์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•จ.

3. ์„œ๋ธ”๋ฆฟ์ด ์ปจํ…Œ์ด๋„ˆ์— ์—†๋‹ค๋ฉด, 

 

JSP(Java Server Page) : Java ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” HTML ์ฝ”๋“œ๋กœ, HTML ์†์—์„œ ์ž๋ฐ”์ฝ”๋“œ๋Š” <% ์†Œ์Šค์ฝ”๋“œ %> ๋˜๋Š” <%= ์†Œ์Šค์ฝ”๋“œ =%>ํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐ. ์„œ๋ธ”๋ฆฟ ๊ทœ์น™์ด ๊ฝค ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— JSP๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๊ณ , JSP๋Š” WAS์— ์˜ํ•ด์„œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜๋˜์–ด ์‚ฌ์šฉ๋˜์–ด ์ง.

 

 

 

๐Ÿ’กSpring Framework์˜ ํŠน์ง•

 

  • POJO(Plain Old Java Object)
  • IoC(Inversion Of Control)
  • AOP(Aspect Object Programming)
  • PSA(Portable Service Abstraction)

 

 

 

๐Ÿ’กPOJO(Plain Old Java Object) ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

Spring ์‚ผ๊ฐํ˜•

 

POJO๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋‹จ์ˆœํžˆ ์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐ์ฒด๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ•ด์„œ, POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์—†๋‹ค.

๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ทœ์น™์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

  • Java๋‚˜ Java ์Šคํ…(์‚ฌ์–‘)์— ์ •์˜๋œ ๊ฒƒ ์ด์™ธ์—๋Š” ๋‹ค๋ฅธ ๊ธฐ์ˆ ์ด๋‚˜ ๊ทœ์•ฝ์— ์–ฝ๋งค์ด์ง€ ์•Š์•„์•ผ ํ•จ. 
    • ํŠน์ • ๊ธฐ์ˆ ์„ ์ƒ์†ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, ๋‚˜์ค‘์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์–ด ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํŠน์ • ๊ธฐ์ˆ ์„ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์ „๋ถ€ ๋‹ค ์ผ์ผ์ด ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ด์•ผ ํ•จ.
    • Java๋Š” ํด๋ž˜์Šค๊ฐ„ ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•œ ๋ฒˆ ์ƒ์†์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋จ.
  • ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†์ ์ด์ง€ ์•Š์•„์•ผ ํ•จ.
    • ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)์ธ ์•„ํŒŒ์น˜ ํ†ฐ์บฃ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž.
      ์ˆœ์ˆ˜ Java๋กœ ์ž‘์„ฑํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋‚ด์—์„œ Tomcat์ด ์ง€์›ํ•˜๋Š” API๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์‹œ์Šคํ…œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์–ด์„œ Tomcat์„ Zetty๋ผ๋Š” ๋‹ค๋ฅธ Servlet Container๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Tomcat API ์ฝ”๋“œ๋“ค์„ ๋ชจ๋‘ ๊ฑท์–ด๋‚ด๊ณ  Zetty๋กœ ์ˆ˜์ •ํ•˜๋˜์ง€ ์ตœ์•ฝ์˜ ๊ฒฝ์šฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ถ€๋ฅผ ๋œฏ์–ด ๊ณ ์ณ์•ผ๋ ์ง€๋„ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์— ์ง๋ฉดํ•  ์ˆ˜๋„ ์žˆ์Œ

 

POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํ•„์š”ํ•œ ์ด์œ 

 

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

 

 

POJO์™€ Spring์˜ ๊ด€๊ณ„

 

Spring์€ POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•˜๋Š” Framework.

๊ทธ๋ฆฌ๊ณ  ์ตœ๋Œ€ํ•œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  Spring์—์„œ๋Š” ์„ธ ๊ฐ€์ง€ ๊ธฐ์ˆ  ์ง€์›ํ•œ๋‹ค. (IoC/DI, AOP, PSA)

 

 

์ •๋ฆฌ)
- POJO๋ž€ ์ˆœ์ˆ˜ํ•œ Java ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
- POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ์ˆœ์ˆ˜ Java ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์ด๋‚˜ ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค.
- POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠน์ • ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ง€์‹๋ณด๋‹ค๋Š” JDK๊ณผ API์— ๋Œ€ํ•œ ์ง€์‹๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์‚ฌ๊ณ ๋ฐฉ์‹๊ณผ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ํ›ˆ๋ จ์ด ์šฐ์„ ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค.
- Spring Framework๋Š” POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•˜๊ธฐ ์œ„ํ•ด IoC/DI, AOP, PSA๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•œ๋‹ค.

 

 

cf.

 

๊ฐ์ฒด ์ง€ํ–ฅ ๊ธฐ๋ณธ ์›์น™, SOLID

 

  • SRP(Single Responsibility Principle) ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™ : ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์€ ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™.
  • OCP(Open Close Principle) ๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™ : ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™. ๋ณ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ž˜ ๊ตฌ๋ถ„ํ•˜๋ฉด OCP๋ฅผ ์ง€ํ‚ค๊ธฐ ์šฉ์ด. ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์˜ ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋А์Šจํ•˜๊ฒŒ ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“ฌ.
  • LSP(The Liskov Substitution Principle) ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜์˜ ์›์น™ : subclass์˜ ๊ฐ์ฒด๋Š” superclass์˜ ์ฐธ์กฐ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด์„œ superclass์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™.(OCP ์›์น™์˜ ๊ธฐ๋ฐ˜์ด ๋จ)
    • ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ์ž์‹ ํด๋ž˜์Šค๋Š” ์ตœ์†Œํ•œ ์ž์‹ ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋Š” ์ˆ˜ํ–‰์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ.(๋‹คํ˜•์„ฑ์˜ ์›๋ฆฌ)
  • ISP(Interface Segregation Principle) ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์˜ ์›์น™ : ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ์œ„ํ•œ ์›์น™. ์ฆ‰, ์ผ๋ฐ˜์ ์ธ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šฌ ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๋Š” ๊ฒƒ.
  • DIP(Dependency Inversion Principle) ์˜์กด์„ฑ ์—ญ์ „์˜ ์›์น™ : ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์ฒด ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์ถ”์ƒํ™”(์ผ๋ฐ˜ํ™”) ๋œ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ. ๊ตฌ์ฒด ํด๋ž˜์Šค๊ฐ€ ์ถ”์ƒ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋ฏ€๋กœ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์—ญ์ „๋œ ํ˜•ํƒœ.

 

 

 

IoC(Inversion of Control)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์„ Spring์ด ๊ฐ€์ง.

 

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

์ด ๊ฒฝ์šฐ์—๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ์„ ์ œ์–ดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ๋„๊ถŒ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์Œ. ๋ฐ”๋กœ ์„œ๋ธ”๋ฆฟ๊ณผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ IoC์ด ๊ฐœ๋…์ด ์ ์šฉ๋จ.

 

 

DI(Dependency Injection)

 

IoC๋Š” ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ . ๋””์ž์ธ ํŒจํ„ด, ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ๋“ฑ์— ์ ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฐœ๋…์ธ๋ฐ ๋ฐ˜ํ•ด DI(Dependency Injection)์€ IoC ๊ฐœ๋…์„ ์กฐ๊ธˆ ๊ตฌ์ฒดํ™”์‹œํ‚จ ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ.

 

์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜๋”๋ผ๋„ ์˜์กด์„ฑ ์ฃผ์ž…์˜ ํ˜œํƒ์„ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค๋“ค ๊ฐ„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)์ด ํ•„์š”ํ•จ. -> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

 

 

AOP(Aspect Oriented Programming)

 

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

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๊ธฐ ๋งˆ๋ จ์ธ๋ฐ, ์ด๋Ÿฌํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ฐ”๋กœ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(Cross-cutting Concern)์ด๋ผ๊ณ  ํ•œ๋‹ค. 

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋งํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋กœ์ง์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(Core Concern)์ด๋ผ๊ณ  ํ•จ.

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

 

 

PSA(Portable Service Abstraction)

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”์ƒํ™”๋Š” ์–ด๋–ค ํด๋ž˜์Šค์˜ ๋ณธ์งˆ์ ์ธ ํŠน์„ฑ๋งŒ์„ ์ถ”์ถœํ•˜์—ฌ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

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

PSA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

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

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„ํ‚คํ…์ฒ˜ ์œ ํ˜• ์ค‘ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(N-ํ‹ฐ์–ด)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

N-๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜๋Š” ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ๋…ผ๋ฆฌ์ , ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ๋…์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ API ๊ณ„์ธต, ์„œ๋น„์Šค ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

 

  • API ๊ณ„์ธต : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๋Š” ๊ณ„์ธต
  • ์„œ๋น„์Šค ๊ณ„์ธต : API ๊ณ„์ธต์—์„œ ์ „๋‹ฌ ๋ฐ›์€ ์š”์ฒญ์„ ์—…๋ฌด ๋„๋ฉ”์ธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๋น„์ฆˆ๋‹ˆ์Šค์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต : ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์—์„œ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์ธต

 

 

์•„ํ‚คํ…์ฒ˜๋กœ ๋ณด๋Š” Spring Framework ๋ชจ๋“ˆ ๊ตฌ์„ฑ

์œ„ ๊ทธ๋ฆผ์€ Spring Framework์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ๋“ค์„ ์•„ํ‚คํ…์ฒ˜๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ.

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

 

 

 

Spring Boot๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • XML ๊ธฐ๋ฐ˜์˜ ๋ณต์žกํ•œ ์„ค๊ณ„ ๋ฐฉ์‹์ด ํ•„์š” ์—†์–ด์ง.
  • ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ž๋™ ๊ด€๋ฆฌ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์˜ ์ž๋™ ๊ตฌ์„ฑ
  • ํ”„๋กœ๋•์…˜๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†์‰ฌ์šด ๋นŒ๋“œ
  • ๋‚ด์žฅ๋œ WAS๋ฅผ ํ†ตํ•œ ์†์‰ฌ์šด ๋ฐฐํฌ