기존 REODE 캐릭터를 다듬은 얼굴: 남색 헤드셋과 청록 렌즈를 쓰고 웃는 크림·분홍빛 아홀로틀
전시실로

REODE

Code migration

수정하기 전에, 공통 원인부터.

Java · Spring 코드 마이그레이션 에이전트입니다.

2026.03 — 2026.04

업무 프로젝트 · 마이그레이션·검증 체계

  • CLI구현 · 업무

REODE vocabulary

Lens
Migration Graph
Read First
Change and Check
Run Harness
Toolchain
Run Control
  1. assess
  2. plan
  3. explore
  1. transform
  2. validate
  3. fix
  4. measure
  1. recipes
  2. docker isolation
  3. equivalence
  1. escalation
  2. checkpoint
  3. learnings

Assess: assess_node · assessment_report · frameworks_detected · SOCRATIC RISK ANALYSIS · clarity_score · BASELINE BUILD · baseline_build_success · detect_spring_features · SpringAssessment · memory_context · get_local_jdk_versionPlan: plan_node · migration_plan · incremental_recipe_chain · get_recipe_chain · project_constraints · llm_structural · get_migration_strategy · is_fw_to_boot_migration · hitl_level · memory_contextExplore: _explore_before_fix · AFFECTED FILES · read_file · @Data · pom.xml · classify_build_error · ErrorCategory · get_category_prompt_hint · _batch_errors · _detect_fix_patterns · CANNOT FIND SYMBOL · compute_error_signatureTransform: llm_structural · transform_node · rewrite-maven-plugin · _ensure_openrewrite_plugin · rewrite:run · java_openrewrite_run · recipes_applied · _BATCH_SIZE · source_path_backup · structural_changes · resume_from_batchValidate: BASELINE BUILD · validate_node · java_build · java_test · java_lint · build_error_output · test_error_output · test_pass_rate · _route_after_validate · build_verification_tasks · verify-compat-check · SubAgentManager · _BackpressureExecutor · docker_maven_command · max_iterationsFix: memory_context · _explore_before_fix · @Data · pom.xml · get_category_prompt_hint · _detect_fix_patterns · build_error_output · test_error_output · fix_node · _fix_deterministic_pass · _apply_deterministic_fixes · LOMBOK 1.18.34 · annotationProcessorPaths · _fix_architect_editor_pass · FixPlan · _execute_llm_fix · _BackpressureExecutor · fix_attempts · java-migration-diagnostic · _determine_escalation · _build_full_project_context · fix-iter-{iteration} · AUTO-LEARNINGSMeasure: baseline_build_success · recipes_applied · test_pass_rate · measure_node · MigrationScorecard · G1 BUILD SUCCESS · G2 TEST EQUIVALENCE · G3 COVERAGE PRESERVATION · G4 TEST INTEGRITY · G5 NO TEST EXCLUSION · _count_deleted_test_files · _count_surefire_excludes · automation_ratio · S/A/B/C GRADERecipes: detect_spring_features · incremental_recipe_chain · get_recipe_chain · rewrite-maven-plugin · java_openrewrite_run · UpgradeToJava17 · UpgradeToJava21 · JavaxMigrationToJakarta · UpgradeSpringBoot_3_2 · UpgradeSpringSecurity_6_2 · JUnit4to5Migration · rewrite-migrate-java · rewrite-spring · SPRING_RECIPE_CHAINS · java_openrewrite_listDocker Isolation: JDK_DOCKER_IMAGES · maven:3.9-eclipse-temurin-22 · needs_docker_build · docker_maven_command · get_local_jdk_version · is_docker_available · docker_build_mode · local_jdk_version · _maven_cache_dir · JDK MISMATCHEquivalence: source_path_backup · verify-compat-check · java_app_start · e2e_smoke_test · java_app_stop · run_jar_comparison · detect_jar_type · deploy_dual_stack · discover_endpoints · api_equivalence_rate · api_breaking_changes · teardown_dual_stackEscalation: _route_after_validate · fix_attempts · _determine_escalation · claude-opus-4-6 · _build_full_project_context · _is_stuck · CONVERGENCE · CIRCUIT BREAKER · recovery_attempted · max_iterations · budget_usd · _check_budget_gateCheckpoint: _BATCH_SIZE · PipelineCheckpoint · reode/checkpoint · fix-iter-{iteration} · resume_from_batch · _resume_skip_nodes · MigrationProgressTracker · migration_progress.json · _save_node_progress · --resumeLearnings: FixPlan · FixEventLog · FixEvent · fix_events.jsonl · query_by_signature · format_learnings · compute_error_signature · AUTO-LEARNINGS · LEARNINGS.md · _append_learning · AVOID THIS APPROACH

