Features IntelliJ IDEA JetBrains AI

AI Assistant를 사용하여 Spring Boot 앱 구축

이 게시글에서는 JetBrains AI Assistant의 도움을 받아 IntelliJ IDEA에서 작은 Java Spring Boot 웹 애플리케이션을 구축해 보겠습니다.

이 튜토리얼을 따라하려면 IntelliJ IDEA Ultimate뿐만 아니라 AI Assistant에 대한 활성 구독 또는 7일 무료 평가판 라이선스도 필요합니다.

새로운 Spring Boot 애플리케이션 생성

첫 단계는 새 프로젝트를 만드는 것입니다. 이 작업은 Welcome(시작) 화면에서 New Project(새 프로젝트) 버튼을 클릭하여 바로 수행하거나 (이미 프로젝트가 열려 있는 경우) 메인 메뉴에서 File(파일) | New(새로 만들기) | Project(프로젝트)를 선택하여 수행할 수 있습니다.

New Project(새 프로젝트) 대화상자 왼쪽에서 Spring Initializer(Spring 이니셜라이저)를 선택합니다. 프로젝트 이름을 greetings-app으로 바꾸고 Create Git repository(Git 저장소 생성)를 선택하여 버전 관리에 프로젝트를 추가한 다음, 유형으로 Maven을 선택하고 Next(다음)를 클릭합니다.

다음 화면에서는 사용할 Spring Boot 버전을 선택할 수 있습니다. 현재 3.2.2인 최신 안정화 버전을 사용하겠습니다. 여기에서 프로젝트에 추가하려는 종속성을 선택할 수도 있습니다. Dependencies(종속성) 아래의 Web(웹) 섹션을 확장하고 Spring Web(Spring 웹)을 선택한 다음 Create(생성)를 클릭합니다.

보시다시피 IntelliJ IDEA는 기본 Maven 프로젝트 디렉터리 구조와 프로젝트를 생성할 때 선택한 종속성을 포함한 pom.xml을 사용하여 Spring Boot 프로젝트를 생성했습니다. pom.xml을 열어 종속성을 확인합니다.

AI Assistant를 사용하여 코드 추가

이제 이 프로젝트에 코드를 추가해 보겠습니다. 먼저 클래스를 추가해야 합니다. 왼쪽의 Project(프로젝트) 도구 창에서 src/main/java/com.example.greetings-app 디렉터리를 선택합니다. 단축키 ⌘N(macOS) 또는 Alt+Insert(Windows/Linux)를 사용하여 새 Java 파일을 추가합니다. 또는 Project(프로젝트) 도구 창을 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 열고 New(새로 만들기) | Java class(Java 클래스)를 선택합니다. 이 클래스의 이름을 HomeController로 지정합니다.

코드에 다음 주석을 추가합니다.

// Create a Java web rest controller for a web application containing a hello endpoint,

// which takes a String parameter called name and append this parameter

// to the String "Hello", using “World” as the name default value

주석 다음에 Enter를 누르면 AI Assistant가 코드를 제안합니다. 제안된 코드를 수락하려면 Tab 키를 누릅니다.

일부 코드는 빨간색으로 표시되는데, 이는 일부 문제가 있음을 의미합니다. IntelliJ IDEA가 이러한 문제를 해결하는 데 도움을 줍니다. F2를 사용하여 다음 문제로 이동하거나 Shift+F2를 사용하여 이전 문제로 이동하고 Show Context Actions(컨텍스트 액션 표시)(macOS에서 ⌥⏎ 또는 Windows/Linux에서 Alt+Enter)를 사용하여 문제를 해결하는 방법에 대한 제안(예: 관련 클래스 가져오기)을 확인합니다.

현재 코드는 다음과 같습니다.

package com.example.greetingsapp;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

public class HomeController {

// Create a Java web rest controller for a web application containing a hello endpoint,

// which takes a String parameter called name and append this parameter

// to the String "Hello", using “World” as the name default value

   @GetMapping("/hello")

   public String hello(@RequestParam(defaultValue = "World") String name) {

       return "Hello " + name;

   }

}

오른쪽 상단에 있는 녹색 Run(실행) 버튼을 클릭하여(또는 macOS에서 ⌃R을 사용하거나 Windows/Linux에서 Shift+F10 사용) 애플리케이션을 실행할 수 있습니다.

