cert-study-app / docs /02_architecture.md
Kentlo's picture
Sync from GitHub b098d17dbed1a6386c212d28b4bfa6138ad59d75
88c7275 verified
|
Raw
History Blame Contribute Delete
11.4 kB

02. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

1. ๊ฐœ์š”

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ž๊ฒฉ์ฆ ์‹œํ—˜ ๋ฌธ์ œ PDF๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์›น์—์„œ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ํ•™์Šต์šฉ ๋ฌธ์ œํ’€์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ•œ ๋ฌธ์ œํ’€์ด ์›น์„ ๋„˜์–ด์„œ, PDF ๊ธฐ๋ฐ˜ ๋น„์ •ํ˜• ์‹œํ—˜ ์ž๋ฃŒ๋ฅผ ์ •ํ˜• ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์ œํ’€์ด, ์ •๋‹ต ํ™•์ธ, ์˜ค๋‹ต ๊ด€๋ฆฌ, ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2. ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ์š”์•ฝ

ํ˜„์žฌ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ ์—ญํ• 
Streamlit ์‚ฌ์šฉ์ž ํ™”๋ฉด ์ œ๊ณต, PDF ์—…๋กœ๋“œ, ๋ฌธ์ œํ’€์ด UI
PostgreSQL ๋ฌธ์ œ, ๋ณด๊ธฐ, ์ •๋‹ต, ํ•ด์„ค, ์‚ฌ์šฉ์ž ํ’€์ด ๊ธฐ๋ก ์ €์žฅ
Chroma ๋ฌธ์ œ ์ž„๋ฒ ๋”ฉ ์ €์žฅ, ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰
Learning Lab Service Track, ๋กœ๋“œ๋งต, ์ด๋ก  ์นด๋“œ, ํ™•์ธ ํ€ด์ฆˆ, ์‹ค์Šต ์ƒ˜ํ”Œ ์ œ๊ณต
Learning Progress Service ๋งˆ์ง€๋ง‰ ์„ ํƒ Track, ์ด์–ด์„œ ๊ณต๋ถ€ ์ง„ํ–‰๋ฅ , ๋ˆ„์  ํ•™์Šต ๋‹จ์œ„ ์ €์žฅ
Question Type Metadata ๋‹ค์–‘ํ•œ ๋ฌธ์ œ ์œ ํ˜• ์ด๋ฆ„์„ ๋‚ด๋ถ€ ํ‘œ์ค€ ์œ ํ˜•์œผ๋กœ ์ •๋ฆฌ
Answer Normalizer ๊ฐ๊ด€์‹, ๋ณต์ˆ˜ ์„ ํƒ, Yes/No, ์ˆœ์„œํ˜• ๋‹ต์•ˆ์„ ๋น„๊ต ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ •๊ทœํ™”
Airflow PDF ์ฒ˜๋ฆฌ, ํŒŒ์‹ฑ, ์ž„๋ฒ ๋”ฉ, ์ €์žฅ ์ž‘์—…์˜ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ
Docker / Docker Compose ๊ฐœ๋ฐœ ๋ฐ ์‹คํ–‰ ํ™˜๊ฒฝ ํ‘œ์ค€ํ™”
Oracle Cloud Ubuntu ํ–ฅํ›„ ์„œ๋น„์Šค ๋ฐฐํฌ ๋Œ€์ƒ ์„œ๋ฒ„

3. ์ฒจ๋ถ€ ๋‹ค์ด์–ด๊ทธ๋žจ ๊ฒ€ํ† 

์ฒจ๋ถ€ํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ํฐ ๋ฐฉํ–ฅ์€ ๋งž์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ Streamlit Web UI์— ์ ‘์†ํ•˜๊ณ , PDF ์—…๋กœ๋“œ์™€ ๋ฌธ์ œํ’€์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, PostgreSQL๊ณผ Chroma๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๋ฐฉํ–ฅ๊ณผ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

