์ƒˆ์†Œ์‹

Back-End/Spring

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

  • -

 

 

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

 

 

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

 

  • Java์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Java์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Java๋กœ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ‹€์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Java์˜ ํ™œ์šฉ๋„๊ฐ€ ๋†’์•„์กŒ๊ณ  ๊ทธ์— ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๋„ ์ปค์กŒ์Šต๋‹ˆ๋‹ค. Java๋ฅผ ์ด์šฉํ•œ ๊ธฐ์ˆ ์€ JSP, MyBatis, JPA ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ์ฆ‰, ์ด ๊ธฐ์ˆ ๋“ค์ด ํ”„๋กœ์ ํŠธ์— ๋งŽ์ด ์“ฐ์ธ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring์€ ์ด ๊ธฐ์ˆ ๋“ค์„ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ์•„๋ฌด๋ฆฌ ๋ถ„์—…์„ ํ•ด๋„ ๋ถ„๋ช… ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Spring์€ ์ด๋Ÿฐ ์ค‘๋ณต์ฝ”๋“œ์˜ ์‚ฌ์šฉ๋ฅ ์„ ์ค„์—ฌ์ฃผ๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Spring์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์“ฐ๊ธฐ ํŽธ๋ฆฌํ•œ๋ฐ ์ด ๋ง์˜ ์˜๋ฏธ๋Š” ์˜คํ”ˆ์†Œ์Šค๋ฅผ ์ข€๋” ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ ์ข‹์€ ๊ตฌ์กฐ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ฒฐ๋ก ์ ์œผ๋กœ Spring์ด๋ž€ Java ๊ธฐ์ˆ ๋“ค์„ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„ ์›Œํฌ์ž…๋‹ˆ๋‹ค.

 

 


 

์Šคํ”„๋ง ์ฃผ์š” ํŠน์ง•

 

  • Spring์€ ๊ฐœ๋ฐœ์„ ๋” ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ ํ‹€(๋ผˆ๋Œ€)์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ๋” ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ๋“ค์ด Spring์— ์กด์žฌํ•˜๋Š”๋ฐ, IoC, Di, AOP ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์„ ๋” ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ๋“ค ์ค‘ ๋ช‡๊ฐ€์ง€๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. IoC(Inversion of Control, ์ œ์–ด ๋ฐ˜์ „)

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

 

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

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ตฌ์„ฑ์š”์†Œ ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์†Œ์Šค์ฝ”๋“œ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์˜ ์„ค์ •ํŒŒ์ผ์„ ํ†ตํ•ด ์ •์˜๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ๋†’์—ฌ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ๊ณณ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“ˆ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๋ผ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๊ทธ ๊ฐ์ฒด๋ฅผ ๋” ์ž˜ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฌด๊ธฐ, ๋ฐฉํŒจ ๋“ฑ ์•„์ดํ…œ์„ ๊ฐ€์ ธ์™€ ๊ฒฐํ•ฉ์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ๋ฌด๊ธฐ์™€ ๋ฐฉํŒจ๋ฅผ ๋บ๋‹ค ๊ผˆ๋‹ค ์ž์œ ์ž์žฌ๋กœ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„์ดํ…œ์„ ๊ฐˆ์•„๋ผ์šฐ๋Š”๋ฐ ์–ด๋–ค ์ƒํ™ฉ์— ๊ตฌ์• ๋ฐ›์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.
  • Java์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์™ธ๋ถ€์˜ Oracle Database๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , JDBC, iBatis, JPA ๋“ฑ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์ด์šฉํ•ด ์งค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ Spring์„ ์ด์šฉํ•˜๋ฉด ๊ทธ๋•Œ๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋บ๋‹ค ๊ผˆ๋‹ค ํ•˜๋ฉด์„œ ์ ์ ˆํ•œ ์ƒํ™ฉ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex) spring-boot-starter-data-jpa, spring-boot-starter-data-mustache

 

3. AOP(Aspect Object Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

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

 

4. POJO(Plain Old Java Object) ๋ฐฉ์‹

  • POJO๋Š” Java EE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ•ด๋‹น ํ”Œ๋žซํผ์— ์ข…์†๋˜์–ด ์žˆ๋Š” ๋ฌด๊ฑฐ์šด ๊ฐ์ฒด๋“ค์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋ฐ˜๋ฐœํ•˜์—ฌ ๋‚˜ํƒ€๋‚œ ์šฉ์–ด์ž…๋‹ˆ๋‹ค.
  • ๋ณ„๋„์˜ ํ”„๋ ˆ์ž„ ์›Œํฌ ์—†์ด Java EE๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์— ๋น„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ƒ์†๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†์–ด ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์šฉ์ดํ•˜๊ณ , ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰, getter/setter๋ฅผ ๊ฐ€์ง„ ๋‹จ์ˆœํ•œ ์ž๋ฐ” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

 

 

ํ•ด๋‹น์ž๋ฃŒ ์ถœ์ฒ˜๋Š” ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•ด์ฃผ์„ธ์š”!

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๐Ÿ‘