Skip to content

ISEL-HGU/JavaBuildAgent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

8 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AutoBuild4Byte

CI ๋กœ๊ทธ ์—†์ด ๋ ˆ๊ฑฐ์‹œ ์ž๋ฐ” ํ”„๋กœ์ ํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ณต์›ํ•˜๋Š” ์ž๋™ ๋นŒ๋“œ ์—์ด์ „ํŠธ

New Update (2026-02-11)

  • Bare Metal Mode: Docker ์—†์ด ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” --execution-mode local ์˜ต์…˜ ์ถ”๊ฐ€. /data2/donggyu/benchmark/sec_code/tmp ๊ฒฝ๋กœ์— ์œ„์น˜ํ•œ ๊ฒฉ๋ฆฌ๋œ ๋„๊ตฌ(JDK, Maven, Gradle)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ณ  ๋…๋ฆฝ์ ์ธ ๋นŒ๋“œ ํ™˜๊ฒฝ ์ œ๊ณต.

New Update (2026-01-19)

  • 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) ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ์•„๋‚ด์–ด ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ์ „๋žต ์ถ”๊ฐ€.

1. ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ

์ด ์‹œ์Šคํ…œ์€ Python์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ 5๊ฐœ์˜ ์ฃผ์š” ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

A. ์†Œ์Šค ํš๋“ (src/acquisition)

  • ์›๊ฒฉ(Remote) Git URL, ๋กœ์ปฌ(Local) ๋””๋ ‰ํ† ๋ฆฌ, ์•„์นด์ด๋ธŒ(Archive) Zip ํŒŒ์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ•˜๊ฑฐ๋‚˜ ์•„์นด์ด๋ธŒ๋ฅผ ์ž‘์—… ๊ณต๊ฐ„(Workspace)์— ์••์ถ• ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

B. ํ”„๋กœ์ ํŠธ ํƒ์ƒ‰ (src/discovery)

  • ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ๋„๊ตฌ(Maven/Gradle)๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋ฃจํŠธ ๋นŒ๋“œ ํŒŒ์ผ(pom.xml ๋˜๋Š” build.gradle)์„ ์ •ํ™•ํžˆ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.

C. ํ™˜๊ฒฝ ์ถ”๋ก  (src/inference)

  • 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 ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚œ ์•ˆ์ • ๋ฒ„์ „)

D. ์ž๊ฐ€ ์น˜์œ  (src/healing)

  • ํ”„๋กœํ† ์ฝœ ์—…๊ทธ๋ ˆ์ด๋”: http:// Maven ์ €์žฅ์†Œ URL์„ ์ž๋™์œผ๋กœ https:// ์•ˆ์ „ํ•œ URL๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฏธ๋Ÿฌ ์ฃผ์ž…๊ธฐ: ์›๋ณธ ์ €์žฅ์†Œ๊ฐ€ ์ฃฝ์—ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด, Google Maven Mirror๋ฅผ ์‚ฌ์šฉํ•˜๋Š” settings.xml์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  • Gradle ๋Ÿฐํƒ€์ž„ ํž๋Ÿฌ (NEW):
    • init.gradle ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธ€๋กœ๋ฒŒ ๊ฒฝ๋กœ(/root/.gradle/init.d/)์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
    • ๋นŒ๋“œ ์‹คํ–‰ ์‹œ ๋™์ ์œผ๋กœ ํŒŒ์†๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(์˜ˆ: repo.spring.io)๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ Maven Central๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜์—ฌ ์ธ์ฆ ์˜ค๋ฅ˜(401)๋ฅผ ๋ฌด๋ ฅํ™”ํ•ฉ๋‹ˆ๋‹ค.

E. ์‹คํ–‰ ๊ด€๋ฆฌ (src/execution)

  • 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 ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช…

ํ”Œ๋ž˜๊ทธ ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
--type ํ•„์ˆ˜ ์ž…๋ ฅ ์†Œ์Šค ์œ ํ˜• (remote, local, archive) -
--path ํ•„์ˆ˜ ์ž…๋ ฅ ๊ฒฝ๋กœ (URL, ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ, ๋˜๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ) -
--commit ์„ ํƒ (remote ํƒ€์ž… ์ „์šฉ) ์ฒดํฌ์•„์›ƒํ•  ํŠน์ • Git ์ปค๋ฐ‹ ํ•ด์‹œ HEAD
--workspace ์„ ํƒ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋กœ๋“œ๋˜๊ณ  ๋นŒ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋  ์ž„์‹œ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ workspace/
--output ์„ ํƒ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ(ํด๋ž˜์Šค ํŒŒ์ผ, ๋กœ๊ทธ)์ด ์ €์žฅ๋  ๊ฒฝ๋กœ output/
--execution-mode ์„ ํƒ ์‹คํ–‰ ๋ชจ๋“œ ์„ ํƒ (docker, local) docker