localhost에서 애플리케이션을 엽니다. http://localhost:8080/hello

보시다시피 Whitelabel 오류 페이지가 나타납니다. 즉, 뭔가 문제가 있다는 의미입니다. AI Assistant를 사용하여 이 문제를 해결할 수 있는지 살펴보겠습니다.

문제를 찾아 수정하기

AI Assistant에게 이 문제를 해결하기 위한 도움을 요청하는 방법에는 여러 가지가 있습니다.

우선, 채팅으로 직접 물어봅니다. 오른쪽에서 AI Assistant 채팅 창을 열고 질문을 입력합니다. 예를 들어, “Why does this code return a Whitelabel Error Page?(이 코드는 왜 Whitelabel 오류 페이지를 반환하나요?)”와 같이 입력합니다. 무엇보다도 AI Assistant가 클래스에 @RestController 어노테이션을 추가해야 한다고 제안하는 것을 볼 수 있습니다.

AI Assistant는 LLM을 기반으로 하므로 결과가 정해져 있지는 않습니다. 즉, 동일한 요청에 대해 다른 응답을 받을 수도 있습니다. 또한 원하는 결과를 얻으려면 프롬프트를 세밀하게 조정해야 할 수도 있습니다. 일반적으로 질문이 상세할수록 결과도 더 구체적으로 주어집니다.

또는 AI Actions(AI 액션) | Find Problems(문제 찾기)를 사용하여 여기에 문제에 대한 해결책이 포함되어 있는지 확인할 수 있습니다. 에디터를 마우스 오른쪽 버튼으로 클릭하여 AI Actions(AI 액션)을 포함한 컨텍스트 메뉴를 열거나, 플로팅 툴바에서 AI Actions(AI 액션)을 선택하고 Find Problems(문제 찾기) 옵션을 선택합니다. 그러면 선택한 코드를 포함하여 사전 정의된 프롬프트가 있는 채팅 창이 열립니다. 이번에도 AI Assistant는 클래스에 @RestController를 추가해야 한다고 제안합니다.

Insert Snippet at Caret(캐럿에 스니펫 삽입) 버튼을 클릭하면 채팅 창에서 제안된 코드를 복사하여 작업 중인 코드에 넣을 수 있습니다.

살펴본 바와 같이 AI Assistant 채팅 응답과 Find Problems(문제 찾기)에 대한 답변 모두 컨트롤러에 @RestController 어노테이션을 사용해야 한다고 제안합니다. 그러면 채팅 창에서 제안된 코드를 삽입할 수도 있고 직접 코드를 작성할 수도 있습니다.

이제 코드는 다음과 같습니다.

package com.example.greetingsapp;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

@RestController  // Annotation needed to define it as a REST controller

public class HomeController {

   @GetMapping("/hello")

   public String hello(@RequestParam(defaultValue = "World") String name) {

       return "Hello " + name;

   }

}

제안에 따라 작성한 코드가 동일한지 확인하려면 Compare with clipboard(클립보드와 비교)를 사용하면 됩니다. 이 기능을 사용하려면 먼저 위의 코드 스니펫을 복사한 다음, IDE에서 코드를 선택하고 에디터에서 코드를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 엽니다. 코드와 클립보드 간의 차이를 열어보려면 컨텍스트 메뉴에서 Compare with clipboard(클립보드와 비교) 옵션을 선택하세요. 차이가 없으면 Diff가 “contents are identical”(내용이 동일합니다)이라고 표시하고, 코드에서 차이가 발견되면 이를 강조 표시합니다.

이제 애플리케이션을 실행하고 localhost를 다시 시도할 수 있습니다. http://localhost:8080/hello

결과는 다음과 같습니다.

매개변수를 사용하여 엔드포인트를 호출할 수도 있습니다. http://localhost:8080/hello?name=Marit

결과는 다음과 같습니다.

여기서는 제 이름을 사용했는데, 자신의 이름을 사용해도 됩니다!

AI Assistant로 유닛 테스트 생성

