pile·
백엔드·gitlab-engGitLab Blog·

Cursor와 GitLab으로 Java 현대화하기

Cursor AI 코딩 에이전트와 GitLab MCP 서버를 연동해 Java 8 레거시 애플리케이션을 Java 21로 단계적으로 마이그레이션하는 방법을 다룬다. 코드 수정 범위를 단계별로 좁히면서 테스트 실패 수정 → CI/CD 품질 게이트 구축 → 컴포넌트 현대화 순서로 진행해 에이전트 속도와 안전성을 동시에 확보한다.

핵심 포인트
  • GitLab MCP 서버(HTTP 트랜스포트, /api/v4/mcp)로 Cursor가 이슈, MR, 파이프라인, 프로젝트 컨텍스트를 직접 참조 — 정보를 프롬프트에 복붙하는 수작업 불필요.
  • 3단계 점진적 마이그레이션: 실패 테스트 수정(버그 제거) → 병렬 Java 8/21 CI/CD 게이트 구축 → HttpURLConnection을 java.net.http.HttpClient로 교체.
  • AGENTS.md로 에이전트에게 아키텍처/명령어/작업 경계를 문서화 — 에이전트가 리포지토리 구조를 이해하고 올바른 범위 내에서 작업.
  • 코드 리뷰 지시(.gitlab/duo/mr-review-instructions.yaml)와 GitLab Orbit 커스텀 플로우로 에이전트 생성 MR도 사람 코드와 동일한 리뷰 기준 적용.
  • "에이전트 속도는 포괄적 리뷰, 테스트, 추적 가능성 인프라가 갖춰져야만 안전해진다"는 원칙 강조.
상세 정리
  • 문제: Java 8 레거시 코드는 최신 생태계와 성능 개선에서 소외됨. 대규모 일괄 마이그레이션은 위험하므로 점진적 범위 제한 접근법이 필요.
  • GitLab MCP 서버 연동: Cursor가 HTTP 트랜스포트로 GitLab 인스턴스에 연결. 이슈 계획, 의존성, 토론, 파이프라인 상태를 컨텍스트로 실시간 참조.
  • Phase 1 — 실패 테스트 수정: Cursor가 E2E 테스트에서 collector가 2xx 응답을 모두 성공으로 처리하는 버그(설정된 예상 상태 코드를 무시) 발견 및 수정.
  • Phase 2 — CI/CD 게이트 구축: Java 8과 Java 21을 병렬로 테스트하는 CI/CD 파이프라인 설정. 마이그레이션 중 회귀 즉시 탐지.
  • Phase 3 — 컴포넌트 현대화: HttpURLConnection을 java.net.http.HttpClient로 교체. Docker Compose 기반 로컬 기능 검증 후 MR 제출.
  • AGENTS.md 역할: 에이전트가 작업 전 리포지토리의 아키텍처, 실행 명령어, 작업 경계를 이해하도록 안내. 에이전트가 잘못된 범위에서 작업하는 것을 방지.
  • 코드 리뷰 지시(.gitlab/duo/mr-review-instructions.yaml): Java 현대화에 특화된 스타일 가이드를 명시해 에이전트 생성 MR도 동일한 기준으로 자동 리뷰.
  • Agentic Skills: 검증된 현대화 패턴을 재사용 가능한 워크플로우로 캡처 — 동일 패턴을 다른 컴포넌트에 반복 적용 시 활용.
  • 커스텀 플로우: GitLab Orbit으로 브레이킹 체인지 발생 시 영향 분석 자동화.
  • 안전성 원칙: 에이전트 속도는 Code Review Flow, Developer Flow, CI/CD, 보안 스캐닝이 갖춰진 뒤에야 안전. 인프라 없이 에이전트만 도입하면 위험.
왜 읽나AI 코딩 에이전트로 Java 레거시 마이그레이션을 안전하게 자동화하려는 개발자와 팀에게 MCP 통합, AGENTS.md, CI/CD 안전망 구성의 실전 패턴을 제공.
gitlab-eng
GitLab Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

    여기어때 전시개발팀이 숙소 상세(PDP) API를 해부한 결과, 코드상으로는 DB 호출 3번처럼 보이던 요청이 실제로는 MongoDB $lookup 체인으로 컬렉션을 19회 접근하는 구조였다. 이 트랜잭션 스크립트 방식의 핵심 문제는 "aggregation이 I/O를 가린다"는 점으로, 독립적인 쿼리 10개가 단일 파이프라인에 직렬화되어 병렬화 기회를 잃고, 가격 때문에 거의 안 바뀌는 이미지까지 매 요청마다 읽어야 하는 읽기 증폭이 발생했다. V3에서는 "조회 시점 조립"을 "쓰기 시점 사전 조립"으로 전환하고, 화면별로 복제되던 가격 계산 로직을 goodsprice 단일 모듈로 수렴했다. 4개 API(PLP/PDP/RDP/ILP)의 반복 마이그레이션은 Claude Code skill로 절차를 고정하고 쉐도잉 + 동일성 검증으로 안전망을 마련하는 방식으로 진행됐다.

    #architecture#migration#caching+2
  2. 백엔드·무신사 테크무신사 테크·

    의심했던 범인은 알리바이가 있었다.

    무신사 물류기술실 WMS팀이 Jenkins에서 Spring Batch 배치 작업 실행 시 5~12분간 hang이 발생하는 문제를 Java Flight Recorder(JFR)로 추적한 디버깅 사례다. 콘솔 로그 상 'Creating AWSLogs Client' 직후 침묵이 이어져 AwsLogsAppender가 범인으로 의심됐지만, JFR 분석 결과 실제 원인은 Aurora DB에 대한 N+1 쿼리 138회 반복이었다. 통합 쿼리로 개선 후 단건 평균 처리 시간이 41.2초에서 30초 수준으로 줄었고 hang은 완전히 사라졌다.

    #profiling#aurora#spring-batch+2