ChatGPT๋ก PDF ๋ ผ๋ฌธ ์์ฝํ๋ 7๋จ๊ณ โ ๋ํ์์ 3๊ฐ์ ์ค์ ํ
๋ ผ๋ฌธ 30ํธ์ ChatGPT๋ก ์์ฝํด๋ณธ ๋ํ์์ ์ค์ ํ๊ธฐ์์. ํ์๋ฆฌ ์์ด ํต์ฌ๋ง ๋ฝ๋ ํ๋กฌํํธ์ ์คํจํ ๋ฐฉ๋ฒ๊น์ง ๋ค ์ ์์ด์.
AI ๊ธฐ์ ์ ๋๊ตฌ๋ ์ฝ๊ฒ ํ์ฉํ ์ ์๋๋ก ์ค์ ๊ฐ์ด๋๋ฅผ ์์ฑํฉ๋๋ค. ChatGPT, Claude, AI ์๋ํ, SEO ๋ถ์ผ๋ฅผ ์ ๋ฌธ์ผ๋ก ๋ค๋ฃน๋๋ค.
๋งค์ฃผ ๋ฐ๋ณต๋๋ ์์ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๋ณด๊ณ ์ ์์ฑ์ ์ง์ณ์์ง๋ ์์ผ์ ๊ฐ์? ์๋ ์์ ์ ๊ณ ์ง์ ์ธ ์ค๋ฅ์ ๋นํจ์จ ๋๋ฌธ์ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์๊ณ ์๋ค๋ฉด, ์ด์ ํ์ด์ฌ๊ณผ ChatGPT API๋ก ์์ ์ ๋ฌด๋ฅผ ํ์ ํ ๋์ ๋๋ค. ์ด ๊ฐ์ด๋์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ถ์ํ๊ณ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ์ค์ฉ์ ์ด๊ณ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๊ณต๊ฐํฉ๋๋ค.
ํ์ด์ฌ๊ณผ Pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ChatGPT API์ ๋ถ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์์ ๋ก ์ ์ฅํ๋ ๊ณผ์ ์ ์๋ํํฉ๋๋ค. ๋ฐ๋ณต์ ์ธ ์์ ๋ฐ์ดํฐ ๋ถ์ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ณต์ ์ธ ์์ ๋ฐ์ดํฐ ๋ถ์์ ๊ท์คํ ์๊ฐ์ ์ก์๋จน๊ณ , ์๋ ์์ ์ ๋ถํ์ํ ์ค์๋ฅผ ์ ๋ฐํ๊ธฐ ์ฝ์ต๋๋ค. ํนํ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ์์ ์ ์๋ฏธํ ํจํด์ ์ฐพ๊ฑฐ๋ ํต์ฌ์ ์์ฝํด์ผ ํ ๋๋ ๋นํจ์จ์ ๊ทน์น๋ฅผ ๋ณด์ฌ์ฃผ์ฃ . ํ์ด์ฌ๊ณผ ChatGPT API๋ฅผ ํ์ฉํ๋ฉด ์ด ๋ชจ๋ ๊ณผ์ ์ ์๋ฒฝํ๊ฒ ์๋ํํ์ฌ, ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ํ์ ์ ์ผ๋ก ์ ์ฝํ๊ณ ํต์ฌ ์ ๋ฌด์ ์ง์คํ ์ ์์ต๋๋ค.