๋‹ค๋งŒ ํ˜„์žฌ ์ฝ”๋“œ ๊ตฌ์กฐ ๊ธฐ์ค€์œผ๋กœ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

  • Airflow๋Š” Parser/OCR ๋’ค์— ๋ถ™๋Š” ๋ณ„๋„ ์ €์žฅ ๋‹จ๊ณ„๋ผ๊ธฐ๋ณด๋‹ค, ๊ธด PDF ์ฒ˜๋ฆฌ ์ž‘์—… ์ „์ฒด๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์ถ”์ ํ•˜๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค.
  • PDF Parser/OCR, Quality Check, PostgreSQL ์ €์žฅ, ๋ฌธ์ œ ๋ถ„๋ฅ˜/๊ฒ€์ฆ์€ PDF Ingestion Graph ์•ˆ์˜ ๋‹จ๊ณ„๋กœ ๋ณด๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.
  • Quiz Service๋Š” PostgreSQL์— ์ €์žฅ๋œ ๋ฌธ์ œ์™€ ํ’€์ด ๊ธฐ๋ก์„ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค.
  • Similar Question Search๋Š” Chroma์—์„œ ์œ ์‚ฌ ๋ฌธ์ œ๋ฅผ ์ฐพ๊ณ , ์‹ค์ œ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ๋Š” PostgreSQL์˜ ๋ฌธ์ œ ID์™€ ์—ฐ๊ฒฐํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ตฌ์กฐ๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.
  • Chroma๋Š” ํ˜„์žฌ ๋ณ„๋„ ์„œ๋ฒ„ํ˜• DB๋ผ๊ธฐ๋ณด๋‹ค chroma_db ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ปฌ ๋ฒกํ„ฐ ์ €์žฅ์†Œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด ์ฒจ๋ถ€ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๊ฐœ๋…์ ์œผ๋กœ ๋งž์ง€๋งŒ, ๋ฌธ์„œ์—์„œ๋Š” Airflow๋ฅผ โ€œํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ๊ด€๋ฆฌ์žโ€๋กœ, PostgreSQL์„ โ€œ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œโ€๋กœ, Chroma๋ฅผ โ€œ๊ฒ€์ƒ‰์šฉ ๋ณด์กฐ ์ƒ‰์ธโ€์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

4. ์‚ฌ์šฉ์ž ๊ด€์  ํ๋ฆ„

์‚ฌ์šฉ์ž๋Š” ์›น ํ™”๋ฉด์— ์ ‘์†ํ•œ ๋’ค ์ด์–ด์„œ ๊ณต๋ถ€, ์ง‘์ค‘ ํ•™์Šต, ์‹œํ—˜ ๋Œ€๋น„, ๋Œ€์‹œ๋ณด๋“œ, ๋ฌธ์ œํ’€์ด, PDF ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ ํ๋ฆ„์€ ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ ํ๋ฆ„

ํ˜„์žฌ ๊ตฌํ˜„์€ ํ™ˆ์„ ๋‹จ์ˆœ ์‹œ์ž‘ ํ™”๋ฉด์œผ๋กœ ๋‘๊ณ , ์ง„๋„์™€ ์ถ”์ฒœ ๋ณต์Šต์€ ๋ณ„๋„ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œํ’€์ด, PDF ์—…๋กœ๋“œ, ์˜ค๋‹ต/๋ณต์Šต, ๊ฐœ๋… ์ •๋ฆฌ, ์ฒ˜๋ฆฌ ํ˜„ํ™ฉ, ์‹œํ—˜ ํ˜„ํ™ฉ, AI ์ƒ‰์ธ ํ๋ฆ„์€ ์œ ์ง€ํ•˜๋ฉฐ, ๊ทธ ์œ„์— Track ๊ธฐ๋ฐ˜ ์ด๋ก  ํ•™์Šต๊ณผ ํ™•์ธ ํ€ด์ฆˆ๋ฅผ ์–น๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ๋งˆํฌ๋Š” ํ–ฅํ›„ ๊ฐœ์„  ๊ธฐ๋Šฅ์œผ๋กœ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

