본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 23. 11:10

JetBrains AI Chat의 UI에서 컨텍스트를 추가해 보았다

요약

JetBrains AI Chat의 UI 컨텍스트 추가 기능을 활용하여 Spring Boot 테스트 실패 원인을 분석하는 방법을 소개합니다. 에러 로그와 소스 코드를 직접 컨텍스트로 전달하여 AI가 구현과 테스트 간의 불일치를 정확히 판단하도록 유도합니다.

핵심 포인트

  • JetBrains AI Chat에서 Run 툴 윈도우의 로그를 직접 컨텍스트로 추가 가능
  • 에러 로그와 관련 소스 파일을 함께 제공하여 분석 정확도 향상
  • 단순 수정 요청 대신 구체적인 판단 기준을 포함한 프롬프트 활용 권장
  • 구현과 테스트 사양 간의 불일치를 식별하는 데 효과적

이번에는 spring-demo-project를 사용하여, 실패한 테스트 로그를 「UI에서 컨텍스트를 추가하기」를 통해 AI Chat에 전달하고, 원인 설명과 수정 방침을 받아내는 흐름을 시도해 봅니다.

테스트가 실패했을 때, 에러 로그만 봐서는 원인을 즉시 알 수 없는 경우가 있습니다.

Spring Boot와 같이 여러 서비스 클래스(Service Class)가 관계된 코드에서는,

  • 테스트의 기대값이 틀린 것인지
  • 구현의 조건 분기(Conditional Branch)가 틀린 것인지
  • 애초에 사양(Specification) 해석이 틀린 것인지

이를 구분하는 데 시간이 걸립니다.

JetBrains의 AI Chat에서는 IDE의 Run 툴 윈도우(Run Tool Window)나 Terminal 등, UI 상에 표시되어 있는 내용을 그대로 컨텍스트(Context)로 추가할 수 있습니다.

이번에 사용하는 것은 주문 처리를 주제로 한 데모 Spring Boot 프로젝트입니다.

spring-demo-project/
├── pom.xml
└── src/
...

pom.xml에서는 Spring Boot 3.2.0과 Java 17을 사용하고 있습니다.

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
...

주제로 삼는 것은 PaymentService입니다.

