GPT에게 코드 리팩토링 요청하기
OpenAI API 키 발급 (GPT-3.5-turbo)
✅ 1. https://platform.openai.com/account/api-keys 접속


✅ 2. Create new secret key
→ 키 복사


Create secret key
를 클릭하면 key를 확인 할 수 있다- key는 다시 확인할 수 없으므로 미리 복사해서 옮겨두기
✅ 3. 환경변수 등록
- 환경변수명:
JJAVA_REFACTOR_API_KEY
- 시스템 환경변수 편집 → 등록
확인
클릭


Spring Boot Project 생성
OpenAiRequest
package com.metacoding.openaisampling;
import lombok.Data;
import java.util.List;
@Data
public class OpenAiRequest {
private String model = "gpt-3.5-turbo";
private List<Message> messages;
private double temperature = 0.5;
@Data
public static class Message {
private String role;
private String content;
}
public OpenAiRequest(String model, List<Message> messages, double temperature) {
this.model = model;
this.messages = messages;
this.temperature = temperature;
}
}
OpenAiResponse
package com.metacoding.openaisampling;
import lombok.Data;
import java.util.List;
@Data
public class OpenAiResponse {
private List<Choice> choices;
@Data
public static class Choice {
private Message message;
public Choice(Message message) {
this.message = message;
}
}
@Data
public static class Message {
private String role;
private String content;
public Message(String role, String content) {
this.role = role;
this.content = content;
}
}
public OpenAiResponse(List<Choice> choices) {
this.choices = choices;
}
}
OpenAiService
- OpenAI의 ChatGPT API에 요청을 보내는 로직
package com.metacoding.openaisampling;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Service
public class OpenAiService {
private static final String API_KEY = System.getenv("JJAVA_REFACTOR_API_KEY"); // 환경변수에서 API Key 읽기
private static final String URL = "https://api.openai.com/v1/chat/completions";
private static final String userCode = """
public class SumCalculator {
public static void main(String[] args) {
int total = 0;
for (int i = 0; i < 10; i++) {
total = total + i;
}
System.out.println("합계: " + total);
}
}
""";
public String getRefactoringFeedback() {
RestTemplate restTemplate = new RestTemplate();
// system 메시지 생성
OpenAiRequest.Message system = new OpenAiRequest.Message();
system.setRole("system");
system.setContent("당신은 초급 개발자의 코드를 리팩토링해주는 멘토입니다.");
// user 메시지 생성 (입력된 코드 기반)
OpenAiRequest.Message user = new OpenAiRequest.Message();
user.setRole("user");
user.setContent("다음 Java 코드를 분석하고 1. 리팩토링 가능 부분 2. 개선 이유 및 예시 코드를 알려줘:\n```java\n" + userCode + "\n```");
// 메시지 리스트 구성
List<OpenAiRequest.Message> messages = List.of(system, user);
// 새 요청 객체 생성
OpenAiRequest requestBody = new OpenAiRequest("gpt-3.5-turbo", messages, 0.7);
// 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(API_KEY);
HttpEntity<OpenAiRequest> request = new HttpEntity<>(requestBody, headers);
// API 호출
ResponseEntity<OpenAiResponse> response = restTemplate.postForEntity(URL, request, OpenAiResponse.class);
return response.getBody().getChoices().get(0).getMessage().getContent();
}
public static void main(String[] args) {
OpenAiService service = new OpenAiService();
service.getRefactoringFeedback();
System.out.println(service.getRefactoringFeedback());
}
}
RestTemplate
은 Java(Spring)에서 HTTP 요청(외부 API 호출)을 간단히 처리할 수 있게 도와주는 객체- OpenAI의 ChatGPT API에 요청을 보내는데
필요한 것이 외부 서버와 통신하는 HTTP 클라이언트인데, Spring에서는 이 역할을 수행하는 클래스가
RestTemplate
- 흐름
- 요청 객체(
OpenAiRequest
)를 만든다. - HTTP 요청 정보(헤더, 바디)를 설정한다.
- RestTemplate을 사용하여 HTTP 요청을 전송한다.
- 응답을 받아서 처리한다.
- ⚙️ RestTemplate이 하는 일 (더 세부적으로)
- REST API 호출(GET, POST, PUT, DELETE 등)을 쉽게 수행
- HTTP 메시지 변환(JSON ↔ 객체) 자동 처리
- HTTP 요청 헤더 설정 및 응답 헤더 처리 지원
- 예외 처리 지원 (상태코드가 4xx, 5xx일 때 Exception 발생)
→ 이 중에서 3번의 통신 작업을 위해 반드시 필요한 클래스가 바로
RestTemplate
⬇ 응답 결과

Share article