CI ๋ก๊ทธ ์์ด ๋ ๊ฑฐ์ ์๋ฐ ํ๋ก์ ํธ๋ก๋ถํฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ณต์ํ๋ ์๋ ๋น๋ ์์ด์ ํธ
- Bare Metal Mode: Docker ์์ด ๋ก์ปฌ ํ๊ฒฝ์์ ์ง์ ๋น๋ํ ์ ์๋
--execution-mode local์ต์ ์ถ๊ฐ./data2/donggyu/benchmark/sec_code/tmp๊ฒฝ๋ก์ ์์นํ ๊ฒฉ๋ฆฌ๋ ๋๊ตฌ(JDK, Maven, Gradle)๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๊ณ ๋ ๋ฆฝ์ ์ธ ๋น๋ ํ๊ฒฝ ์ ๊ณต.
- Smart Flexible Healing: ๋จ์ผ ํตํฉ ํ๋กฌํํธ(Smart Prompt)๋ฅผ ์ ์ฉํ์ฌ LLM์ด ์ํฉ์ ๋ฐ๋ผ ์ฝ๋ ์์ , ์์กด์ฑ ๋ณ๊ฒฝ, ํ์ผ ์์ฑ ๋ฑ์ ์์จ์ ์ผ๋ก ์ ํํ๋๋ก ๊ฐ์ .
- Context Awareness: ํ์ผ ํธ๋ฆฌ(Project Structure) ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ Docker ๋ด๋ถ ๊ฒฝ๋ก์ ๋ก์ปฌ ๊ฒฝ๋ก ๊ฐ์ ๋งคํ ์ค๋ฅ ํด๊ฒฐ.
- Knowledge Injection: "Bintray/JCenter Shutdown", "Restlet Repo Missing", "Java Version Mismatch" ๋ฑ ๋๋ฉ์ธ ์ง์์ ํ๋กฌํํธ์ ์ฃผ์ ํ์ฌ ์น์ ์ฑ๊ณต๋ฅ ๋ํญ ํฅ์.
- Improved Version Handling:
class file version 55.0(Java 11) ๋ฑ์ ํธํ์ฑ ์ค๋ฅ ๋ฐ์ ์, ์์๋(Inherited) ํ๋ฌ๊ทธ์ธ์ ์ฐพ์๋ด์ด ๋ค์ด๊ทธ๋ ์ด๋ํ๋ ์ ๋ต ์ถ๊ฐ.
์ด ์์คํ ์ Python์ผ๋ก ๊ตฌํ๋์์ผ๋ฉฐ 5๊ฐ์ ์ฃผ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ์๊ฒฉ(Remote) Git URL, ๋ก์ปฌ(Local) ๋๋ ํ ๋ฆฌ, ์์นด์ด๋ธ(Archive) Zip ํ์ผ ๋ฑ ๋ค์ํ ์ ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํด๋ก ํ๊ฑฐ๋ ์์นด์ด๋ธ๋ฅผ ์์ ๊ณต๊ฐ(Workspace)์ ์์ถ ํด์ ํฉ๋๋ค.
- ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ค์บํฉ๋๋ค.
- ๋น๋ ๋๊ตฌ(Maven/Gradle)๋ฅผ ์๋ณํฉ๋๋ค.
- ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ์์๋ ๋ฃจํธ ๋น๋ ํ์ผ(pom.xml ๋๋ build.gradle)์ ์ ํํ ์ฐพ์๋ ๋๋ค.
- EnvironmentDetector: ๋ค์์ ์ฌ์ฉํ์ฌ ํ์ํ JDK ๋ฒ์ (์: 7, 8, 11)์ ์ถ๋ก ํฉ๋๋ค.
pom.xml์ค์ ๋ถ์ (<maven.compiler.source>)- ์์ค ์ฝ๋ ํน์ง ๋ถ์ (
javalang): ๋๋ค(Lambda, Java 8), try-with-resources(Java 7) ๋ฑ์ ๋ฌธ๋ฒ ํน์ง์ ๊ฐ์งํฉ๋๋ค.
- Detector: ๋น๋ ๋๊ตฌ ๋ฒ์ ์ ๊ฒฐ์ ํฉ๋๋ค.
- Maven: ๊ธฐ๋ณธ๊ฐ 3.8.6
- Gradle: ๊ธฐ๋ณธ๊ฐ 6.9.4 (Java 8 ํธํ์ฑ์ด ๋ฐ์ด๋ ์์ ๋ฒ์ )
- ํ๋กํ ์ฝ ์
๊ทธ๋ ์ด๋:
http://Maven ์ ์ฅ์ URL์ ์๋์ผ๋กhttps://์์ ํ URL๋ก ๋ณํํฉ๋๋ค. - ๋ฏธ๋ฌ ์ฃผ์
๊ธฐ: ์๋ณธ ์ ์ฅ์๊ฐ ์ฃฝ์์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด, Google Maven Mirror๋ฅผ ์ฌ์ฉํ๋
settings.xml์ ์ฃผ์ ํฉ๋๋ค. - Gradle ๋ฐํ์ ํ๋ฌ (NEW):
init.gradle์คํฌ๋ฆฝํธ๋ฅผ ๋์ปค ์ปจํ ์ด๋์ ๊ธ๋ก๋ฒ ๊ฒฝ๋ก(/root/.gradle/init.d/)์ ์ฃผ์ ํฉ๋๋ค.- ๋น๋ ์คํ ์ ๋์ ์ผ๋ก ํ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ(์:
repo.spring.io)๋ฅผ ๊ฐ์งํ๊ณ , ์ด๋ฅผ Maven Central๋ก ๋ฆฌ๋ค์ด๋ ํธํ์ฌ ์ธ์ฆ ์ค๋ฅ(401)๋ฅผ ๋ฌด๋ ฅํํฉ๋๋ค.
-
DockerManager (๊ธฐ๋ณธ):
- ์ถ๋ก ๋ ํ๊ฒฝ์ ๊ธฐ๋ฐ์ผ๋ก
Dockerfile์ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค. - ์๋๋ฐ์ค ํ๊ฒฝ์์ ์์ ํ๊ฒ ๋น๋๋ฅผ ์ํํฉ๋๋ค.
- ์ถ๋ก ๋ ํ๊ฒฝ์ ๊ธฐ๋ฐ์ผ๋ก
-
LocalManager (Bare Metal Mode):
--execution-mode local์ต์ ์ฌ์ฉ ์ ๋์ํฉ๋๋ค./data2/donggyu/benchmark/sec_code/tmp๋๋ ํ ๋ฆฌ์ ์์นํ **๊ฒฉ๋ฆฌ๋ ๋๊ตฌ(JDK 8/17, Maven, Gradle)**๋ฅผ ๊ฐ์ ๋ก ์ฌ์ฉํ์ฌ ํธ์คํธ์ ํ๊ฒฝ ๋ณ์๋ ์ค์ ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ๋น๋๋ฅผ ์ํํฉ๋๋ค.- ๋์ปค ์ค๋ฒํค๋ ์์ด ๋น ๋ฅธ ๋น๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
-
๋น๋ ๋ฐ ์ถ์ถ ๊ณตํต ๋ก์ง:
- Maven:
mvn package -DskipTests์คํ ํtarget/classes์ถ์ถ. - Gradle:
gradle compileJava -x test์คํ ํbuild/classes์ถ์ถ. - ๋น๋ ์ฑ๊ณต ์ ๊ฒฐ๊ณผ๋ฌผ์ ํธ์คํธ์
output/classes๋๋ ํ ๋ฆฌ๋ก ์์ ํ๊ฒ ๋ณต์ฌํฉ๋๋ค.
- Maven:
| ํ๋๊ทธ | ํ์ ์ฌ๋ถ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|---|
--type |
ํ์ | ์
๋ ฅ ์์ค ์ ํ (remote, local, archive) |
- |
--path |
ํ์ | ์ ๋ ฅ ๊ฒฝ๋ก (URL, ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก, ๋๋ ํ์ผ ๊ฒฝ๋ก) | - |
--commit |
์ ํ | (remote ํ์
์ ์ฉ) ์ฒดํฌ์์ํ ํน์ Git ์ปค๋ฐ ํด์ |
HEAD |
--workspace |
์ ํ | ํ๋ก์ ํธ๊ฐ ๋ก๋๋๊ณ ๋น๋๊ฐ ์ํ๋ ์์ ์์ ๋๋ ํ ๋ฆฌ | workspace/ |
--output |
์ ํ | ๋น๋ ๊ฒฐ๊ณผ๋ฌผ(ํด๋์ค ํ์ผ, ๋ก๊ทธ)์ด ์ ์ฅ๋ ๊ฒฝ๋ก | output/ |
--execution-mode |
์ ํ | ์คํ ๋ชจ๋ ์ ํ (docker, local) |
docker |
python3 src/main.py --type local --path /Users/user/projects/legacy-apppython3 src/main.py \
--type remote \
--path https://github.com/apache/commons-lang.git \
--commit 8b67192 --type archive \
--path /Downloads/source-code.zip \
--workspace ./temp_work \
--output ./build_resultspython3 src/main.py \
--type local \
--path /path/to/project \
--execution-mode local์ฃผ์: Local Mode๋
/data2/donggyu/benchmark/sec_code/tmp๊ฒฝ๋ก์ JDK์ ๋น๋ ๋๊ตฌ(Maven, Gradle)๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐฐ์น๋์ด ์์ด์ผ ๋์ํฉ๋๋ค. --path /Downloads/source-code.zip
--workspace ./temp_work
--output ./build_results
์คํ์ด ์๋ฃ๋๋ฉด --output (๊ธฐ๋ณธ๊ฐ: output/) ๋๋ ํ ๋ฆฌ์์ ๋ค์์ ํ์ธํ ์ ์์ต๋๋ค:
classes/: ๋์ปค ์ปจํ ์ด๋์์ ์ถ์ถ๋ ์ปดํ์ผ๋.classํ์ผ๋ค (ํจํค์ง ๊ตฌ์กฐ ์ ์ง)compile_log.txt: ์์ธ ๋น๋ ๋ก๊ทธerror_log.txt: (์คํจ ์) ์๋ฌ ์์ธ ๋ถ์ ๋ก๊ทธ
- ์ํฉ:
http์ ์ฅ์ URL ์ฌ์ฉ. - ๊ฒฐ๊ณผ:
https์ ๊ทธ๋ ์ด๋ ๋ฐ Mirror ์ฃผ์ ํ ๋น๋ ์ฑ๊ณต.
- ์ํฉ:
repo.spring.io(ํ์ฌ ์ธ์ฆ ํ์) ๋ฆฌํฌ์งํ ๋ฆฌ ์ฌ์ฉ์ผ๋ก ์ธํ 401 ์ค๋ฅ ๋ฐ์. - ํด๊ฒฐ: ์์ด์ ํธ๊ฐ
init.gradle์ ํตํด ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ฐํ์์ Maven Central๋ก ๊ต์ฒดํจ. - ๊ฒฐ๊ณผ: ์ธ์ฆ ์ค๋ฅ๋ฅผ ์ฐํํ๊ณ ์ปดํ์ผ ๋จ๊ณ๋ก ์ง์ ์ฑ๊ณต. (๋จ, ํ๋ก์ ํธ ์์ฒด์ ๋๋ฝ๋ ์ค๋ ์ท ์ํฐํฉํธ๋ก ์ธํ 404 ์ค๋ฅ๋ ๋ฐ์ํ์ผ๋, ์ด๋ ์์ด์ ํธ์ ์ ์ ๋์์)
- ์ํฉ: ๋ค์์
http์ ์ฅ์ ์ฌ์ฉ์ผ๋ก Maven 3.8+์์ ์ฐจ๋จ๋จ (Blocked Mirror). - ํด๊ฒฐ:
settings.xml์ฃผ์ ์<mirrorOf>*</mirrorOf>๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํธ๋ํฝ์ Google Maven Mirror(HTTPS)๋ก ๊ฐ์ ํจ. - ๊ฒฐ๊ณผ: ์ฑ๊ณต. ๋ชจ๋ ์์กด์ฑ์ด ์์ ํ๊ฒ ๋ค์ด๋ก๋๋จ.
- ์ํฉ:
org.hyperic:sigar์ํฐํฉํธ๊ฐ Maven Central์ ์๊ณ JBoss ๋ฆฌํฌ์งํ ๋ฆฌ์๋ง ์กด์ฌํจ. ๊ธฐ์กด์mirrorOf *์ ์ฑ ์ด JBoss ๋ฆฌํฌ์งํ ๋ฆฌ ์ ๊ทผ์ ์ฐจ๋จํ์ฌ ๋น๋ ์คํจ. - ํด๊ฒฐ: Smart Mirror Exclusion ๊ธฐ๋ฅ ๊ตฌํ.
patcher.py๊ฐpom.xml์ ์ค์บํ์ฌ ์ด๋ฏธhttps://๋ฅผ ์ฌ์ฉํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ(์:sigar)๋ฅผ ์๋ณํ๊ณ , ๋ฏธ๋ฌ ์ค์ ์์ ์ ์ธ(mirrorOf *,!sigar)ํ์ฌ ์ง์ ์ ๊ทผ์ ํ์ฉํจ. - ์ถ๊ฐ ์์ :
druid-processing๋ชจ๋์ดdruid-core์ test-jar๋ฅผ ์์กด์ฑ์ผ๋ก ์๊ตฌํ์ผ๋,mvn compile์ ํ ์คํธ jar๋ฅผ ์์ฑํ์ง ์์. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋ ๋ช ๋ น์mvn package -DskipTests๋ก ๋ณ๊ฒฝํ์ฌ reactor ๋ด์์ ํ ์คํธ ์ํฐํฉํธ๊ฐ ์ ์ ์์ฑ๋๋๋ก ํจ. - Robustness ๊ฐ์ :
web-console,distribution๋ฑ ๋ฐ์ดํธ์ฝ๋ ๋ณต์์ ๋ถํ์ํ๊ณ ๋น๋ ์ค๋ฅ(์:npm๊ถํ ๋ฌธ์ )๋ฅผ ์ ๋ฐํ๋ ํ๋ก ํธ์๋ ๋ชจ๋์ ๊ฐ์งํ์ฌ Reactor ๋น๋์์ ๋์ ์ผ๋ก ์ ์ธ(-pl !web-console,!distribution)ํจ. - ๊ฒฐ๊ณผ: ์ฑ๊ณต.
sigar์ํฐํฉํธ ๋ค์ด๋ก๋,druid-coreํ ์คํธ ์์กด์ฑ ํด๊ฒฐ, ๊ทธ๋ฆฌ๊ณ ํ๋ก ํธ์๋ ๋ชจ๋ ์ ์ธ๋ก ์ธํ ๋น๋ ์ฑ๊ณต.
- ๋ฌธ์ :
repo.spring.io๋ฑ ๊ณผ๊ฑฐ์ ๊ณต๊ฐ์์ผ๋ ํ์ฌ๋ ์ธ์ฆ์ด ํ์ํ ์ ์ฅ์๋ค์ด ์์. ๋จ์ ํ์ผ ์์ ์ผ๋ก๋ ํ๋ฌ๊ทธ์ธ์ ์ํด ๋์ ์ผ๋ก ์ถ๊ฐ๋๋ ์ ์ฅ์๋ฅผ ๋ง์ ์ ์์์. - ํด๊ฒฐ:
init.gradle์คํฌ๋ฆฝํธ์์repository.whenObjectAdded์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ์ด, ๋ฌธ์ ๋๋ URL์ด ๊ฐ์ง๋๋ฉด ์ฆ์ ์์ ํ ๊ณต๊ฐ ์ ์ฅ์(Maven Central)๋ก URL์ ๋ฎ์ด์์ฐ๋ ๋ก์ง์ ๊ตฌํํจ.
- ๋ฌธ์ : Apple Silicon (M1/M2)์์ Intel ๊ธฐ๋ฐ JDK ์ค์น ์ ์ค๋ฅ ๋ฐ์.
- ํด๊ฒฐ:
platform.machine()์ ๊ฐ์งํ์ฌ ์ ์ ํJAVA_HOME๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋๋ก ์์ .
- JCenter ๋ฑ ์ถ๊ฐ Dead Repo ๋์: ํ๋ง ๋ก์ง ํ์ฅ.
- ์ค์ ํ ์คํธ: VUL4J ์ ์ฒด ๋ฐ์ดํฐ์ ์ ๋ํ ๋๊ท๋ชจ ์คํ ์ํ.
๊ธฐ์กด์ ๊ท์น ๊ธฐ๋ฐ(Heuristic) ์ ๊ทผ๋ฒ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ , LLM์ ๊ฐ๋ ฅํ ์ถ๋ก ๋ฅ๋ ฅ์ ๊ฒฐํฉํ์ฌ "์๋"์ "ํด๊ฒฐ ๋ฅ๋ ฅ"์ ๋์์ ์ก์ ํ์ด๋ธ๋ฆฌ๋ ์ํคํ ์ฒ๋ฅผ ์์ฑํ์ต๋๋ค.
-
1์ฐจ ๋ฐฉ์ด์ - ์ ์ ์น์ (Static Heuristic Phase)
- ์ญํ : ๊ฐ์ฅ ๋น ๋ฅด๊ณ ๋น์ฉ์ด ๋ค์ง ์๋(Free) ํด๊ฒฐ์ฌ.
- ๋์: ์์ค์ฝ๋ ๋ถ์๋ง์ผ๋ก ์๋ ค์ง ๋ฌธ์ (URL 401 ์ค๋ฅ, ํ๋ฌ๊ทธ์ธ ๋ฒ์ ๋ถ์ผ์น, ์ํ ์ฐธ์กฐ ๋ฑ)๋ฅผ 1์ด ๋ฏธ๋ง์ ์์ (
patcher.py)ํฉ๋๋ค. - ํจ๊ณผ: ์ ์ฒด ๋น๋ ์ค๋ฅ์ ์ฝ 80%๋ฅผ LLM ํธ์ถ ์์ด ๋ฌด๋ฃ๋ก ํด๊ฒฐํฉ๋๋ค.
-
2์ฐจ ๋ฐฉ์ด์ - ๋์ ์ง๋ฅํ ์น์ (Smart Flexible Healing)
- ์ญํ : ๋ณต์กํ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ฏธ์ง์ ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ์ ์ง์ ๋ฅํ ํด๊ฒฐ์ฌ.
- ๋์: 1์ฐจ ๋ฐฉ์ด์ ์ด ๋ซ๋ ค ๋น๋๊ฐ ์คํจํ ๊ฒฝ์ฐ ๊ฐ์ ํฉ๋๋ค. ์ด๊ธฐ์๋ ๋จ์ํ ์์ ๋ง ์๋ํ์ผ๋, ์ต์ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์์ ํ ์์จ์ฑ์ ๋ถ์ฌ๋ฐ์์ต๋๋ค.
- ํจ๊ณผ: ๋จ์ผ ํตํฉ ํ๋กฌํํธ(Smart Prompt)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ์ ์์ธ์ ์ฌ์ธต ๋ถ์ํ๊ณ , ์ํฉ์ ๋ฐ๋ผ ์ฝ๋ ์์ , ์์กด์ฑ ์ ๋ฐ์ดํธ, ์ฃผ์ ์ฒ๋ฆฌ(Neutralize), ํ์ผ ์์ฑ ์ค ์ต์ ์ ์ ๋ต์ ์ค์ค๋ก ์ ํํฉ๋๋ค.
- ์ค๋งํธ ๋ชจ๋ธ ๊ฐ์ง (Smart Model Detection):
gemini๋ผ๋ ๋จ์ด๋ฅผ ๊ฐ์งํ์ฌ OpenAI ๋ฐฉ์๊ณผ Google REST API ๋ฐฉ์์ ์๋์ผ๋ก ์ ํํฉ๋๋ค. - ๋ฒ์ฉ ๊ตฌ์ฑ (Generic Configuration):
llm_config.json์ค์ ํ์ผ ํ๋๋ก OpenAI, Google Gemini, ํน์ ํธํ๋๋ ๋ชจ๋ ๋ก์ปฌ LLM์ ์์ฝ๊ฒ ๊ต์ฒดํ ์ ์์ต๋๋ค. - ๋น์ฉ ํจ์จ์ฑ ์ต์ ํ: ๋น๋๊ฐ ์ฑ๊ณตํ๋ฉด LLM์ ์ ํ ํธ์ถํ์ง ์์ API ๋น์ฉ์ 0์์ผ๋ก ์ ์งํ ์ ์์ต๋๋ค.
-
์ปจํ ์คํธ ์ธ์ (Context Awareness)
- ๋จ์ ๋ก๊ทธ ๋ฟ๋ง ์๋๋ผ ํ์ผ ํธ๋ฆฌ(Project Structure) ์ ๋ณด๋ฅผ LLM์ ์ ๊ณตํฉ๋๋ค.
- Docker ๋ด๋ถ ๊ฒฝ๋ก(
/app/buggy/...)์ ์ค์ ๋ก์ปฌ ๊ฒฝ๋ก๋ฅผ ์ ํํ ๋งคํํ์ฌ "File Not Found" ์ค๋ฅ๋ฅผ ์์ฒ ์ฐจ๋จํ์ต๋๋ค.
-
์ง์ ์ฃผ์ (Knowledge Injection)
- "Bintray/JCenter Shutdown"๊ณผ ๊ฐ์ ๋๋ฉ์ธ ํนํ ์ง์์ ํ๋กฌํํธ์ ๋ด์ฅํ์ต๋๋ค.
- LLM์ด ์ฃฝ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ณ์ ์๋ํ๋ ๋์ , Maven Central๋ก ๊ต์ฒดํ๊ฑฐ๋ ์ญ์ ํ๋ ๋๋ํ ํ๋จ์ ๋ด๋ฆฝ๋๋ค.
-
์์ ํ ์ฝ๋ ์์ฑ (Sandboxed Compatibility)
- ์์ด์ ํธ ์คํ ํ๊ฒฝ(Python 3.9 ๋ฑ)์ ๊ณ ๋ คํ์ฌ, ํธํ๋์ง ์๋ ์ต์ ๋ฌธ๋ฒ(Python 3.10+ Type Hint ๋ฑ) ์ฌ์ฉ์ ์ต์ ํฉ๋๋ค.
- ์ด๋ ์น์ ์คํฌ๋ฆฝํธ ์คํ ์ค ๋ฐ์ํ ์ ์๋ 2์ฐจ์ ์ธ ๋ฐํ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
ํ๋ก์ ํธ ๋ฃจํธ์ llm_config.json ํ์ผ์ ํตํด ๋ค์ํ LLM ๋ฐฑ์๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ์ด ํ์ผ์ Git์ ํฌํจ๋์ง ์์ผ๋ฏ๋ก(gitignore), ๋ก์ปฌ ํ๊ฒฝ์ ๋ง๊ฒ ์ง์ ์์ฑํด์ผ ํฉ๋๋ค.
| ํ๋๋ช | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
provider |
LLM ํํธ๋ (openai, ollama ๋ฑ) |
openai |
model |
์ฌ์ฉํ ๋ชจ๋ธ๋ช
(gpt-4, gemini-1.5-flash, mistral ๋ฑ) |
gpt-3.5-turbo |
api_key |
API ์ ๊ทผ ํค (Ollama ์ฌ์ฉ ์ ๋ถํ์) | env:LLM_API_KEY |
base_url |
API ์๋ํฌ์ธํธ URL (๋ก์ปฌ LLM ์ฌ์ฉ ์ ํ์) | http://localhost:11434 |
Case 1: OpenAI (GPT-4)
{
"provider": "openai",
"model": "gpt-4",
"api_key": "sk-..."
}Case 2: Google Gemini
{
"provider": "google",
"model": "gemini-2.5-flash",
"api_key": "AIza..."
}์ฐธ๊ณ : Gemini๋ ํ์ฌ OpenAI ํธํ ๋ชจ๋ ๋๋ Google GenAI SDK๋ฅผ ํตํด ์ง์๋ฉ๋๋ค.
Case 3: Local LLM (Ollama)
{
"provider": "ollama",
"model": "llama3:latest",
"base_url": "http://localhost:11434"
}์์ด์ ํธ ์คํ ์ด๊ธฐ์ ํ์ ํ๊ฒฝ(Docker)์ ๊ฒ์ฆํ๋ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ฌ ํจ์จ์ฑ์ ๋์์ต๋๋ค.
- ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ: Docker๊ฐ ๊บผ์ ธ์๋ ๊ฒฝ์ฐ Phase 0 ๋จ๊ณ์์ ์ฆ์ ๊ฐ์งํ์ฌ ์ข ๋ฃํฉ๋๋ค.
- ํ ํฐ ๋ญ๋น ๋ฐฉ์ง: ํ๊ฒฝ ๋ฌธ์ ๋ก ์คํจํ ๊ฒ์ด ํ์คํ ๋น๋์ LLM ์น์ ๋ฅผ ์๋ํ๋ ๋ญ๋น๋ฅผ ์์ฒ ์ฐจ๋จํ์ต๋๋ค.