๐Ÿค” ์Šคํ”„๋ง๊ณผ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ž€?

๊น€์„ฑ๊ธธยท2023๋…„ 3์›” 22์ผ
1

Spring Framework

์ž๋ฐ” EE ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ฒฝ๋Ÿ‰ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด(Jsp, Hibernate.. ๋“ฑ) ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•œ๋‹ค.

Spring์˜ ํŠน์ง•

1. POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€ํ–ฅ

์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

POJO๋ž€? Plain Old Java Object, ์ˆœ์ˆ˜ Java๋งŒ์„ ํ†ตํ•ด์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ˆœ์ˆ˜ Java๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์™ธ๋ถ€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ 
Java์˜ ์ŠคํŽ™์— ์ •์˜๋œ ๊ธฐ์ˆ ๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

public class Person {

	String name;
    
    public String getName() {
    	return name;
    }
    
    public void setName(String name) {
    	this.name = name;
    }
}

์œ„์— ์ฝ”๋“œ๋Š” ํ•„๋“œ์™€ getter, setter๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ POJO์˜ ์˜ˆ์‹œ์ด๋‹ค.

POJO๋Š” ์ดํ•ดํ–ˆ๋Š”๋ฐ ์™œ Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€ํ–ฅํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

๋ฐ”๋กœ ์™ธ๋ถ€ ๊ธฐ์ˆ ์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ  ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€ํ™”์™€ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ๋งŒ์•ฝ Person ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์™ธ๋ถ€ ๊ธฐ์ˆ ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๊ฑฐ๋‚˜, ๊ฐœ์„ ๋œ ์‹  ๊ธฐ์ˆ ์ด ๋“ฑ์žฅํ•œ๋‹ค๋ฉด Person ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ๋œฏ์–ด ๊ณ ์ณ์•ผํ•˜๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— Spring ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” POJO๋ฅผ ์ง€ํ–ฅํ•œ๋‹ค.

2. DI, IoC ์ปจํ…Œ์ด๋„ˆ

Java๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ์จ ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ฃผ๋Š”๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
Spring์ด ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋งบ์„๋•Œ ๋„์›€์„ ์ฃผ๋Š”๊ฒƒ์ด DI(Dependency Injection)์ด๋‹ค.
DI๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ํ›„์— ์ฃผ์ž… ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด DI๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋งŒ๋“ค์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ๊ฐ์ฒด๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ฒŒ ๋˜๊ณ , ๊ฐ์ฒด์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

Ioc(Inversion of Control)๋Š” ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ฑ…์ž„์ง€๊ณ , ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.
์œ„์—์„œ ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋Œ€์ƒ์ด IoC ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.
์˜ˆ์‹œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์ƒ๊ฐํ•ด๋ณด๋ฉด Controller, Service ๊ฐ™์€ ๊ฐ์ฒด๋“ค์„ ๋งŒ๋“ค๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์–ด๋Š ์‹œ์ ์— ํ˜ธ์ถœ๋˜๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š”์ง€ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฐ๋ฐ๋„ ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ž˜ ๋˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค! ์ด๊ฒƒ์€ IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๋‹น ์—ญํ• ์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3. AOP

์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๊ฐ์ฒด A, B, C์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ธ”๋ก ์ƒ‰๊น”์€ ์ค‘๋ณต์ ์ธ ์ฝ”๋“œ๋“ค์ด๋‹ค.
์ด๋•Œ A ๊ฐ์ฒด์˜ ๋…ธ๋ž€ ๋ธ”๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด B, C ๊ฐ์ฒด๋“ค์˜ ์ฝ”๋“œ๋“ค๋„ ์ผ์ผํžˆ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์•ผํ• ๊ฒƒ์ด๋‹ค.
์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์„ AOP๋ผ๊ณ  ํ•œ๋‹ค.

4. PSA

์Šคํ”„๋ง์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ์žˆ์–ด ํ•ต์‹ฌ์ ์ธ ํ”„๋ ˆ์ž„ ์›Œํฌ์ด๋ฉฐ, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๋•Œ์–ด๋†“๊ณ  ๋งํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.
๋งŒ์•ฝ MySQL๋กœ ๊ฐœ๋ฐœ์„ ๋๋‚ธ ์ƒํ™ฉ์ธ๋ฐ MariaDB๋กœ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ 
ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž, ๊ทธ๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๊ด€๋ จ๋œ ๋ชจ๋“  ์ฝ”๋“œ๋“ค์„ ์ˆ˜์ •ํ•ด์•ผํ• ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ํ•œ๋ฒˆ๋„ ๊ทธ๋Ÿฐ์ ์ด ์—†๋‹ค! (๊ทธ๋žฌ์„ ์ˆ˜๋„..)

์Šคํ”„๋ง์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ถ”์ƒํ™” ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค! ์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทœ์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ JDBC(Java DataBase Connectivity)๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํŠน์ • ๊ธฐ์ˆ ๋“ค์„ ๋ถ€ํ’ˆ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ๋ผ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ถ”์ƒํ™” ํ•˜์—ฌ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„PSA(Portable Service Abstraction)์ด๋ผ๊ณ  ํ•œ๋‹ค.

Spring Boot

์Šคํ”„๋ง์€ ์•ž์„œ ์„ค๋ช…ํ•œ ๋งŒํผ ๊ธฐ๋Šฅ๋“ค์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ํ™˜๊ฒฝ ์„ค์ •์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•œ๋ฐ, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•œ๊ฒƒ์ด Spring Boot์ด๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋„์™€์ค€๋‹ค.

Spring๊ณผ Spring Boot์˜ ์ฐจ์ด์ 

  1. Spring Boot์—๋Š” Tomcat์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด Tomcat์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „ ๋ณ€๊ฒฝ๋“ฑ ์ˆ˜๊ณ ๋กœ์šด ๋ถ€๋ถ„์„ ๋œ์–ด์ค€๋‹ค.
  2. Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐ๊ฐ์˜ dependency๋“ค์˜ ํ˜ธํ™˜ ๋˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์ผ์ผํžˆ ๋งž์ถฐ์ค˜์•ผ ๋˜์„œ ํ•˜๋‚˜์˜ ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๋ฉด ๋‹ค ์˜ฌ๋ ค์•ผํ•˜๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ Spring Boot๋Š” starter๊ฐ€ ๋ชจ๋“  ๋ฌธ์ œ๋“ค์„ ๋‹ค ํ•ด๊ฒฐํ•ด์ค€๋‹ค.
  3. XML ์„ค์ •์„ ๋”ฐ๋กœ ์•ˆํ•ด์ค˜๋„ ๋œ๋‹ค.
  4. jar ํŒŒ์ผ์„ ์ด์šฉํ•ด ์†์‰ฝ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ™‡โ€โ™‚๏ธ ์ถœ์ฒ˜

์Šคํ”„๋ง๊ณผ ์Šคํ”„๋ง๋ถ€ํŠธ(Spring Boot)ใ…ฃ์ •์˜, ํŠน์ง•, ์‚ฌ์šฉ ์ด์œ , ์ƒ์„ฑ ๋ฐฉ๋ฒ• | ์ฝ”๋“œ์ธ์‚ฌ์ดํŠธ

Spring ๊ณผ Spring Boot ์ฐจ์ด | velog

[Spring] AOP(Aspect Oriented Programming)๋ž€? ์Šคํ”„๋ง AOP๋ž€? | tistory

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