์‹คํ–‰ ์˜ˆ์‹œ

1. ๋กœ์ปฌ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ (๊ธฐ๋ณธ)

python3 src/main.py --type local --path /Users/user/projects/legacy-app

2. ์›๊ฒฉ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํŠน์ • ์ปค๋ฐ‹ ๋นŒ๋“œ

python3 src/main.py \
  --type remote \
  --path https://github.com/apache/commons-lang.git \
  --commit 8b67192

3. Zip ์•„์นด์ด๋ธŒ ๋นŒ๋“œ ๋ฐ ์ปค์Šคํ…€ ์ถœ๋ ฅ ๊ฒฝ๋กœ ์ง€์ •

  --type archive \
  --path /Downloads/source-code.zip \
  --workspace ./temp_work \
  --output ./build_results

4. Bare Metal Mode (Docker ์—†์ด ์‹คํ–‰)

python3 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: (์‹คํŒจ ์‹œ) ์—๋Ÿฌ ์›์ธ ๋ถ„์„ ๋กœ๊ทธ

3. ๊ฒ€์ฆ ๊ฒฐ๊ณผ

์‹œ๋‚˜๋ฆฌ์˜ค 1: Maven ๋ ˆ๊ฑฐ์‹œ (Sample Project)

  • ์ƒํ™ฉ: http ์ €์žฅ์†Œ URL ์‚ฌ์šฉ.
  • ๊ฒฐ๊ณผ: https ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐ Mirror ์ฃผ์ž… ํ›„ ๋นŒ๋“œ ์„ฑ๊ณต.

์‹œ๋‚˜๋ฆฌ์˜ค 2: Gradle ๋ ˆ๊ฑฐ์‹œ (VUL4J-74)

  • ์ƒํ™ฉ: repo.spring.io (ํ˜„์žฌ ์ธ์ฆ ํ•„์š”) ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ 401 ์˜ค๋ฅ˜ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: ์—์ด์ „ํŠธ๊ฐ€ init.gradle์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋Ÿฐํƒ€์ž„์— Maven Central๋กœ ๊ต์ฒดํ•จ.
  • ๊ฒฐ๊ณผ: ์ธ์ฆ ์˜ค๋ฅ˜๋ฅผ ์šฐํšŒํ•˜๊ณ  ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋กœ ์ง„์ž… ์„ฑ๊ณต. (๋‹จ, ํ”„๋กœ์ ํŠธ ์ž์ฒด์˜ ๋ˆ„๋ฝ๋œ ์Šค๋ƒ…์ƒท ์•„ํ‹ฐํŒฉํŠธ๋กœ ์ธํ•œ 404 ์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ–ˆ์œผ๋‚˜, ์ด๋Š” ์—์ด์ „ํŠธ์˜ ์ •์ƒ ๋™์ž‘์ž„)

์‹œ๋‚˜๋ฆฌ์˜ค 3: VUL4J-16 (Legacy Maven HTTP)

  • ์ƒํ™ฉ: ๋‹ค์ˆ˜์˜ http ์ €์žฅ์†Œ ์‚ฌ์šฉ์œผ๋กœ Maven 3.8+์—์„œ ์ฐจ๋‹จ๋จ (Blocked Mirror).
  • ํ•ด๊ฒฐ: settings.xml ์ฃผ์ž… ์‹œ <mirrorOf>*</mirrorOf>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ Google Maven Mirror(HTTPS)๋กœ ๊ฐ•์ œํ•จ.
  • ๊ฒฐ๊ณผ: ์„ฑ๊ณต. ๋ชจ๋“  ์˜์กด์„ฑ์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค์šด๋กœ๋“œ๋จ.

์‹œ๋‚˜๋ฆฌ์˜ค 4: VUL4J-129-S (Maven with Missing Artifact)

  • ์ƒํ™ฉ: 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 ํ…Œ์ŠคํŠธ ์˜์กด์„ฑ ํ•ด๊ฒฐ, ๊ทธ๋ฆฌ๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ๋ชจ๋“ˆ ์ œ์™ธ๋กœ ์ธํ•œ ๋นŒ๋“œ ์„ฑ๊ณต.

4. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (Troubleshooting)

