[Sampling] 1. AI Sampling (GPT-3.5-turbo)

김미숙's avatar
Aug 01, 2025
[Sampling] 1. AI Sampling (GPT-3.5-turbo)
💡
GPT에게 코드 리팩토링 요청하기

OpenAI API 키 발급 (GPT-3.5-turbo)

✅ 1. https://platform.openai.com/account/api-keys 접속

notion image
notion image

✅ 2. Create new secret key → 키 복사

notion image
notion image
  • Create secret key 를 클릭하면 key를 확인 할 수 있다
    • key는 다시 확인할 수 없으므로 미리 복사해서 옮겨두기

✅ 3. 환경변수 등록

  • 환경변수명: JJAVA_REFACTOR_API_KEY
  • 시스템 환경변수 편집 → 등록
    • notion image
      notion image
    • 확인 클릭
 

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
    • 흐름
        1. 요청 객체(OpenAiRequest)를 만든다.
        1. HTTP 요청 정보(헤더, 바디)를 설정한다.
        1. RestTemplate을 사용하여 HTTP 요청을 전송한다.
        1. 응답을 받아서 처리한다.
        → 이 중에서 3번의 통신 작업을 위해 반드시 필요한 클래스가 바로 RestTemplate
    • ⚙️ RestTemplate이 하는 일 (더 세부적으로)
      • REST API 호출(GET, POST, PUT, DELETE 등)을 쉽게 수행
      • HTTP 메시지 변환(JSON ↔ 객체) 자동 처리
      • HTTP 요청 헤더 설정 및 응답 헤더 처리 지원
      • 예외 처리 지원 (상태코드가 4xx, 5xx일 때 Exception 발생)
 
⬇ 응답 결과
notion image
Share article

parangdajavous