์๋ฐ EE ์ดํ๋ฆฌ์ผ์ด์
์ ๋น๋ ํ ์ ์๋ ์คํ ์์ค ๊ฒฝ๋ ํ๋ ์์ํฌ์ด๋ค.
๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด(Jsp, Hibernate.. ๋ฑ) ๊ธฐ์ ์ ์ ๊ณตํ๋ค.
์คํ๋ง์ ๊ฐ์ฅ ํฐ ํน์ง์ 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์ ์์์ด๋ค.
๋ฐ๋ก ์ธ๋ถ ๊ธฐ์ ์ ์ฝ๋งค์ด์ง ์๊ณ ๋ณด๋ค ์ ์ฐํ๊ฒ ๋ณํ์ ํ์ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ค. ๋ง์ฝ Person ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ธ๋ถ ๊ธฐ์ ์ ๋ ์ด์ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ฑฐ๋, ๊ฐ์ ๋ ์ ๊ธฐ์ ์ด ๋ฑ์ฅํ๋ค๋ฉด Person ๊ฐ์ฒด๋ฅผ ๋ชจ๋ ๋ฏ์ด ๊ณ ์ณ์ผํ๋ ๋ถ์์ฌ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ Spring ํ๋ ์ ์ํฌ๋ POJO๋ฅผ ์งํฅํ๋ค.
Java๋ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก์จ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋๊ฒ์ด ์ค์ํ๋ค.
Spring์ด ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ฅผ ๋งบ์๋ ๋์์ ์ฃผ๋๊ฒ์ด DI(Dependency Injection)
์ด๋ค.
DI๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋ ์ธ๋ถ์์ ์์ฑํ ํ์ ์ฃผ์
์์ผ์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด DI๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๊ฐ์ ์์กด์ฑ์ ๋ง๋ค์ด์ฃผ๊ฒ ๋๋ฉด ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ฒ ๋๊ณ , ๊ฐ์ฒด์ ์ ์ฐ์ฑ์ ๋์ผ ์ ์๋ค.
Ioc(Inversion of Control)๋ ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ฑ
์์ง๊ณ , ์์กด์ฑ์ ๊ด๋ฆฌํด์ฃผ๋ ์ปจํ
์ด๋์ด๋ค.
์์์ ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ค๋ค๊ณ ํ๋๋ฐ ์์ฑํด์ฃผ๋ ๋์์ด IoC ์ปจํ
์ด๋์ด๋ค.
์์๋ก ์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์๊ฐํด๋ณด๋ฉด Controller, Service ๊ฐ์ ๊ฐ์ฒด๋ค์ ๋ง๋ค๊ธฐ๋ ํ์ง๋ง ์ด๋ ์์ ์ ํธ์ถ๋๊ณ ์์กด์ฑ์ ์ฃผ์
ํด์ฃผ๋์ง ๋ฐ๋ก ๊ด๋ฆฌํ์ง ์๋๋ค.
ํ์ง๋ง ๊ทธ๋ฐ๋ฐ๋ ์์กด์ฑ ์ฃผ์
์ด ์ ๋๊ณ ์ฝ๋๊ฐ ์ ๋์๊ฐ๋ค! ์ด๊ฒ์ IoC ์ปจํ
์ด๋๊ฐ ํด๋น ์ญํ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ฌ์ง๊ณผ ๊ฐ์ด ๊ฐ์ฒด A, B, C์์ ๋ํ๋๋ ๋ธ๋ก ์๊น์ ์ค๋ณต์ ์ธ ์ฝ๋๋ค์ด๋ค.
์ด๋ A ๊ฐ์ฒด์ ๋
ธ๋ ๋ธ๋ก ์ฝ๋๋ฅผ ์์ ํ๊ฒ ๋๋ค๋ฉด B, C ๊ฐ์ฒด๋ค์ ์ฝ๋๋ค๋ ์ผ์ผํ ์ฐพ์์ ์์ ํด์ผํ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณ๋์ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋ถ๋ฆฌํ๋ ๊ธฐ์ ์ AOP
๋ผ๊ณ ํ๋ค.
์คํ๋ง์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์์ด ํต์ฌ์ ์ธ ํ๋ ์ ์ํฌ์ด๋ฉฐ, ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋์ด๋๊ณ ๋งํ๊ธฐ๋ ์ด๋ ต๋ค.
๋ง์ฝ MySQL๋ก ๊ฐ๋ฐ์ ๋๋ธ ์ํฉ์ธ๋ฐ MariaDB๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ค๊ณ
ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์, ๊ทธ๋ฌ๋ฉด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ๋ชจ๋ ์ฝ๋๋ค์ ์์ ํด์ผํ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๋ ๊ฐ๋ฐํ๋ฉด์ ํ๋ฒ๋ ๊ทธ๋ฐ์ ์ด ์๋ค! (๊ทธ๋ฌ์ ์๋..)
์คํ๋ง์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ถ์ํ ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค! ์คํ๋ง์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๊ท์ ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ JDBC(Java DataBase Connectivity)
๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ํน์ ๊ธฐ์ ๋ค์ ๋ถํ์ฒ๋ผ ์ฝ๊ฒ ๋ผ๊ณ ๋บ ์ ์๊ฒ ์๋น์ค๋ฅผ ์ถ์ํ ํ์ฌ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์PSA(Portable Service Abstraction)
์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง์ ์์ ์ค๋ช ํ ๋งํผ ๊ธฐ๋ฅ๋ค์ด ์์ฒญ๋๊ฒ ๋ง๋ค. ๊ทธ๋์ ํ๊ฒฝ ์ค์ ์ด ์์ฒญ๋๊ฒ ๋ณต์กํ๋ฐ, ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ฒ์ด Spring Boot์ด๋ค. ์คํ๋ง ๋ถํธ๋ ์คํ๋ง ํ๋ ์ ์ํฌ๋ฅผ ๊ฐํธํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋์์ค๋ค.
Spring ๊ณผ Spring Boot ์ฐจ์ด | velog
[Spring] AOP(Aspect Oriented Programming)๋? ์คํ๋ง AOP๋? | tistory