ํ์ : ๊ฐ์ธ ํ๋ก์ ํธ
๊ธฐ๊ฐ : 2025.01 ~ ์งํ ์ค
๋งํฌ : https://github.com/M-ung/TicToc_Server
์๋น์ค ๋ด์ฉ : ๋น์ ์ ์๊ฐ์ ๊ฐ์น๋ฅผ ๋งค๊ธฐ๋ค, ์๊ฐ ๊ฑฐ๋ ๊ฒฝ๋งค ํ๋ซํผ
์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ์์ ๋ ์ด์ด๋ ์ํคํ ์ฒ ๊ธฐ๋ฐ ๋จ์ผ๋ชจ๋๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ค. ํ์ง๋ง ๊ฐ์ธ ํ๋ก์ ํธ๋ก์ ์ฅ๊ธฐ์ ์ผ๋ก ์ง์์ ์ธ ๊ฐ๋ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์ค๊ณ๊ฐ ํ์ํ๋ค.
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ ๊ทผ ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ , ๋ฉํฐ๋ชจ๋๋ก ๋ณ๊ฒฝํ์ฌ ํ๋์ ๋ชจ๋์ ์ฝ๋๊ฐ ์์ด๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ ํ์ต๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด, ๋จผ์ tictoc-api ๋ชจ๋์ Controller ๊ณ์ธต์์ ์ด๋ฅผ ์์ ํ๋ค. ๊ทธ ๋ค์, ๋น์ฆ๋์ค ๋ก์ง์ ์ธํฐํ์ด์ค ๊ณ์ธต์ธ UseCase๋ฅผ ํตํด ์์ฒญ์ด ์ ๋ฌ๋๋ฉฐ, ํด๋น ์์ฒญ์ ๊ตฌํ์ฒด์ธ Service ๊ณ์ธต์์ ์ฒ๋ฆฌ๋๋ค.
๋น์ฆ๋์ค ๋ก์ง ๊ณผ์ ์์ ๋๋ฉ์ธ ๊ฐ์ฒด ๋ฐ DB ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ, tictoc-domain ๋ชจ๋์ Port ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค. ๊ทธ ๋ค์, Port ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ธ Adaptor๋ Repository๋ฅผ ํ์ฉํ์ฌ DB์ ์ ๊ทผํ์ฌ ์ํํ๋ ํ๋ฆ์ด๋ค.
์ ์ฌ์ง์ ๋ณด๋ฉด DB๊ฐ Master์ Slave๋ก ๋๋ ์ ธ ์๊ณ , Query์ Command๋ผ๋ ๋จ์ด๊ฐ ๋ณด์ธ๋ค. ์ด๋ ๋ค์ ๊ธ์์ ์์ธํ ๋ค๋ฃจ๊ฒ ์ง๋ง, ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ฐ๋จํ ์ค๋ช ํ๊ฒ ๋ค.
Query์ Command๋ฅผ ๋๋๋ ๊ธฐ์ค์ ํฌ๊ฒ ์ญํ ์ด "์ฐ๊ธฐ"๋ "์ฝ๊ธฐ"๋์ ๋ฐ๋ผ ๊ฒฐ์ ํ๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ CQRSํจํด, DB๋ถ๋ฆฌ, ์๋ ๊ฐ์ , ๋ฑ ์ฌ๋ฌ ์ด์ ๊ฐ ์๊ฒ ์ง๋ง, ์ ๋ ํ๋ก์ ํธ๋ฅผ ์ต๋ํ ๋ชจ๋ํํ๊ณ ์ถ๊ณ ๊ฐ์ฒด๋ฅผ ์ญํ ๋ณ๋ก ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ์ด์ ์ ๋ค์ด๋ฐ ๋ฒ์น์ ๊ฐ์ ธ์ค๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฒ ํ๋ก์ ํธ์์๋ DB๋ฅผ Mysql์ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด๋ฅผ Master์ Slave๋ก ๋๋ ์ ์ ์ ์ฌ์ง๋๋ก ๊ด๋ฆฌํ ์์ ์ด๋ค.
๋ฌธ์ ํด๊ฒฐ๋ก ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋ค.
1. ์ ์ง๋ณด์์ฑ ๋ฐ ํ์ฅ์ฑ ํฅ์.
2. ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ ๊ทผ ๋ก์ง ๋ถ๋ฆฌ.
์ต์ข
ํ๋ก์ ํธ ๋ชจ๋ ํํ๋ ์๋์ ๊ฐ๋ค.
๋ "๊ฒฝ๋งค ๋ฑ๋ก" ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ด ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ก ๊ตฌํํ๋ค.
๐ AuctionCommandController.java
๐ AuctionCommandUseCase.java
๐ AuctionCommandService.java
๐ AuctionRepositoryPort.java
๐ AuctionRepositoryAdapter.java
๐ AuctionRepository.java
์ด์ ๊น์ง ๋จ์ผ๋ชจ๋๋ก ๊ฐ๋ฐ์ ํด์์๊ณ ๋ฉํฐ๋ชจ๋์ด ์๋ค๋ ์ฌ์ค์ ์ด๋ฒ์ ์ฒ์ ์์๋ค. ์ด์ ๊น์ง ๋จ์ผ๋ชจ๋๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ๋๋ ํ ๋ฆฌ์ ํด๋์ค์ ๊ฐ์๊ฐ ๋์ด๋ ๋๋ง๋ค ๊ด๋ฆฌํ๊ณ ์ํ๋ ํ์ผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ ์๋ค.
์ด๋ฒ ๋ฉํฐ๋ชจ๋๋ก ๋ณ๊ฒฝํ ํ ๊ฐ๋ฐ์ ์ญ ๋๋ต 2๊ฐ์ ๊ฐ๊น์ด ์งํํด ๋ณด์๋๋ฐ, ํ์คํ ์ํ๋ ํ์ผ ์ฐพ๊ธฐ๊ฐ ๋จ์ผ๋ชจ๋์ผ ๋๋ณด๋ค ํจ์ฌ ์์ํด์ก๋ค.
ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ๋ผ๋ ๋จ์ด ๋ํ ์ด๋ฒ์ ์ฒ์ ๋ค์ด๋ดค๋ค. ์ฒ์์๋ ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ๋จผ์ ์๊ฒ ๋์์ด์ ์ด๋ฅผ ์ ์ฉํด ๋ณด๋ ค๊ณ ํ๋๋ฐ, ๊ตฌ๊ธ์์ ๋ํผ๋ฐ์ค๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ฝ์ง ์์๋ค. ๊ทธ๋์ ํด๋ฆฐ ์ํคํ
์ฒ์์ ํ์๋ ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ๊ฐ ์๋ค๋ ์ฌ์ค์ ์๊ณ ์์๋ณด๊ฒ ๋์๊ณ , ํด๋ฆฐ ์ํคํ
์ฒ๋ณด๋ค ๋ํผ๋ฐ์ค๋ ๋ง์ด ์๊ธฐ์ ์ด๋ฅผ ํํ๋ค.
์ ์ฉํ ๊ฒฐ๊ณผ, ๋น์ฆ๋์ค ๋ก์ง์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ถ API์ ์ง์ ์์กดํ๋ ๊ฒ์ด ์๋๋ผ,
UseCase, Port์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ํํ ์ ์์๋ค. ์ด ๋๋ถ์ DB ๋ด์ฉ์ ๋ณ๊ฒฝํ ๋, ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ด์ง๋ ์ฅ์ ๊ณผ ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํด์ง๋ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์๋ค.
๋ง์ง๋ง์ผ๋ก ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ ์ค "๋๋ฉ์ธ๊ณผ ์ํฐํฐ"๋ฅผ ๋ถ๋ฆฌํ๋ ๋ด์ฉ์ด ์์๋ค. ๋๋ฉ์ธ๊ณผ ์ํฐํฐ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ ์ฅ ๋ก์ง์ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํ ์ ์์ด์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ด ํฅ์ํ๋ค๋ ์ฅ์ ์ด ์๋ค.
์ด๋ฅผ ์ฒ์์ ์ ์ฉํด ๋ณด์์ง๋ง, ์ฌ์ค ์ด๋ฅผ ๋ถ๋ฆฌํด์ ์ป๋ ์ด์ ๋ณด๋ค ์ฝ๋์ ๋ณต์ก์ฑ๋ง ๋์ด๋์ ์ป๋ ๋จ์ ์ด ํฌ๋ค๊ณ ์๊ฐํ๋ค.
์๋ฅผ ๋ค์ด Update ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋, ๋๋ฉ์ธ๊ณผ ์ํฐํฐ๋ฅผ ๋ถ๋ฆฌํ์ง ์๋๋ค๋ฉด "๋ํฐ ์ฒดํน"์ ํตํด ๊ตณ์ด Save๋ฅผ ๋ค์ ํ ํ์๊ฐ ์์๋ค. ํ์ง๋ง ๋๋ฉ์ธ๊ณผ ์ํฐํฐ๋ฅผ ๋ถ๋ฆฌํ๋ค๋ฉด, ํด๋น ์ํฐํฐ๋ฅผ JPA๋ฅผ ํตํด ์ฐพ๊ณ , ์ฐพ์ ์ํฐํฐ๋ฅผ ๋๋ฉ์ธ์ผ๋ก ๋ณ๊ฒฝ, ๋๋ฉ์ธ์ ์์ , ๋๋ฉ์ธ์ ์ํฐํฐ๋ก ๋ณ๊ฒฝ, ์ํฐํฐ๋ฅผ JPA๋ฅผ ํตํด ๋ค์ ์ ์ฅํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
๊ทธ๋์ "๋๋ฉ์ธ๊ณผ ์ํฐํฐ" ๋ถ๋ฆฌ๋ ์ ์ฉํ์ง ์๊ณ ์ด ๊ธ์ ๋ง์น๊ฒ ๋ค.