Spring & OOP
์คํ๋ง์ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ์ธํ๋ผ๋ฅผ ์ ๊ณตํ๋ค.
IoC(Inversion of Control) / DI(Dependency Injection)
AOP(Aspect Oriented Programming)
PSA(Portable Service Abstraction)
์ด๋ฒคํธ(Event)
์์ ๊ฐ์ ๊ธฐ์ ๋ก ์์ฑํ๋ ์ฝ๋๋ ๋น์ฆ๋์ค ๊ท์น์ ์ง์คํ๊ณ , ๊ธฐ์ ยท ๋ถ๊ฐ๊ธฐ๋ฅ์ ํ๋ ์์ํฌ์ ์์ํ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค.
IoC/DI - ์ถ์ํ์ ์์กด์ฑ ์ฃผ์
๊ตฌํ ๋์ ์ธํฐํ์ด์ค์ ์์กดํ๋๋ก ์ค๊ณํ๊ณ , ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์กด์ฑ์ ์ฃผ์ ํ๋ค. ์ด๋ฅผ ํตํด ๊ตฌํ ๊ต์ฒด๊ฐ ์ฉ์ดํด์ง๊ณ , ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
๊ฐ์ฒด๋ ์ธํฐํ์ด์ค์ ์์กดํ๊ณ ๊ตฌํ ์ฃผ์ ์ ์ปจํ ์ด๋๊ฐ ๋ด๋น
ํ๋กํ์ผ/์ค์ ๋ง ๋ฐ๊ฟ ๊ตฌํ์ ๊ต์ฒดํ ์ ์์ด ํ ์คํธ ยท ๋ฐฐํฌ ํ๊ฒฝ ๋ถ๋ฆฌ ์ฉ์ด
public interface PaymentGateway {
void authorize(String orderId, long amount);
}
@Service
class TossPaymentsGateway implements PaymentGateway {
public void authorize(String orderId, long amount) { /* ... */ }
}
@Primary
@Service
class KakaoPayGateway implements PaymentGateway {
public void authorize(String orderId, long amount) { /* ... */ }
}
@Service
class PaymentService {
private final PaymentGateway gateway;
public PaymentService(@Qualifier("tossPaymentsGateway") PaymentGateway gateway) {
this.gateway = gateway;
}
}AOP - ๊ด์ฌ์ฌ ๋ถ๋ฆฌ
๋ก๊น
, ๋ณด์ ๊ฐ์ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋น์ฆ๋์ค ๋ก์ง์์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋ค. ์คํ๋ง ํธ๋์ญ์
์ @Transactional ์ด๋
ธํ
์ด์
๋ AOP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
๋ก๊น ยท ๋ณด์ ยท ํธ๋์ญ์ ๊ฐ์ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ์ ์คํํธ๋ก ๋ถ๋ฆฌ
ํ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์๋ ๊ฒฝ๊ณ์์ ์ ์ฑ ์ ์ผ๊ด ์ ์ฉํ๋, ๋จ์ฉ ์ ํ๋ฆ ์ถ์ ์ด ์ด๋ ค์์ง๋ฏ๋ก ๋ฒ์๋ฅผ ๋ช ํํ ๊ด๋ฆฌ
PSA(Portable Service Abstraction) - ์ผ๊ด๋ ์๋น์ค ์ถ์ํ
์คํ๋ง์ด ์ ๊ณตํ๋ ์ผ๊ด๋ ์๋น์ค ์ถ์ํ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๊ณตํต ์ธํฐํ์ด์ค(๋๋ ์ ๋ ธํ ์ด์ )์ ์์กดํ๊ณ ์ค์ ๊ตฌํ(๋ผ์ด๋ธ๋ฌ๋ฆฌ/๋ฒค๋)์ ๋น ๊ตฌ์ฑ์ผ๋ก ๊ต์ฒดํ ์ ์๊ฒ ํ๋ค.
๊ณตํต ์ธํฐํ์ด์ค/์ ๋ ธํ ์ด์ ์ ์์กดํ๊ณ ์ค์ ๊ตฌํ์ ๋น ๊ตฌ์ฑ์ผ๋ก ๊ต์ฒด
์บ์ ยท ํธ๋์ญ์ ยท๋ฉ์์ง ๋ฑ ์ธํ๋ผ๋ฅผ ํ๊ฒฝ์ ๋ง๊ฒ ๋ฐ๊ฟ๋ ๋น์ฆ๋์ค ์ฝ๋๋ ๊ทธ๋๋ก ์ ์ง๋จ
์ด๋ฒคํธ - ๋ชจ๋ ๊ฐ ๊ฒฐํฉ๋ ๊ฐ์
์ด๋ฒคํธ๋ ํ ๋ชจ๋์ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ , ๋ค๋ฅธ ๋ชจ๋์ด ํ์ฒ๋ฆฌ๋ฅผ ๊ตฌ๋ ํ๊ฒ ํด ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
์ด๋ฒคํธ ๋ฐํํ๊ณ ๊ด์ฌ ๋ชจ๋์ด ๊ตฌ๋ ํ๋๋ก ์ค๊ณํด ๋ฐํ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
AFTER_COMMIT๊ณผ ๋น๋๊ธฐ ๋ฆฌ์ค๋๋ก ํ์ฒ๋ฆฌ๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ , Outbox ยท ๋ฉฑ๋ฑ ์ฒ๋ฆฌ๋ก ์ ์ค๊ณผ ์ค๋ณต์ ๋ฐฉ์ง ๊ฐ๋ฅ
Last updated
Was this helpful?