Spring Framework

moon.kickยท2025๋…„ 2์›” 18์ผ

๐Ÿ’ก Spring์„ ๊ณต๋ถ€ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์›น MVC ํŒจํ„ด๊ณผ ํ•จ๊ป˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ๊นŠ์ด ์ดํ•ดํ•˜๋Š” ๊ณผ์ •! ๐Ÿš€

๐Ÿ”น Spring Framework์˜ ์ฃผ์š” ํŠน์ง•

5๏ธโƒฃ Spring MVC (Model-View-Controller)
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Spring์˜ ๋Œ€ํ‘œ์ ์ธ ์›น ํ”„๋ ˆ์ž„์›Œํฌ.
MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ž„.
Model: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ.
View: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด (JSP, Thymeleaf ๋“ฑ).
Controller: ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐ.
6๏ธโƒฃ Spring Boot
Spring Framework๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ํ”„๋กœ์ ํŠธ.
๊ธฐ๋ณธ ์„ค์ •๊ณผ ์„œ๋ฒ„ ์„ค์ •์ด ์ž๋™ํ™”๋˜์–ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋น ๋ฆ„.
"์„ค์ •๋ณด๋‹ค๋Š” ๊ด€๋ก€(Convention over Configuration)" ์›์น™์„ ๋”ฐ๋ฆ„.
๐Ÿ›  Spring Framework์™€ Spring Boot ์ฐจ์ด์ 
ํ•ญ๋ชฉ Spring Framework Spring Boot
์„ค์ • ๋ฐฉ์‹ XML ๋˜๋Š” Java Config ๊ธฐ๋ณธ ์„ค์ • ์ž๋™ํ™” (YAML, application.properties)
๋‚ด์žฅ ์„œ๋ฒ„ ์—†์Œ (Tomcat, Jetty ๋ณ„๋„ ์„ค์ •) Tomcat ๋‚ด์žฅ (์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅ)
ํ”„๋กœ์ ํŠธ ๋ณต์žก๋„ ์ง์ ‘ ์„ค์ •ํ•ด์•ผ ํ•  ์š”์†Œ ๋งŽ์Œ ์ดˆ๊ธฐ ์„ค์ •์ด ๊ฐ„ํŽธ
๋ฐฐํฌ ๋ฐฉ์‹ WAR ํŒŒ์ผ ์‚ฌ์šฉ JAR๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ (๋…๋ฆฝ ์‹คํ–‰ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€์›)
์ฃผ์š” ๋ชฉ์  ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜, ์ปค์Šคํ…€ ์„ค์ • ๋น ๋ฅธ ๊ฐœ๋ฐœ ๋ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)

1๏ธโƒฃ IoC (Inversion of Control, ์ œ์–ด์˜ ์—ญ์ „)
๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹น.
๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด, ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.

2๏ธโƒฃ DI (Dependency Injection, ์˜์กด์„ฑ ์ฃผ์ž…)
๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ๋•Œ, ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์คŒ.
๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ž„.

3๏ธโƒฃ AOP (Aspect-Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
๋กœ๊ทธ ์ถœ๋ ฅ, ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(Cross-Cutting Concern) ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.
์˜ˆ) ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋กœ๊น…, ๊ถŒํ•œ ์ฒดํฌ ๋“ฑ์„ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์ ์šฉ ๊ฐ€๋Šฅ.

4๏ธโƒฃ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ (Transaction Management)
Spring์˜ ์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜(Declarative Transaction) ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์„ ์‰ฝ๊ฒŒ ์ œ์–ด.
๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํŠธ๋žœ์žญ์…˜์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ.

๐Ÿฆ Spring Framework ํ™œ์šฉ ์˜ˆ์‹œ

โœ” ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ ์œ ์ง€๋ณด์ˆ˜
โœ” ๊ธˆ์œต๊ถŒ, ๊ธฐ์—… ์‹œ์Šคํ…œ (๋Œ€ํ˜• ์‹œ์Šคํ…œ์˜ ๊ด€๋ฆฌ)
โœ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ (Spring MVC)
โœ” REST API ๊ฐœ๋ฐœ (Spring Boot + Spring Web)
โœ” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (MSA) ๊ตฌ์ถ•
โœ” ๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ (Spring Data + JPA)

์ •๋ฆฌ

Spring Framework๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์›น ๊ฐœ๋ฐœ(Spring MVC), ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ์—ฐ๋™(Spring Data) ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, Spring Boot๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„ค์ •์„ ์ž๋™ํ™”ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ธฐ์กด ์‹œ์Šคํ…œ์„ ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ Spring Framework๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

profile
@mgkick

0๊ฐœ์˜ ๋Œ“๊ธ€