수정의 근거와 통과 조건을 나눈 마이그레이션 루프

원본 빌드 상태를 기록하고 규칙 변환을 적용한 뒤, 소스 · POM 증거를 모아 수리합니다. 모델이 고친 뒤에도 build · test와 테스트 무결성을 다시 확인하며, 한도나 정체로 끝난 실행을 성공과 나눠 보고합니다.

규칙 기반 변환과 모델의 수리를 잇고, 바뀐 코드를 build와 test로 확인합니다. 업무 프로젝트입니다.

저장소의 REODE 작업 기록. pinxlab 참여 기간은 March 16, 2026 to May 26, 2026

업무 환경에서 쓰는 CLI 도구입니다.

수정 루프 구성도 · 비공개 구현 기록 기준
REODE 마이그레이션 수정 루프원본 빌드 상태를 기준선으로 남기고 규칙 변환을 적용한 뒤 build와 test로 검증합니다. 실패하면 수정 전에 source · 어노테이션 · POM 증거를 모으고, 알려진 패턴을 결정적으로 고쳐 다시 빌드합니다. 재빌드가 통과하면 모델을 부르지 않고, 실패하면 모은 증거와 수리 지침으로 모델이 고친 뒤 다시 검증합니다. 반복 한도나 정체로 끝난 실행은 측정으로 가되 성공으로 세지 않으며, 점수표는 다섯 수락 기준을 모두 통과해야 등급을 매깁니다.대상 소스 · POM비공개 마이그레이션 입력점수표 · 등급배포 결과가 아님실패 · 정체 보고성공으로 세지 않음원본 확인원본 상태 · 원본 compile실행 상태기준선 · 모르는 값은 미측정복구 기록수정 전 체크포인트같은 오류의 이전 수정변환변환 계획 → 규칙 변환수정 전 탐색원인 증거 · source 3개 · POM결정적 수정알려진 패턴 수정재빌드 확인모델 수리증거 · 수리 지침으로 수정검증build · test · 반복 +1다음 단계 판단계속 · 측정 · 기본 3회결과 측정변환 비율 · 테스트 · 커버리지5개 수락 기준입력 · 기준선복구 기록변환 · 수리검증 · 종료1소스 · POM2원본 compile 결과3규칙 변환4build · test5결과 · 반복 수6통과 · 한도 · 정체7기준선 비교8등급 산정1결과 · 반복 수2실패 · 재시도3수정 전 저장4증거 · 오류 묶음5통과 · LLM 생략6재빌드 실패7이전 수정8수정 후 재검증1통과 · 한도 · 정체2기준선 비교3등급 산정4삭제 · 제외 · 실패5한도 · 정체 종료

규칙 변환

