dongchan21 commited on
Commit
c9ace58
ยท
1 Parent(s): 74ce985

Fixed LFS tracking for index file and removed unnecessary excels

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ *.index filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ /.venv/
2
+ venv/
3
+ __pycache__/
4
+ *.pyc
Dockerfile ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python 3.9 ์Šฌ๋ฆผ ๋ฒ„์ „ ์‚ฌ์šฉ
2
+ FROM python:3.9-slim
3
+
4
+ # ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
5
+ WORKDIR /app
6
+
7
+ # ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ (ํ•„์š”์‹œ)
8
+ RUN apt-get update && apt-get install -y \
9
+ build-essential \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ # ์˜์กด์„ฑ ํŒŒ์ผ ๋ณต์‚ฌ ๋ฐ ์„ค์น˜
13
+ COPY requirements.txt .
14
+ RUN pip install --no-cache-dir -r requirements.txt
15
+
16
+ # ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ
17
+ COPY . .
18
+
19
+ # ๊ถŒํ•œ ์„ค์ • (Hugging Face Spaces์—์„œ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ)
20
+ RUN chmod -R 777 /app
21
+
22
+ # ํฌํŠธ ์„ค์ • (Hugging Face Spaces ๊ธฐ๋ณธ ํฌํŠธ)
23
+ EXPOSE 7860
24
+
25
+ # ์„œ๋ฒ„ ์‹คํ–‰ ๋ช…๋ น
26
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
HowToStartServerVenv.txt ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 1) ๊ฐ€์ƒํ™˜๊ฒฝ(์„ ํƒ)
2
+ python -m venv .venv
3
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
4
+
5
+ # 2) ์„ค์น˜
6
+ pip install --upgrade pip
7
+ pip install -r requirements.txt
8
+
9
+ # 3) ์ธ๋ฑ์Šค ์ƒ์„ฑ
10
+ python scripts/build_index.py
11
+ # "Indexed 4 docs" ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ vector_db/deposit.index, deposit_meta.pkl ์ƒ์„ฑ
12
+
13
+ # 4-1) OpenAI ์‹ค์ œ ํ˜ธ์ถœ (์ถ”์ฒœ)
14
+ setx OPENAI_API_KEY "YOUR_KEY_HERE"
15
+ # (์„ ํƒ) ๋ชจ๋ธ ๋ณ€๊ฒฝ
16
+ export OPENAI_MODEL=gpt-4o-mini
17
+
18
+ # 4-2) ํ˜น์‹œ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ๋ชจ์˜์‘๋‹ต ๋ชจ๋“œ
19
+ # export USE_MOCK_LLM=1
20
+
21
+ # 5) ์„œ๋ฒ„ ์‹คํ–‰
22
+ uvicorn app.main:app --reload --port 8000
agents/question_agent.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from services.llm_service import generate_questions_from_context
2
+ from services.vector_service import search_similar_docs
3
+
4
+ # return type: dict
5
+ # example output: {"category": "์ƒํ’ˆ ์ถ”์ฒœ / ๋น„๊ต", "suggested_questions": ["ISA ๊ณ„์ขŒ๋Š” ๊ฐœ์ธ์ข…ํ•ฉ์ž์‚ฐ๊ด€๋ฆฌ๊ณ„์ขŒ๋กœ, ...", ..., "..."]}
6
+ def suggest_questions(user_message, user_profile):
7
+ print(f"\n๐Ÿ” ์งˆ๋ฌธ ์ถ”์ฒœ ์‹œ์ž‘: '{user_message}'")
8
+
9
+ # 1๏ธโƒฃ ๋ฒกํ„ฐ DB์—์„œ ์œ ์‚ฌ ๋ฌธ์„œ ๊ฒ€์ƒ‰
10
+ similar_docs = search_similar_docs(user_message, top_k=5)
11
+ print(f"๐Ÿ“š ๋ฒกํ„ฐ DB์—์„œ {len(similar_docs)}๊ฐœ ์œ ์‚ฌ ๋ฌธ์„œ ๊ฒ€์ƒ‰")
12
+
13
+ if not similar_docs:
14
+ print("โš ๏ธ ๋ฒกํ„ฐ DB์—์„œ ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ")
15
+ return {
16
+ "category": "์ผ๋ฐ˜",
17
+ "suggested_questions": [
18
+ "์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฃผ์ œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.",
19
+ "๋‹ค๋ฅธ ๊ธˆ์œต ๊ด€๋ จ ์ฃผ์ œ๋กœ ์งˆ๋ฌธํ•ด์ฃผ์„ธ์š”."
20
+ ]
21
+ }
22
+
23
+ # 2๏ธโƒฃ ๊ฒ€์ƒ‰๋œ ๋ฌธ์„œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ LLM์ด ์งˆ๋ฌธ ์ƒ์„ฑ
24
+ suggested_questions = generate_questions_from_context(
25
+ user_message,
26
+ user_profile,
27
+ similar_docs
28
+ )
29
+ print(f"โœจ ๋ฒกํ„ฐ DB ๊ธฐ๋ฐ˜ ์งˆ๋ฌธ {len(suggested_questions)}๊ฐœ ์ƒ์„ฑ")
30
+ for i, q in enumerate(suggested_questions, 1):
31
+ print(f" โœ… [{i}] {q}")
32
+
33
+ return {
34
+ "category": "์ƒํ’ˆ ์ถ”์ฒœ / ๋น„๊ต",
35
+ "suggested_questions": suggested_questions[:3]
36
+ }
agents/rag_agent.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from services.vector_service import search_similar_docs
2
+ from services.llm_service import generate_answer
3
+
4
+ def answer_question(question, user_profile=None):
5
+ # 1๏ธโƒฃ Vector DB์—์„œ ๊ด€๋ จ ๋ฌธ์„œ ๊ฒ€์ƒ‰
6
+ docs = search_similar_docs(question, top_k=3)
7
+ if not docs:
8
+ return {"answer": "ํ˜„์žฌ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์งˆ๋ฌธ์„ ํ•ด๋ณด์‹œ๊ฒ ์–ด์š”?"}
9
+
10
+ # 2๏ธโƒฃ ๋ฌธ๋งฅ ๊ธฐ๋ฐ˜ ๋‹ต๋ณ€ ์ƒ์„ฑ
11
+ context = "\n".join([d["content"] for d in docs])
12
+ answer = generate_answer(question, context, user_profile)
13
+
14
+ return {
15
+ "answer": answer,
16
+ "source_docs": [d["source"] for d in docs]
17
+ }
18
+
19
+ def detect_intent(question):
20
+ if any(word in question for word in ["๋†’", "๋‚ฎ", "๋น„๊ต", "๋งŽ", "์ "]):
21
+ return "numeric_query"
22
+ else:
23
+ return "semantic_query"
debug_fix.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sentence_transformers import SentenceTransformer
2
+ import torch
3
+
4
+ EMB_MODEL = "intfloat/multilingual-e5-base"
5
+
6
+ print("Attempting to load model with low_cpu_mem_usage=False...")
7
+ try:
8
+ model = SentenceTransformer(EMB_MODEL, device="cpu", model_kwargs={"low_cpu_mem_usage": False})
9
+ print("โœ… Success! Model loaded on CPU.")
10
+ except Exception as e:
11
+ print(f"โŒ Failed: {e}")
12
+ import traceback
13
+ traceback.print_exc()
debug_model_load.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sentence_transformers import SentenceTransformer
2
+ import torch
3
+
4
+ EMB_MODEL = "intfloat/multilingual-e5-base"
5
+
6
+ print(f"Torch version: {torch.__version__}")
7
+
8
+ try:
9
+ print("Attempt 1: Loading with device='cpu'")
10
+ model = SentenceTransformer(EMB_MODEL, device="cpu", model_kwargs={"low_cpu_mem_usage": False})
11
+ print("Success 1")
12
+ except Exception as e:
13
+ print(f"Failed 1: {e}")
14
+
15
+ try:
16
+ print("Attempt 2: Loading with device='cpu' and low_cpu_mem_usage=False")
17
+ model = SentenceTransformer(EMB_MODEL, device="cpu", model_kwargs={"low_cpu_mem_usage": False})
18
+ print("Success 2")
19
+ except Exception as e:
20
+ print(f"Failed 2: {e}")
inspect_vector_db.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pickle
2
+
3
+ META_PATH = "vector_db/deposit_meta.pkl"
4
+
5
+ with open(META_PATH, "rb") as f:
6
+ docs = pickle.load(f)
7
+
8
+ print(f"โœ… ์ด {len(docs)}๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์ธ๋ฑ์Šค์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.\n")
9
+
10
+ # ์•ž๋ถ€๋ถ„ ๋ช‡ ๊ฐœ๋งŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
11
+ for i, doc in enumerate(docs[:5]):
12
+ print(f"[{i+1}] {doc[:300]}...\n")
load_datasets_hf.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from datasets import load_dataset
2
+
3
+ # ๊ธฐ๋ณธ ๋กœ๋“œ (์Šคํ”Œ๋ฆฟ์ด ์žˆ์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค)
4
+ ds = load_dataset("BCCard/BCCard-Finance-Kor-QnA")
5
+ print(ds) # ์ „์ฒด ์š”์•ฝ
6
+ print(ds["train"][0]) # ์ฒซ ์ƒ˜ํ”Œ ํ™•์ธ
7
+
8
+ # CSV/Parquet๋กœ ์ €์žฅํ•˜๊ธฐ (์›ํ•˜๋ฉด)
9
+ df = ds["train"].to_pandas()
10
+ df.to_csv("BCCard-Finance-Kor-QnA_train.csv", index=False)
11
+ # ๋˜๋Š”: ds["train"].to_parquet("BCCard-Finance-Kor-QnA_train.parquet")
logs/update_log.txt ADDED
@@ -0,0 +1,1045 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [2025-11-03 21:17:26] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
2
+ [2025-11-03 22:30:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
3
+ [2025-11-03 22:30:47] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
4
+ [2025-11-03 22:30:47] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
5
+ [2025-11-03 22:30:52] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
6
+ [2025-11-03 22:31:08] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
7
+ [2025-11-03 22:31:08] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
8
+
9
+ [2025-11-04 00:33:05] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
10
+ [2025-11-04 00:33:22] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
11
+ [2025-11-04 00:33:22] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
12
+ [2025-11-04 00:33:22] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
13
+ [2025-11-04 00:33:27] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
14
+ [2025-11-04 00:34:39] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
15
+ [2025-11-04 00:34:39] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
16
+
17
+ [2025-11-04 00:34:39] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
18
+ [2025-11-04 00:34:39] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
19
+ [2025-11-04 00:34:39] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
20
+ [2025-11-04 00:34:41] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
21
+ [2025-11-04 00:35:09] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
22
+ [2025-11-04 00:35:10] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
23
+
24
+ [2025-11-04 00:37:24] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
25
+ [2025-11-04 00:37:33] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
26
+ [2025-11-04 00:37:33] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
27
+ [2025-11-04 00:37:33] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
28
+ [2025-11-04 00:37:35] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
29
+ [2025-11-04 00:38:07] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
30
+ [2025-11-04 00:38:08] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
31
+
32
+ [2025-11-04 00:38:08] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
33
+ [2025-11-04 00:38:08] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
34
+ [2025-11-04 00:38:08] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
35
+ [2025-11-04 00:38:09] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
36
+ [2025-11-04 00:38:49] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
37
+ [2025-11-04 00:38:49] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
38
+
39
+ [2025-11-04 00:49:26] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
40
+ [2025-11-04 00:49:34] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
41
+ [2025-11-04 00:52:49] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
42
+ [2025-11-04 00:53:09] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
43
+ [2025-11-04 00:53:09] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
44
+ [2025-11-04 00:53:09] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
45
+ [2025-11-04 00:53:09] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
46
+ [2025-11-04 00:53:09] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
47
+ [2025-11-04 00:53:25] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
48
+ [2025-11-04 00:53:25] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
49
+
50
+ [2025-11-04 00:53:43] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
51
+ [2025-11-04 00:53:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
52
+ [2025-11-04 00:53:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
53
+ [2025-11-04 00:53:47] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
54
+ [2025-11-04 00:53:47] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
55
+ [2025-11-04 00:53:47] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
56
+ [2025-11-04 00:54:30] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
57
+ [2025-11-04 00:54:30] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
58
+
59
+ [2025-11-04 00:54:30] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
60
+ [2025-11-04 00:54:30] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
61
+ [2025-11-04 00:54:30] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
62
+ [2025-11-04 00:54:30] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
63
+ [2025-11-04 00:54:30] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
64
+ [2025-11-04 00:54:36] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
65
+ [2025-11-04 00:54:36] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
66
+
67
+ [2025-11-04 00:55:05] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
68
+ [2025-11-04 00:55:13] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
69
+ [2025-11-04 00:55:13] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
70
+ [2025-11-04 00:55:13] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
71
+ [2025-11-04 00:55:13] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
72
+ [2025-11-04 00:55:13] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
73
+ [2025-11-04 00:56:06] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
74
+ [2025-11-04 00:56:06] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
75
+
76
+ [2025-11-04 00:56:10] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
77
+ [2025-11-04 00:56:14] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
78
+ [2025-11-04 00:56:14] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
79
+ [2025-11-04 00:56:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
80
+ [2025-11-04 00:56:14] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
81
+ [2025-11-04 00:56:15] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
82
+ [2025-11-04 00:57:34] ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
83
+ [2025-11-04 00:57:34] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
84
+
85
+ [2025-11-04 00:57:34] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
86
+ [2025-11-04 00:57:34] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
87
+ [2025-11-04 00:57:34] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
88
+ [2025-11-04 00:57:34] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
89
+ [2025-11-04 00:57:35] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
90
+ [2025-11-04 00:57:56] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
91
+ [2025-11-04 00:57:56] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
92
+
93
+ [2025-11-04 00:58:07] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
94
+ [2025-11-04 00:58:14] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
95
+ [2025-11-04 00:58:14] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
96
+ [2025-11-04 00:58:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
97
+ [2025-11-04 00:58:14] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
98
+ [2025-11-04 00:58:16] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
99
+ [2025-11-04 00:59:14] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
100
+ [2025-11-04 00:59:14] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
101
+
102
+ [2025-11-04 00:59:14] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
103
+ [2025-11-04 00:59:14] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
104
+ [2025-11-04 00:59:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
105
+ [2025-11-04 00:59:14] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
106
+ [2025-11-04 00:59:15] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
107
+ [2025-11-04 00:59:36] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
108
+ [2025-11-04 00:59:36] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
109
+
110
+ [2025-11-04 01:04:28] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
111
+ [2025-11-04 01:04:33] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251027.xlsx
112
+ [2025-11-04 01:04:33] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251027.xlsx
113
+ [2025-11-04 01:04:33] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
114
+ [2025-11-04 01:04:33] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
115
+ [2025-11-04 01:04:34] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
116
+ [2025-11-04 01:04:42] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
117
+ [2025-11-04 01:04:42] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
118
+
119
+ [2025-11-04 01:06:27] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
120
+ [2025-11-04 01:07:20] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251027.xlsx
121
+ [2025-11-04 01:07:20] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251027.xlsx
122
+ [2025-11-04 01:07:20] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
123
+ [2025-11-04 01:07:20] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
124
+ [2025-11-04 01:07:22] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
125
+ [2025-11-04 01:07:40] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
126
+ [2025-11-04 01:07:40] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
127
+
128
+ [2025-11-04 01:07:40] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251027.xlsx
129
+ [2025-11-04 01:07:40] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251027.xlsx
130
+ [2025-11-04 01:07:40] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
131
+ [2025-11-04 01:07:40] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
132
+ [2025-11-04 01:07:41] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
133
+ [2025-11-04 01:07:59] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
134
+ [2025-11-04 01:07:59] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
135
+
136
+ [2025-11-04 01:08:44] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
137
+ [2025-11-04 01:08:44] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
138
+ [2025-11-04 01:08:44] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
139
+ [2025-11-04 01:08:44] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
140
+ [2025-11-04 01:08:45] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
141
+ [2025-11-04 01:09:09] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
142
+ [2025-11-04 01:09:09] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
143
+
144
+ [2025-11-04 01:09:09] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
145
+ [2025-11-04 01:09:09] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
146
+ [2025-11-04 01:09:09] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
147
+ [2025-11-04 01:09:09] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
148
+ [2025-11-04 01:09:10] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
149
+ [2025-11-04 01:09:27] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
150
+ [2025-11-04 01:09:27] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
151
+
152
+ [2025-11-11 00:04:02] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
153
+ [2025-11-11 00:20:54] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
154
+ [2025-11-11 00:26:28] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
155
+ [2025-11-11 00:26:34] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํŽ€๋“œ.xls
156
+ [2025-11-11 00:26:34] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํŽ€๋“œ.xls
157
+ [2025-11-11 00:26:34] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
158
+ [2025-11-11 00:26:34] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
159
+ [2025-11-11 00:26:36] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
160
+ [2025-11-11 00:38:59] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ๏ฟฝ๏ฟฝ๏ฟฝ ์ค‘ ...
161
+ [2025-11-11 00:38:59] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
162
+
163
+ [2025-11-11 00:39:15] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
164
+ [2025-11-11 00:39:39] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
165
+ [2025-11-11 00:39:42] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํŽ€๋“œ.xls
166
+ [2025-11-11 00:39:42] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํŽ€๋“œ.xls
167
+ [2025-11-11 00:39:42] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
168
+ [2025-11-11 00:39:42] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
169
+ [2025-11-11 00:39:44] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
170
+ [2025-11-11 01:04:47] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
171
+ [2025-11-11 01:04:47] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
172
+
173
+ [2025-11-11 01:05:37] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
174
+ [2025-11-11 01:05:50] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
175
+ [2025-11-11 01:05:50] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
176
+ [2025-11-11 01:05:50] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
177
+ [2025-11-11 01:05:50] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
178
+ [2025-11-11 01:05:51] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
179
+ [2025-11-11 01:06:48] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
180
+ [2025-11-11 01:06:48] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
181
+
182
+ [2025-11-11 01:06:48] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
183
+ [2025-11-11 01:06:48] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
184
+ [2025-11-11 01:06:48] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
185
+ [2025-11-11 01:06:48] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
186
+ [2025-11-11 01:06:52] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
187
+ [2025-11-11 01:07:13] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
188
+ [2025-11-11 01:07:14] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
189
+
190
+ [2025-11-11 01:29:33] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
191
+ [2025-11-11 01:29:43] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
192
+ [2025-11-11 01:29:43] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
193
+ [2025-11-11 01:29:43] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
194
+ [2025-11-11 01:29:43] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
195
+ [2025-11-11 01:29:44] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
196
+ [2025-11-11 01:38:43] ๐Ÿš€ FastAPI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์ค‘ ...
197
+ [2025-11-11 01:38:43] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
198
+
199
+ [2025-11-11 01:41:22] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
200
+ [2025-11-11 01:41:27] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
201
+ [2025-11-11 01:41:27] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
202
+ [2025-11-11 01:41:27] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
203
+ [2025-11-11 01:41:27] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
204
+ [2025-11-11 01:41:27] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
205
+ [2025-11-11 01:42:47] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
206
+ [2025-11-11 01:42:47] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
207
+
208
+ [2025-11-11 01:42:57] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
209
+ [2025-11-11 01:43:01] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
210
+ [2025-11-11 01:43:01] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
211
+ [2025-11-11 01:43:01] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
212
+ [2025-11-11 01:43:01] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
213
+ [2025-11-11 01:43:02] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
214
+ [2025-11-11 01:43:17] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
215
+ [2025-11-11 01:43:17] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
216
+
217
+ [2025-11-11 01:43:17] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
218
+ [2025-11-11 01:43:17] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
219
+ [2025-11-11 01:43:17] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
220
+ [2025-11-11 01:43:17] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
221
+ [2025-11-11 01:43:18] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
222
+ [2025-11-11 01:43:34] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
223
+ [2025-11-11 01:43:34] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
224
+
225
+ [2025-11-11 01:43:51] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
226
+ [2025-11-11 01:43:51] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
227
+ [2025-11-11 01:43:51] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
228
+ [2025-11-11 01:43:51] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
229
+ [2025-11-11 01:43:52] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
230
+ [2025-11-11 01:44:07] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
231
+ [2025-11-11 01:44:07] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
232
+
233
+ [2025-11-11 01:44:07] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
234
+ [2025-11-11 01:44:07] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
235
+ [2025-11-11 01:44:07] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
236
+ [2025-11-11 01:44:07] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
237
+ [2025-11-11 01:44:08] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
238
+ [2025-11-11 01:44:23] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
239
+ [2025-11-11 01:44:23] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
240
+
241
+ [2025-11-11 01:44:31] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ˜ผํ•ฉํ˜•_20251103.xls
242
+ [2025-11-11 01:44:31] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ˜ผํ•ฉํ˜•_20251103.xls
243
+ [2025-11-11 01:44:31] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
244
+ [2025-11-11 01:44:31] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
245
+ [2025-11-11 01:44:32] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
246
+ [2025-11-11 01:44:48] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
247
+ [2025-11-11 01:44:48] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
248
+
249
+ [2025-11-11 01:44:48] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\ํ˜ผํ•ฉํ˜•_20251103.xls
250
+ [2025-11-11 01:44:48] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ˜ผํ•ฉํ˜•_20251103.xls
251
+ [2025-11-11 01:44:48] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
252
+ [2025-11-11 01:44:48] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
253
+ [2025-11-11 01:44:49] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
254
+ [2025-11-11 01:45:04] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
255
+ [2025-11-11 01:45:04] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
256
+
257
+ [2025-11-11 01:45:07] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
258
+ [2025-11-11 11:01:55] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
259
+ [2025-11-11 11:02:02] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
260
+ [2025-11-11 11:02:02] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
261
+ [2025-11-11 11:02:02] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
262
+ [2025-11-11 11:02:02] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
263
+ [2025-11-11 11:02:03] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
264
+ [2025-11-11 11:02:23] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
265
+ [2025-11-11 11:02:23] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
266
+
267
+ [2025-11-11 11:02:23] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
268
+ [2025-11-11 11:02:23] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
269
+ [2025-11-11 11:02:23] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
270
+ [2025-11-11 11:02:23] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
271
+ [2025-11-11 11:02:24] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
272
+ [2025-11-11 11:02:40] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
273
+ [2025-11-11 11:02:40] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
274
+
275
+ [2025-11-11 11:03:11] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
276
+ [2025-11-11 11:03:31] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
277
+ [2025-11-11 11:04:09] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
278
+ [2025-11-11 11:04:09] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
279
+ [2025-11-11 11:04:09] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
280
+ [2025-11-11 11:04:09] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
281
+ [2025-11-11 11:04:10] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
282
+ [2025-11-11 11:04:27] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
283
+ [2025-11-11 11:04:27] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
284
+
285
+ [2025-11-11 11:04:27] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
286
+ [2025-11-11 11:04:27] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
287
+ [2025-11-11 11:04:27] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
288
+ [2025-11-11 11:04:27] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
289
+ [2025-11-11 11:04:28] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
290
+ [2025-11-11 11:04:43] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
291
+ [2025-11-11 11:04:43] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
292
+
293
+ [2025-11-11 11:04:54] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
294
+ [2025-11-11 11:04:54] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
295
+ [2025-11-11 11:04:54] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
296
+ [2025-11-11 11:04:54] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
297
+ [2025-11-11 11:04:55] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
298
+ [2025-11-11 11:05:20] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
299
+ [2025-11-11 11:05:20] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
300
+
301
+ [2025-11-11 11:05:20] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
302
+ [2025-11-11 11:05:20] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
303
+ [2025-11-11 11:05:20] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
304
+ [2025-11-11 11:05:20] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
305
+ [2025-11-11 11:05:21] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
306
+ [2025-11-11 11:05:40] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
307
+ [2025-11-11 11:05:40] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
308
+
309
+ [2025-11-11 11:05:55] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251103.xlsx
310
+ [2025-11-11 11:05:55] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251103.xlsx
311
+ [2025-11-11 11:05:55] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
312
+ [2025-11-11 11:05:55] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
313
+ [2025-11-11 11:05:57] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
314
+ [2025-11-11 11:06:21] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
315
+ [2025-11-11 11:06:21] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
316
+
317
+ [2025-11-11 11:06:21] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251103.xlsx
318
+ [2025-11-11 11:06:21] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์˜ˆ๊ธˆ์ƒํ’ˆ๊ธˆ๋ฆฌ๋น„๊ต_์˜ˆ๊ธˆ๊ธˆ๋ฆฌ(์ •๊ธฐ์˜ˆ๊ธˆ)_20251103.xlsx
319
+ [2025-11-11 11:06:21] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
320
+ [2025-11-11 11:06:21] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
321
+ [2025-11-11 11:06:22] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
322
+ [2025-11-11 11:06:41] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
323
+ [2025-11-11 11:06:41] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
324
+
325
+ [2025-11-11 11:06:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ˆ์„ธ๊ธˆ์œต์ƒํ’ˆ.xlsx
326
+ [2025-11-11 11:06:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ˆ์„ธ๊ธˆ์œต์ƒํ’ˆ.xlsx
327
+ [2025-11-11 11:06:47] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
328
+ [2025-11-11 11:06:47] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
329
+ [2025-11-11 11:06:48] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
330
+ [2025-11-11 11:07:04] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
331
+ [2025-11-11 11:07:04] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
332
+
333
+ [2025-11-11 11:07:04] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ ˆ์„ธ๊ธˆ์œต์ƒํ’ˆ.xlsx
334
+ [2025-11-11 11:07:04] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ˆ์„ธ๊ธˆ์œต์ƒํ’ˆ.xlsx
335
+ [2025-11-11 11:07:04] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
336
+ [2025-11-11 11:07:04] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
337
+ [2025-11-11 11:07:05] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
338
+ [2025-11-11 11:07:18] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
339
+ [2025-11-11 11:07:18] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
340
+
341
+ [2025-11-11 11:07:29] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
342
+ [2025-11-11 11:12:39] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
343
+ [2025-11-11 11:12:45] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ETF_20251103.xls
344
+ [2025-11-11 11:12:45] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ETF_20251103.xls
345
+ [2025-11-11 11:12:45] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
346
+ [2025-11-11 11:12:45] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
347
+ [2025-11-11 11:12:46] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
348
+ [2025-11-11 11:13:03] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
349
+ [2025-11-11 11:13:03] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
350
+
351
+ [2025-11-11 11:13:03] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\ETF_20251103.xls
352
+ [2025-11-11 11:13:03] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ETF_20251103.xls
353
+ [2025-11-11 11:13:03] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
354
+ [2025-11-11 11:13:03] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
355
+ [2025-11-11 11:13:04] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
356
+ [2025-11-11 11:13:19] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
357
+ [2025-11-11 11:13:19] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
358
+
359
+ [2025-11-11 11:17:37] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\MMF_20251103.xls
360
+ [2025-11-11 11:17:37] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\MMF_20251103.xls
361
+ [2025-11-11 11:17:37] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
362
+ [2025-11-11 11:17:37] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
363
+ [2025-11-11 11:17:38] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
364
+ [2025-11-11 11:17:55] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
365
+ [2025-11-11 11:17:55] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
366
+
367
+ [2025-11-11 11:17:55] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\MMF_20251103.xls
368
+ [2025-11-11 11:17:55] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\MMF_20251103.xls
369
+ [2025-11-11 11:17:55] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
370
+ [2025-11-11 11:17:55] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
371
+ [2025-11-11 11:17:55] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
372
+ [2025-11-11 11:18:11] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
373
+ [2025-11-11 11:18:11] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
374
+
375
+ [2025-11-11 11:19:33] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ •๊ธฐ์˜ˆ๊ธˆ_20251103.xls
376
+ [2025-11-11 11:19:33] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ •๊ธฐ์˜ˆ๊ธˆ_20251103.xls
377
+ [2025-11-11 11:19:33] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
378
+ [2025-11-11 11:19:33] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
379
+ [2025-11-11 11:19:34] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
380
+ [2025-11-11 11:20:34] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
381
+ [2025-11-11 11:20:34] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
382
+
383
+ [2025-11-11 11:20:34] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ •๊ธฐ์˜ˆ๊ธˆ_20251103.xls
384
+ [2025-11-11 11:20:34] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ •๊ธฐ์˜ˆ๊ธˆ_20251103.xls
385
+ [2025-11-11 11:20:34] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
386
+ [2025-11-11 11:20:34] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
387
+ [2025-11-11 11:20:34] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
388
+ [2025-11-11 11:21:12] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
389
+ [2025-11-11 11:21:12] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
390
+
391
+ [2025-11-11 11:21:22] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ๊ธˆ_20251103.xls
392
+ [2025-11-11 11:21:22] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ๊ธˆ_20251103.xls
393
+ [2025-11-11 11:21:22] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
394
+ [2025-11-11 11:21:22] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
395
+ [2025-11-11 11:21:22] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
396
+ [2025-11-11 11:22:28] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
397
+ [2025-11-11 11:22:28] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
398
+
399
+ [2025-11-11 11:22:28] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ ๊ธˆ_20251103.xls
400
+ [2025-11-11 11:22:28] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ๊ธˆ_20251103.xls
401
+ [2025-11-11 11:22:28] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
402
+ [2025-11-11 11:22:28] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
403
+ [2025-11-11 11:22:29] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
404
+ [2025-11-11 11:23:23] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
405
+ [2025-11-11 11:23:23] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
406
+
407
+ [2025-11-11 11:24:32] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผํƒ๋‹ด๋ณด๋Œ€์ถœ_20251103.xls
408
+ [2025-11-11 11:24:32] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผํƒ๋‹ด๋ณด๋Œ€์ถœ_20251103.xls
409
+ [2025-11-11 11:24:32] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
410
+ [2025-11-11 11:24:32] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
411
+ [2025-11-11 11:24:33] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
412
+ [2025-11-11 11:25:35] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
413
+ [2025-11-11 11:25:35] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
414
+
415
+ [2025-11-11 11:25:35] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผํƒ๋‹ด๋ณด๋Œ€์ถœ_20251103.xls
416
+ [2025-11-11 11:25:35] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผํƒ๋‹ด๋ณด๋Œ€์ถœ_20251103.xls
417
+ [2025-11-11 11:25:35] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
418
+ [2025-11-11 11:25:35] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
419
+ [2025-11-11 11:25:36] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
420
+ [2025-11-11 11:26:09] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
421
+ [2025-11-11 11:26:09] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
422
+
423
+ [2025-11-11 11:26:29] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ „์„ธ์ž๊ธˆ๋Œ€์ถœ_20251103.xls
424
+ [2025-11-11 11:26:29] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ „์„ธ์ž๊ธˆ๋Œ€์ถœ_20251103.xls
425
+ [2025-11-11 11:26:29] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
426
+ [2025-11-11 11:26:29] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
427
+ [2025-11-11 11:26:29] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
428
+ [2025-11-11 11:27:06] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
429
+ [2025-11-11 11:27:06] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
430
+
431
+ [2025-11-11 11:27:06] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์ „์„ธ์ž๊ธˆ๋Œ€์ถœ_20251103.xls
432
+ [2025-11-11 11:27:06] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ „์„ธ์ž๊ธˆ๋Œ€์ถœ_20251103.xls
433
+ [2025-11-11 11:27:06] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
434
+ [2025-11-11 11:27:06] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
435
+ [2025-11-11 11:27:07] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
436
+ [2025-11-11 11:27:27] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
437
+ [2025-11-11 11:27:27] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
438
+
439
+ [2025-11-11 11:27:36] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ์šฉ๋Œ€์ถœ_20251103.xls
440
+ [2025-11-11 11:27:36] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ์šฉ๋Œ€์ถœ_20251103.xls
441
+ [2025-11-11 11:27:36] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
442
+ [2025-11-11 11:27:36] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
443
+ [2025-11-11 11:27:37] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
444
+ [2025-11-11 11:27:54] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
445
+ [2025-11-11 11:27:54] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
446
+
447
+ [2025-11-11 11:27:54] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ์šฉ๋Œ€์ถœ_20251103.xls
448
+ [2025-11-11 11:27:54] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ์šฉ๋Œ€์ถœ_20251103.xls
449
+ [2025-11-11 11:27:54] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
450
+ [2025-11-11 11:27:54] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
451
+ [2025-11-11 11:27:55] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
452
+ [2025-11-11 11:28:09] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
453
+ [2025-11-11 11:28:09] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
454
+
455
+ [2025-11-11 11:28:13] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ‡ด์ง์—ฐ๊ธˆ.xlsx
456
+ [2025-11-11 11:28:13] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ‡ด์ง์—ฐ๊ธˆ.xlsx
457
+ [2025-11-11 11:28:13] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
458
+ [2025-11-11 11:28:13] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
459
+ [2025-11-11 11:28:15] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
460
+ [2025-11-11 11:29:30] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
461
+ [2025-11-11 11:29:30] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
462
+
463
+ [2025-11-11 11:29:30] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\ํ‡ด์ง์—ฐ๊ธˆ.xlsx
464
+ [2025-11-11 11:29:30] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ‡ด์ง์—ฐ๊ธˆ.xlsx
465
+ [2025-11-11 11:29:30] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
466
+ [2025-11-11 11:29:30] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
467
+ [2025-11-11 11:29:32] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
468
+ [2025-11-11 11:30:12] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
469
+ [2025-11-11 11:30:12] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
470
+
471
+ [2025-11-11 13:13:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๊ตญ๋‚ด ์›”๋ฐฐ๋‹น ETF ์ด์ •๋ฆฌ.xlsx
472
+ [2025-11-11 13:13:47] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๊ตญ๋‚ด ์›”๋ฐฐ๋‹น ETF ์ด์ •๋ฆฌ.xlsx
473
+ [2025-11-11 13:13:47] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
474
+ [2025-11-11 13:13:47] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
475
+ [2025-11-11 13:13:50] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
476
+ [2025-11-11 13:17:11] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
477
+ [2025-11-11 13:17:11] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
478
+
479
+ [2025-11-11 13:17:11] ๐Ÿ“‚ ๋ณ€๊ฒฝ ๊ฐ์ง€๋จ: data/raw_excels\๊ตญ๋‚ด ์›”๋ฐฐ๋‹น ETF ์ด์ •๋ฆฌ.xlsx
480
+ [2025-11-11 13:17:11] ๐Ÿ“‚ ์ƒˆ ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๊ตญ๋‚ด ๏ฟฝ๏ฟฝ๋ฐฐ๋‹น ETF ์ด์ •๋ฆฌ.xlsx
481
+ [2025-11-11 13:17:11] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
482
+ [2025-11-11 13:17:11] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
483
+ [2025-11-11 13:17:13] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
484
+ [2025-11-11 13:18:40] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
485
+ [2025-11-11 13:18:40] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
486
+
487
+ [2025-11-11 13:18:44] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
488
+ [2025-11-12 14:02:04] ๐Ÿ‘€ Excel ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
489
+ [2025-11-12 14:05:31] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
490
+ [2025-11-12 14:09:20] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
491
+ [2025-11-12 14:09:31] ๐Ÿ“‚ ์ƒˆ CSV ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_csv\BCCard-Finance-Kor-QnA_train.csv
492
+ [2025-11-12 14:09:31] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
493
+ [2025-11-12 14:09:31] ๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
494
+ [2025-11-12 14:09:31] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
495
+ [2025-11-12 14:10:04] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
496
+
497
+ [2025-11-12 14:10:04] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
498
+ [2025-11-12 14:10:10] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
499
+ [2025-11-12 14:10:24] ๐Ÿ“‚ ์ƒˆ CSV ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_csv\BCCard-Finance-Kor-QnA_train.csv
500
+ [2025-11-12 14:10:24] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
501
+ [2025-11-12 14:10:24] ๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
502
+ [2025-11-12 14:10:31] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
503
+ [2025-11-12 14:29:16] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
504
+ [2025-11-12 14:29:16] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
505
+
506
+ [2025-11-12 14:29:16] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
507
+ [2025-11-12 14:30:22] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
508
+ [2025-11-12 14:30:26] ๐Ÿ“‚ ์ƒˆ CSV ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_csv\~$BCCard-Finance-Kor-QnA_train.csv
509
+ [2025-11-12 14:30:26] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
510
+ [2025-11-12 14:30:26] ๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
511
+ [2025-11-12 14:30:28] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
512
+ [2025-11-12 14:30:45] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
513
+
514
+ [2025-11-12 14:30:46] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
515
+ [2025-11-12 14:30:58] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
516
+ [2025-11-12 14:31:14] ๐Ÿ“‚ ์ƒˆ CSV ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_csv\BCCard-Finance-Kor-QnA_train.csv
517
+ [2025-11-12 14:31:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
518
+ [2025-11-12 14:31:14] ๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
519
+ [2025-11-12 14:31:18] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
520
+ [2025-11-12 19:29:43] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
521
+ [2025-11-12 19:29:43] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
522
+
523
+ [2025-11-12 19:34:36] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
524
+ [2025-11-17 13:55:11] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
525
+ [2025-11-17 13:55:29] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๊ตญ๋‚ด ์›”๋ฐฐ๋‹น ETF ์ด์ •๋ฆฌ.xlsx
526
+ [2025-11-17 13:55:29] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
527
+ [2025-11-17 13:55:29] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
528
+ [2025-11-17 13:55:31] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
529
+ [2025-11-17 13:56:41] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
530
+ [2025-11-17 13:56:41] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
531
+
532
+ [2025-11-17 13:56:41] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๊ตญ๋‚ด ์›”๋ฐฐ๋‹น ETF ์ด์ •๋ฆฌ.xlsx
533
+ [2025-11-17 13:56:41] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
534
+ [2025-11-17 13:56:41] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
535
+ [2025-11-17 13:56:44] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
536
+ [2025-11-17 13:57:01] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
537
+ [2025-11-17 13:57:01] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
538
+
539
+ [2025-11-17 13:57:31] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ETF_20251103.xls
540
+ [2025-11-17 13:57:31] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
541
+ [2025-11-17 13:57:31] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
542
+ [2025-11-17 13:57:33] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
543
+ [2025-11-17 13:57:58] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
544
+ [2025-11-17 13:57:58] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
545
+
546
+ [2025-11-17 13:57:58] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ETF_20251103.xls
547
+ [2025-11-17 13:57:58] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
548
+ [2025-11-17 13:57:58] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
549
+ [2025-11-17 13:58:00] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
550
+ [2025-11-17 13:58:20] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
551
+ [2025-11-17 13:58:20] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
552
+
553
+ [2025-11-17 13:58:45] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\MMF_20251103.xls
554
+ [2025-11-17 13:58:45] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
555
+ [2025-11-17 13:58:45] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
556
+ [2025-11-17 13:58:46] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
557
+ [2025-11-17 13:59:10] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
558
+ [2025-11-17 13:59:10] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
559
+
560
+ [2025-11-17 13:59:14] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ์šฉ๋Œ€์ถœ_20251103.xls
561
+ [2025-11-17 13:59:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
562
+ [2025-11-17 13:59:14] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
563
+ [2025-11-17 13:59:16] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
564
+ [2025-11-17 13:59:46] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
565
+ [2025-11-17 13:59:46] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
566
+
567
+ [2025-11-17 14:00:22] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ž์œ ์˜ˆ์ ๊ธˆ_20251103.xlsx
568
+ [2025-11-17 14:00:22] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
569
+ [2025-11-17 14:00:22] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
570
+ [2025-11-17 14:00:25] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
571
+ [2025-11-17 14:00:47] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
572
+ [2025-11-17 14:00:47] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
573
+
574
+ [2025-11-17 14:01:17] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ๊ธˆ_20251103.xls
575
+ [2025-11-17 14:01:17] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
576
+ [2025-11-17 14:01:17] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
577
+ [2025-11-17 14:01:19] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
578
+ [2025-11-17 14:02:43] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
579
+ [2025-11-17 14:02:43] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
580
+
581
+ [2025-11-17 14:02:43] ๐Ÿ“‚ ์ƒˆ CSV ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_csv\~$BCCard-Finance-Kor-QnA_train.csv
582
+ [2025-11-17 14:02:43] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
583
+ [2025-11-17 14:02:43] ๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
584
+ [2025-11-17 14:02:45] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
585
+ [2025-11-17 14:03:04] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
586
+ [2025-11-17 14:03:04] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
587
+
588
+ [2025-11-17 14:03:04] ๐Ÿ“‚ ์ƒˆ CSV ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_csv\~$BCCard-Finance-Kor-QnA_train.csv
589
+ [2025-11-17 14:03:04] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
590
+ [2025-11-17 14:03:04] ๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
591
+ [2025-11-17 14:03:05] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
592
+ [2025-11-17 14:03:22] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
593
+ [2025-11-17 14:03:22] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
594
+
595
+ [2025-11-17 14:03:27] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ „์„ธ์ž๊ธˆ๋Œ€์ถœ_20251103.xls
596
+ [2025-11-17 14:03:27] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
597
+ [2025-11-17 14:03:27] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
598
+ [2025-11-17 14:03:29] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
599
+ [2025-11-17 14:04:07] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
600
+ [2025-11-17 14:04:07] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
601
+
602
+ [2025-11-17 14:04:11] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ ˆ์„ธ๊ธˆ์œต์ƒํ’ˆ.xlsx
603
+ [2025-11-17 14:04:11] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
604
+ [2025-11-17 14:04:11] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
605
+ [2025-11-17 14:04:15] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
606
+ [2025-11-17 14:04:43] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
607
+ [2025-11-17 14:04:43] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
608
+
609
+ [2025-11-17 14:04:47] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ •๊ธฐ์˜ˆ๊ธˆ_20251103.xls
610
+ [2025-11-17 14:04:47] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
611
+ [2025-11-17 14:04:47] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
612
+ [2025-11-17 14:04:49] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
613
+ [2025-11-17 14:06:02] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
614
+ [2025-11-17 14:06:02] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
615
+
616
+ [2025-11-17 14:06:05] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผ์‹ํ˜•_20251103.xls
617
+ [2025-11-17 14:06:05] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
618
+ [2025-11-17 14:06:05] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
619
+ [2025-11-17 14:06:07] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
620
+ [2025-11-17 14:06:42] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
621
+ [2025-11-17 14:06:42] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
622
+
623
+ [2025-11-17 14:13:18] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฃผํƒ๋‹ด๋ณด๋Œ€์ถœ_20251103.xls
624
+ [2025-11-17 14:13:18] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
625
+ [2025-11-17 14:13:18] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
626
+ [2025-11-17 14:13:21] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
627
+ [2025-11-17 14:14:24] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
628
+ [2025-11-17 14:14:24] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
629
+
630
+ [2025-11-17 14:14:53] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ฑ„๊ถŒํ˜•_20251103.xls
631
+ [2025-11-17 14:14:53] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
632
+ [2025-11-17 14:14:53] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
633
+ [2025-11-17 14:14:55] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
634
+ [2025-11-17 14:15:25] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
635
+ [2025-11-17 14:15:25] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
636
+
637
+ [2025-11-17 14:15:32] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ‡ด์ง์—ฐ๊ธˆ.xlsx
638
+ [2025-11-17 14:15:32] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
639
+ [2025-11-17 14:15:32] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
640
+ [2025-11-17 14:15:36] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
641
+ [2025-11-17 14:16:49] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
642
+ [2025-11-17 14:16:49] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
643
+
644
+ [2025-11-17 14:17:40] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ˜ผํ•ฉํ˜•_20251103.xls
645
+ [2025-11-17 14:17:40] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
646
+ [2025-11-17 14:17:40] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
647
+ [2025-11-17 14:17:43] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
648
+ [2025-11-17 14:18:08] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
649
+ [2025-11-17 14:18:08] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
650
+
651
+ [2025-11-17 14:18:13] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
652
+ [2025-11-17 22:35:36] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
653
+ [2025-11-17 22:36:20] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜์˜ˆ๊ธˆ.xlsx
654
+ [2025-11-17 22:36:20] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
655
+ [2025-11-17 22:36:20] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
656
+ [2025-11-17 22:36:26] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
657
+ [2025-11-17 22:37:44] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
658
+ [2025-11-17 22:37:44] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
659
+
660
+ [2025-11-17 22:37:44] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$ํ•˜๋‚˜์˜ˆ๊ธˆ.xlsx
661
+ [2025-11-17 22:37:44] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
662
+ [2025-11-17 22:37:44] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
663
+ [2025-11-17 22:37:45] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
664
+ [2025-11-17 22:37:54] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
665
+
666
+ [2025-11-17 22:37:54] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$ํ•˜๋‚˜์˜ˆ๊ธˆ.xlsx
667
+ [2025-11-17 22:37:54] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
668
+ [2025-11-17 22:37:54] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
669
+ [2025-11-17 22:37:55] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
670
+ [2025-11-17 22:38:05] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
671
+
672
+ [2025-11-17 22:38:05] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜์˜ˆ๊ธˆ.xlsx
673
+ [2025-11-17 22:38:05] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
674
+ [2025-11-17 22:38:05] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
675
+ [2025-11-17 22:38:07] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
676
+ [2025-11-17 22:38:21] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
677
+ [2025-11-17 22:38:21] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
678
+
679
+ [2025-11-17 23:20:36] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜๋Œ€์ถœ.xlsx
680
+ [2025-11-17 23:20:36] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
681
+ [2025-11-17 23:20:36] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
682
+ [2025-11-17 23:20:38] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
683
+ [2025-11-17 23:20:50] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
684
+
685
+ [2025-11-17 23:20:50] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜๋Œ€์ถœ.xlsx
686
+ [2025-11-17 23:20:50] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
687
+ [2025-11-17 23:20:50] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
688
+ [2025-11-17 23:20:51] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
689
+ [2025-11-17 23:21:01] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
690
+
691
+ [2025-11-17 23:21:21] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
692
+ [2025-11-17 23:27:48] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
693
+ [2025-11-17 23:27:55] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜์˜ˆ๊ธˆ.xlsx
694
+ [2025-11-17 23:27:55] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
695
+ [2025-11-17 23:27:55] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
696
+ [2025-11-17 23:27:57] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
697
+ [2025-11-17 23:28:15] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
698
+ [2025-11-17 23:28:15] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
699
+
700
+ [2025-11-17 23:28:15] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜์˜ˆ๊ธˆ.xlsx
701
+ [2025-11-17 23:28:15] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
702
+ [2025-11-17 23:28:15] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
703
+ [2025-11-17 23:28:17] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
704
+ [2025-11-17 23:28:32] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
705
+ [2025-11-17 23:28:32] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
706
+
707
+ [2025-11-17 23:28:38] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜๋Œ€์ถœ.xlsx
708
+ [2025-11-17 23:28:38] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
709
+ [2025-11-17 23:28:38] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
710
+ [2025-11-17 23:28:39] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
711
+ [2025-11-17 23:29:03] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
712
+ [2025-11-17 23:29:03] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
713
+
714
+ [2025-11-17 23:29:07] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
715
+ [2025-11-18 00:06:19] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
716
+ [2025-11-18 00:06:41] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜์ ๊ธˆ.xlsx
717
+ [2025-11-18 00:06:41] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
718
+ [2025-11-18 00:06:41] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
719
+ [2025-11-18 00:06:43] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
720
+ [2025-11-18 00:07:07] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
721
+ [2025-11-18 00:07:07] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
722
+
723
+ [2025-11-18 00:07:07] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$ํ•˜๋‚˜์ ๊ธˆ.xlsx
724
+ [2025-11-18 00:07:07] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
725
+ [2025-11-18 00:07:07] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
726
+ [2025-11-18 00:07:09] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
727
+ [2025-11-18 00:07:19] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
728
+
729
+ [2025-11-18 00:07:19] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$ํ•˜๋‚˜์ ๊ธˆ.xlsx
730
+ [2025-11-18 00:07:19] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
731
+ [2025-11-18 00:07:19] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
732
+ [2025-11-18 00:07:20] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
733
+ [2025-11-18 00:07:30] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
734
+
735
+ [2025-11-18 00:07:30] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\ํ•˜๋‚˜์ ๊ธˆ.xlsx
736
+ [2025-11-18 00:07:30] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
737
+ [2025-11-18 00:07:30] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
738
+ [2025-11-18 00:07:31] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
739
+ [2025-11-18 00:07:45] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
740
+ [2025-11-18 00:07:45] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
741
+
742
+ [2025-11-18 00:08:27] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
743
+ [2025-11-18 10:53:42] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
744
+ [2025-11-18 10:54:14] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\SC์ œ์ผ์˜ˆ์ ๊ธˆ.xlsx
745
+ [2025-11-18 10:54:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
746
+ [2025-11-18 10:54:14] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
747
+ [2025-11-18 10:54:19] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
748
+ [2025-11-18 10:55:31] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
749
+ [2025-11-18 10:55:31] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
750
+
751
+ [2025-11-18 10:55:31] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$SC์ œ์ผ์˜ˆ์ ๊ธˆ.xlsx
752
+ [2025-11-18 10:55:31] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
753
+ [2025-11-18 10:55:31] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
754
+ [2025-11-18 10:55:33] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
755
+ [2025-11-18 10:55:49] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
756
+
757
+ [2025-11-18 10:55:49] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$SC์ œ์ผ์˜ˆ์ ๊ธˆ.xlsx
758
+ [2025-11-18 10:55:49] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
759
+ [2025-11-18 10:55:49] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
760
+ [2025-11-18 10:55:51] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
761
+ [2025-11-18 10:56:06] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
762
+
763
+ [2025-11-18 10:56:06] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\SC์ œ์ผ์˜ˆ์ ๊ธˆ.xlsx
764
+ [2025-11-18 10:56:06] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
765
+ [2025-11-18 10:56:06] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
766
+ [2025-11-18 10:56:08] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
767
+ [2025-11-18 10:56:29] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
768
+ [2025-11-18 10:56:29] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
769
+
770
+ [2025-11-18 11:00:28] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\SC์ œ์ผ๋Œ€์ถœ.xlsx
771
+ [2025-11-18 11:00:28] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
772
+ [2025-11-18 11:00:28] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
773
+ [2025-11-18 11:00:31] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
774
+ [2025-11-18 11:00:48] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
775
+ [2025-11-18 11:00:48] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
776
+
777
+ [2025-11-18 11:00:48] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$SC์ œ์ผ๋Œ€์ถœ.xlsx
778
+ [2025-11-18 11:00:48] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
779
+ [2025-11-18 11:00:48] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
780
+ [2025-11-18 11:00:49] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
781
+ [2025-11-18 11:00:58] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
782
+
783
+ [2025-11-18 11:00:58] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$SC์ œ์ผ๋Œ€์ถœ.xlsx
784
+ [2025-11-18 11:00:58] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
785
+ [2025-11-18 11:00:58] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
786
+ [2025-11-18 11:00:59] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
787
+ [2025-11-18 11:01:12] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
788
+
789
+ [2025-11-18 11:01:12] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\SC์ œ์ผ๋Œ€์ถœ.xlsx
790
+ [2025-11-18 11:01:12] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
791
+ [2025-11-18 11:01:12] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
792
+ [2025-11-18 11:01:14] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
793
+ [2025-11-18 11:01:37] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
794
+ [2025-11-18 11:01:37] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
795
+
796
+ [2025-11-18 11:12:14] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
797
+ [2025-11-18 11:12:14] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
798
+ [2025-11-18 11:12:14] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
799
+ [2025-11-18 11:12:17] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
800
+ [2025-11-18 11:12:42] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
801
+ [2025-11-18 11:12:42] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
802
+
803
+ [2025-11-18 11:12:42] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$์‹ ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
804
+ [2025-11-18 11:12:42] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
805
+ [2025-11-18 11:12:42] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
806
+ [2025-11-18 11:12:44] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
807
+ [2025-11-18 11:13:00] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
808
+
809
+ [2025-11-18 11:13:00] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$์‹ ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
810
+ [2025-11-18 11:13:00] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
811
+ [2025-11-18 11:13:00] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
812
+ [2025-11-18 11:13:02] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
813
+ [2025-11-18 11:13:19] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
814
+
815
+ [2025-11-18 11:13:19] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
816
+ [2025-11-18 11:13:19] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
817
+ [2025-11-18 11:13:19] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
818
+ [2025-11-18 11:13:22] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
819
+ [2025-11-18 11:13:43] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
820
+ [2025-11-18 11:13:43] โœ… ์—…๋ฐ์ด๏ฟฝ๏ฟฝ๏ฟฝ ์™„๋ฃŒ!
821
+
822
+ [2025-11-18 11:22:29] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ํ˜‘๋Œ€์ถœ.xlsx
823
+ [2025-11-18 11:22:29] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
824
+ [2025-11-18 11:22:29] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
825
+ [2025-11-18 11:22:32] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
826
+ [2025-11-18 11:23:06] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
827
+ [2025-11-18 11:23:06] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
828
+
829
+ [2025-11-18 11:23:06] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$์‹ ํ˜‘๋Œ€์ถœ.xlsx
830
+ [2025-11-18 11:23:06] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
831
+ [2025-11-18 11:23:06] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
832
+ [2025-11-18 11:23:08] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
833
+ [2025-11-18 11:23:26] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
834
+
835
+ [2025-11-18 11:23:26] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$์‹ ํ˜‘๋Œ€์ถœ.xlsx
836
+ [2025-11-18 11:23:26] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
837
+ [2025-11-18 11:23:26] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
838
+ [2025-11-18 11:23:27] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
839
+ [2025-11-18 11:23:43] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
840
+
841
+ [2025-11-18 11:23:43] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ํ˜‘๋Œ€์ถœ.xlsx
842
+ [2025-11-18 11:23:43] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
843
+ [2025-11-18 11:23:43] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
844
+ [2025-11-18 11:23:45] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
845
+ [2025-11-18 11:24:07] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
846
+ [2025-11-18 11:24:07] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
847
+
848
+ [2025-11-18 19:40:23] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ˆ˜ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
849
+ [2025-11-18 19:40:23] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
850
+ [2025-11-18 19:40:23] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
851
+ [2025-11-18 19:40:29] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
852
+ [2025-11-18 19:41:51] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
853
+ [2025-11-18 19:41:51] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
854
+
855
+ [2025-11-18 19:41:51] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$์ˆ˜ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
856
+ [2025-11-18 19:41:51] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
857
+ [2025-11-18 19:41:51] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
858
+ [2025-11-18 19:41:53] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
859
+ [2025-11-18 19:42:08] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
860
+
861
+ [2025-11-18 19:42:08] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\~$์ˆ˜ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
862
+ [2025-11-18 19:42:08] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
863
+ [2025-11-18 19:42:08] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
864
+ [2025-11-18 19:42:09] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
865
+ [2025-11-18 19:42:21] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
866
+
867
+ [2025-11-18 19:42:21] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ˆ˜ํ˜‘์˜ˆ์ ๊ธˆ.xlsx
868
+ [2025-11-18 19:42:21] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
869
+ [2025-11-18 19:42:21] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
870
+ [2025-11-18 19:42:23] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
871
+ [2025-11-18 19:42:40] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
872
+ [2025-11-18 19:42:40] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
873
+
874
+ [2025-11-18 19:50:36] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ˆ˜ํ˜‘๋Œ€์ถœ.xlsx
875
+ [2025-11-18 19:50:36] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
876
+ [2025-11-18 19:50:36] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
877
+ [2025-11-18 19:50:37] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
878
+ [2025-11-18 19:51:03] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
879
+ [2025-11-18 19:51:03] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
880
+
881
+ [2025-11-18 19:51:03] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์ˆ˜ํ˜‘๋Œ€์ถœ.xlsx
882
+ [2025-11-18 19:51:03] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
883
+ [2025-11-18 19:51:03] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
884
+ [2025-11-18 19:51:04] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
885
+ [2025-11-18 19:51:21] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
886
+ [2025-11-18 19:51:21] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
887
+
888
+ [2025-11-25 00:29:37] ๐Ÿ‘€ Excel & CSV ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
889
+ [2025-11-25 00:29:55] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ํ•œ ๊ธˆ์œต์ƒํ’ˆ.xlsx
890
+ [2025-11-25 00:29:55] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
891
+ [2025-11-25 00:29:55] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
892
+ [2025-11-25 00:29:59] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
893
+ [2025-11-25 00:31:03] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
894
+ [2025-11-25 00:31:03] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
895
+
896
+ [2025-11-25 00:31:03] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์‹ ํ•œ ๊ธˆ์œต์ƒํ’ˆ.xlsx
897
+ [2025-11-25 00:31:03] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
898
+ [2025-11-25 00:31:03] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
899
+ [2025-11-25 00:31:04] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
900
+ [2025-11-25 00:31:15] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
901
+ [2025-11-25 00:31:15] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
902
+
903
+ [2025-11-25 00:31:22] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์นด์นด์˜ค๋ฑ…ํฌ ๊ธˆ์œต์ƒํ’ˆ.xlsx
904
+ [2025-11-25 00:31:22] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
905
+ [2025-11-25 00:31:22] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
906
+ [2025-11-25 00:31:24] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ๏ฟฝ๏ฟฝ ์ค‘ ...
907
+ [2025-11-25 00:31:40] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
908
+ [2025-11-25 00:31:40] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
909
+
910
+ [2025-11-25 00:31:40] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์นด์นด์˜ค๋ฑ…ํฌ ๊ธˆ์œต์ƒํ’ˆ.xlsx
911
+ [2025-11-25 00:31:40] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
912
+ [2025-11-25 00:31:40] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
913
+ [2025-11-25 00:31:41] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
914
+ [2025-11-25 00:31:54] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
915
+ [2025-11-25 00:31:54] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
916
+
917
+ [2025-11-25 00:32:04] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\kb ๊ธˆ์œต์ƒํ’ˆ.xlsx
918
+ [2025-11-25 00:32:04] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
919
+ [2025-11-25 00:32:04] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
920
+ [2025-11-25 00:32:05] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
921
+ [2025-11-25 00:32:30] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
922
+ [2025-11-25 00:32:30] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
923
+
924
+ [2025-11-25 00:32:30] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\kb ๊ธˆ์œต์ƒํ’ˆ.xlsx
925
+ [2025-11-25 00:32:30] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
926
+ [2025-11-25 00:32:30] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
927
+ [2025-11-25 00:32:31] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
928
+ [2025-11-25 00:32:44] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
929
+ [2025-11-25 00:32:44] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
930
+
931
+ [2025-11-25 00:32:50] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๋†ํ˜‘ ๊ธˆ์œต์ƒํ’ˆ.xlsx
932
+ [2025-11-25 00:32:50] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
933
+ [2025-11-25 00:32:50] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
934
+ [2025-11-25 00:32:51] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
935
+ [2025-11-25 00:33:11] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
936
+ [2025-11-25 00:33:11] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
937
+
938
+ [2025-11-25 00:33:11] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\๋†ํ˜‘ ๊ธˆ์œต์ƒํ’ˆ.xlsx
939
+ [2025-11-25 00:33:11] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
940
+ [2025-11-25 00:33:11] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
941
+ [2025-11-25 00:33:12] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
942
+ [2025-11-25 00:33:24] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
943
+ [2025-11-25 00:33:24] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
944
+
945
+ [2025-11-25 00:33:43] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์€ํ–‰ ์˜ˆ์ ๊ธˆ, ๋Œ€์ถœ ์ •๋ฆฌ.xlsx
946
+ [2025-11-25 00:33:43] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
947
+ [2025-11-25 00:33:43] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
948
+ [2025-11-25 00:33:44] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
949
+ [2025-11-25 00:34:11] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
950
+ [2025-11-25 00:34:11] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
951
+
952
+ [2025-11-25 00:34:11] ๐Ÿ“‚ ์ƒˆ EXCEL ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_excels\์€ํ–‰ ์˜ˆ์ ๊ธˆ, ๋Œ€์ถœ ์ •๋ฆฌ.xlsx
953
+ [2025-11-25 00:34:11] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
954
+ [2025-11-25 00:34:11] ๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
955
+ [2025-11-25 00:34:12] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
956
+ [2025-11-25 00:34:26] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
957
+ [2025-11-25 00:34:26] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
958
+
959
+ [2025-11-25 00:51:36] ๐Ÿ‘€ Excel & CSV & TXT ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)
960
+ [2025-11-25 00:52:34] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ1.txt
961
+ [2025-11-25 00:52:34] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
962
+ [2025-11-25 00:52:34] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
963
+ [2025-11-25 00:52:34] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
964
+ [2025-11-25 00:53:16] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
965
+ [2025-11-25 00:53:16] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
966
+
967
+ [2025-11-25 00:53:33] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ2.txt
968
+ [2025-11-25 00:53:33] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
969
+ [2025-11-25 00:53:33] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
970
+ [2025-11-25 00:53:33] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
971
+ [2025-11-25 00:53:45] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
972
+ [2025-11-25 00:53:45] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
973
+
974
+ [2025-11-25 00:53:51] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ3.txt
975
+ [2025-11-25 00:53:51] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
976
+ [2025-11-25 00:53:51] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
977
+ [2025-11-25 00:53:51] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
978
+ [2025-11-25 00:54:04] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
979
+ [2025-11-25 00:54:04] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
980
+
981
+ [2025-11-25 00:54:07] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ4.txt
982
+ [2025-11-25 00:54:07] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
983
+ [2025-11-25 00:54:07] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
984
+ [2025-11-25 00:54:08] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
985
+ [2025-11-25 00:54:20] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
986
+ [2025-11-25 00:54:20] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
987
+
988
+ [2025-11-25 00:54:39] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ5.txt
989
+ [2025-11-25 00:54:39] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
990
+ [2025-11-25 00:54:39] ๐Ÿ“„ TXT ๏ฟฝ๏ฟฝ๏ฟฝ JSON ๋ณ€ํ™˜ ์ค‘ ...
991
+ [2025-11-25 00:54:39] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
992
+ [2025-11-25 00:54:51] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
993
+ [2025-11-25 00:54:51] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
994
+
995
+ [2025-11-25 00:54:58] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ6.txt
996
+ [2025-11-25 00:54:58] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
997
+ [2025-11-25 00:54:58] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
998
+ [2025-11-25 00:54:58] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
999
+ [2025-11-25 00:55:09] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1000
+ [2025-11-25 00:55:09] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1001
+
1002
+ [2025-11-25 00:55:09] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ6.txt
1003
+ [2025-11-25 00:55:09] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
1004
+ [2025-11-25 00:55:09] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
1005
+ [2025-11-25 00:55:09] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
1006
+ [2025-11-25 00:55:21] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1007
+ [2025-11-25 00:55:21] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1008
+
1009
+ [2025-11-25 00:55:21] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ5.txt
1010
+ [2025-11-25 00:55:21] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
1011
+ [2025-11-25 00:55:21] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
1012
+ [2025-11-25 00:55:21] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
1013
+ [2025-11-25 00:55:33] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1014
+ [2025-11-25 00:55:33] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1015
+
1016
+ [2025-11-25 00:55:33] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ4.txt
1017
+ [2025-11-25 00:55:33] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
1018
+ [2025-11-25 00:55:33] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
1019
+ [2025-11-25 00:55:33] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
1020
+ [2025-11-25 00:55:45] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1021
+ [2025-11-25 00:55:45] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1022
+
1023
+ [2025-11-25 00:55:45] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ3.txt
1024
+ [2025-11-25 00:55:45] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
1025
+ [2025-11-25 00:55:45] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
1026
+ [2025-11-25 00:55:45] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
1027
+ [2025-11-25 00:55:58] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1028
+ [2025-11-25 00:55:58] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1029
+
1030
+ [2025-11-25 00:55:58] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ2.txt
1031
+ [2025-11-25 00:55:58] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
1032
+ [2025-11-25 00:55:58] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
1033
+ [2025-11-25 00:55:58] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
1034
+ [2025-11-25 00:56:10] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1035
+ [2025-11-25 00:56:10] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1036
+
1037
+ [2025-11-25 00:56:10] ๐Ÿ“‚ ์ƒˆ TXT ํŒŒ์ผ ๊ฐ์ง€๋จ: data/raw_txt\์ง€์‹๋น„ํƒ€๋ฏผ1.txt
1038
+ [2025-11-25 00:56:10] ๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘
1039
+ [2025-11-25 00:56:10] ๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...
1040
+ [2025-11-25 00:56:11] ๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...
1041
+ [2025-11-25 00:56:22] ๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ data/deposit_docs.json
1042
+ [2025-11-25 00:56:22] โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!
1043
+
1044
+ [2025-11-25 01:23:25] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
1045
+ [2025-11-25 01:47:14] ๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ
main.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+
4
+ from agents.question_agent import suggest_questions
5
+ from agents.rag_agent import answer_question
6
+
7
+ app = FastAPI()
8
+
9
+ # --- CORS ์„ค์ • ์ถ”๊ฐ€ ---
10
+ origins = [
11
+ "http://localhost:5173", # Vite ๊ธฐ๋ณธ ํฌํŠธ
12
+ "http://127.0.0.1:5173",
13
+ "*", # ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ์ „์ฒด ํ—ˆ์šฉ ๊ฐ€๋Šฅ
14
+ ]
15
+
16
+ app.add_middleware(
17
+ CORSMiddleware,
18
+ allow_origins=origins,
19
+ allow_credentials=True,
20
+ allow_methods=["*"],
21
+ allow_headers=["*"],
22
+ )
23
+ # ------------------------
24
+
25
+
26
+ @app.get("/health")
27
+ def health():
28
+ return {"status": "ok"}
29
+
30
+ @app.post("/suggest")
31
+ def suggest(data: dict):
32
+ print(f"๐Ÿ“ฅ [POST /suggest] Request Body: {data}")
33
+ return suggest_questions(data["user_message"], data.get("user_profile", {}))
34
+
35
+ @app.post("/answer")
36
+ def answer(data: dict):
37
+ print(f"๐Ÿ“ฅ [POST /answer] Request Body: {data}")
38
+ return answer_question(data["selected_question"], data.get("user_profile", {}))
models.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel, Field
2
+ from typing import List, Optional, Dict
3
+
4
+ class SuggestRequest(BaseModel):
5
+ user_message: str
6
+ user_profile: Dict = Field(default_factory=dict)
7
+
8
+ class SuggestResponse(BaseModel):
9
+ category: str = "์ƒํ’ˆ ์ถ”์ฒœ / ๋น„๊ต"
10
+ suggested_questions: List[str]
11
+
12
+ class AnswerRequest(BaseModel):
13
+ selected_question: str
14
+
15
+ class AnswerResponse(BaseModel):
16
+ answer: str
17
+ source_docs: List[str] = []
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fastapi==0.115.2
2
+ uvicorn[standard]==0.30.6
3
+ openai==1.51.2
4
+ faiss-cpu==1.8.0.post1
5
+ sentence-transformers==3.1.1
6
+ pydantic==2.9.2
7
+ numpy==1.26.4
8
+ chardet
9
+ watchdog
10
+ pandas
11
+ openpyxl
scripts/build_index.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os, json, pickle
2
+ import numpy as np
3
+ from sentence_transformers import SentenceTransformer
4
+ import faiss
5
+
6
+ # ๊ฒฝ๋กœ ์„ค์ •
7
+ BASE_DIR = os.path.dirname(os.path.dirname(__file__))
8
+ DATA_PATH = os.path.join(BASE_DIR, "data", "deposit_docs.json")
9
+ VEC_DIR = os.path.join(BASE_DIR, "vector_db")
10
+ os.makedirs(VEC_DIR, exist_ok=True)
11
+
12
+ INDEX_PATH = os.path.join(VEC_DIR, "deposit.index")
13
+ META_PATH = os.path.join(VEC_DIR, "deposit_meta.pkl")
14
+
15
+ # ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ
16
+ MODEL_NAME = "intfloat/multilingual-e5-base"
17
+
18
+ # ํ•œ ๋ฒˆ์— ์ž„๋ฒ ๋”ฉํ•  ๋ฐฐ์น˜ ํฌ๊ธฐ
19
+ BATCH_SIZE = 100
20
+
21
+ def main():
22
+ # ์ƒˆ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
23
+ with open(DATA_PATH, "r", encoding="utf-8") as f:
24
+ new_docs = json.load(f)
25
+
26
+ # ๋ชจ๋ธ ๋กœ๋“œ
27
+ model = SentenceTransformer(MODEL_NAME, device="cpu", model_kwargs={"low_cpu_mem_usage": False})
28
+
29
+ # ๊ธฐ์กด ์ธ๋ฑ์Šค ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋กœ๋“œ
30
+ if os.path.exists(INDEX_PATH) and os.path.exists(META_PATH):
31
+ print("๐Ÿ“ฆ ๊ธฐ์กด ์ธ๋ฑ์Šค ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋กœ๋“œ ์ค‘ ...")
32
+ index = faiss.read_index(INDEX_PATH)
33
+ with open(META_PATH, "rb") as f:
34
+ old_meta = pickle.load(f)
35
+ else:
36
+ print("๐Ÿ†• ์ƒˆ ์ธ๋ฑ์Šค ์ƒ์„ฑ ์ค‘ ...")
37
+ index = None
38
+ old_meta = []
39
+
40
+ # ๊ธฐ์กด ํ…์ŠคํŠธ ์ค‘๋ณต ๋ฐฉ์ง€
41
+ existing_texts = set(d["content"] for d in old_meta)
42
+ filtered_docs = [d for d in new_docs if d["content"] not in existing_texts]
43
+
44
+ if not filtered_docs:
45
+ print("โš ๏ธ ์ถ”๊ฐ€ํ•  ์ƒˆ๋กœ์šด ๋ฌธ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.")
46
+ return
47
+
48
+ total = len(filtered_docs)
49
+ print(f"โž• {total}๊ฐœ์˜ ์ƒˆ ๋ฌธ์„œ ์ถ”๊ฐ€ ์ค‘ ...")
50
+
51
+ # ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ ๋ฐ ๋กœ๊ทธ ์ถœ๋ ฅ
52
+ all_embs = []
53
+ for i in range(0, total, BATCH_SIZE):
54
+ batch_docs = filtered_docs[i:i + BATCH_SIZE]
55
+ texts = [d["content"] for d in batch_docs]
56
+ emb = model.encode(texts, normalize_embeddings=True).astype(np.float32)
57
+ all_embs.append(emb)
58
+
59
+ # โœ… 100๊ฐœ ๋‹จ์œ„ ๋กœ๊ทธ ์ถœ๋ ฅ
60
+ print(f"[INFO] {min(i + BATCH_SIZE, total)}/{total} rows processed...")
61
+
62
+ # ์ „์ฒด ๋ณ‘ํ•ฉ
63
+ all_embs = np.vstack(all_embs)
64
+ dim = all_embs.shape[1]
65
+
66
+ # ์ธ๋ฑ์Šค ์ดˆ๊ธฐํ™” ๋˜๋Š” ๊ธฐ์กด ์ด์–ด์“ฐ๊ธฐ
67
+ if index is None:
68
+ index = faiss.IndexFlatIP(dim)
69
+ index.add(all_embs)
70
+
71
+ updated_meta = old_meta + filtered_docs
72
+
73
+ # ์ €์žฅ
74
+ faiss.write_index(index, INDEX_PATH)
75
+ with open(META_PATH, "wb") as f:
76
+ pickle.dump(updated_meta, f)
77
+
78
+ print(f"โœ… ์ธ๋ฑ์‹ฑ ์™„๋ฃŒ (์ด {len(updated_meta)}๊ฐœ ๋ฌธ์„œ)")
79
+ print(f"- index: {INDEX_PATH}")
80
+ print(f"- meta : {META_PATH}")
81
+
82
+ if __name__ == "__main__":
83
+ main()
scripts/convert_csv_to_json.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import json
3
+ import os
4
+ import re
5
+ import sys
6
+ import chardet # ์ธ์ฝ”๋”ฉ ๊ฐ์ง€๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ (pip install chardet)
7
+
8
+ # โœ… ์™ธ๋ถ€์—์„œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ
9
+ if len(sys.argv) < 2:
10
+ raise ValueError("โŒ CSV ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: python convert_csv_to_json_auto.py data/raw_data/์ƒˆํŒŒ์ผ.csv")
11
+
12
+ CSV_PATH = sys.argv[1]
13
+ JSON_PATH = "data/deposit_docs.json"
14
+
15
+ # ============================================
16
+ # 1๏ธโƒฃ CSV ์ธ์ฝ”๋”ฉ ๋ฐ ํ—ค๋” ์ž๋™ ๊ฐ์ง€
17
+ # ============================================
18
+
19
+ def read_csv_auto(path):
20
+ """CSV ์ธ์ฝ”๋”ฉ ๋ฐ ํ—ค๋” ์ž๋™ ๊ฐ์ง€ ํ›„ DataFrame์œผ๋กœ ๋กœ๋“œ"""
21
+ try:
22
+ # ๐Ÿ” ์ธ์ฝ”๋”ฉ ์ž๋™ ๊ฐ์ง€
23
+ with open(path, "rb") as f:
24
+ encoding_info = chardet.detect(f.read(50000))
25
+ encoding = encoding_info["encoding"] or "utf-8"
26
+
27
+ # ์ฒซ ์ค„ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ
28
+ preview = pd.read_csv(path, nrows=1, header=None, encoding=encoding)
29
+ first_row = preview.iloc[0].tolist()
30
+ str_ratio = sum(isinstance(x, str) for x in first_row) / len(first_row)
31
+
32
+ if str_ratio > 0.5:
33
+ print(f"โœ… ํ—ค๋” ๊ฐ์ง€๋จ โ†’ ์ฒซ ํ–‰์„ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์ธ์ฝ”๋”ฉ: {encoding})")
34
+ df = pd.read_csv(path, header=0, encoding=encoding)
35
+ else:
36
+ print(f"โš ๏ธ ํ—ค๋” ์—†์Œ โ†’ ์ž„์˜ ์ปฌ๋Ÿผ๋ช… ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. (์ธ์ฝ”๋”ฉ: {encoding})")
37
+ df = pd.read_csv(path, header=None, encoding=encoding)
38
+ df.columns = [f"์ปฌ๋Ÿผ{i+1}" for i in range(len(df.columns))]
39
+ except Exception as e:
40
+ raise RuntimeError(f"CSV ๋กœ๋“œ ์‹คํŒจ: {e}")
41
+ return df.fillna("")
42
+
43
+ df = read_csv_auto(CSV_PATH)
44
+
45
+ # ============================================
46
+ # 2๏ธโƒฃ ์ฃผ์š” ์ปฌ๋Ÿผ ์ž๋™ ํƒ์ง€ (๊ธˆ๋ฆฌ / ์€ํ–‰๋ช… / ์ƒํ’ˆ๋ช… / ๊ธฐ๊ฐ„)
47
+ # ============================================
48
+
49
+ def detect_column(columns, keywords):
50
+ for col in columns:
51
+ if any(kw in str(col) for kw in keywords):
52
+ return col
53
+ return None
54
+
55
+ col_bank = detect_column(df.columns, ["๊ธˆ์œตํšŒ์‚ฌ", "์€ํ–‰", "๊ธฐ๊ด€"])
56
+ col_product = detect_column(df.columns, ["์ƒํ’ˆ", "์˜ˆ๊ธˆ", "ํŽ€๋“œ", "๋Œ€์ถœ"])
57
+ col_rate = detect_column(df.columns, ["๊ธˆ๋ฆฌ", "์ด์œจ", "์ˆ˜์ต๋ฅ "])
58
+ col_period = detect_column(df.columns, ["๊ธฐ๊ฐ„", "๋งŒ๊ธฐ", "๊ฐ€์ž…"])
59
+
60
+ # ============================================
61
+ # 3๏ธโƒฃ ๊ฐ ํ–‰(row)์„ ๋ฌธ์žฅ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
62
+ # ============================================
63
+
64
+ records = []
65
+ for _, row in df.iterrows():
66
+ text_parts = [f"{col}: {row[col]}" for col in df.columns]
67
+ combined_text = " | ".join(text_parts)
68
+
69
+ # ๊ธˆ๋ฆฌ ์ˆซ์ž ๋ณ€ํ™˜
70
+ rate_val = None
71
+ if col_rate and str(row[col_rate]).strip() != "":
72
+ match = re.search(r"[\d.]+", str(row[col_rate]))
73
+ rate_val = float(match.group()) if match else None
74
+
75
+ meta = {
76
+ "bank": str(row[col_bank]) if col_bank else None,
77
+ "product": str(row[col_product]) if col_product else None,
78
+ "rate": rate_val,
79
+ "period": str(row[col_period]) if col_period else None,
80
+ }
81
+
82
+ records.append({
83
+ "source": os.path.basename(CSV_PATH),
84
+ "content": combined_text,
85
+ "meta": {k: v for k, v in meta.items() if v not in [None, ""]},
86
+ })
87
+
88
+ # ============================================
89
+ # 4๏ธโƒฃ ๊ธฐ์กด JSON ๋ณ‘ํ•ฉ ๋ฐ ์ €์žฅ
90
+ # ============================================
91
+
92
+ if os.path.exists(JSON_PATH):
93
+ with open(JSON_PATH, "r", encoding="utf-8") as f:
94
+ old_data = json.load(f)
95
+ else:
96
+ old_data = []
97
+
98
+ source_name = os.path.basename(CSV_PATH)
99
+ filtered_old = [item for item in old_data if item["source"] != source_name]
100
+ new_data = filtered_old + records
101
+
102
+ os.makedirs(os.path.dirname(JSON_PATH), exist_ok=True)
103
+ with open(JSON_PATH, "w", encoding="utf-8") as f:
104
+ json.dump(new_data, f, ensure_ascii=False, indent=2)
105
+
106
+ print(f"\nโœ… ์ด {len(records)}๊ฐœ์˜ ํ–‰์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.")
107
+ print(f"๐Ÿ“ ์ €์žฅ ์œ„์น˜: {JSON_PATH}")
108
+ if col_rate is None:
109
+ print("โš ๏ธ ๊ธˆ๋ฆฌ ์ปฌ๋Ÿผ์„ ์ž๋™์œผ๋กœ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. rate ํ•„๋“œ๋Š” None์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.")
scripts/convert_excel_to_json.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import json
3
+ import os
4
+ import re
5
+ import sys
6
+
7
+ # โœ… ์™ธ๋ถ€์—์„œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ
8
+ if len(sys.argv) < 2:
9
+ raise ValueError("โŒ Excel ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: python convert_excel_to_json_auto.py data/raw_excels/์ƒˆํŒŒ์ผ.xlsx")
10
+
11
+ EXCEL_PATH = sys.argv[1]
12
+ JSON_PATH = "data/deposit_docs.json"
13
+
14
+ # โš ๏ธ ์—‘์…€ ์ž„์‹œํŒŒ์ผ(~$) ๋ฌด์‹œ
15
+ if os.path.basename(EXCEL_PATH).startswith("~$"):
16
+ print(f"โญ๏ธ ์ž„์‹œํŒŒ์ผ ๊ฐ์ง€๋จ, ์ฒ˜๋ฆฌ ์ƒ๋žต: {EXCEL_PATH}")
17
+ sys.exit(0)
18
+
19
+ # ============================================
20
+ # 1๏ธโƒฃ ์—‘์…€ ํ—ค๋” ์ž๋™ ๊ฐ์ง€
21
+ # ============================================
22
+
23
+ def read_excel_auto(path):
24
+ """์—‘์…€ ํ—ค๋” ์œ ๋ฌด ์ž๋™ ๊ฐ์ง€ ํ›„ DataFrame์œผ๋กœ ๋กœ๋“œ"""
25
+ try:
26
+ preview = pd.read_excel(path, nrows=1, header=None)
27
+ first_row = preview.iloc[0].tolist()
28
+ str_ratio = sum(isinstance(x, str) for x in first_row) / len(first_row)
29
+
30
+ if str_ratio > 0.5:
31
+ print("โœ… ํ—ค๋” ๊ฐ์ง€๋จ โ†’ ์ฒซ ํ–‰์„ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.")
32
+ df = pd.read_excel(path, header=0)
33
+ else:
34
+ print("โš ๏ธ ํ—ค๋” ์—†์Œ โ†’ ์ž„์˜ ์ปฌ๋Ÿผ๋ช…(์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2...) ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.")
35
+ df = pd.read_excel(path, header=None)
36
+ df.columns = [f"์ปฌ๋Ÿผ{i+1}" for i in range(len(df.columns))]
37
+ except Exception as e:
38
+ raise RuntimeError(f"์—‘์…€ ๋กœ๋“œ ์‹คํŒจ: {e}")
39
+ return df.fillna("")
40
+
41
+ df = read_excel_auto(EXCEL_PATH)
42
+
43
+ # ============================================
44
+ # 2๏ธโƒฃ ์ฃผ์š” ์ปฌ๋Ÿผ ์ž๋™ ํƒ์ง€ (๊ธˆ๋ฆฌ / ์€ํ–‰๋ช… / ์ƒํ’ˆ๋ช… / ๊ธฐ๊ฐ„)
45
+ # ============================================
46
+
47
+ def detect_column(columns, keywords):
48
+ for col in columns:
49
+ if any(kw in str(col) for kw in keywords):
50
+ return col
51
+ return None
52
+
53
+ col_bank = detect_column(df.columns, ["๊ธˆ์œตํšŒ์‚ฌ", "์€ํ–‰", "๊ธฐ๊ด€"])
54
+ col_product = detect_column(df.columns, ["์ƒํ’ˆ", "์˜ˆ๊ธˆ", "ํŽ€๋“œ", "๋Œ€์ถœ"])
55
+ col_rate = detect_column(df.columns, ["๊ธˆ๋ฆฌ", "์ด์œจ", "์ˆ˜์ต๋ฅ "])
56
+ col_period = detect_column(df.columns, ["๊ธฐ๊ฐ„", "๋งŒ๊ธฐ", "๊ฐ€์ž…"])
57
+
58
+ # ============================================
59
+ # 3๏ธโƒฃ ๊ธˆ๋ฆฌ ์ˆซ์ž ๋ณ€ํ™˜ ํ•จ์ˆ˜ (๋‚ ์งœ ๋“ฑ ์˜ค์ธ ๋ฐฉ์ง€)
60
+ # ============================================
61
+
62
+ def parse_rate(value):
63
+ if pd.isna(value):
64
+ return None
65
+ s = str(value).strip()
66
+ # ์ˆซ์ž ์ถ”์ถœ
67
+ match = re.search(r"\d+(\.\d+)?", s)
68
+ if not match:
69
+ return None
70
+ num = float(match.group())
71
+ # ๋‚ ์งœ๋กœ ์ธ์‹๋˜๋Š” ์ˆซ์ž(100 ์ด์ƒ or ์—ฐ๋„ ํ˜•ํƒœ) ์ œ์™ธ
72
+ if num > 50 or "202" in s or "๋…„" in s:
73
+ return None
74
+ return num
75
+
76
+ # ============================================
77
+ # 4๏ธโƒฃ ๊ฐ ํ–‰(row)์„ ๋ฌธ์žฅ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
78
+ # ============================================
79
+
80
+ records = []
81
+ for _, row in df.iterrows():
82
+ text_parts = [f"{col}: {row[col]}" for col in df.columns]
83
+ combined_text = " | ".join(text_parts)
84
+
85
+ rate_val = parse_rate(row[col_rate]) if col_rate else None
86
+
87
+ meta = {
88
+ "bank": str(row[col_bank]) if col_bank else None,
89
+ "product": str(row[col_product]) if col_product else None,
90
+ "rate": rate_val,
91
+ "period": str(row[col_period]) if col_period else None,
92
+ }
93
+
94
+ records.append({
95
+ "source": os.path.basename(EXCEL_PATH),
96
+ "content": combined_text,
97
+ "meta": {k: v for k, v in meta.items() if v not in [None, ""]}
98
+ })
99
+
100
+ # ============================================
101
+ # 5๏ธโƒฃ ๊ธฐ์กด JSON ๋ณ‘ํ•ฉ ๋ฐ ์ €์žฅ
102
+ # ============================================
103
+
104
+ if os.path.exists(JSON_PATH):
105
+ with open(JSON_PATH, "r", encoding="utf-8") as f:
106
+ old_data = json.load(f)
107
+ else:
108
+ old_data = []
109
+
110
+ source_name = os.path.basename(EXCEL_PATH)
111
+ filtered_old = [item for item in old_data if item["source"] != source_name]
112
+ new_data = filtered_old + records
113
+
114
+ os.makedirs(os.path.dirname(JSON_PATH), exist_ok=True)
115
+ with open(JSON_PATH, "w", encoding="utf-8") as f:
116
+ json.dump(new_data, f, ensure_ascii=False, indent=2)
117
+
118
+ print(f"\nโœ… ์ด {len(records)}๊ฐœ์˜ ํ–‰์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.")
119
+ print(f"๐Ÿ“ ์ €์žฅ ์œ„์น˜: {JSON_PATH}")
120
+ if col_rate is None:
121
+ print("โš ๏ธ ๊ธˆ๋ฆฌ ์ปฌ๋Ÿผ์„ ์ž๋™์œผ๋กœ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. rate ํ•„๋“œ๋Š” None์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.")
scripts/convert_txt_to_json.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ import sys
4
+ import chardet
5
+
6
+ # โœ… ์™ธ๋ถ€์—์„œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ
7
+ if len(sys.argv) < 2:
8
+ raise ValueError("โŒ ํ…์ŠคํŠธ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: python convert_txt_to_json.py data/raw_txt/์ƒˆํŒŒ์ผ.txt")
9
+
10
+ TXT_PATH = sys.argv[1]
11
+ JSON_PATH = "data/deposit_docs.json"
12
+
13
+ def read_txt_auto(path):
14
+ """ํ…์ŠคํŠธ ํŒŒ์ผ ์ธ์ฝ”๋”ฉ ์ž๋™ ๊ฐ์ง€ ํ›„ ๋‚ด์šฉ ์ฝ๊ธฐ"""
15
+ try:
16
+ # ๐Ÿ” ์ธ์ฝ”๋”ฉ ์ž๋™ ๊ฐ์ง€
17
+ with open(path, "rb") as f:
18
+ raw_data = f.read()
19
+ encoding_info = chardet.detect(raw_data)
20
+
21
+ encoding = encoding_info["encoding"] or "utf-8"
22
+ print(f"โœ… ์ธ์ฝ”๋”ฉ ๊ฐ์ง€๋จ: {encoding}")
23
+
24
+ return raw_data.decode(encoding)
25
+ except Exception as e:
26
+ raise RuntimeError(f"TXT ๋กœ๋“œ ์‹คํŒจ: {e}")
27
+
28
+ # ํ…์ŠคํŠธ ๋‚ด์šฉ ์ฝ๊ธฐ
29
+ content = read_txt_auto(TXT_PATH)
30
+
31
+ # ============================================
32
+ # JSON ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
33
+ # ============================================
34
+
35
+ # ํ…์ŠคํŠธ ํŒŒ์ผ์€ ์ „์ฒด ๋‚ด์šฉ์„ ํ•˜๋‚˜์˜ ๋ฌธ์„œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜,
36
+ # ํ•„์š”์— ๋”ฐ๋ผ ๋‹จ๋ฝ๋ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
37
+ # ์—ฌ๊ธฐ์„œ๋Š” ์ „์ฒด ๋‚ด์šฉ์„ ํ•˜๋‚˜์˜ 'content'๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
38
+
39
+ record = {
40
+ "source": os.path.basename(TXT_PATH),
41
+ "content": content,
42
+ "meta": {
43
+ "type": "text_file",
44
+ "original_path": TXT_PATH
45
+ }
46
+ }
47
+
48
+ # ============================================
49
+ # ๊ธฐ์กด JSON ๋ณ‘ํ•ฉ ๋ฐ ์ €์žฅ
50
+ # ============================================
51
+
52
+ if os.path.exists(JSON_PATH):
53
+ with open(JSON_PATH, "r", encoding="utf-8") as f:
54
+ try:
55
+ old_data = json.load(f)
56
+ except json.JSONDecodeError:
57
+ old_data = []
58
+ else:
59
+ old_data = []
60
+
61
+ source_name = os.path.basename(TXT_PATH)
62
+ # ๊ธฐ์กด์— ๊ฐ™์€ ํŒŒ์ผ๋ช…์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ œ๊ฑฐ (์ค‘๋ณต ๋ฐฉ์ง€)
63
+ filtered_old = [item for item in old_data if item.get("source") != source_name]
64
+
65
+ # ์ƒˆ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
66
+ filtered_old.append(record)
67
+
68
+ os.makedirs(os.path.dirname(JSON_PATH), exist_ok=True)
69
+ with open(JSON_PATH, "w", encoding="utf-8") as f:
70
+ json.dump(filtered_old, f, ensure_ascii=False, indent=2)
71
+
72
+ print(f"\nโœ… ํ…์ŠคํŠธ ํŒŒ์ผ ์ฒ˜๋ฆฌ ์™„๋ฃŒ: {source_name}")
73
+ print(f"๐Ÿ“ ์ €์žฅ ์œ„์น˜: {JSON_PATH}")
scripts/update_pipeline.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ from datetime import datetime
4
+ from watchdog.observers import Observer
5
+ from watchdog.events import FileSystemEventHandler
6
+
7
+ # ๐Ÿ“ ๊ฐ์‹œ ๋Œ€์ƒ ํด๋”
8
+ EXCEL_DIR = "data/raw_excels"
9
+ CSV_DIR = "data/raw_csv"
10
+ TXT_DIR = "data/raw_txt"
11
+
12
+ # ๐Ÿ—‚ ๋กœ๊ทธ ๋ฐ ์ž„์‹œ ๊ฒฝ๋กœ
13
+ LOG_PATH = "logs/update_log.txt"
14
+ JSON_PATH = "data/deposit_docs.json"
15
+
16
+ def log(msg):
17
+ """ํ„ฐ๋ฏธ๋„ ๋ฐ ๋กœ๊ทธ ํŒŒ์ผ์— ๋™์‹œ์— ์ถœ๋ ฅ"""
18
+ msg_full = f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}"
19
+ print(msg_full)
20
+ os.makedirs(os.path.dirname(LOG_PATH), exist_ok=True)
21
+ with open(LOG_PATH, "a", encoding="utf-8") as f:
22
+ f.write(msg_full + "\n")
23
+
24
+ def run_pipeline(file_path, file_type="excel"):
25
+ log(f"๐Ÿ“‚ ์ƒˆ {file_type.upper()} ํŒŒ์ผ ๊ฐ์ง€๋จ: {file_path}")
26
+ log("๐Ÿ”„ ๋ณ€ํ™˜ ๋ฐ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์ž‘")
27
+
28
+ # 1๏ธโƒฃ ์—‘์…€/CSV โ†’ JSON ๋ณ€ํ™˜
29
+ if file_type == "excel":
30
+ log("๐Ÿ“„ Excel โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...")
31
+ os.system(f"python scripts/convert_excel_to_json.py \"{file_path}\"")
32
+ elif file_type == "csv":
33
+ log("๐Ÿ“„ CSV โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...")
34
+ os.system(f"python scripts/convert_csv_to_json.py \"{file_path}\"")
35
+ elif file_type == "txt":
36
+ log("๐Ÿ“„ TXT โ†’ JSON ๋ณ€ํ™˜ ์ค‘ ...")
37
+ os.system(f"python scripts/convert_txt_to_json.py \"{file_path}\"")
38
+
39
+ # 2๏ธโƒฃ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ
40
+ log("๐Ÿง  ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ ์ค‘ ...")
41
+ os.system("python scripts/build_index.py")
42
+
43
+ # 3๏ธโƒฃ JSON ํŒŒ์ผ ์‚ญ์ œ (์ž„์‹œ ์บ์‹œ ์ œ๊ฑฐ)
44
+ if os.path.exists(JSON_PATH):
45
+ try:
46
+ os.remove(JSON_PATH)
47
+ log(f"๐Ÿงน ์ž„์‹œ JSON ํŒŒ์ผ ์‚ญ์ œ ์™„๋ฃŒ โ†’ {JSON_PATH}")
48
+ except Exception as e:
49
+ log(f"โš ๏ธ JSON ์‚ญ์ œ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {e}")
50
+
51
+ # ์™„๋ฃŒ ๋กœ๊ทธ
52
+ log("โœ… ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ!\n")
53
+
54
+ class DataEventHandler(FileSystemEventHandler):
55
+ """ํด๋” ๋‚ด .xlsx / .xls / .csv ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€ ์‹œ ์ž๋™ ์‹คํ–‰"""
56
+ def on_modified(self, event):
57
+ if event.is_directory:
58
+ return
59
+ if event.src_path.endswith((".xlsx", ".xls")):
60
+ run_pipeline(event.src_path, "excel")
61
+ elif event.src_path.endswith(".csv"):
62
+ run_pipeline(event.src_path, "csv")
63
+ elif event.src_path.endswith(".txt"):
64
+ run_pipeline(event.src_path, "txt")
65
+
66
+ def on_created(self, event):
67
+ if event.is_directory:
68
+ return
69
+ if event.src_path.endswith((".xlsx", ".xls")):
70
+ run_pipeline(event.src_path, "excel")
71
+ elif event.src_path.endswith(".csv"):
72
+ run_pipeline(event.src_path, "csv")
73
+ elif event.src_path.endswith(".txt"):
74
+ run_pipeline(event.src_path, "txt")
75
+
76
+ if __name__ == "__main__":
77
+ os.makedirs(EXCEL_DIR, exist_ok=True)
78
+ os.makedirs(CSV_DIR, exist_ok=True)
79
+ os.makedirs(TXT_DIR, exist_ok=True)
80
+
81
+ log("๐Ÿ‘€ Excel & CSV & TXT ํด๋” ๊ฐ์‹œ ์‹œ์ž‘ ... (Ctrl+C๋กœ ์ข…๋ฃŒ)")
82
+
83
+ observer = Observer()
84
+ handler = DataEventHandler()
85
+
86
+ # ๋‘ ํด๋” ๊ฐ์‹œ ๋“ฑ๋ก
87
+ observer.schedule(handler, path=EXCEL_DIR, recursive=False)
88
+ observer.schedule(handler, path=CSV_DIR, recursive=False)
89
+ observer.schedule(handler, path=TXT_DIR, recursive=False)
90
+ observer.start()
91
+
92
+ try:
93
+ while True:
94
+ time.sleep(1)
95
+ except KeyboardInterrupt:
96
+ observer.stop()
97
+ log("๐Ÿ›‘ ํด๋” ๊ฐ์‹œ ์ค‘๋‹จ๋จ")
98
+
99
+ observer.join()
services/llm_service.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from typing import List, Dict, Optional
3
+ from openai import OpenAI
4
+
5
+ USE_MOCK = os.getenv("USE_MOCK_LLM", "0") == "1"
6
+ OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
7
+
8
+ _client = None
9
+ # Lazy initialization of OpenAI client
10
+ def _client_lazy():
11
+ global _client
12
+ if _client is None:
13
+ _client = OpenAI() # ํ™˜๊ฒฝ๋ณ€์ˆ˜ OPENAI_API_KEY ํ•„์š”
14
+ return _client
15
+
16
+ # Mock functions for testing without actual LLM calls
17
+ def _mock_questions(user_message: str, user_profile: Dict, restrict_topics: Optional[List[str]] = None) -> List[str]:
18
+ # ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ mock ์งˆ๋ฌธ ์ƒ์„ฑ
19
+ if "๋Œ€์ถœ" in user_message:
20
+ return ["๋Œ€์ถœ ๊ธˆ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •๋˜๋‚˜์š”?", "์‹ ์šฉ๋Œ€์ถœ๊ณผ ๋‹ด๋ณด๋Œ€์ถœ์˜ ์ฐจ์ด๋Š”?", "๋Œ€์ถœ ํ•œ๋„๋Š” ์–ด๋–ป๊ฒŒ ์‚ฐ์ •๋˜๋‚˜์š”?"]
21
+ elif "ํŽ€๋“œ" in user_message or "ํˆฌ์ž" in user_message:
22
+ return ["ํŽ€๋“œ์™€ ์ฃผ์‹ ํˆฌ์ž์˜ ์ฐจ์ด๋Š”?", "์•ˆ์ •์ ์ธ ํŽ€๋“œ ์ƒํ’ˆ ์ถ”์ฒœํ•ด์ฃผ์„ธ์š”", "ํŽ€๋“œ ์ˆ˜์ต๋ฅ ์€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•˜๋‚˜์š”?"]
23
+ else:
24
+ return [
25
+ "์˜ˆ๊ธˆ๊ณผ ์ ๊ธˆ์˜ ์ฐจ์ด๊ฐ€ ๋ญ์˜ˆ์š”?",
26
+ "๋‹จ๊ธฐ ์ €์ถ•์— ๋” ์œ ๋ฆฌํ•œ ์ƒํ’ˆ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?",
27
+ "์ ๊ธˆ์ด ์˜ˆ๊ธˆ๋ณด๋‹ค ์ด์ž๊ฐ€ ํ•ญ์ƒ ๋†’์€๊ฐ€์š”?",
28
+ "์˜ˆ๊ธˆ/์ ๊ธˆ ์ค‘๋„ํ•ด์ง€ ์‹œ ๋ถˆ์ด์ต์ด ์žˆ๋‚˜์š”?",
29
+ "๊ธˆ๋ฆฌ ๋น„๊ต ์‹œ ์–ด๋–ค ๊ธฐ์ค€์„ ๋ด์•ผ ํ•˜๋‚˜์š”?"
30
+ ]
31
+ return base if 'base' in locals() else []
32
+
33
+ def _mock_answer(question: str, context: str) -> str:
34
+ return f"๋ชจ์˜์‘๋‹ต: ์งˆ๋ฌธ \"{question}\"์— ๋Œ€ํ•ด ๋ฌธ์„œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์š”์•ฝํ•˜๋ฉด โ€” {context[:120]}..."
35
+
36
+ def generate_questions_from_context(user_message: str, user_profile: Dict, similar_docs: List[Dict]) -> List[str]:
37
+ """๋ฒกํ„ฐ DB์—์„œ ๊ฒ€์ƒ‰๋œ ๋ฌธ์„œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์งˆ๋ฌธ ์ƒ์„ฑ"""
38
+ if USE_MOCK:
39
+ return _mock_questions(user_message, user_profile, None)
40
+
41
+ # ๋ฌธ์„œ ๋‚ด์šฉ ์ถ”์ถœ ๋ฐ ํฌ๋งทํŒ…
42
+ context_parts = []
43
+ for i, doc in enumerate(similar_docs[:5], 1):
44
+ doc_content = doc.get('content', '') or doc.get('text', '')
45
+ doc_meta = doc.get('meta', {})
46
+ context_parts.append(f"[๋ฌธ์„œ {i}] {doc_meta}\n๋‚ด์šฉ: {doc_content[:200]}...")
47
+
48
+ context = "\n\n".join(context_parts)
49
+
50
+ prompt = f"""
51
+ ๋‹น์‹ ์€ ๊ธˆ์œต ์ฑ—๋ด‡์˜ '์งˆ๋ฌธ ์ถ”์ฒœ' ์—ญํ• ์ž…๋‹ˆ๋‹ค.
52
+ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์„œ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•ดํ•  ๋งŒํ•œ ์งˆ๋ฌธ 5๊ฐœ๋ฅผ ์ œ์•ˆํ•˜์„ธ์š”.
53
+
54
+ **์ค‘์š”**: ์•„๋ž˜ ๊ฒ€์ƒ‰๋œ ๋ฌธ์„œ ๋‚ด์šฉ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋‹ต๋ณ€ ๊ฐ€๋Šฅํ•œ ์งˆ๋ฌธ๋งŒ ์ƒ์„ฑํ•˜์„ธ์š”.
55
+ ์งˆ๋ฌธ์€ ์งง๊ณ  ํด๋ฆญํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ์„ธ์š”.
56
+
57
+ ์‚ฌ์šฉ์ž ์งˆ๋ฌธ: "{user_message}"
58
+ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„: {user_profile}
59
+
60
+ [๊ฒ€์ƒ‰๋œ ๊ด€๋ จ ๋ฌธ์„œ]
61
+ {context}
62
+
63
+ ์ถœ๋ ฅ์€ ๊ฐ ์งˆ๋ฌธ์„ ํ•œ ์ค„์”ฉ ๋‚˜์—ด๋งŒ ํ•˜์„ธ์š”.
64
+ """
65
+
66
+ client = _client_lazy()
67
+ resp = client.chat.completions.create(
68
+ model=OPENAI_MODEL,
69
+ messages=[{"role": "user", "content": prompt}],
70
+ temperature=0.3,
71
+ )
72
+ content = resp.choices[0].message.content.strip()
73
+ lines = [l.strip("- ").strip() for l in content.split("\n") if l.strip()]
74
+ return lines[:5]
75
+
76
+ def generate_questions(user_message: str, user_profile: Dict, restrict_topics: Optional[List[str]] = None) -> List[str]:
77
+ if USE_MOCK:
78
+ return _mock_questions(user_message, user_profile, restrict_topics)
79
+
80
+ topics_line = f"\n์ฐธ๊ณ  ์ฃผ์ œ: {', '.join(restrict_topics)}" if restrict_topics else ""
81
+ prompt = f"""
82
+ ๋‹น์‹ ์€ ๊ธˆ์œต ์ฑ—๋ด‡์˜ '์งˆ๋ฌธ ์ถ”์ฒœ' ์—ญํ• ์ž…๋‹ˆ๋‹ค.
83
+ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ํ”„๋กœํ•„์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ธˆ์œต ๊ด€๋ จ(์˜ˆ๊ธˆ/์ ๊ธˆ, ๋Œ€์ถœ, ํŽ€๋“œ, ๋ณดํ—˜, ์นด๋“œ ๋“ฑ) ํ›„์† ์งˆ๋ฌธ 5๊ฐœ๋ฅผ ์ œ์•ˆํ•˜์„ธ์š”.
84
+ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ ์˜๋„๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜์—ฌ ๊ด€๋ จ์„ฑ ๋†’์€ ์งˆ๋ฌธ์„ ์ƒ์„ฑํ•˜์„ธ์š”.
85
+ ์งˆ๋ฌธ์€ ์งง๊ณ  ํด๋ฆญํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ์„ธ์š”.
86
+ ์‚ฌ์šฉ์ž ์ž…๋ ฅ: "{user_message}"
87
+ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„: {user_profile}{topics_line}
88
+ ์ถœ๋ ฅ์€ ๊ฐ ์งˆ๋ฌธ์„ ํ•œ ์ค„์”ฉ ๋‚˜์—ด๋งŒ ํ•˜์„ธ์š”.
89
+ """
90
+ client = _client_lazy()
91
+ resp = client.chat.completions.create(
92
+ model=OPENAI_MODEL,
93
+ messages=[{"role": "user", "content": prompt}],
94
+ temperature=0.3,
95
+ )
96
+ content = resp.choices[0].message.content.strip()
97
+ lines = [l.strip("- ").strip() for l in content.split("\n") if l.strip()]
98
+ return lines[:5]
99
+
100
+ def generate_answer(question: str, context: str, user_profile: Optional[Dict] = None) -> str:
101
+ if USE_MOCK:
102
+ return _mock_answer(question, context)
103
+
104
+ profile_text = f"\n[์‚ฌ์šฉ์ž ํ”„๋กœํ•„]\n{user_profile}\n" if user_profile else ""
105
+
106
+ prompt = f"""
107
+ ๋‹ค์Œ ๋ฌธ์„œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ์ •ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‹ตํ•˜์„ธ์š”.
108
+ ๊ธˆ์œต ์ƒํ’ˆ(์˜ˆ๊ธˆ/์ ๊ธˆ, ๋Œ€์ถœ, ํŽ€๋“œ, ๋ณดํ—˜, ์นด๋“œ ๋“ฑ)์˜ ํŠน์ง•, ์กฐ๊ฑด, ๊ธˆ๋ฆฌ, ํ˜œํƒ ๋“ฑ์„ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•˜์„ธ์š”.
109
+ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์ด ์ œ๊ณต๋œ ๊ฒฝ์šฐ, ํ•ด๋‹น ์ •๋ณด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋งž์ถคํ˜• ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜์„ธ์š”.
110
+
111
+ [๋ฌธ์„œ]
112
+ {context}
113
+ {profile_text}
114
+ [์งˆ๋ฌธ]
115
+ {question}
116
+ """
117
+ client = _client_lazy()
118
+ resp = client.chat.completions.create(
119
+ model=OPENAI_MODEL,
120
+ messages=[{"role": "user", "content": prompt}],
121
+ temperature=0.2,
122
+ )
123
+ return resp.choices[0].message.content.strip()
services/vector_service.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sentence_transformers import SentenceTransformer
2
+ import faiss, numpy as np, json
3
+ import os, pickle
4
+
5
+ INDEX_PATH = "vector_db/deposit.index"
6
+ META_PATH = "vector_db/deposit_meta.pkl"
7
+ EMB_MODEL = "intfloat/multilingual-e5-base"
8
+
9
+ _emb_model = None
10
+ _index = None
11
+ _docs = None
12
+
13
+ def _lazy_load():
14
+ """ํ•„์š”์‹œ ๋ฒกํ„ฐ DB, ๋ฌธ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋กœ๋“œ"""
15
+ global _emb_model, _index, _docs
16
+
17
+ if _emb_model is None:
18
+ # device="cpu"๋ฅผ ๋ช…์‹œํ•˜์—ฌ meta tensor ์˜ค๋ฅ˜ ๋ฐฉ์ง€
19
+ # model_kwargs={"low_cpu_mem_usage": False} ์ถ”๊ฐ€: meta tensor ์˜ค๋ฅ˜ ๋ฐฉ์ง€
20
+ _emb_model = SentenceTransformer(EMB_MODEL, device="cpu", model_kwargs={"low_cpu_mem_usage": False})
21
+ print("๐Ÿง  ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๋กœ๋“œ ์™„๋ฃŒ")
22
+
23
+ if _index is None:
24
+ if not os.path.exists(INDEX_PATH):
25
+ raise FileNotFoundError(f"โŒ {INDEX_PATH} not found.")
26
+ _index = faiss.read_index(INDEX_PATH)
27
+ print("๐Ÿ“ฆ ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ๋กœ๋“œ ์™„๋ฃŒ")
28
+
29
+ if _docs is None:
30
+ if os.path.exists(META_PATH):
31
+ with open(META_PATH, "rb") as f:
32
+ _docs = pickle.load(f)
33
+ print(f"๐Ÿ“š {_docs and len(_docs)}๊ฐœ ๋ฌธ์„œ ๋ฉ”ํƒ€ ๋กœ๋“œ๋จ (from deposit_meta.pkl)")
34
+ else:
35
+ print("โš ๏ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ ์—†์Œ. ๋นˆ ๋ฆฌ์ŠคํŠธ๋กœ ์ดˆ๊ธฐํ™”")
36
+ _docs = []
37
+
38
+ def search_similar_docs(query, top_k=3):
39
+ """์ฟผ๋ฆฌ์— ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ๋ฌธ์„œ ๋ฐ˜ํ™˜"""
40
+ _lazy_load()
41
+ query_emb = _emb_model.encode([query])
42
+ D, I = _index.search(query_emb, top_k)
43
+
44
+ results = []
45
+ for idx, score in zip(I[0], D[0]):
46
+ if 0 <= idx < len(_docs):
47
+ results.append(_docs[idx])
48
+ print(f"๐Ÿ“„ ๋งค์นญ ๋ฌธ์„œ: {_docs[idx].get('meta', {})} | score={score:.4f}")
49
+
50
+ return results
51
+
52
+
53
+ # return type: bool
54
+ def check_question_validity(question):
55
+ results = search_similar_docs(question, top_k=1)
56
+ return len(results) > 0
temp_vectordb_print.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pickle
2
+
3
+ # ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ ๋กœ๋“œ
4
+ with open("vector_db/deposit_meta.pkl", "rb") as f:
5
+ meta = pickle.load(f)
6
+
7
+ print(f"์ด ๋ฌธ์„œ ์ˆ˜: {len(meta)}")
8
+
9
+ # ์•ž๋ถ€๋ถ„ 100๊ฐœ๋งŒ ์ถœ๋ ฅ (ํ•„์š”์‹œ 10, 50 ๋“ฑ์œผ๋กœ ๋ฐ”๊ฟ”๋„ ๋จ)
10
+ for i, item in enumerate(meta[:100]):
11
+ print(f"\n[{i+1}] -----------------------------")
12
+ if isinstance(item, dict):
13
+ print(item.get("content", "")[:300]) # 300์ž๊นŒ์ง€๋งŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
14
+ print("๋ฉ”ํƒ€:", item.get("meta", {}))
15
+ else:
16
+ print(item[:300])
vector_db/deposit.index ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1e4d207d0ceac5db74661656bf0038df720aceebb887b8b0e8fc332e1ea94ae2
3
+ size 8183853
vector_db/deposit_meta.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aff9d813b07ebb43400a99324701b73af2401edef6d51dffd0b24d6c8fa1dd25
3
+ size 1719297