๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป Computer/Spring

Spring Framework

 

Spring Framework ๋ž€? (์ถœ์ฒ˜ : https://opentutorials.org/course/2428/13594)

  • Java Platform์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • Java Enterprise ๊ฐœ๋ฐœ์„ ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ฒฝ๋Ÿ‰๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • Java ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ข…์† ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ , ์กฐ๋ฆฝํ•ด์ฃผ๋Š” ๋„๊ตฌ
  • POJO(Plain Old Java Object) BEAN CONTAINNER

*Framework : ์•ฑ๊ฐœ๋ฐœ์— ๋ฐ”ํƒ•์ด ๋˜๋Š” ํ…œํ”Œ๋ฆฟ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋“ค๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ง‘ํ•ฉ

*POJO : ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ. Spring์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•ด์„œ๋„ LifeCycle ๊ด€๋ฆฌ๋ฅผ ์œ„์ž„ํ•˜์—ฌ ์ˆ˜ํ–‰,

           ์ด๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.

 

Spring Framework๋Š” ์•ฝ 20๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ ๋ชจ๋“ˆ๋งˆ๋‹ค 3๊ฐœ์˜ JARํŒŒ์ผ์„ ๊ฐ–๊ฒŒ ๋˜๋Š” ๋ฐ,

๊ฐ๊ฐ compile๋œ .class ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์›๋ณธ ์†Œ์Šค JARํŒŒ์ผ, JavaDoc JARํŒŒ์ผ์ด๋‹ค.

 

| ๋ฐ์ดํ„ฐ ์ ‘๊ทผ(Data Access) ๋ฐ ํ†ตํ•ฉ(Integration)

 

- JDBC, ORM, OXM, JMS, Transactions ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ

- ์„œ๋น„์Šค ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต

 

| ์›น(Web)

 

- ์›น ์ง€ํ–ฅ์ ์ธ ํ†ตํ•ฉ๊ธฐ๋Šฅ(๋ฉ€ํ‹ฐํŒŒํŠธ ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ, ์„œ๋ธ”๋ฆฟ ๋ฆฌ์Šค๋„ˆ์™€ ์›น์ง€ํ–ฅ์•ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ IoC ์ปจํ…Œ์ด๋„ˆ์˜ ์ดˆ๊ธฐํ™”)์„ ์ œ๊ณต

- WebSocket, Serviet, Web, Portlet ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ

 

| AOP(Aspect Oriented Programming)

 

- ๊ด€์ ์ง€ํ–ฅํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ. 

- ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ (Goal)๊ณผ ๋ถ€๊ฐ€์ ์ธ ๊ด€์ (DB์—ฐ๊ฒฐ, ๋กœ๊น…, File I/O ๋“ฑ)์„ ๋‚˜๋ˆ„์–ด ๋ณด๊ณ  ๊ฐ๊ฐ ๋ชจ๋“ˆํ™”ํ•˜๊ฒ ๋‹ค๋Š” ๋œป.

- ์ด๋ ‡๊ฒŒ ๋ชจ๋“ˆํ™”ํ•˜๋ฉด ํ•ต์‹ฌ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์—ฌ๋Ÿฌ ๋ถ€๊ฐ€ ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณตํ†ต์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. (๊ฐ์ฒด๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์ถฐ์ง)

- ์ด๋ฅผ ์œ„ํ•ด Aspect ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ด์คŒ

- Aspect๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ์ฝ”๋“œ์ธ Advice์™€ ์ด๋ฅผ ์–ด๋””์— ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” PointCut๋ฅผ ํ•ฉ์นœ ๊ฐœ๋…

- AOP ๊ฐœ๋…์„ ์ ์šฉํ•˜๋ฉด ํ•ต์‹ฌ๊ธฐ๋Šฅ ์ฝ”๋“œ ์‚ฌ์ด์— ์นจํˆฌ๋œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ Aspect๋กœ ๊ตฌ๋ถ„ํ•ด๋‚ผ ์ˆ˜ ์žˆ์Œ

- ๊ตฌ๋ถ„๋œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ Aspect๋ฅผ Runtime ์‹œ์— ํ•„์š”ํ•œ ์œ„์น˜์— ๋™์ ์œผ๋กœ ์ฐธ์—ฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ

 

| Instrumentation

 

- ์˜ค๋ฅ˜๋ฅผ ์ง„๋‹จํ•˜๊ฑฐ๋‚˜ ์ถ”์ ์ •๋ณด๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด ์„ฑ๋Šฅ ์ •๋„๋ฅผ ๋ชจ๋‹ˆํ„ฐํ•˜๊ฑฐ๋‚˜ ์ธก์ •ํ•˜๋Š” ๊ธฐ๋Šฅ

*ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์‹œ์Šคํ…œ์—์„œ ํŠน์ •ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์ฝ”๋“œ ๋ช…๋ น์–ด ํ˜•ํƒœ๋กœ Instrumentation์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

(ex. ๋ช…๋ น์–ด๋Š” ๋กœ๊น… ์ •๋ณด๋ฅผ ๋ชจ๋‹ˆํ„ฐ์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Œ)

- Spring-Instrumentation ๋ชจ๋“ˆ์€ ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ํด๋ž˜์Šค์™€ ํŠน์ • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋กœ๋” ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณต

 

| Messaging

 

- Spring Framework๋Š” ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜ app์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Message, MessageChannel, MessageHandler๋ฅผ ์ œ๊ณต

- ๊ฐ ๋ชจ๋“ˆ์—๋Š” ๋ฉ”์†Œ๋“œ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋งตํ•‘ํ•˜๊ธฐ ์œ„ํ•œ annotation๋„ ํฌํ•จ๋˜์–ด ์žˆ์Œ

 

| Core Container

 

- ์ธ์Šคํ„ด์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์„ค์ •, ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ด€๋ฆฌ

- ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

- Beans, Core, Context, SpEL(Spring Expression Language) ๋ชจ๋“ˆ๋กœ ์ด๋ฃจ์–ด์ง

- Beans์™€ Core๋ชจ๋“ˆ์€ IoC์™€ DI๋ฅผ ํฌํ•จํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ณตํ•จ

*IoC(Inversion of Control), ์ œ์–ด์˜ ์—ญ์ „

ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ, ์ด ํ๋ฆ„์˜ ์ œ์–ด๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋Š” ๊ฒƒ.

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

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

์‰ฝ๊ฒŒ ๋งํ•ด ๊ฐ์ฒด๋ฅผ setter๋กœ ๋ฐ›์•„์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.

(p.s ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›์„ ๋•Œ, ์˜์กด์„ฑ์ด ๋†’๋‹ค๊ณ  ๋งํ•จ)

 

- Context ๋ชจ๋“ˆ์€ Beans์™€ Core ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ฐ˜ ์œ„์— ๊ตฌ์„ฑ. Beans ๋ชจ๋“ˆ์˜ ํŠน์ง•์„ ์ƒ์†๋ฐ›๊ณ  ๊ตญ์ œํ™”, ์ด๋ฒคํŠธ์ „ํŒŒ, ๋ฆฌ์†Œ์Šค-๋กœ๋”ฉ, ์Šค๋นŒ๋ฆฟ ์ปจํ…Œ์ด๋„ˆ Context์˜ ํˆฌ๋ช…ํ•œ ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•จ.

- SpEL ๋ชจ๋“ˆ์€ runtime์—์„œ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ์กฐํšŒํ•˜๊ณ  ์กฐ์ž‘ํ•จ. ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ ํ• ๋‹น, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ, ๋ฐฐ์—ด๊ณผ ์ปฌ๋ ‰์…˜๊ณผ ์ธ๋ฑ์„œ์˜ context ์ ‘๊ทผ ๋“ฑ ๊ธฐ์›์„ ์ง€์›. ์ผ๋ฐ˜์ ์ธ ๋ฆฌ์ŠคํŠธ ์ง‘ํ•ฉ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฆฌ์ŠคํŠธ์˜ ํˆฌ์˜๊ณผ ์„ ํƒ๋„ ์ง€์›.

 

| Test

 

- Test ๋ชจ๋“ˆ์€ Spring ์ปดํฌ๋„ŒํŠธ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•จ.

- Spring ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ context์˜ ์•ˆ์ •๋œ ๋กœ๋”ฉ๊ณผ ์ด๋Ÿฌํ•œ context์˜ ์บ์‹ฑ์„ ์ œ๊ณต

- ์ฝ”๋“œ๋ฅผ ๊ฒฉ๋ฆฌ๋œ ์ƒํƒœ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ์ œ๊ณต

 

=> Spring์€ DI๋ฅผ ์ด์šฉํ•˜์—ฌ java ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” Framework์ด๋ฉฐ, ์›น ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ด ์›น์„ ํšจ๊ณผ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

 

์ถœ์ฒ˜

https://wordbe.tistory.com/entry/Spring-Java-Spring-%EA%B8%B0%EB%B3%B8

https://opentutorials.org/course/2428/13594

https://dololak.tistory.com/21

https://blog.outsider.ne.kr/729

https://engkimbs.tistory.com/746

https://shlee0882.tistory.com/206

๋ฐ˜์‘ํ˜•