본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 05. 19. 12:14

AI를 활용한 Java와 JavaScript 간 로직 변경 일괄 분석: 소수점 처리 불일치를 방지하는 차분 리뷰 기술

요약

Java와 JavaScript 간의 계산 로직 불일치 문제를 해결하기 위해 AI를 활용한 차분 리뷰(diff review) 워크플로우를 소개합니다. 특히 소수점 처리 방식이 다른 두 언어 사이의 변경 의도를 AI가 해석하여 정합성을 표 형식으로 검증하는 방법을 다룹니다.

핵심 포인트

  • Java의 BigDecimal과 JavaScript의 Math 함수 간의 서로 다른 표기 방식을 AI가 문맥적으로 이해하여 비교 가능
  • git diff 출력을 AI에 직접 입력하여 여러 파일 간의 로직 일치 여부를 즉시 확인하는 효율적인 워크플로우
  • 단순한 코드 변경 확인을 넘어, 언어를 넘나드는 '변경 의도'의 정합성을 검증하는 데 AI 활용
  • 레거시 시스템 유지보수 시 발생하기 쉬운 서버-클라이언트 간 계산 로직 불일치 사고 방지

「Java의 계산 로직을 수정했는데, JSP 측의 JavaScript도 함께 변경했었나?」

업무 시스템을 유지보수하다 보면, 이런 불안감이 머릿속을 스치는 장면이 있습니다. 특히 Java의 BigDecimal로 소수점 처리(Rounding)를 변경한 경우와 같이, 동일한 계산식이 JavaScript 측에도 존재할 때가 있어 양쪽을 모두 확인하지 않으면 운영 환경에서 계산 결과가 어긋나게 됩니다.

본 기사에서는 여러 파일의 diff를 AI에 읽히고 「Java/JavaScript 간의 변경이 일치하는가」를 표 형식으로 즉시 확인하는 워크플로우를 소개합니다. 실제로 수주/발주 시스템의 할인 계산 로직 변경 시 사용했던 접근 방식입니다.

Java 서버 사이드와 JSP의 JavaScript가 「동일한 계산식」을 갖는 구조는 레거시 업무 시스템에서 자주 볼 수 있습니다. 예를 들어 할인 단가 계산을 예로 들면, 다음과 같이 이중 관리되고 있습니다.

// Java 측 (서버에서 최종 금액을 확정)
public BigDecimal getDiscountUnitPrice(BigDecimal retailPrice, BigDecimal discountRate) {
return retailPrice
...
// JavaScript 측 (입력 폼의 실시간 표시용)
function calcDiscountUnitPrice(retailPrice, discountRate) {
return Math.ceil(retailPrice * (1 - discountRate / 100)); // ← Java 측과 맞추려고 함
...

이 케이스에서 「Java의 소수점 처리를 올림(Ceiling) → 내림(Floor)으로 변경한다」는 수정이 들어가면, Java는 수정했지만 JavaScript는 수정하는 것을 잊어버리는 사고가 발생하기 쉽습니다.

파일 수가 늘어나면 「변경을 확인했는지/하지 않았는지」의 관리가 개인의 역량에 의존하게 됩니다. 또한, Java의 Rounding Mode 상수명(ROUND_DOWN)과 JavaScript의 함수명(Math.floor)은 표기 방식이 다르기 때문에, 「동일한 의도의 변경이 양측에 있는지」를 읽어내기 위해서는 뇌 내 변환이 필요합니다.

단순히 「무엇이 바뀌었나요?」라고 묻는 것이라면 차분 뷰어(diff viewer)로도 알 수 있습니다. AI에 맡기는 가치는 언어를 넘나드는 의도 해석에 있습니다.

프롬프트(Prompt) 설계는 다음과 같이 생각했습니다.

다음 diff를 확인하고, 금액 계산이 어떻게 수정되었는지 알기 쉽게 정리해 주세요.
특히 소수점 처리 변경에 대해, Java 측과 JavaScript 측의 정합성이 맞는지 표 형식으로 정리해 주세요.

심플해 보이지만, 「Java 측과 JavaScript 측의 정합성」이라는 관점을 명시한 것이 포인트입니다. AI는 코드의 의미를 이해한 상태에서 언어 표기 방식의 차이를 흡수하며 비교해 줍니다.

git diff 출력을 그대로 복사해서 전달하기만 하면 됩니다. 사전 정형화는 필요 없습니다.

git diff HEAD~1 HEAD -- src/main/java/service/OrderService.java \
src/main/java/entity/Product.java \
src/main/webapp/WEB-INF/view/order/returnOrder.jsp

여러 파일을 한 번에 전달함으로써, AI가 파일 간의 관계를 문맥(Context)으로서 이해한 상태에서 답변해 줍니다.

실제로 발생한 변경을 일반화한 샘플입니다. 할인 계산의 소수점 처리가 3곳에 걸쳐 변경되어 있었습니다.

--- a/src/main/java/entity/Product.java
+++ b/src/main/java/entity/Product.java
@@ -42,7 +42,7 @@
...
--- a/src/main/webapp/WEB-INF/view/order/returnOrder.jsp
+++ b/src/main/webapp/WEB-INF/view/order/returnOrder.jsp
@@ -215,7 +215,7 @@
...

위의 diff를 전달하자, AI는 다음과 같은 비교표를 즉시 생성했습니다.

변경 사항파일변경 전변경 후정합성
할인 단가 소수점 처리 (인수 2개 버전)Product.javaROUND_UP (올림)ROUND_DOWN (내림)✅ JS 측과 일치
할인 단가 소수점 처리 (인수 3개 버전)Product.javaROUND_UP (올림)ROUND_DOWN (내림)✅ JS 측과 일치
반품 계산 소수점 처리returnOrder.jspMath.ceil (올림)Math.floor (내림)✅ Java 측과 일치

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0