๐Ÿ’ป์›น(Web)

Spring

stonesy 2024. 12. 2. 00:40
728x90

๐Ÿ“ŒSpring

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

 

์ฃผ์š” ํŠน์ง•

 

 

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

 

์ฃผ์š” ํŠน์ง•

1. ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ

์Šคํ”„๋ง์€ ์ž๋ฐ”๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž๋ฐ” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ๊ณผ ๊ฐ™์€ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•œ๋‹ค. 

์–ธ์ œ๋“ ์ง€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๊ฐ์ฒด๋“ค์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. POJO(Plain Old Java Object)

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

 

3. PSA(Portable Service Abstraction)

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

4. IoC(Inversion of Control) / DI(Dependency Injection)

  • IoC๋Š” ์Šคํ”„๋ง์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์ด๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ Object ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ
  • ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋Š์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ๋‹ค(loose coupling)
  • IoC์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ DI์ด๋‹ค.
  • ์ž๋ฐ”์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ์˜์กด๊ด€๊ณ„์— ์žˆ์–ด ๋ชจ๋“  ์ œ์–ด๊ถŒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์—ˆ๋‹ค.
  • Servlet๊ณผ EJB๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด์„œ ๊ธฐ์กด์˜ ์ œ์–ด๊ถŒ์ด Servlet Container ๋ฐ EJB Container์— ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์Šคํ”„๋ง์—์„œ๋„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ƒ์„ฑ๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Spring Container, IoC Container๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

DI๋Š” ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋Š” ์™ธ๋ถ€์—์„œ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์„ค์ •

์Šคํ”„๋ง์€ ์„ค์ •ํŒŒ์ผ์ด๋‚˜, ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ์ฒด๋Š” ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

5. AOP(Aspect Oriented Programming)

  • ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชจ๋“ˆ์„ฑ์„ ํ–ฅ์ƒ
  • ๊ณตํ†ต ๋ชจ๋“ˆ์„ ์—ฌ๋Ÿฌ ์ฝ”๋“œ์— ์‰ฝ๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅ

 

6. ๊ธฐํƒ€

  • ์Šคํ”„๋ง์€ ์˜์†์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ API๋ฅผ ์ง€์›ํ•œ๋‹ค. JDBC๋ฅผ ๋น„๋กฏํ•˜์—ฌ iBatis, myBatis, Hibernate, JPA ๋“ฑ DB ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๋™์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋”ฐ.
  • ์Šคํ”„๋ง์€ ๋‹ค์–‘ํ•œ API์— ๋Œ€ํ•œ ์—ฐ๋™์„ ์ง€์›ํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ API๋ฅผ ์„ค์ • ํŒŒ์ผ๊ณผ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. 

 

Spring Core ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, Core์ปจํ…Œ์ด๋„ˆ์˜  ์ฃผ์š”์ปดํฌ๋„ŒํŠธ๋Š” BeanFactory์ด๋‹ค.
Spring Context ๊ตญ์ œํ™”๋œ ๋ฉ”์‹œ์ง€, Application ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ, ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋“ฑ์„ ์ง€์›ํ•จ์œผ๋กœ์จ, BeanFactory์˜ ๊ฐœ๋…์„ ํ™•์žฅํ•œ๋‹ค.
Spring AOP ์„ค์ • ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด AOP๊ธฐ๋Šฅ์„ ์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ณผ ์ง์ ‘ ํ†ตํ•ฉ์‹œํ‚จ๋‹ค.
Spring DAO Spring JDBC DAO์ถ”์ƒ๋ ˆ์ด์–ด๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒค๋”๋“ค์˜ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง๊ณผ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์š”ํ•œ ์˜ˆ์™ธ๊ณ„์ธต์„ ์ œ๊ณตํ•œ๋‹ค.
Spring ORM ์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—ฌ๋Ÿฌ ORMํ”„๋ ˆ์ž„์›Œํฌ์— ํ”Œ๋Ÿฌ๊ทธ์ธ๋˜์–ด, Object Relarional ํˆด(JDO,IBatis)์„ ์ œ๊ณตํ•œ๋‹ค.
Spring Web Web Context module์€ Application Context module ์ƒ์œ„์— ๊ตฌํ˜„๋˜์–ด, Web๊ธฐ๋ฐ˜ Application context๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
Spring Web MVC ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž์ฒด์ ์œผ๋กœ MVC์›Œํฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์Šคํ”„๋ง๋งŒ ์‚ฌ์šฉํ•ด๋„ MVC๊ธฐ๋ฐ˜์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ“ŒContainer

Container๋ž€?

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์‚ฌ์šฉ, ์†Œ๋ฉธ์— ํ•ด๋‹นํ•˜๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๋‹ด๋‹น
  • ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉ์— ํ•„์š”ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

Container์˜ ๊ธฐ๋Šฅ

  • ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ
  • Dependency ๊ฐ์ฒด ์ œ๊ณต
  • Thread ๊ด€๋ฆฌ
  • ๊ธฐํƒ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ

ํ•„์š”์„ฑ

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์™ธ์— ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ
  • ์„œ๋น„์Šค ๊ฐ์ฒด๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ Factory ๋˜๋Š” Singleton ํŒจํ„ด์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋จ

 

https://sujin7837.tistory.com/416

 

[Spring Architecture DI] Spring Framework ๊ตฌ์กฐ

Spring ์‚ผ๊ฐํ˜• Enterprise Application ๊ฐœ๋ฐœ ์‹œ์— ๋ณต์žกํ•จ์„ ํ•ด๊ฒฐํ•˜๋Š” Spring์˜ ํ•ต์‹ฌ 1. POJO(Plain Old Java Object) -ํŠน์ • ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š์€ ๊ฐ์ฒด์ง€ํ–ฅ ์›๋ฆฌ์— ์ถฉ์‹คํ•œ ์ž๋ฐ” ๊ฐ์ฒด -ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์šฉ์ดํ•˜

sujin7837.tistory.com

 

https://java-is-happy-things.tistory.com/37

 

[Spring] Spring์ด๋ž€

Spring ์Šคํ”„๋ง(Spring)์ด๋ž€, ํ”ํžˆ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งํ•˜๋Š”๋ฐ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. - ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ : ์Šคํ”„๋ง์€ ์ž๋ฐ”๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋ฉฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š”

java-is-happy-things.tistory.com

 

728x90

'๐Ÿ’ป์›น(Web)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง  (1) 2024.12.20
JSP(Jakarta Server Pages)  (0) 2024.12.01
Servlet  (0) 2024.12.01
[๊ณตํ†ตํ”„๋กœ์ ํŠธ]5์ฃผ์ฐจ: React Openvidu ๊ตฌํ˜„  (0) 2024.08.11
[React]์ดˆ๊ธฐ์„ธํŒ…  (0) 2024.07.18