์๋
ํ์ธ์! ์ฌ๋ฌ๋ถ์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ‘์ ๊ณ(God-tier)’๋ก ๋์ด์ฌ๋ฆด ์ 14๊ฐ ํฌ์คํ
์ ์์ํฉ๋๋ค.
์ค๋์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ค์ ์์ํ ์์ , ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค(SQL)์ API ๋ฌธ์ํ๋ฅผ AI๋ก ์๋ํํ๋ ๊ธฐ์ ์ ํํค์นฉ๋๋ค.
"์ด ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ธ์ ๋ค ์ง์ง?", "API ๋ฌธ์ ํํํ ๋ ๊น๋จน์๋ค..." ๐คฆ♂️
์ด๋ฐ ๊ณ ๋ฏผ, ์ด์ ๊ทธ๋งํ์ธ์. ์์ฐ์ด๋ก ๋งํ๋ฉด SQL์ด ํ์ด๋์ค๊ณ , ์ฝ๋๋ง ๋์ ธ์ฃผ๋ฉด API ๋ช
์ธ์๊ฐ ์์ฑ๋๋ ๊ธฐ์ , ์ง๊ธ ๋ฐ๋ก ๊ฒฝํํด ๋ณด์ธ์!
๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ๊ท์ฐฎ์ํ๋ ์์
Top 2๋ฅผ ๊ผฝ์๋ฉด, ๋ณต์กํ SQL ์กฐ์ธ(Join) ์ฟผ๋ฆฌ ์ง๊ธฐ์ API ๋ฌธ์(Swagger/OpenAPI) ์์ฑํ๊ธฐ๊ฐ ์๋๊น์?
์ค๋์ ํ๋กฌํํธ ์์ง๋์ด๋ง์ ํตํด ์ด ์ง๋ฃจํ ์์
์ AI์๊ฒ ์์(Delegation)ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค. ํต์ฌ์ AI์๊ฒ '๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ(Schema)'์ '์ฝ๋์ ๋ฌธ๋งฅ(Context)'์ ์ ํํ๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์
๋๋ค.
1. ์์ฐ์ด๋ฅผ SQL๋ก ๋ณํํ๊ธฐ (Text-to-SQL) ๐️
AI์๊ฒ "์ง๋๋ฌ ๋งค์ถ ๋ณด์ฌ์ค"๋ผ๊ณ ํ๋ฉด SQL์ ์ง์ค๊น์? ๋ค, ์ง์ค๋๋ค. ํ์ง๋ง ํ๋ฆด ํ๋ฅ ์ด 99%์
๋๋ค. ์๋๊ณ ์? AI๋ ์ฌ๋ฌ๋ถ ํ์ฌ์ ํ
์ด๋ธ ์ด๋ฆ๊ณผ ์ปฌ๋ผ๋ช
์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด์ฃ .
์ฑ๊ณต์ ์ธ Text-to-SQL์ ์ํด์๋ ์คํค๋ง(Schema) ์ ๋ณด๋ฅผ ํ๋กฌํํธ์ ์ฃผ์
(Injection)ํด์ผ ํฉ๋๋ค.
๐ [์ค์ ํ๋กฌํํธ: ๋ณต์กํ ๋ฐ์ดํฐ ์ถ์ถ]
> # Role (์ญํ )
> ๋น์ ์ 10๋
์ฐจ ๋ฐ์ดํฐ ์์ง๋์ด์
๋๋ค. ํจ์จ์ ์ด๊ณ ์ต์ ํ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋ฌด์
๋๋ค.
>
> # Context (๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง)
> ๋ค์์ ์ฐ๋ฆฌ DB์ ํ
์ด๋ธ ๊ตฌ์กฐ์
๋๋ค. ๋ฐ๋์ ์ด ํ
์ด๋ธ๊ณผ ์ปฌ๋ผ๋ช
๋ง ์ฌ์ฉํ์ธ์.
> ```sql
> CREATE TABLE Users (user_id INT, name VARCHAR, signup_date DATE);
> CREATE TABLE Orders (order_id INT, user_id INT, amount DECIMAL, order_date DATE);
> ```
>
> # Task (์์
)
> "2024๋
์ ๊ฐ์
ํ ์ ์ ์ค, ์ด ์ฃผ๋ฌธ ๊ธ์ก์ด 100๋ง ์ ์ด์์ธ ์ ์ ์ ์ด๋ฆ๊ณผ ์ด ๊ธ์ก์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฝ์์ค."
>
> # Constraints (์ ์ฝ ์ฌํญ)
> 1. MySQL 8.0 ๋ฌธ๋ฒ์ ๋ฐ๋ฅด์ธ์.
> 2. `JOIN`์ ์ฌ์ฉํ ๋ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ธ์.
> 3. ๊ฒฐ๊ณผ๋ ์ค์ง SQL ์ฝ๋ ๋ธ๋ก๋ง ์ถ๋ ฅํ์ธ์. ์ค๋ช
์ ์๋ตํฉ๋๋ค.
๐ AI์ ์๊ฐ (CoT):
① Users ํ
์ด๋ธ๊ณผ Orders ํ
์ด๋ธ์ `user_id`๋ก ์กฐ์ธํด์ผ๊ฒ ๊ตฐ.
② `signup_date`๊ฐ '2024-01-01'๋ถํฐ '2024-12-31' ์ฌ์ด์ธ ์กฐ๊ฑด์ด ํ์ํด.
③ `GROUP BY user_id`๋ฅผ ํ๊ณ `SUM(amount)`๊ฐ 1,000,000 ์ด์์ธ ์กฐ๊ฑด์ `HAVING` ์ ์ ๋ฃ์ด์ผ์ง.
✅ ๊ฒฐ๊ณผ: ์๋ฒฝํ๊ฒ ์คํ ๊ฐ๋ฅํ SQL ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค.
2. API ๋ฌธ์ ์๋ํ: OpenAPI (Swagger) ์คํ ์์ฑ ๐
API๋ฅผ ๊ฐ๋ฐํ๊ณ ๋์ ๋ฌธ์๋ฅผ ๋ฐ๋ก ์์ฑํ๋ ๊ฑด ์ ๋ง ๊ณ ์ญ์
๋๋ค. ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋ฌธ์๋ ๊ณ ์ณ์ผ ํ์ฃ . ์ด๋ด ๋ AI์๊ฒ "๋๋ ํ
ํฌ๋์ปฌ ๋ผ์ดํฐ์ผ"๋ผ๊ณ ์ญํ ์ ๋ถ์ฌํ๊ณ ์ฝ๋๋ฅผ ๋์ ธ์ฃผ์ธ์.
๐ [์ค์ ํ๋กฌํํธ: ์ฝ๋ to ๋ฌธ์ ๋ณํ]
> # Role
> ๋น์ ์ ๊ผผ๊ผผํ ํ
ํฌ๋์ปฌ ๋ผ์ดํฐ(Technical Writer)์
๋๋ค.
>
> # Input Data (์์ค ์ฝ๋)
> ๋ค์์ Python(FastAPI)์ผ๋ก ์์ฑ๋ ํ์๊ฐ์
ํจ์์
๋๋ค:
> """
> (์ฌ๊ธฐ์ ์ฌ๋ฌ๋ถ์ ๋ผ์ฐํฐ/์ปจํธ๋กค๋ฌ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ผ์ธ์)
> """
>
> # Instructions (์ง์ ์ฌํญ)
> 1. ์ ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ OpenAPI 3.0 (YAML ํฌ๋งท) ์คํ์ ์์ฑํ์ธ์.
> 2. `summary`, `description`, `requestBody`, `responses` (200, 400, 500 ์๋ฌ ํฌํจ)๋ฅผ ์์ธํ๊ฒ ๊ธฐ์ ํ์ธ์.
> 3. ๊ฐ ํ๋์๋ ์์ ๊ฐ(Example)์ ๋ฐ๋์ ํฌํจํ์ธ์.
>
> # Output Format
> YAML ์ฝ๋ ๋ธ๋ก
๐ก ๊ฟํ:
์์ฑ๋ YAML ์ฝ๋๋ฅผ ๋ณต์ฌํด์ [Swagger Editor](https://editor.swagger.io/)์ ๋ถ์ฌ๋ฃ๊ธฐ๋ง ํ๋ฉด, ๋ฉ์ง API ๋ฌธ์๊ฐ 1์ด ๋ง์ ์์ฑ๋ฉ๋๋ค. ๊ฐ๋ฐ ๋จ๊ณ์์ ์ฝ๋ ๋ณ๊ฒฝ์ด ์์ ๋๋ง๋ค ์ด ํ๋กฌํํธ๋ฅผ ์ฌ์ฌ์ฉ(Reuse)ํ๋ฉด ๋ฌธ์ ํํํ ์คํธ๋ ์ค์์ ํด๋ฐฉ๋ ์ ์์ต๋๋ค.
3. ์ฌํ ๊ธฐ์ : ์ฟผ๋ฆฌ ์ต์ ํ ๋ฐ ๋ฆฌ๋ทฐ (SQL Review) ๐ ️
๋จ์ ์์ฑ์ ๋์ด, AI์๊ฒ DBA(Database Administrator) ์ญํ ์ ๋งก๊ฒจ๋ณด์ธ์. ๋ด๊ฐ ์ง ์ฟผ๋ฆฌ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ง๋จ๋ฐ์ ์ ์์ต๋๋ค.
> [SQL ํ๋ ํ๋กฌํํธ]
> "๋ค์ SQL ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๋ถ์ํด ์ค. ํนํ ์ธ๋ฑ์ค ํ์ฉ ๊ฐ๋ฅ์ฑ๊ณผ ๋นํจ์จ์ ์ธ JOIN์ด ์๋์ง ํ์ธํ๊ณ , ๋ ๋น ๋ฅธ ์๋๋ฅผ ๋ผ ์ ์๋ ๊ฐ์ ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํด ์ค."
์ด๋ ๊ฒ ํ๋ฉด AI๋ `EXPLAIN` ์คํ ๊ณํ์ ๋ถ์ํ๋ฏ, ์ฟผ๋ฆฌ์ ๋ฌธ์ ์ ์ ์ง์ด์ฃผ๊ณ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์ ์ํฉ๋๋ค.
๐ ๋ง์น๋ฉฐ: ๊ฐ๋ฐ์๋ '์ค๊ณ'์ ์ง์คํ์ธ์
์ค๋ ๋ฐฐ์ด SQL ์์ฑ๊ณผ API ๋ฌธ์ ์๋ํ ํ๋กฌํํธ๋ ๊ฐ๋ฐ์์ ์๊ฐ์ ๊ฐ์๋จน๋ ๋จ์ ๋ฐ๋ณต ์
๋ฌด๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ฌ์ค๋๋ค.
๊ธฐ์ตํ์ธ์. AI๋ ์ฌ๋ฌ๋ถ์ ์ผ์๋ฆฌ๋ฅผ ๋บ๋ ๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ๋ถ์ด ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ํคํ
์ฒ ์ค๊ณ ๊ฐ์ ๋ ๊ณ ์ฐจ์์ ์ธ ๊ณ ๋ฏผ์ ์ง์คํ ์ ์๋๋ก ๋๋ ๊ฐ๋ ฅํ ์กฐ์(Copilot)์
๋๋ค.
#ํ๋กฌํํธ์์ง๋์ด๋ง #SQL์๋ํ #API๋ฌธ์ํ #OpenAPI #Swagger #๊ฐ๋ฐ์์์ฐ์ฑ #TextToSQL #๋ฐฑ์๋๊ฐ๋ฐ #AI์ฝ๋ฉ #ChatGPT๊ฐ๋ฐ
๋๊ธ
๋๊ธ ์ฐ๊ธฐ