๐Ÿ“• CS ์Šคํ„ฐ๋””/Java, Spring

[Spring] ๐Ÿƒ ์™œ Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๊ฐ€?

iknowDev 2023. 2. 25. 00:47

 

Java ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ข…๋ฅ˜๋Š” Hibernate, Struts, Play Framework, Apache Wicket, Spark, Spring ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ค‘ Java๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ๋Š” Spring์ด ์œ ๋… ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์šฐ๋ฆฌ๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ• ๊นŒ์š”?

 

 

Spring ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ world's most popular ํ•˜๊ธฐ์—?

๐Ÿ“Œ ์šฐ์„  Spring์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

 

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

 

Fortunately Yann stepped up with a suggestion: “Spring”. His reasoning was association with nature (having noticed that I'd trekked to Everest Base Camp in 2000); and the fact that Spring represented a fresh start after the “winter” of traditional J2EE.

Spring Framework: The Origins of a Project and a Name

 

Apache์žฌ๋‹จ์˜ ๋ฐœํ‘œ์— ๋”ฐ๋ฅด๋ฉด Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” J2EE๋ฅผ ๋Œ€์ฒดํ•  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์†Œ๊ฐœ๋˜๋ฉฐ ์ „ํ†ต์ ์ธ J2EE(EJB)๋ผ๋Š” '๊ฒจ์šธ'์„ ๋„˜์–ด ์ƒˆ๋กœ์šด ์‹œ์ž‘์„ ์˜๋ฏธํ•˜๋Š” '๋ด„'์œผ๋กœ ์†Œ๊ฐœ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ“Œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์˜ ์„ ํƒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋˜ Spring ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ์–ด๋– ํ•œ ์žฅ์ ์ด ์žˆ์„๊นŒ์š”?

๊ฒฝ๋Ÿ‰ํ™” (Lightweight)

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

DI (Dependency Injection)

  1. Spring์€ DI๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. DI๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์–ด ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AOP (Aspect Oriented Programming)

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

MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ

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

ํ†ตํ•ฉ (Integration)

  1. Spring์€ ๋‹ค์–‘ํ•œ ํ†ตํ•ฉ ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JMS, JDBC, JPA, JMX, RMI ๋ฐ ๋‹ค์–‘ํ•œ ์›น ์„œ๋น„์Šค ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๋ฉฐ, ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹œ์Šคํ…œ๊ณผ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ (Security)

  1. Spring์€ ๋ณด์•ˆ ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Spring Security๋Š” ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ, ์ธ๊ฐ€ ๋ฐ SSO (Single Sign-On)

 

 

 

 

 

Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์€๋งŒํผ ํ™˜๊ฒฝ์„ค์ •์ด ๋ณต์žกํ•œ ํŽธ์ž…๋‹ˆ๋‹ค.

์ด์— ์–ด๋ ค์›€์„ ๋А๋ผ๋Š” ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด Spring์„ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ Spring Boot ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

Spring Boot๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, Spring ๊ฐœ๋ฐœ์„ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Spring Boot ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ ์žฅ์ 

  1. Dependency ํŽธ์˜
  2. Configuration
  3. AutoConfiguration (@SpringBootApplication)
  4. ํŽธ๋ฆฌํ•œ ๋ฐฐํฌ (Tomcat ์ด๋‚˜ Jetty ๊ฐ™์€ ๋‚ด์žฅ WAS๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— jar ํŒŒ์ผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฐฐํฌ)

 

 

 

 

๐Ÿ“Œ ์ •๋ฆฌ๋ฅผ ํ•˜์ž๋ฉด ์™œ Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ• ๊นŒ์š”?

๊ธฐ์กด ์ž๋ฐ”๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค(EJB, JavaEE)๋ณด๋‹ค ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐ„๋‹จํ•˜๋ฉฐ, ์œ ์—ฐํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ€์กŒ๊ณ , ํŠธ๋ Œ๋“œ๋ฅผ ์ž˜ ๋ฐ˜์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

 

์ž๋ฐ” ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์„ ํ˜ธํ•˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๋„ ๋งŽ์€ ๊ธฐ๋Šฅ๊ณผ ์œ ์šฉํ•œ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ๊ณ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ, ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ธฐ์ˆ  ์ˆ˜์ค€, ๊ธฐ์—…์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

Why Spring?

What Is Spring Framework?

Why Choose Spring as Your Java Framework?