์ด๋ค ์ํฉ์ ์ ํฉํ ๊น์?
๋ณธ ๊ฐ์ด๋๋ ํ์ด์ฌ ๊ธฐ์ด ๋ฌธ๋ฒ๊ณผ ์์ ์ฌ์ฉ ๊ฒฝํ์ด ์๋ ๋ถ๋ค์๊ฒ ์ต์ ํ๋์ด ์์ต๋๋ค. ChatGPT API ํค ๋ฐ๊ธ ๋ฐ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ฏธ๋ฆฌ ์์งํด๋์๋ฉด ๋์ฑ ์ํํ๊ฒ ์งํํ ์ ์์ต๋๋ค.
ํ์ด์ฌ๊ณผ ChatGPT API์ ๊ฐ๋ ฅํ ์กฐํฉ์ ํ์ฉํ๋ ค๋ฉด ๋ช ๊ฐ์ง ํ์ ์ค๋น๋ฌผ๊ณผ ํ๊ฒฝ ์ค์ ์ด ํ์ํฉ๋๋ค.
openai, pandas, openpyxl, python-dotenv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค. openpyxl์ Pandas๊ฐ ์์
ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ๋ฐ ํ์ํ๋ฉฐ, python-dotenv๋ API ํค์ ๊ฐ์ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.pip install openai pandas openpyxl python-dotenv
API ํค ๋ณด์ ๊ด๋ฆฌ
API ํค๋ ๋งค์ฐ ๋ฏผ๊ฐํ ์ ๋ณด์ด๋ฏ๋ก, ์ฝ๋ ๋ด์ ์ง์ ๋
ธ์ถํ๋ ๊ฒ์ ์ ๋ ํผํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ์์ ํ๊ณ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ๋ ๊ฒ์
๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ์ .env ํ์ผ์ ์์ฑํ๊ณ OPENAI_API_KEY=YOUR_API_KEY ํํ๋ก ์ ์ฅํ ํ, ํ์ด์ฌ ์ฝ๋์์ python-dotenv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ์์ ํ๊ฒ ๋ถ๋ฌ์ค์ธ์.
.env ํ์ผ์ Git๊ณผ ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ ํฌํจ๋์ง ์๋๋ก .gitignore ํ์ผ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์ธ๋ถ์ ๋
ธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํ์ด์ฌ๊ณผ ChatGPT API๋ฅผ ํตํ ์์ ๋ฐ์ดํฐ ๋ถ์ ์๋ํ์ ํต์ฌ ์ํฌํ๋ก์ฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋ฉ๋๋ค.
์ด ๊ณผ์ ์ ํตํด ๋งค๋ฒ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์ด ๋ฐ๋ณต ์์ ์ ์๋ฒฝํ๊ฒ ์๋ํํ ์ ์์ต๋๋ค.