5. ์ „์ฒด ์„œ๋น„์Šค ํ๋ฆ„

์ „์ฒด ์„œ๋น„์Šค ํ๋ฆ„์€ ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ Streamlit ํ™”๋ฉด์— ์ ‘์†ํ•˜๊ณ , PDF ์—…๋กœ๋“œ์™€ ๋ฌธ์ œํ’€์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฝ”๋“œ ๊ธฐ์ค€์œผ๋กœ๋Š” Streamlit ํ™”๋ฉด์ด QuizService, LearningLabService, LearningProgressService, IngestionJobService, QuestionVectorStore ๊ฐ™์€ ์„œ๋น„์Šค ๊ณ„์ธต์„ ํ˜ธ์ถœํ•˜๊ณ , PDF ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์€ Airflow DAG์™€ PDF Ingestion Graph๋ฅผ ํ†ตํ•ด ๋‹จ๊ณ„๋ณ„๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ํ™”๋ฉด ์ชฝ์€ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

ํ™”๋ฉด ์—ญํ• 
ํ™ˆ ์ด์–ด์„œ ๊ณต๋ถ€, ์ง‘์ค‘ ํ•™์Šต, ์‹œํ—˜ ๋Œ€๋น„, ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฐ€๋ฒผ์šด ์‹œ์ž‘ ํ™”๋ฉด
์ด์–ด์„œ ๊ณต๋ถ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ ํƒํ•œ Track์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋ก , ํ€ด์ฆˆ, ์˜ค๋‹ต ๋ณต์Šต์„ ๊ณ„์† ์ง„ํ–‰
์ง‘์ค‘ ํ•™์Šต ์ด๋ก ๋งŒ ๋ณด๊ธฐ, ํ€ด์ฆˆ๋งŒ ํ’€๊ธฐ, ์‹ค์Šต ์ง‘์ค‘์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ํ•™์Šต ๋ชจ๋“œ ์„ ํƒ
์‹œํ—˜ ๋Œ€๋น„ AZ-104 ๋ฌธ์ œํ’€์ด, ์„ธ๋ถ€๊ฐœ๋… ๋ฐ˜๋ณต, ์‹œํ—˜ ๋ชจ๋“œ ์ง„์ž…
๋Œ€์‹œ๋ณด๋“œ Track ์ง„ํ–‰๋ฅ , ์—ฐ์† ํ•™์Šต์ผ, ์˜ค๋Š˜/์ฃผ๊ฐ„ ๋ˆ„์  ํ•™์Šต ๋‹จ์œ„, ์ถ”์ฒœ ๋ณต์Šต ํ™•์ธ

๋ฌธ์ œํ’€์ด ํ๋ฆ„์—์„œ๋Š” ๋ฌธ์ œ ์œ ํ˜•์ด ์—ฌ๋Ÿฌ ์ด๋ฆ„์œผ๋กœ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— question_type_metadata_service.py์—์„œ ๋จผ์ € ํ‘œ์ค€ ์œ ํ˜•์œผ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Hotspot (True/False)๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Yes/No ์ง„์ˆ ํ˜•์œผ๋กœ, Hotspot (Drag and Drop)์€ ๋งค์นญํ˜•์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์ •๋‹ต ๋น„๊ต๋Š” answer_normalizer.py๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณ„์ธต์€ Y,N,Y, ์˜ˆ/์•„๋‹ˆ์˜ค, ๋ณต์ˆ˜ ์„ ํƒ, ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๋‹ต์•ˆ์„ ๋น„๊ต ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด ๋‘๋ฉด ํ™”๋ฉด UI์™€ ์ฑ„์  ๋กœ์ง์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. PDF ์ฒ˜๋ฆฌ ํ๋ฆ„

