๐ ๋ฐฐ๊ฒฝ
PR #3์์ worker๊ฐ Instagram caption ๊ธฐ๋ฐ์ผ๋ก extraction_result๋ฅผ ์์ฑํ ์ ์๋ schema, domain model, HF extraction client, worker extraction interface๊ฐ ์ถ๊ฐ๋์๋ค.
ํ์ง๋ง ํ์ฌ JobRepository.upsert_job_result()๋ extraction_result ๊ฐ์ ์ธ์๋ก ๋ฐ๊ธฐ๋ง ํ๊ณ ์ค์ DB์๋ ์ ์ฅํ์ง ์๋๋ค. ๋ฐ๋ผ์ worker๊ฐ ์ถ์ถํ ๊ฒฐ๊ณผ๊ฐ /jobs/{jobId}/result ์๋ต๊น์ง ์์ ์ ์ผ๋ก ์ด์ด์ง๋ ค๋ฉด job_results ํ
์ด๋ธ ์ ์ฅ/์กฐํ ํ๋ฆ์ extraction_result๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ค.
๋ํ DB schema ๋ณ๊ฒฝ์ด ํ์ํ๋ฏ๋ก ํ ์์ฒญ์ ๋ฐ๋ผ migration ์ฝ๋๋ ํจ๊ป ์ถ๊ฐํด์ผ ํ๋ค.
๐ฏ ๋ชฉํ
worker์์ ์์ฑํ extraction_result๋ฅผ job_results DB ๋ ์ฝ๋์ ์ ์ฅํ๊ณ , /jobs/{jobId}/result API ์๋ต์์ ๋ค์ ์กฐํํด ๋ฐํํ ์ ์๊ฒ ํ๋ค.
๐ ๏ธ ๊ตฌํ ๋ด์ฉ
job_results ํ
์ด๋ธ์ extraction_result JSONB ์ปฌ๋ผ์ ์ถ๊ฐํ๋ migration ์ฝ๋ ์์ฑ
JobRepository.upsert_job_result()์์ extraction_result๋ฅผ DB์ ์ ์ฅํ๋๋ก ์์
JobRepository.get_job_result()์์ extraction_result๋ฅผ ์กฐํํด JobResultRecord์ ๋งคํํ๋๋ก ์์
/jobs/{jobId}/result ์๋ต์ ์ ์ฅ๋ extraction_result๊ฐ ํฌํจ๋๋์ง ํ์ธ
- ์ ์ฅ/์กฐํ/API ์๋ต ํ๋ฆ์ ๊ฒ์ฆํ๋ ํ
์คํธ ์ถ๊ฐ
- ๊ฐ๋ฅํ๋ฉด ๋ก์ปฌ PostgreSQL/Redis ๊ธฐ๋ฐ worker ํ๋ฆ์์ ์ค์ ์ ์ฅ ์ฌ๋ถ ํ์ธ
โ ๏ธ ๊ณ ๋ ค์ฌํญ
- DB schema ๋ณ๊ฒฝ์ด ํฌํจ๋๋ฏ๋ก migration ์ฝ๋๊ฐ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ๋ค.
- ๊ธฐ์กด
job_results ๋ฐ์ดํฐ๊ฐ ์์ด๋ ์์ ํ๊ฒ ์ ์ฉ๋ ์ ์๋๋ก nullable JSONB ์ปฌ๋ผ์ผ๋ก ์ถ๊ฐํ๋ค.
extraction_result๋ LLM ์ถ์ถ ์คํจ ์ null์ผ ์ ์์ด์ผ ํ๋ค.
- HF ์ค์ ์ฐ๋์ ํ์ํ ํ๊ฒฝ๋ณ์ ๋ณ๊ฒฝ ์ฌํญ์ ํ Discord์ ๊ณต์ ํด์ผ ํ๋ค.
HF_EXTRACTION_ENDPOINT_URL
HF_EXTRACTION_API_TOKEN
HF_EXTRACTION_MODEL_NAME
โ
์๋ฃ ์กฐ๊ฑด
job_results.extraction_result ์ปฌ๋ผ ์ถ๊ฐ migration์ด ํฌํจ๋์ด ์๋ค.
- worker๊ฐ ์์ฑํ
extraction_result๊ฐ JobRepository.upsert_job_result()๋ฅผ ํตํด DB์ ์ ์ฅ๋๋ค.
JobRepository.get_job_result()๊ฐ ์ ์ฅ๋ extraction_result๋ฅผ ์ ์ ์กฐํํ๋ค.
/jobs/{jobId}/result ์๋ต์ extraction_result๊ฐ ํฌํจ๋๋ค.
extraction_result๊ฐ null์ธ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด job result ํ๋ฆ์ด ๊นจ์ง์ง ์๋๋ค.
- ๊ด๋ จ ํ
์คํธ๊ฐ ์ถ๊ฐ๋๊ณ ์ ์ฒด ํ
์คํธ๊ฐ ํต๊ณผํ๋ค.
๐ ๋ฐฐ๊ฒฝ
PR #3์์ worker๊ฐ Instagram caption ๊ธฐ๋ฐ์ผ๋ก
extraction_result๋ฅผ ์์ฑํ ์ ์๋ schema, domain model, HF extraction client, worker extraction interface๊ฐ ์ถ๊ฐ๋์๋ค.ํ์ง๋ง ํ์ฌ
JobRepository.upsert_job_result()๋extraction_result๊ฐ์ ์ธ์๋ก ๋ฐ๊ธฐ๋ง ํ๊ณ ์ค์ DB์๋ ์ ์ฅํ์ง ์๋๋ค. ๋ฐ๋ผ์ worker๊ฐ ์ถ์ถํ ๊ฒฐ๊ณผ๊ฐ/jobs/{jobId}/result์๋ต๊น์ง ์์ ์ ์ผ๋ก ์ด์ด์ง๋ ค๋ฉดjob_resultsํ ์ด๋ธ ์ ์ฅ/์กฐํ ํ๋ฆ์extraction_result๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ค.๋ํ DB schema ๋ณ๊ฒฝ์ด ํ์ํ๋ฏ๋ก ํ ์์ฒญ์ ๋ฐ๋ผ migration ์ฝ๋๋ ํจ๊ป ์ถ๊ฐํด์ผ ํ๋ค.
๐ฏ ๋ชฉํ
worker์์ ์์ฑํ
extraction_result๋ฅผjob_resultsDB ๋ ์ฝ๋์ ์ ์ฅํ๊ณ ,/jobs/{jobId}/resultAPI ์๋ต์์ ๋ค์ ์กฐํํด ๋ฐํํ ์ ์๊ฒ ํ๋ค.๐ ๏ธ ๊ตฌํ ๋ด์ฉ
job_resultsํ ์ด๋ธ์extraction_resultJSONB ์ปฌ๋ผ์ ์ถ๊ฐํ๋ migration ์ฝ๋ ์์ฑJobRepository.upsert_job_result()์์extraction_result๋ฅผ DB์ ์ ์ฅํ๋๋ก ์์ JobRepository.get_job_result()์์extraction_result๋ฅผ ์กฐํํดJobResultRecord์ ๋งคํํ๋๋ก ์์ /jobs/{jobId}/result์๋ต์ ์ ์ฅ๋extraction_result๊ฐ ํฌํจ๋๋์ง ํ์ธjob_results๋ฐ์ดํฐ๊ฐ ์์ด๋ ์์ ํ๊ฒ ์ ์ฉ๋ ์ ์๋๋ก nullable JSONB ์ปฌ๋ผ์ผ๋ก ์ถ๊ฐํ๋ค.extraction_result๋ LLM ์ถ์ถ ์คํจ ์null์ผ ์ ์์ด์ผ ํ๋ค.HF_EXTRACTION_ENDPOINT_URLHF_EXTRACTION_API_TOKENHF_EXTRACTION_MODEL_NAMEโ ์๋ฃ ์กฐ๊ฑด
job_results.extraction_result์ปฌ๋ผ ์ถ๊ฐ migration์ด ํฌํจ๋์ด ์๋ค.extraction_result๊ฐJobRepository.upsert_job_result()๋ฅผ ํตํด DB์ ์ ์ฅ๋๋ค.JobRepository.get_job_result()๊ฐ ์ ์ฅ๋extraction_result๋ฅผ ์ ์ ์กฐํํ๋ค./jobs/{jobId}/result์๋ต์extraction_result๊ฐ ํฌํจ๋๋ค.extraction_result๊ฐnull์ธ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด job result ํ๋ฆ์ด ๊นจ์ง์ง ์๋๋ค.