다음으로, 애플리케이션에 몇 가지 테스트를 추가해 보겠습니다. 물론, 직접 그렇게 할 수도 있습니다. 테스트로 이동하거나 아직 테스트가 없는 경우 macOS에서는 ⇧⌘T, Windows/Linux에서는 Ctrl+Shift+T의 단축키를 사용하여 테스트 파일을 생성할 수 있습니다. IntelliJ IDEA는 여기서 사용할 JUnit 5를 포함하여 다양한 테스트 프레임워크를 지원합니다.

테스트 클래스에서는 Generate(생성)(macOS에서는 ⌘N, Windows/Linux에서는 Alt+Insert)를 사용하고 Test Method(테스트 메서드)를 선택하여 테스트를 추가할 수 있습니다. 의도된 동작을 설명하는 테스트 이름을 지정하고 관련 테스트 코드를 추가합니다.

또는, AI Assistant에 유닛 테스트 생성을 맡길 수도 있습니다! 방금 만든 클래스를 삭제하고 다시 시도해 보겠습니다.

에디터에서 컨텍스트 메뉴를 열고 AI Actions(AI 액션) | Generate unit tests(유닛 테스트 생성) 옵션을 선택합니다. AI Assistant는 메서드에 대한 유닛 테스트만 생성할 수 있다는 데 주목하세요. “Test generation is not supported for the target code element”(타깃 코드 요소에 대한 테스트 생성이 지원되지 않습니다)라는 메시지가 표시되면 코드의 메서드에서 Generate unit tests(유닛 테스트 생성) 옵션을 선택해야 합니다.

생성된 테스트가 만족스러우면 Accept all(모두 수락)을 선택할 수 있습니다. 그렇지 않은 경우 Specify(지정)를 선택하고 AI에게 결과 개선을 요청하는 추가 프롬프트를 제공하여 세부적으로 조정할 수 있습니다. 또는, Regenerate(다시 생성) 버튼을 클릭하여 테스트를 다시 생성할 수 있습니다.

결과를 수락하는 경우, Run All Tests(모든 테스트 실행)(macOS에서는 ⌃⇧R, Windows/Linux에서는 Ctrl+Shift+F10)를 선택할 수 있습니다.

그러면 AI Assistant가 새 파일에 테스트를 생성합니다. 이 파일은 왼쪽의 Project(프로젝트) 도구 창에서 볼 수 있듯이 기본 이름 HomeControllerTest를 사용하여 프로젝트의 올바른 위치에 생성됩니다. 해당 이름의 파일이 이미 있는 경우 HomeControllerUnitTest와 같은 대체 이름을 사용합니다.

테스트가 통과되면 이제 컴파일 문제가 없다는 것을 알 수 있고 테스트를 실행할 수 있습니다.

하지만, 실패한 적이 없는 테스트를 절대 믿지 마세요! 잘못된 결과가 들어오면 테스트도 실패하도록 해야 합니다. 테스트에서 예상되는 결과를 변경하고 다시 실행해 보겠습니다. 이제 실패하는 것을 보게 되고, 변경 사항을 취소하고 원래 테스트를 유지할 수 있습니다.

생성된 테스트가 포괄하고자 하는 모든 부분을 포함하는지 생각해 보아야 할 수 있습니다. 여기에 즐거운 흐름만 있나요, 아니면 즐겁지 않은 흐름과 예외도 포함되어 있나요? 다루어야 할 경계 사례가 있나요? 추가 테스트를 직접 추가하거나 AI Assistant에게 특정 테스트 사례를 생성하도록 요청할 수 있습니다.

결론

이제 IntelliJ IDEA와 AI Assistant가 여러 가지 방식으로 간단한 Java Spring Boot 애플리케이션을 더 빠르게 구축하는 데 도움을 준다는 사실을 알게 되었습니다. 더 복잡한 애플리케이션을 구축할 때도 다양한 프롬프트를 사용하여 여기에 소개한 동일한 단계를 따를 수 있습니다. 즉, 에디터의 주석에서 코드 생성을 요청하거나 채팅에서 AI Assistant에게 특정 코드를 요청하는 방법을 사용할 수 있습니다.

AI Assistant를 사용해 보고 이 블로그 게시물에서 만든 애플리케이션을 확장하거나 고유한 애플리케이션을 만들 수 있는지 확인해 보세요. 그리고 그 결과를 댓글란에 공유해 주세요!

링크

게시물 원문 작성자

Marit van Dijk

Marit van Dijk

image description

Discover more