๐ ๏ธ ์ธ๋ถ API ํธ์ถ ์์ ์ฑ ๋ฐ ๊ด๋ฆฌ์ ๋ชจ๋ํฐ๋ง ๊ฐ์ - #30
Conversation
Codex PR ReviewPR ์์ฝ์์ฝ์ธ๋ถ API(API-Football, SerpAPI, OpenAI) ํธ์ถ์ ๊ณตํต ์ฌ์๋ยทํ์์์ยท์ค๋ฅ ๋ถ๋ฅ๋ฅผ ์ ์ฉํด ์์ ์ฑ์ ๋์ด๊ณ , ๊ด๋ฆฌ์ ํ๋ฉด๊ณผ ๊ฐ์ฌ ๋ก๊ทธ์์ ์ต์ ํต์ ์ํ๋ฅผ ๋ ์ ๋ณด์ด๋๋ก ๊ฐ์ ํ์ต๋๋ค. ๋ํ ๋ด์ค ์์ง ์ํ ์กฐํ ๊ธฐ์ค์ ์ ๋ฆฌํด ๋ง์ง๋ง ์์ง ์๊ฐ์ด ๋๋ฝ๋๋ ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค. ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ
์ํฅ ๋ฒ์
๊ฒ์ฆ
์๋์ด ๊ฐ๋ฐ์ ๋ฆฌ๋ทฐ
๋ณด์ ๋ฆฌ๋ทฐ์ค๋ํ ๋ณด์ ๋ฌธ์ ์์ |
๋ณ๊ฒฝ ์ฌํญ
์ธ๋ถ API ๊ณตํต ํธ์ถ ์์ ์ฑ ๊ฐ์
Retry-After๋ฅผ ์ ์ฉํ๊ณ ์ธ์ฆยท๊ถํยท์๋ชป๋ ์์ฒญยทquota ์์งยท์๋ต ๋ณํ ์ค๋ฅ๋ ์ฌ์๋ํ์ง ์์ต๋๋ค.provider ์ํ ๋ฐ ๊ด๋ฆฌ์ ๊ฐ์ฌ ๋ก๊ทธ ํ์ฅ
api_football_sync_status๋ฅผ API-Football, SerpAPI, OpenAI์ ์ต์ ์ํ ์ ์ฅ์๋ก ํ์ฅํ์ต๋๋ค.EXTERNAL_API_CALL๊ฐ์ฌ ๋ก๊ทธ๋ก ๊ธฐ๋กํ๊ณ , scheduler ํธ์ถ๊ณผ retry ์ค๊ฐ ์คํจ๋ ๊ธฐ๋กํ์ง ์์ต๋๋ค.๊ด๋ฆฌ์ ๋ฐ ๋ด์ค ํ๋ฉด ๊ฐ์
๋ณ๊ฒฝ ์ด์
์ธ๋ถ API๋ณ๋ก timeout๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ฌ๋ผ ์ผ์ ์ฅ์ ์ ์๊ตฌ ์ค๋ฅ๋ฅผ ์ผ๊ด๋๊ฒ ๊ตฌ๋ถํ๊ธฐ ์ด๋ ค์ ๊ณ , retry ์ดํ์ ์ต์ข ์ํ์ ๊ด๋ฆฌ์ ํธ์ถ ์ด๋ ฅ์ ํ์ธํ ์ ์์์ต๋๋ค. ๊ณตํต ์คํ๊ธฐ์ ๊ธฐ์กด ์ํ ํ ์ด๋ธ์ ์ด์ฉํด ํธ์ถ ์์ ์ฑ๊ณผ ์ด์ ๊ฐ์์ฑ์ ํจ๊ป ๊ฐ์ ํ์ต๋๋ค.
๋ํ ๋ด์ค ์์ง ์ํ ํ์ Team ๋ด๋ถ ID๋ฅผ ๊ธฐ๋ณธํค๋ก ์ฌ์ฉํ์ง๋ง API teamId๋ก ์กฐํํ๊ณ ์์ด, ๋ ๊ฐ์ด ๋ค๋ฅธ ํ์์๋ ์์ง์ด ์๋ฃ๋์ด๋
์์ง ๊ธฐ๋ก ์์์ผ๋ก ํ์๋๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.API ๋ฐ ์ค์ ๋ณ๊ฒฝ
api_football_sync_status์ provider ๊ณตํต ์ํ ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.admin_audit_log์ nullable provider ํ๋๋ฅผ ์ถ๊ฐํ๊ณEXTERNAL_API_CALL์ ํ์ ์ถ๊ฐํฉ๋๋ค.๊ฒ์ฆ
./gradlew.bat compileJavaํต๊ณผnpm run buildํต๊ณผcontextLoads()1๊ฐ๋ ๋ก์ปฌ ํ๊ฒฝ์์ Docker/Testcontainers๋ฅผ ์ฌ์ฉํ ์ ์์ด ์คํจํ์ต๋๋ค.๋์ผํ Docker ์ ์ฝ์ผ๋ก ๋ก๊ทธ์ธ๋ ๊ด๋ฆฌ์ ํ๋ฉด์ ๋ธ๋ผ์ฐ์ ์ง์ ๊ฒ์ฆ์ ์ํํ์ง ๋ชปํ์ต๋๋ค.