원본 상태를 기준선으로 남기고, 규칙 변환 뒤 build · test로 검증해 측정까지 갑니다.

  1. 대상 소스 · POM데이터: 소스 · POM원본 상태 · 원본 compile원본 확인

    마이그레이션할 Java · Spring 소스와 POM을 받습니다. 고객 코드와 화면은 싣지 않습니다.

  2. 원본 상태 · 원본 compile원본 확인데이터: 원본 compile 결과기준선 · 모르는 값은 미측정실행 상태

    변환 전에 런타임을 고르고 원본을 compile해, 원래부터 깨져 있던 build를 기준선에 남깁니다. 기준선의 test · coverage 기본값은 측정값이 아닙니다.

  3. 원본 상태 · 원본 compile원본 확인실행 · 판정: 규칙 변환변환 계획 → 규칙 변환변환

    실행 graph는 원본 확인 → 변환 계획 → 규칙 변환 → 검증 순서로 이어집니다. 규칙으로 옮길 수 있는 변환을 먼저 적용합니다.

  4. 변환 계획 → 규칙 변환변환실행 · 판정: build · testbuild · test · 반복 +1검증

    변환 결과를 build와 test로 검증하고 반복 횟수를 하나 올립니다. 결과는 실행 상태로 돌아갑니다.

  5. build · test · 반복 +1검증데이터: 결과 · 반복 수계속 · 측정 · 기본 3회다음 단계 판단

    build 성공 여부, test 통과율, 반복 횟수로 다음 단계를 정합니다.

  6. 계속 · 측정 · 기본 3회다음 단계 판단실행 · 판정: 통과 · 한도 · 정체변환 비율 · 테스트 · 커버리지결과 측정

    build와 test가 모두 통과하거나, 반복 한도에 닿거나, 정체가 감지되면(아직 하지 않았다면 복구를 한 번 더 시도한 뒤) 측정으로 갑니다. 측정으로 간다는 것이 성공을 뜻하지는 않습니다.

  7. 기준선 · 모르는 값은 미측정실행 상태데이터: 기준선 비교변환 비율 · 테스트 · 커버리지결과 측정

    측정은 실행 상태에 남은 기준선을 읽어 비교합니다. 새 기준선 실행이 아닙니다.

  8. 5개 수락 기준결과 측정데이터: 등급 산정점수표 · 등급

    build 성공, test 통과율 100%, 커버리지 변화 −5 이상(기준선을 알 때만), 삭제된 테스트 0, surefire 제외 0. 다섯 기준을 모두 통과해야 등급을 매깁니다.

원인 기반 수리

수정 전에 증거를 모으고 결정적 수정을 먼저 합니다. 재빌드가 통과하면 모델을 건너뛰고, 실패하면 증거와 지침으로 모델이 고친 뒤 다시 검증합니다.

  1. build · test · 반복 +1검증데이터: 결과 · 반복 수계속 · 측정 · 기본 3회다음 단계 판단

    build 성공 여부, test 통과율, 반복 횟수로 다음 단계를 정합니다.

  2. 계속 · 측정 · 기본 3회다음 단계 판단실행 · 판정: 실패 · 재시도원인 증거 · source 3개 · POM수정 전 탐색

    build가 실패했거나 test 통과율이 100% 미만이고, 반복 한도(기본 3회) 안이면 수리로 갑니다.

  3. 원인 증거 · source 3개 · POM수정 전 탐색관측 · 보고: 수정 전 저장수정 전 체크포인트복구 기록

    수정 전에 checkpoint를 저장합니다. best-effort라 저장 실패가 수리를 멈추지 않으며, 성공의 근거도 아닙니다.

  4. 원인 증거 · source 3개 · POM수정 전 탐색데이터: 증거 · 오류 묶음알려진 패턴 수정결정적 수정

    오류가 난 Java 파일, source 3개까지의 앞부분, 어노테이션 · POM · annotation processor 설정, 깊이 2의 import 관계를 모읍니다. 정해진 범위의 표본이며 전체 코드 이해가 아닙니다.

  5. 재빌드 확인결정적 수정실행 · 판정: 통과 · LLM 생략build · test · 반복 +1검증

    알려진 패턴(예: Lombok 설정)을 결정적으로 고친 뒤 재빌드가 통과하면 모델을 부르지 않습니다. 실행은 그래도 검증으로 돌아가므로, 이것이 최종 수락은 아닙니다.

  6. 재빌드 확인결정적 수정실패 · 한도: 재빌드 실패증거 · 수리 지침으로 수정모델 수리

    재빌드가 실패하면 모은 증거와 수리 지침을 모델 수리에 넘깁니다. 코드를 읽어 보면 함께 넘어가는 오류 문구는 재빌드의 새 오류가 아니라 처음 build 오류이므로, "남은 오류만 전달"로 읽으면 안 됩니다. 실행으로 재현한 결함은 아닙니다.

  7. 같은 오류의 이전 수정복구 기록데이터: 이전 수정증거 · 수리 지침으로 수정모델 수리

    같은 오류 signature로 남은 이전 수정 기록을 찾아 참고합니다. 모델 학습이 아니라 입력에 붙는 기록입니다.

  8. 증거 · 수리 지침으로 수정모델 수리실행 · 판정: 수정 후 재검증build · test · 반복 +1검증

    구조화된 architect · editor 경로로, 그 경로를 쓸 수 없거나 복구 중이면 도구 사용 프롬프트로 고친 뒤 다시 build · test로 검증합니다. 모델이 낸 수정은 그 자체로 통과한 build가 아닙니다.