PDF ์—…๋กœ๋“œ ์ดํ›„์—๋Š” ํŒŒ์‹ฑ ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ์ถ”์ถœํ•˜๊ณ , ๋ฌธ์ œ/๋ณด๊ธฐ/์ •๋‹ต/ํ•ด์„ค ํ˜•ํƒœ๋กœ ๊ตฌ์กฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐํ™”๋œ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ๋Š” PostgreSQL์— ์ €์žฅํ•˜๊ณ , ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰์— ํ•„์š”ํ•œ ํ…์ŠคํŠธ๋Š” ์ž„๋ฒ ๋”ฉํ•˜์—ฌ Chroma์— ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

PDF ์ฒ˜๋ฆฌ ํ๋ฆ„

์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” cert_study_app/graphs/pdf_ingestion_graph.py์˜ PDF ingestion graph๊ฐ€ ์ด ํ๋ฆ„์„ ๋‹จ๊ณ„๋ณ„๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฃผ์š” ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ฒ˜๋ฆฌ ์‹œ์ž‘
  2. PDF ํŒŒ์‹ฑ
  3. ํŒŒ์‹ฑ ํ’ˆ์งˆ ๊ฒ€์ฆ
  4. ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ
  5. ๋ฌธ์ œ ์ €์žฅ
  6. ๋ฌธ์ œ ์œ ํ˜• ๋ถ„๋ฅ˜
  7. ์ด๋ฏธ์ง€/์‹œ๊ฐ ์ •๋ณด ๋ถ„์„
  8. ์ตœ์ข… ๊ฒ€์ฆ
  9. ์ฒ˜๋ฆฌ ์™„๋ฃŒ

ํŒŒ์‹ฑ ํ’ˆ์งˆ ๊ฒ€์ฆ์—์„œ๋„ ๋ฌธ์ œ ์œ ํ˜• ํ‘œ์ค€ํ™” ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐํ˜• ๋ฌธ์ œ๋ฅผ ์ผ๋ฐ˜ ๊ฐ๊ด€์‹์œผ๋กœ ์ž˜๋ชป ๋ณด๊ณ  ๋ณด๊ธฐ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ์ผ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

7. ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ

์ด ์‹œ์Šคํ…œ์—์„œ๋Š” PostgreSQL๊ณผ Chroma๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL์€ ๋ฌธ์ œ, ๋ณด๊ธฐ, ์ •๋‹ต, ํ•ด์„ค, ์‚ฌ์šฉ์ž ํ’€์ด ๊ธฐ๋ก์ฒ˜๋Ÿผ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๋งžํ˜”๋Š”์ง€, ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์˜ค๋‹ต ๋ณต์Šต ๋Œ€์ƒ์ธ์ง€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Chroma๋Š” ๋ฌธ์ œ ๋ณธ๋ฌธ์„ ๋ฒกํ„ฐ๋กœ ์ €์žฅํ•˜์—ฌ ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ‹€๋ ธ์„ ๋•Œ, ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„ ๋ณต์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL์€ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ด๊ณ , Chroma๋Š” ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ณด์กฐ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค. Chroma๊ฐ€ PostgreSQL์„ ๋Œ€์ฒดํ•˜๋Š” ๊ตฌ์กฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

