์ต๊ทผ ํ๋ก์ ํธ์์ Spring Event์ ๋น๋๊ธฐ๋ฅผ ์ฌ์ฉํ์๋ค.
๋น๋๊ธฐ๋ฅผ ๊ณต๋ถํ๋ ๊น์ ๋ณต์ต์ผ์ ์คํ๋ง ์ด๋ฒคํธ๋ ๊ฐ์ด ์ ์ฉํด๋ณด์๋ค.
์คํ๋ง ์ด๋ฒคํธ๋?
Spring Event๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋ ๋ด๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
์คํ๋ง ๋ด๋ถ์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ณ (publish) ์ด๋ฒคํธ๋ฅผ ์์ ํ๋(listen) ๋ก์ง์ ๋ถ๋ฆฌํด์ ์์ฑํ ์ ์๋ค.
์คํ๋ง ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์คํ๋ง์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์กด์ฑ์ด ๋ฎ์์ง๋ค.
- ํต์ฌ๋ก์ง๊ณผ ์ด์ธ์ ๊ด๋ จ์ฝ๋์ ๋ํ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค.
์๋ฅผ ๋ค์ด
์ฌ์ฉ์์ ์ํ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ api๊ฐ ์๋ค. ํด๋น api์ ์๋น์ค ๋จ์๋
1. ์ฃผ๋ฌธํ ์ํ DB์ ์ ์ฅ
2. ํธ์ฌ ๋ฉ์์ง, ๋ฉ์ผ ์ ์ก
๊ณผ ๊ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ค๊ณ ๊ฐ์ ํ์.
์ฌ๊ธฐ์ ํธ์ฌ๋ฉ์์ง, ๋ฉ์ผ ์ ์ก์ ์ค์ํ ๋ก์ง์ด ์๋๋ค.
์ฃผ๋ฌธ์ด ๋ค์ด์์ ๋ ํต์ฌ ๋ก์ง๊ณผ ์ด์ธ์ ์ฐ๊ด๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ
์ด์ธ์ ์ฐ๊ด๋ ์ฝ๋๋ ์คํ๋ง์์ ์ ๊ณตํ๋ event ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค.
๋น๋๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์
Spring Event๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ๋ก ๋์ํ๋ค.
๋๋ฌธ์ ํ์ฌ ์ฐ๋ ๋์์ ํต์ฌ๋ก์ง๋ฟ๋ง ์๋๋ผ ํต์ฌ์ด ์๋ ๋ก์ง์ธ ์ด๋ฒคํธ๋ ๋ชจ๋ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก
์ ์ฒด ํ๋ก์ธ์ค๊ฐ ๊ธธ์ด์ง๊ฒ ๋๋ค.
๋๋ฌธ์ ์ด๋ฒคํธ๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ์ฌ ๋ค๋ฅธ ์ฐ๋ ๋์๊ฒ ์์ํ๊ฒ ๋๋ฉด
์ ์ฒด ํ๋ก์ธ์ค๊ฐ ๋๋๋ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
๊ตฌํ
์คํ๋ง ์ด๋ฒคํธ ๋ฆฌ์ค๋
OrdersService.java
@Async
@EventListener
OrdersEventListener.java
publisher.publish(์ด๋ฒคํธ ๊ฐ์ฒด)
AsyncApplication.java
๋๋์
1. Transactional์ด ๊ฑธ๋ฆฐ ๋ฉ์๋์ ๋ํด์
- ์ฃผ๋ฌธ์ํ DB์ ์ ์ฅ
- ์ด๋ฒคํธ ๋ฐ์
- Exception ๋ฐ์
์ ๊ฒฝ์ฐ ์ฃผ๋ฌธ์ํ DB์ ์ ์ฅ์ ๋กค๋ฐฑ์ด ๋์ง๋ง ์ด๋ฒคํธ ๋ฐ์์ ๋กค๋ฐฑ์ด ๋์ง ์๋๋ค.
๊ทธ๋์ ์ฐพ์๋ณด๋๊น @TransactionalEventListener๋ผ๋๊ฒ ์๋ค. Transaction์ ์ํ์ ๋ฐ๋ผ ๋กค๋ฐฑ์ฌ๋ถ๋ฅผ ํ๋จํด์ฃผ๋ ๋ ์์ธ๋ฏ ํ๋ค.
2. Async ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฐ๋ ๋๊ฐ ๋ณ๋๋ก ์์ฑ์ด ๋๋ค.
ํธ๋ํฝ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ ์ฐ๋ ๋๋ ๊ณผ๋ํ๊ฒ ์์ฑ์ด ๋๋๋ฐ
์ด๋ฌํ ์ํฉ์ ๋๋นํ์ฌ Async ์ด๋ ธํ ์ด์ ์ ์ปค์คํ ํ์ฌ ์ฌ์ฉํด๋ณด์.
์ด์ด์ง๋ ๊ฒ์๊ธ์
TransactionalEventListener ์ด๋ ธํ ์ด์ ์ ์ฉ๊ณผ
Async ์ด๋ ธํ ์ด์ ์ปค์คํ ์ผ๋ก ํ๊ฒ ๋ค.