โœ๏ธ TIL

์œ ๋ฐ๋ฏธ ์ทจ์—…๋ถ€ํŠธ์บ ํ”„ - ํ”„๋ก ํŠธ์—”๋“œ&๋ฐฑ์—”๋“œ : 27์ผ์ฐจ TIL

Yuuuki 2024. 1. 25. 21:05

 

 

 

Spring Framework?

์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

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

Spirng Framework๋Š” ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์ง์ ‘ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ ๊ทธ๋ฆฌ๊ณ  ๋ผ์ดํ”„ ์‚ฌ์ดํด์„๊ด€๋ฆฌํ•˜๋ฉฐ ์–ธ์ œ๋“  Spring ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋Š” Spirng์ด IOC ๊ธฐ๋ฐ˜์˜ Framework์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

Spring Framework๋Š” IOC๊ธฐ๋ฐ˜์ด๋‹ค.

 

IOC๋Š” Inversion of Control์˜ ์•ฝ์ž๋กœ ๋ง ๊ทธ๋Œ€๋กœ ์ œ์–ด์˜ ์—ญ์ „์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ œ์–ด์˜ ์—ญ์ „์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?     

 

์ผ๋ฐ˜์ ์œผ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์€

๊ฐ์ฒด ๊ฒฐ์ • ๋ฐ ์ƒ์„ฑ -> ์˜์กด์„ฑ ๊ฐ์ฒด ์ƒ์„ฑ -> ๊ฐ์ฑ„ ๋‚ด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค. 

์ด๋Š” ๊ฐ ๊ฐ์ฒด๋“ค์ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์—…์— ์ง์ ‘์ ์œผ๋กœ ์ฐธ์—ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ๋ชจ๋“  ์ž‘์—…์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๊ตฌ์กฐ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

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

์ฆ‰, ์ œ์–ด์˜ ํ๋ฆ„์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํŠธ๋กค ํ•˜์ง€ ์•Š๊ณ  ์œ„์ž„ํ•œ ํŠน๋ณ„ํ•œ ๊ฐ์ฒด์— ๋ชจ๋“  ๊ฒƒ์„ ๋งก๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

IOC๋ž€ ๊ธฐ์กด ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ์ž‘์—…์„ ์ œ์–ดํ•˜๋˜ ๊ฒƒ์„ ํŠน๋ณ„ํ•œ ๊ฐ์ฒด์— ๋ชจ๋“  ๊ฒƒ์„ ์œ„์ž„ํ•˜์—ฌ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์ƒ๋ช…์ฃผ๊ธฐ ๋“ฑ ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด ๊ฐ„ ๊ฒƒ์„ IOC, ์ œ์–ด์˜ ์—ญ์ „ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

IOC์˜ ๊ตฌ์„ฑ์š”์†Œ DI์™€ DL

 

DL(Dependency Lookup) - ์˜์กด์„ฑ ๊ฒ€์ƒ‰

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

 

DI(Dependency Injection) - ์˜์กด์„ฑ ์ฃผ์ž… 

์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์˜์กดํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ ๋˜๊ฒŒ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜์กด์„ฑ ์ด๋ž€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์–ด๋– ํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด IOC์—์„œ์˜ DI๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๋ฐ”๋กœ ๊ฐ ํด๋ž˜์Šค ์‚ฌ์ด์— ํ•„์š”๋กœ ํ•˜๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ๋นˆ ์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

 

 

Spring Framework์˜ ํŠน์ง• POJO

 
POJO(Plain Old Java Object) ๋ž€ ๋ง ๊ทธ๋Œ€๋กœ ํ‰๋ฒ”ํ•œ ์ž๋ฐ” ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค. 
์ด์ „ EJB(Enterprise JavaBeans)๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ๋˜์—ˆ์—ˆ๋Š”๋ฐ EJB๋Š” ํ•œ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•œ ๋ณต์žกํ•œ ๋กœ์ง์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ ์กฐ๋ช…์„ ๋ฐ›์€๊ฒŒ POJO์ž…๋‹ˆ๋‹ค. POJO๋Š” gettet/setter๋ฅผ ๊ฐ€์ง„ ๋‹จ์ˆœ ์ž๋ฐ” ์˜ค๋ธŒ์ ํŠธ๋กœ ์ •์˜๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ์ˆœ ์˜ค๋ธŒ์ ํŠธ๋Š” ์˜์กด์„ฑ์ด ์—†๊ณ  ์ถ”ํ›„ ํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•œ ์œ ์—ฐ์„ฑ์˜ ์žฅ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ์ ๋“ค๋กœ ์ธํ•ด ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๋‹ค์–‘ํ•œ ์„ค๊ณ„์™€ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์ง€๊ณ  POJO์˜ ๊ธฐ๋ฐ˜์˜ Framework๊ฐ€ ์กฐ๋ช…์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.