ํ•™์Šต ์ง„ํ–‰ ๋ฐ์ดํ„ฐ๋Š” ํ˜„์žฌ data/learning_progress.json์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋งˆ์ง€๋ง‰ ์„ ํƒ Track, ๋‚ ์งœ๋ณ„ ํ•™์Šต ๋‹จ๊ณ„, ์ด๋ก /ํ€ด์ฆˆ/์‹ค์Šต/๋ฌธ์ œํ’€์ด/๋ณต์Šต ํ™œ๋™ ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ๊ฐœ์ธ ๋กœ์ปฌ ์ง„ํ–‰ ์ƒํƒœ์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— Git์— ์˜ฌ๋ฆฌ๋Š” ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ๋กœ ๋ด…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ €์žฅ ์—ญํ• ์„ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ €์žฅ ์œ„์น˜ ์„ฑ๊ฒฉ ์˜ˆ์‹œ
PostgreSQL ๊ธฐ์ค€ ๋ฌธ์ œ/ํ’€์ด ๋ฐ์ดํ„ฐ ๋ฌธ์ œ, ์ •๋‹ต, ํ•ด์„ค, ํ’€์ด ๊ธฐ๋ก
Chroma ๊ฒ€์ƒ‰์šฉ ๋ณด์กฐ ์ƒ‰์ธ ๋ฌธ์ œ ์ž„๋ฒ ๋”ฉ, ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰
data/learning_progress.json ๊ฐœ์ธ ํ•™์Šต ์ง„ํ–‰ ์ƒํƒœ ์„ ํ˜ธ Track, ๋ˆ„์  ํ•™์Šต ๋‹จ์œ„
cert_study_app/demo_data/questions_seed.json ๋ฐฐํฌ์šฉ seed Hugging Face ์ดˆ๊ธฐ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ

8. Airflow ์‚ฌ์šฉ ์ด์œ 

PDF ์ฒ˜๋ฆฌ ๊ณผ์ •์€ ํ•œ ๋ฒˆ์— ๋๋‚˜๋Š” ๋‹จ์ˆœ ์ž‘์—…์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  1. PDF ์—…๋กœ๋“œ
  2. ํ…์ŠคํŠธ ์ถ”์ถœ ๋˜๋Š” OCR ๋ณด์ •
  3. ๋ฌธ์ œ ๋‹จ์œ„ ํŒŒ์‹ฑ
  4. ์ •๋‹ต/ํ•ด์„ค ๊ตฌ์กฐํ™”
  5. ํŒŒ์‹ฑ ํ’ˆ์งˆ ๊ฒ€์ฆ
  6. PostgreSQL ์ €์žฅ
  7. ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ
  8. Chroma ์ €์žฅ

์ด๋Ÿฐ ์ž‘์—…์€ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๊ณ , ์ค‘๊ฐ„์— ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Airflow๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ๊ฐœ๋ฐœ ๋‹จ๊ณ„์ด๋ฏ€๋กœ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์™„์ „ํžˆ ์ž๋™ํ™”๋˜์–ด ์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ–ฅํ›„ ์•ˆ์ •์ ์ธ ๋ฌธ์ œ ์ฒ˜๋ฆฌ ๋ฐฐ์น˜๋ฅผ ์œ„ํ•ด Airflow๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ DAG ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • dags/cert_study_pdf_ingestion_dag.py
  • dags/cert_study_visual_analysis_dag.py

9. Docker ์‚ฌ์šฉ ์ด์œ 

Docker๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” Streamlit, PostgreSQL, Chroma, Airflow์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์„ ๋กœ์ปฌ MacBook์ด๋‚˜ Oracle Cloud Ubuntu์—์„œ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํ™˜๊ฒฝ ์ฐจ์ด๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํ•˜๋‚˜์˜ ์„ค์ • ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ docker-compose.yml์˜ ์ฃผ์š” ์„œ๋น„์Šค ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์—ญํ• 
cert-study-app Streamlit ์‚ฌ์šฉ์ž ์›น ํ™”๋ฉด
postgres ๋ฌธ์ œ ๋ฐ ํ’€์ด ๋ฐ์ดํ„ฐ ์ €์žฅ
airflow-init Airflow ์ดˆ๊ธฐ ์„ค์ •
airflow-webserver Airflow ๊ด€๋ฆฌ ํ™”๋ฉด
airflow-scheduler ํŒŒ์ดํ”„๋ผ์ธ ์Šค์ผ€์ค„ ์‹คํ–‰