A. ํŒŒ์†๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ (Broken Repository)

  • ๋ฌธ์ œ: repo.spring.io ๋“ฑ ๊ณผ๊ฑฐ์—” ๊ณต๊ฐœ์˜€์œผ๋‚˜ ํ˜„์žฌ๋Š” ์ธ์ฆ์ด ํ•„์š”ํ•œ ์ €์žฅ์†Œ๋“ค์ด ์žˆ์Œ. ๋‹จ์ˆœ ํŒŒ์ผ ์ˆ˜์ •์œผ๋กœ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๋ง‰์„ ์ˆ˜ ์—†์—ˆ์Œ.
  • ํ•ด๊ฒฐ: init.gradle ์Šคํฌ๋ฆฝํŠธ์—์„œ repository.whenObjectAdded ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€๋กœ์ฑ„์–ด, ๋ฌธ์ œ๋˜๋Š” URL์ด ๊ฐ์ง€๋˜๋ฉด ์ฆ‰์‹œ ์•ˆ์ „ํ•œ ๊ณต๊ฐœ ์ €์žฅ์†Œ(Maven Central)๋กœ URL์„ ๋ฎ์–ด์”Œ์šฐ๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•จ.

B. Docker ์•„ํ‚คํ…์ฒ˜ ํ˜ธํ™˜์„ฑ

  • ๋ฌธ์ œ: Apple Silicon (M1/M2)์—์„œ Intel ๊ธฐ๋ฐ˜ JDK ์„ค์น˜ ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ: platform.machine()์„ ๊ฐ์ง€ํ•˜์—ฌ ์ ์ ˆํ•œ JAVA_HOME ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋„๋ก ์ˆ˜์ •.

5. ํ–ฅํ›„ ๊ณ„ํš

  • JCenter ๋“ฑ ์ถ”๊ฐ€ Dead Repo ๋Œ€์‘: ํž๋ง ๋กœ์ง ํ™•์žฅ.
  • ์‹ค์ „ ํ…Œ์ŠคํŠธ: VUL4J ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•œ ๋Œ€๊ทœ๋ชจ ์‹คํ—˜ ์ˆ˜ํ–‰.

6. ๊ธฐ์ˆ  ๊ณ ๋„ํ™”: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ž๊ฐ€ ์น˜์œ  (Hybrid Self-Healing Upgrade)

๊ธฐ์กด์˜ ๊ทœ์น™ ๊ธฐ๋ฐ˜(Heuristic) ์ ‘๊ทผ๋ฒ•์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , LLM์˜ ๊ฐ•๋ ฅํ•œ ์ถ”๋ก  ๋Šฅ๋ ฅ์„ ๊ฒฐํ•ฉํ•˜์—ฌ "์†๋„"์™€ "ํ•ด๊ฒฐ ๋Šฅ๋ ฅ"์„ ๋™์‹œ์— ์žก์€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

A. 2๋‹จ๊ณ„ ๋ฐฉ์–ด์„  ์ „๋žต (Two-Phase Defense Strategy)

  1. 1์ฐจ ๋ฐฉ์–ด์„  - ์ •์  ์น˜์œ  (Static Heuristic Phase)

    • ์—ญํ• : ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š”(Free) ํ•ด๊ฒฐ์‚ฌ.
    • ๋™์ž‘: ์†Œ์Šค์ฝ”๋“œ ๋ถ„์„๋งŒ์œผ๋กœ ์•Œ๋ ค์ง„ ๋ฌธ์ œ(URL 401 ์˜ค๋ฅ˜, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ ๋ถˆ์ผ์น˜, ์ˆœํ™˜ ์ฐธ์กฐ ๋“ฑ)๋ฅผ 1์ดˆ ๋ฏธ๋งŒ์— ์ˆ˜์ •(patcher.py)ํ•ฉ๋‹ˆ๋‹ค.
    • ํšจ๊ณผ: ์ „์ฒด ๋นŒ๋“œ ์˜ค๋ฅ˜์˜ ์•ฝ 80%๋ฅผ LLM ํ˜ธ์ถœ ์—†์ด ๋ฌด๋ฃŒ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  2. 2์ฐจ ๋ฐฉ์–ด์„  - ๋™์  ์ง€๋Šฅํ˜• ์น˜์œ  (Smart Flexible Healing)

    • ์—ญํ• : ๋ณต์žกํ•˜๊ณ  ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฏธ์ง€์˜ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ „์ง€์ „๋Šฅํ•œ ํ•ด๊ฒฐ์‚ฌ.
    • ๋™์ž‘: 1์ฐจ ๋ฐฉ์–ด์„ ์ด ๋šซ๋ ค ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๊ฐœ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ๋‹จ์ˆœํ•œ ์ˆ˜์ •๋งŒ ์‹œ๋„ํ–ˆ์œผ๋‚˜, ์ตœ์‹  ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์™„์ „ํ•œ ์ž์œจ์„ฑ์„ ๋ถ€์—ฌ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
    • ํšจ๊ณผ: ๋‹จ์ผ ํ†ตํ•ฉ ํ”„๋กฌํ”„ํŠธ(Smart Prompt)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ์˜ ์›์ธ์„ ์‹ฌ์ธต ๋ถ„์„ํ•˜๊ณ , ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ฝ”๋“œ ์ˆ˜์ •, ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ, ์ฃผ์„ ์ฒ˜๋ฆฌ(Neutralize), ํŒŒ์ผ ์ƒ์„ฑ ์ค‘ ์ตœ์ ์˜ ์ „๋žต์„ ์Šค์Šค๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