통과와 정체 구분

다섯 기준을 모두 통과해야 등급을 매기고, 테스트 삭제 · 제외나 한도 · 정체 종료는 성공으로 세지 않습니다.

  1. 계속 · 측정 · 기본 3회다음 단계 판단실행 · 판정: 통과 · 한도 · 정체변환 비율 · 테스트 · 커버리지결과 측정

    build와 test가 모두 통과하거나, 반복 한도에 닿거나, 정체가 감지되면(아직 하지 않았다면 복구를 한 번 더 시도한 뒤) 측정으로 갑니다. 측정으로 간다는 것이 성공을 뜻하지는 않습니다.

  2. 기준선 · 모르는 값은 미측정실행 상태데이터: 기준선 비교변환 비율 · 테스트 · 커버리지결과 측정

    측정은 실행 상태에 남은 기준선을 읽어 비교합니다. 새 기준선 실행이 아닙니다.

  3. 5개 수락 기준결과 측정데이터: 등급 산정점수표 · 등급

    build 성공, test 통과율 100%, 커버리지 변화 −5 이상(기준선을 알 때만), 삭제된 테스트 0, surefire 제외 0. 다섯 기준을 모두 통과해야 등급을 매깁니다.

  4. 5개 수락 기준결과 측정실패 · 한도: 삭제 · 제외 · 실패실패 · 정체 보고

    테스트를 지우거나 surefire 제외로 얻은 통과, build · test 실패는 실패로 남습니다. 삭제 · 제외 검사는 Git이나 POM을 읽지 못하면 0으로 세므로, 모든 위반을 막는다는 증명은 아닙니다.

  5. 계속 · 측정 · 기본 3회다음 단계 판단관측 · 보고: 한도 · 정체 종료실패 · 정체 보고

    한도나 정체로 끝난 실행은 측정을 거치되 성공으로 보고하지 않습니다. 측정을 건너뛰는 지름길이 아니라 보고의 구분입니다.

모든 연결을 같은 굵기로 보여 줍니다. 흐름을 고르면 그 경로만 번호와 함께 강조됩니다.

  • 실선 · 입력 · 결과 · 기록이 흐르는 방향
  • 파선 · 실행 · 판정 · 요청
  • 긴 점선 · 관측 · 보고, 판정과 별개
  • 짧은 파선 · 실패 · 중단 · 한도
  • 굵은 검은 선 · 고른 흐름, 번호는 순서
  • 상자 · 코드 · 상태 경계, 머리말에 이름
  • 안쪽 칩 · 그 경계의 구성 요소
  • 점선 상자 · 그 경계 밖
  • 주황 테두리 · 모델이 판단하는 곳
  • 파이프라인 단계 · 수리
  • 검증 · 판단 · 수락 기준
  • 상태 · 기록
  • 수정 전 탐색

비공개 구현 · 개발 기록 기준으로 그렸습니다. 이름은 공개용 일반 이름이며, 코드 경로와 고객 정보는 싣지 않았습니다.

재빌드 실패 뒤의 입력
모델 수리는 모은 증거와 수리 지침을 받지만, 함께 넘어가는 오류 문구는 재빌드의 새 오류가 아니라 처음 build 오류입니다. 코드를 읽어 확인한 점이며, 실행으로 재현하지 않았고 소스도 고치지 않았습니다.
수락 기준의 한계
커버리지 기준선을 모르면 그 항목은 건너뜁니다. surefire 검사는 기준선과의 차이가 아니라 현재 POM의 제외 설정을 셉니다. 삭제 · 제외 검사는 Git이나 POM을 읽지 못하면 0으로 셉니다.
사례와 수치
약 40건의 setter 오류가 Lombok · POM 설정이라는 한 원인에서 나온 사례는 당시의 진단 기록입니다. 처리량 · 정확도 · 최종 납품 수치가 아닙니다.