Chroma๋Š” ๋ณ„๋„ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ธฐ๋ณด๋‹ค ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ chroma_db ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ†ตํ•ด ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ปฌ ๋ฒกํ„ฐ ์ €์žฅ์†Œ ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

10. ๋ฐฐํฌ ๊ตฌ์กฐ

ํ–ฅํ›„์—๋Š” Oracle Cloud Ubuntu ์„œ๋ฒ„์— Docker ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ์—๋Š” ๊ฐœ์ธ ์‚ฌ์šฉ ๋ชฉ์ ์ด๋ฏ€๋กœ ๋ณต์žกํ•œ Kubernetes ๊ตฌ์กฐ๋ณด๋‹ค๋Š” Docker Compose ๊ธฐ๋ฐ˜ ๋ฐฐํฌ๋ฅผ ์šฐ์„  ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ์šด์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ปค์ง€๋ฉด Nginx, HTTPS, ๋ฐฑ์—…, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

11. ํ˜„์žฌ ๊ตฌํ˜„ ์ƒํƒœ

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ, ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • Streamlit ๊ธฐ๋ฐ˜ ๋ฌธ์ œํ’€์ด ํ™”๋ฉด
  • ๋ฌธ์ œ ์œ ํ˜• ํ‘œ์ค€ํ™” ๋ฐ ์ •๋‹ต ์ •๊ทœํ™” ๊ตฌ์กฐ
  • PDF ์—…๋กœ๋“œ ๋ฐ ํŒŒ์‹ฑ ๊ตฌ์กฐ
  • PostgreSQL ๊ธฐ๋ฐ˜ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • Chroma ๊ธฐ๋ฐ˜ ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰ ๊ตฌ์กฐ
  • Docker ๊ธฐ๋ฐ˜ ์‹คํ–‰ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • Airflow ๊ธฐ๋ฐ˜ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ
  • Oracle Cloud Ubuntu ๋ฐฐํฌ ์ค€๋น„
  • Track ๊ธฐ๋ฐ˜ ์ด์–ด์„œ ๊ณต๋ถ€, ์ง‘์ค‘ ํ•™์Šต, ์‹œํ—˜ ๋Œ€๋น„, ๋Œ€์‹œ๋ณด๋“œ ๊ธฐ๋ณธ ํ™”๋ฉด
  • ๋งˆ์ง€๋ง‰ ์„ ํƒ Track ์ €์žฅ ๋ฐ ๋ˆ„์  ํ•™์Šต ๋‹จ์œ„ ๊ธฐ๋ก

12. ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ

ํ–ฅํ›„ ๊ฐœ์„ ํ•  ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ
  • ์‚ฌ์šฉ์ž๋ณ„ ํ•™์Šต ์ด๋ ฅ ๊ด€๋ฆฌ
  • ์˜ค๋‹ต๋…ธํŠธ ์ž๋™ ์ƒ์„ฑ
  • ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ
  • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฌธ์ œ ๋ถ„๋ฅ˜
  • ํ•™์Šต ์ง„ํ–‰ ๋ฐ์ดํ„ฐ๋ฅผ JSON์—์„œ DB ํ…Œ์ด๋ธ”๋กœ ์ด์ „
  • ๋ฌธ์ œ ์œ ํ˜•๋ณ„ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„ ํ™•๋Œ€
  • LLM ๊ธฐ๋ฐ˜ ํ•ด์„ค ๋ณด์กฐ ์ƒ์„ฑ
  • ์œ ์‚ฌ ๋ฌธ์ œ ์ถ”์ฒœ
  • PDF ํŒŒ์‹ฑ ์‹คํŒจ ์ผ€์ด์Šค ๊ด€๋ฆฌ
  • Oracle Cloud ๋ฐฐํฌ ์ž๋™ํ™”
  • ์ •๊ธฐ ๋ฐฑ์—… ๋ฐ ๋กœ๊ทธ ๊ด€๋ฆฌ