B. LLM ํž๋Ÿฌ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ (Key Features)

  • ์Šค๋งˆํŠธ ๋ชจ๋ธ ๊ฐ์ง€ (Smart Model Detection): gemini๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ OpenAI ๋ฐฉ์‹๊ณผ Google REST API ๋ฐฉ์‹์„ ์ž๋™์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒ”์šฉ ๊ตฌ์„ฑ (Generic Configuration): llm_config.json ์„ค์ • ํŒŒ์ผ ํ•˜๋‚˜๋กœ OpenAI, Google Gemini, ํ˜น์€ ํ˜ธํ™˜๋˜๋Š” ๋ชจ๋“  ๋กœ์ปฌ LLM์„ ์†์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„์šฉ ํšจ์œจ์„ฑ ์ตœ์ ํ™”: ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด LLM์„ ์ „ํ˜€ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„ API ๋น„์šฉ์„ 0์›์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

E. ์ง„ํ™”๋œ ๊ธฐ๋Šฅ (Advanced Features - 2026 Update)

  1. ์ปจํ…์ŠคํŠธ ์ธ์‹ (Context Awareness)

    • ๋‹จ์ˆœ ๋กœ๊ทธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒŒ์ผ ํŠธ๋ฆฌ(Project Structure) ์ •๋ณด๋ฅผ LLM์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • Docker ๋‚ด๋ถ€ ๊ฒฝ๋กœ(/app/buggy/...)์™€ ์‹ค์ œ ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํžˆ ๋งคํ•‘ํ•˜์—ฌ "File Not Found" ์˜ค๋ฅ˜๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ์ง€์‹ ์ฃผ์ž… (Knowledge Injection)

    • "Bintray/JCenter Shutdown"๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ ํŠนํ™” ์ง€์‹์„ ํ”„๋กฌํ”„ํŠธ์— ๋‚ด์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
    • LLM์ด ์ฃฝ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ณ„์† ์‹œ๋„ํ•˜๋Š” ๋Œ€์‹ , Maven Central๋กœ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋˜‘๋˜‘ํ•œ ํŒ๋‹จ์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.
  3. ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ (Sandboxed Compatibility)

    • ์—์ด์ „ํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ(Python 3.9 ๋“ฑ)์„ ๊ณ ๋ คํ•˜์—ฌ, ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ตœ์‹  ๋ฌธ๋ฒ•(Python 3.10+ Type Hint ๋“ฑ) ์‚ฌ์šฉ์„ ์–ต์ œํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ์น˜์œ  ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” 2์ฐจ์ ์ธ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

C. ์„ค์ • ๋ฐฉ๋ฒ• (Configuration)

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ llm_config.json ํŒŒ์ผ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ LLM ๋ฐฑ์—”๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ Git์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ(gitignore), ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ง์ ‘ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. ํ•„๋“œ ์„ค๋ช…

ํ•„๋“œ๋ช… ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
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

2. ์„ค์ • ์˜ˆ์‹œ

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"
}

D. ์‚ฌ์ „ ์ ๊ฒ€ (Pre-flight Checks)

์—์ด์ „ํŠธ ์‹คํ–‰ ์ดˆ๊ธฐ์— ํ•„์ˆ˜ ํ™˜๊ฒฝ(Docker)์„ ๊ฒ€์ฆํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

  • ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ: Docker๊ฐ€ ๊บผ์ ธ์žˆ๋Š” ๊ฒฝ์šฐ Phase 0 ๋‹จ๊ณ„์—์„œ ์ฆ‰์‹œ ๊ฐ์ง€ํ•˜์—ฌ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • ํ† ํฐ ๋‚ญ๋น„ ๋ฐฉ์ง€: ํ™˜๊ฒฝ ๋ฌธ์ œ๋กœ ์‹คํŒจํ•  ๊ฒƒ์ด ํ™•์‹คํ•œ ๋นŒ๋“œ์— LLM ์น˜์œ ๋ฅผ ์‹œ๋„ํ•˜๋Š” ๋‚ญ๋น„๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published