์ด์ ์ค์ ์ ๋์ ํ ์๊ฐ์ ๋๋ค. ์ฌ๊ธฐ์๋ ํน์ ์์ ํ์ผ์์ ๊ณ ๊ฐ ํผ๋๋ฐฑ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ChatGPT API๋ฅผ ํ์ฉํ์ฌ ์ฃผ์ ํค์๋์ ๊ธ์ /๋ถ์ ๊ฐ์ฑ์ ์ฌ์ธต ๋ถ์ํ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์์ธํ ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์์ ์์
ํ์ผ (customer_feedback.xlsx) ๊ตฌ์กฐ:
| ID | ํผ๋๋ฐฑ ๋ด์ฉ |
|---|---|
| 1 | ์ ํ ๋ง์กฑ๋๊ฐ ๋๊ณ ์ฌ์ฉ์ด ํธ๋ฆฌํฉ๋๋ค. |
| 2 | ๋ฐฐ์ก์ด ๋๋ฌด ๋๋ฆฌ๊ณ ํฌ์ฅ์ด ๋ถ๋ํ์ต๋๋ค. |
| 3 | ๊ธฐ๋ฅ์ ์ข์ง๋ง ๊ฐ๊ฒฉ์ด ๋ค์ ๋น์๋๋ค. |
| 4 | ๋์์ธ์ด ํ๋ฅญํ๊ณ ์๋น์ค ์๋๊ฐ ๋น ๋ฆ ๋๋ค. |
| 5 | ์์ฃผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์์ ์ฑ์ด ๋จ์ด์ง๋๋ค. |
์๋๋ ์์ ํ์ผ ๋ก๋ฉ๋ถํฐ ๊ฐ๋ ฅํ ChatGPT API ํธ์ถ, ๊ทธ๋ฆฌ๊ณ ์ต์ข ๊ฒฐ๊ณผ ์ ์ฅ๊น์ง, ์ด ๋ชจ๋ ๊ณผ์ ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ํตํฉ ํ์ด์ฌ ์คํฌ๋ฆฝํธ์ ๋๋ค.
import pandas as pd
import openai
import os
import time
import json
from dotenv import load_dotenv
# .env ํ์ผ์์ ํ๊ฒฝ ๋ณ์ ๋ก๋
load_dotenv()
# API ํค ์ค์ (ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ)
openai.api_key = os.getenv("OPENAI_API_KEY")
if not openai.api_key:
raise ValueError("OPENAI_API_KEY ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค. .env ํ์ผ์ ํ์ธํ๊ฑฐ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ฃผ์ธ์.")
# 1๋จ๊ณ: ์์
ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
file_path = 'customer_feedback.xlsx'
try:
df = pd.read_excel(file_path)
print("์์
ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ์ฑ๊ณต:")
print(df.head())
except FileNotFoundError:
print(f"์ค๋ฅ: '{file_path}' ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค. ํ์ผ ๊ฒฝ๋ก๋ฅผ ํ์ธํด์ฃผ์ธ์.")
exit()
# 2๋จ๊ณ: ChatGPT API ํ๋กฌํํธ ์์ฑ ํจ์
def create_prompt(feedback_text):
prompt = f"""๋ค์ ๊ณ ๊ฐ ํผ๋๋ฐฑ ๋ด์ฉ์ ๋ถ์ํ์ฌ ์ฃผ์ ํค์๋์ ๊ฐ์ฑ(๊ธ์ /๋ถ์ /์ค๋ฆฝ)์ ์ถ์ถํด์ค.
๊ฒฐ๊ณผ๋ JSON ํ์์ผ๋ก ์ ๊ณตํด์ค.
์์: {{\"keywords\": [\"ํค์๋1\", \"ํค์๋2\"], \"sentiment\": \"๊ธ์ \"}}
ํผ๋๋ฐฑ ๋ด์ฉ: \"{feedback_text}\"
"""
return prompt
# ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ ์ด๊ธฐํ
analysis_results = []
# 3๋จ๊ณ: ๊ฐ ํผ๋๋ฐฑ์ ๋ํด ChatGPT API ํธ์ถ
print("\nChatGPT API ํธ์ถ์ ์์ํฉ๋๋ค...")
for index, row in df.iterrows():
feedback_id = row['ID']
feedback_text = row['ํผ๋๋ฐฑ ๋ด์ฉ']
prompt = create_prompt(feedback_text)
try:
response = openai.chat.completions.create(
model="gpt-4o", # ๋๋ gpt-3.5-turbo ๋ฑ
messages=[
{"role": "system", "content": "๋๋ ๊ณ ๊ฐ ํผ๋๋ฐฑ ๋ถ์ ์ ๋ฌธ๊ฐ์ผ."},
{"role": "user", "content": prompt}
],
temperature=0.0 # ์ผ๊ด๋ ๊ฒฐ๊ณผ๋ฅผ ์ํด ๋ฎ์ ๊ฐ ์ค์
)
response_content = response.choices[0].message.content
# ์๋ต์ด JSON ํ์์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ ์ฒ๋ฆฌ
try:
parsed_json = json.loads(response_content)
keywords = ", ".join(parsed_json.get("keywords", []))
sentiment = parsed_json.get("sentiment", "๋ถ์ ๋ถ๊ฐ")
except json.JSONDecodeError:
print(f"๊ฒฝ๊ณ : ID {feedback_id} ํผ๋๋ฐฑ์ ์๋ต์ด JSON ํ์์ด ์๋๋๋ค. ์๋ณธ: {response_content[:100]}...")
keywords = "ํ์ฑ ์ค๋ฅ"
sentiment = "ํ์ฑ ์ค๋ฅ"
analysis_results.append({
'ID': feedback_id,
'ํผ๋๋ฐฑ ๋ด์ฉ': feedback_text,
'๋ถ์ ํค์๋': keywords,
'๊ฐ์ฑ': sentiment
})
print(f"ID {feedback_id} ํผ๋๋ฐฑ ๋ถ์ ์๋ฃ.")
time.sleep(0.5) # API ํธ์ถ ๊ฐ๊ฒฉ ์ ์ง (rate limit ๋ฐฉ์ง)
except openai.APIError as e:
print(f"ID {feedback_id} ํผ๋๋ฐฑ ๋ถ์ ์ค API ์ค๋ฅ ๋ฐ์: {e}")
analysis_results.append({
'ID': feedback_id,
'ํผ๋๋ฐฑ ๋ด์ฉ': feedback_text,
'๋ถ์ ํค์๋': 'API ์ค๋ฅ',
'๊ฐ์ฑ': 'API ์ค๋ฅ'
})
except Exception as e:
print(f"ID {feedback_id} ํผ๋๋ฐฑ ๋ถ์ ์ค ์์์น ๋ชปํ ์ค๋ฅ ๋ฐ์: {e}")
analysis_results.append({
'ID': feedback_id,
'ํผ๋๋ฐฑ ๋ด์ฉ': feedback_text,
'๋ถ์ ํค์๋': '์์์น ๋ชปํ ์ค๋ฅ',
'๊ฐ์ฑ': '์์์น ๋ชปํ ์ค๋ฅ'
})
# 4๋จ๊ณ: ๋ถ์ ๊ฒฐ๊ณผ Pandas ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
results_df = pd.DataFrame(analysis_results)
print("\n์ต์ข
๋ถ์ ๊ฒฐ๊ณผ (์์ 5๊ฐ):")
print(results_df.head())
# 5๋จ๊ณ: ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์์
ํ์ผ๋ก ์ ์ฅ
output_file_path = 'customer_feedback_analysis_results.xlsx'
try:
results_df.to_excel(output_file_path, index=False)
print(f"\n๋ถ์ ๊ฒฐ๊ณผ๊ฐ '{output_file_path}' ํ์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋์์ต๋๋ค.")
except Exception as e:
print(f"์ค๋ฅ: ์์
ํ์ผ ์ ์ฅ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค: {e}")
ChatGPT API์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ณด๋ด๋ฉด ํ ํฐ ์ ํ์ ๊ฑธ๋ฆฌ๊ฑฐ๋ ๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ํ์ํ ์ต์ํ์ ๋ฐ์ดํฐ๋ง ๋ณด๋ด๊ฑฐ๋, ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ(chunk)๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์ด ์์ ์ฝ๋๋ ๊ฐ ํ์ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, time.sleep()์ผ๋ก ํธ์ถ ๊ฐ๊ฒฉ์ ์กฐ์ ํฉ๋๋ค.
์ด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ์๊ฐ, customer_feedback.xlsx ํ์ผ์ ๋ชจ๋ ๊ณ ๊ฐ ํผ๋๋ฐฑ์ด ์๋์ผ๋ก ๋ถ์๋์ด ํต์ฌ ํค์๋์ ๊ฐ์ฑ ์ ๋ณด๊ฐ ์๋ฒฝํ๊ฒ ์ถ๊ฐ๋ customer_feedback_analysis_results.xlsx ํ์ผ์ด ๋๋ฑ ์์ฑ๋ฉ๋๋ค! ๊ณ ๊ฐ ํผ๋๋ฐฑ ๋ถ์์ ChatGPT API์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ์ฉ ์ฌ๋ก ์ค ํ๋์ด๋ฉฐ, ๋ ๊น์ด ์๋ ๋ด์ฉ์ โก 0์๋ถํฐ ์์! 2026๋
์ต์ ChatGPT API ๊ณ ๊ฐ ํผ๋๋ฐฑ ์๋ ๋ถ์: ์์ต ๊ทน๋ํ ์๋ฒฝ ์ค์ ๊ฐ์ด๋์์ ์์ธํ ํ์ธํ์ค ์ ์์ต๋๋ค.
์๋์ผ๋ก ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๋ฐฉ์๊ณผ ํ์ด์ฌ+ChatGPT API๋ฅผ ํ์ฉํ ์๋ํ ๋ฐฉ์์ ํน์ง์ ๋น๊ตํ์ต๋๋ค.
| ํน์ง | ์๋ ์์ ๋ฐ์ดํฐ ๋ถ์ | ํ์ด์ฌ + ChatGPT API ์๋ํ |
|---|---|---|
| ์ฒ๋ฆฌ ์๋ | ๋ฐ์ดํฐ ์์ ๋น๋กํ์ฌ ๋๋ฆผ | ์ค์ ์ ๋ฐ๋ผ ๋งค์ฐ ๋น ๋ฆ (API ํธ์ถ ์/์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ) |
| ์ ํ๋ | ํด๋จผ ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๋์ | ์ผ๊ด๋ ๊ฒฐ๊ณผ ๋์ถ, ํ๋กฌํํธ์ ๋ฐ๋ผ ์ ํ๋ ๊ฒฐ์ |
| ํ์ฅ์ฑ | ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ํ๊ณ | ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ๋ค์ํ ๋ถ์ ๋ฐ ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ |
| ๋น์ฉ | ์ธ๊ฑด๋น ๋ฐ์ | API ์ฌ์ฉ๋ฃ ๋ฐ์ (ํ ํฐ ๊ธฐ๋ฐ) |
| ์ด๊ธฐ ์ค์ | ๋ฎ์ (์์ ์ฌ์ฉ๋ฒ๋ง ์๋ฉด ๋จ) | ํ์ด์ฌ ํ๊ฒฝ ์ค์ , API ํค ๋ฐ๊ธ, ์ฝ๋ ์์ฑ ํ์ |
| ์ ํฉํ ๊ฒฝ์ฐ | ์๋์ ๋ฐ์ดํฐ, ์ผํ์ฑ ๋ถ์ | ๋ฐ๋ณต์ ์ธ ๋๋ ๋ฐ์ดํฐ ๋ถ์, ๋ณต์กํ ํ ์คํธ ๋ถ์ |
ํ์ด์ฌ๊ณผ ChatGPT API๋ฅผ ํ์ฉํ ์๋ํ๋ ๋ถ๋ช ํ์ ์ ์ธ ์ฅ์ ์ ์ ๊ณตํ์ง๋ง, ์ฑ๊ณต์ ์ธ ๋์ ์ ์ํด์๋ ๋ช ๊ฐ์ง ํต์ฌ ์ฃผ์์ฌํญ๊ณผ ์ ์ฌ์ ํ๊ณ๋ฅผ ๋ฐ๋์ ์ดํดํ๊ณ ์์ด์ผ ํฉ๋๋ค.
time.sleep()์ ํ์ฉํ์ฌ ํธ์ถ ๊ฐ๊ฒฉ์ ํ๋ช
ํ๊ฒ ์กฐ์ ํ๊ฑฐ๋ OpenAI์ ๊ณต์ Rate Limit ๊ด๋ฆฌ ์ ๋ต์ ๋ฐ๋์ ์ ์ฉํด์ผ ํฉ๋๋ค.๋ง๋ฌด๋ฆฌ: ์ด ์๋ฒฝ ๊ฐ์ด๋๋ฅผ ํตํด ํ์ด์ฌ๊ณผ ChatGPT API๋ฅผ ํ์ฉํ ์์ ๋ฐ์ดํฐ ๋ถ์ ์๋ํ์ ํต์ฌ ์๋ฆฌ์ ์ค์ ๋ ธํ์ฐ๋ฅผ ์๋ฒฝํ๊ฒ ์ต๋ํ์ จ๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค. ์ด์ ์ฌ๋ฌ๋ถ์ ์ ๋ฌด ํจ์จ์ ๊ทน๋ํํ๊ณ ์์ฐ์ฑ์ ํญ๋ฐ์ํค๋ ๋๋ผ์ด ๋ณํ๋ฅผ ๊ฒฝํํ์ธ์! ๊ถ๊ธํ ์ ์ด๋ ๋ ๋์ ์์ด๋์ด๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ๋ก ๋ฌธ์ํด์ฃผ์ธ์.
ChatGPT API ๋น์ฉ์ ์ฃผ๋ก ์ ๋ ฅ(ํ๋กฌํํธ) ๋ฐ ์ถ๋ ฅ(์๋ต) ํ ํฐ์ ์์ ๋ฐ๋ผ ์ฑ ์ ๋ฉ๋๋ค. ์ฌ์ฉํ๋ ๋ชจ๋ธ์ ์ข ๋ฅ(์: GPT-4o, GPT-3.5 Turbo)์ ๋ฐ๋ผ์๋ ํ ํฐ๋น ๊ฐ๊ฒฉ์ด ๋ค๋ฅด๋ฏ๋ก, ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ ๋น์ฉ ๊ณํ์ ์ธ์ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ๋คํธ์ํฌ ์ง์ฐ, API ํธ์ถ ์ ํ(Rate Limit), ๊ทธ๋ฆฌ๊ณ ์ฒ๋ฆฌํด์ผ ํ ํ ํฐ ์์ ๋ฐ๋ผ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. Pandas๋ฅผ ํตํ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ API ํธ์ถ ์ ์ ์ ํ ์ง์ฐ ์๊ฐ(time.sleep) ์ค์ ์ด ํ์ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ํํ ์ค๋ฅ๋ API ํค ๋ฌธ์ , ํ์ผ ๊ฒฝ๋ก ์ค๋ฅ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฏธ์ค์น์ ๋๋ค. API ์๋ต ํ์ ๋ถ์ผ์น๋ ํ๋กฌํํธ ์กฐ์ ์ ํตํด ํด๊ฒฐํ๋ฉฐ, ๊ณผ๋ํ API ํธ์ถ๋ก ์ธํ Rate Limit์ `time.sleep()` ๋ฑ์ผ๋ก ํธ์ถ ๊ฐ๊ฒฉ์ ๋์ด ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ถ์ ๊ฒฐ๊ณผ์ ์ ํ๋๋ฅผ ๋์ด๋ ค๋ฉด ํ๋กฌํํธ์ ๊ตฌ์ฒด์ ์ธ ์ง์์ฌํญ๊ณผ ์ ์ฝ ์กฐ๊ฑด์ ๋ช ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ํ๋ ์ถ๋ ฅ ํ์(์: JSON)๊ณผ ์ถ์ถํด์ผ ํ ์ ๋ณด, ๊ทธ๋ฆฌ๊ณ ์์๋ฅผ ํจ๊ป ์ ๊ณตํ๋ฉด ๋ชจ๋ธ์ด ์๋์ ๋ง๊ฒ ์๋ตํ ํ๋ฅ ์ด ๋์์ง๋๋ค.
ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ๋ ค๋ฉด ์ด์์ฒด์ ์ ์ค์ผ์ค๋ง ๋๊ตฌ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. Windows์์๋ ์์ ์ค์ผ์ค๋ฌ๋ฅผ, Linux๋ macOS์์๋ `cron` ์์ ์ ์ค์ ํ์ฌ ํน์ ์์ผ์ด๋ ์๊ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋์ผ๋ก ์คํ๋๋๋ก ํ ์ ์์ต๋๋ค.
๋ค, Pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ ๋ฟ๋ง ์๋๋ผ CSV, SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค, JSON ๋ฑ ๋ค์ํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ ๋ถ์๋ ๊ฒฐ๊ณผ๋ฅผ ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์ผ ํ์์ผ๋ก ๋ณํํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋์๋ณด๋ ์์คํ ๋ฑ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฐ๋ํ์ฌ ํ์ฉํ ์ ์์ต๋๋ค.