@Service
public class PaymentService {
private final OrderService orderService;
...

canRefund()는 주문 상태가 PAID 또는 SHIPPED인 경우 true를 반환합니다.

여기서는 실패하는 테스트를 추가합니다.

@Test
@DisplayName("출하 완료된 주문은 환불 불가")
void canRefund_returnsFalse_whenOrderIsShipped() {
...

이 테스트는 SHIPPED 상태의 주문은 환불할 수 없어야 한다고 작성되어 있습니다.

하지만 구현상으로는 SHIPPED 상태도 환불이 가능하므로, 테스트를 실행하면 실패합니다.

여기서는 로그를 복사해서 Chat에 붙여넣는 것이 아니라, Run 툴 윈도우 UI에서 그대로 컨텍스트로 추가하는 것입니다.

AI Assistant의 Chat을 엽니다.

다음으로, Chat 입력창 근처에 있는 첨부 추가에서 UI에서 컨텍스트 추가하기를 선택합니다.

그 후, 실패 로그가 표시되어 있는 Run 툴 윈도우를 선택합니다.

이번에는 로그뿐만 아니라 PaymentService.java도 함께 봐주길 원하므로, 파일도 컨텍스트에 추가했습니다.

그리고 다음과 같이 프롬프트(Prompt)했습니다.

첨부한 Run 툴 윈도우의 테스트 실패 로그와 PaymentService.java를 보고,
왜 PaymentServiceTest가 실패하고 있는지 설명해 주세요.
구현과 테스트 중 어느 쪽을 수정해야 할지 판단하고, 최소한의 수정안을 제시해 주세요.

단순히 "고쳐줘"가 아니라, 실패 로그를 봐달라, 관련 구현 파일도 봐달라, 구현과 테스트 중 어느 쪽을 수정해야 할지 판단해달라, 최소한의 수정안을 달라고 명시하는 것입니다.

이를 통해 AI Assistant는 「에러 문구 해설」뿐만 아니라, 사양과 코드의 관계까지 깊이 있게 정리하기 쉬워집니다.

실제로 Run 툴 윈도우의 실패 로그와 PaymentService.java를 첨부하여 질문하자, AI Assistant는 실패 원인을 다음과 같이 정리했습니다.

이번 실패는 예외(Exception)나 Mockito의 설정 실수가 아니라,
SHIPPED의 환불 가능 여부에 대한 구현과 테스트 기대값의 불일치입니다.

이 케이스에서 원인은 테스트 측의 기대값입니다.

PaymentService.canRefund()는 다음 조건에서 true를 반환합니다.

return order.getStatus() == Order.Status.PAID
|| order.getStatus() == Order.Status.SHIPPED;

즉, SHIPPED는 환불 가능한 상태로 취급되고 있습니다.

한편, 추가한 테스트에서는 order.markShipped()

이후에 assertThat(result).isFalse()

라고 작성되어 있습니다.

order.markShipped();
boolean result = paymentService.canRefund(order);
assertThat(result).isFalse();

그렇기 때문에, 구현이 true

를 반환하고, 테스트는 false

를 기대하고 있으므로 실패합니다.

AI Assistant는 수정 방침에 대해서도 "구현을 고칠지, 테스트를 고칠지는 사양(Specification)에 따라 다릅니다"라고 답변했습니다.

PaymentService.canRefund()는 PAID 또는 SHIPPED인 경우 true를 반환하는 구현입니다.
이번 테스트는 SHIPPED 주문에 대해 false를 기대하고 있으므로, 구현과 테스트의 기대값이 모순됩니다.
사양으로서 "출하 완료된 주문도 환불 가능"이 맞다면, 테스트 이름과 기대값을 수정합니다.
...

단순히 Expected false / Actual true

를 설명하는 것뿐만 아니라, 로그와 구현을 연결하여 사양 판단이 필요한 포인트까지 정리해 주었습니다.

SHIPPED

주문도 환불 가능하다는 사양이 맞다면, 테스트를 수정합니다.

@Test
@DisplayName("출하 완료된 주문은 환불 가능")
void canRefund_returnsTrue_whenOrderIsShipped() {
...

이 수정에서는 구현을 변경하지 않습니다.

테스트 이름, DisplayName,

기대값을 구현 사양에 맞춥니다.

반대로, 사양으로서 "출하 완료된 주문은 환불 불가"가 맞다면, 구현을 수정합니다.

public boolean canRefund(Order order) {
return order.getStatus() == Order.Status.PAID;
}

이 경우에는 기존 사양을 변경하게 되므로, 영향 범위를 확인할 필요가 있습니다.

예를 들어, refund()

호출 측에서 SHIPPED

주문을 환불 가능한 것으로 취급하는 화면이나 API가 없는지 확인합니다.

AI Assistant에게는 추가로 다음과 같이 물어보는 것이 좋습니다.

SHIPPED를 환불 불가로 변경했을 때의 영향 범위를
이 프로젝트 내의 참조 지점으로부터 확인해 주세요.

작은 샘플 프로젝트에서도 사양 변경인지 테스트 수정인지를 나누어 생각할 수 있습니다.

Run 툴 윈도우(Run tool window)를 UI에서 추가하면 다음과 같은 정보를 한꺼번에 전달할 수 있습니다.

  • 어떤 테스트 클래스가 실패했는지
  • 어떤 테스트 메서드가 실패했는지
  • Expected / Actual의 차이
  • 스택 트레이스 (Stack trace)
  • 실행한 구성(Configuration)이나 대상

수동으로 복사하면 필요한 행을 빠뜨리거나, 반대로 불필요한 로그를 대량으로 붙여넣게 됩니다.

UI에서 추가하면 IDE 상에서 보고 있는 실패 상태를 그대로 AI Assistant에게 전달할 수 있습니다.

UI에서 추가하는 컨텍스트(Context)에는 로그에 표시된 내용이 포함됩니다.

따라서 보내기 전에 AI가 읽어서는 안 될 정보가 섞여 있지 않은지 확인하십시오.

또한, .aiignore로 제외한 내용이라도 UI 상에 표시되고 있는 것을 컨텍스트로 추가하면 AI Assistant에게 전달될 가능성이 있습니다.

JetBrains AI Assistant의 UI에서 컨텍스트 추가하기를 사용하면, Run 툴 윈도우에 표시된 테스트 실패 로그를 AI Chat에 전달할 수 있습니다.

로그, 대상 클래스, 테스트 코드를 한꺼번에 전달함으로써 AI Assistant에게 다음과 같은 조사를 의뢰할 수 있습니다.

  • 실패 원인 설명
  • 구현과 테스트 중 어느 쪽을 고쳐야 하는지에 대한 정리
  • 최소한의 수정안
  • 사양 변경 시의 영향 범위 확인

Run 툴 윈도우, 에디터, 테스트 결과를 그대로 컨텍스트로 다룰 수 있기 때문에, JetBrains IDE와 궁합이 좋은 사용 방식이라고 느꼈습니다.

저희는 JetBrains 제품에 관한 질문이나 상담 등을 받고 있습니다. 저희 X(구 Twitter) 또는 메일로 연락해 주시기 바랍니다.

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0