티스토리 뷰
반응형
2026.05.08 - [AI] - OpenAI API 연동 - STEP1) 연동하기 기초
OpenAI API 연동의 STEP 2는 전 단계에서 받은 원시 JSON 응답을 다듬어 실제 텍스트만 추출(Parsing)하고, 예외 상황을 처리하여 프로그램의 안정성을 높이는 단계입니다.
실무에서 가장 많이 사용하는 Jackson 라이브러리를 활용한 데이터 구조화 방법을 자세히 안내해 드릴게요.
STEP 2: JSON 파싱 및 구조화된 데이터 처리
1. JSON 구조 이해하기
OpenAI의 응답은 꽤 복잡한 계층 구조를 가지고 있습니다. 우리가 필요한 답변은 보통 choices[0].message.content 안에 들어 있습니다.
2. Jackson을 이용한 데이터 추출 예제
단순히 문자열로 출력하는 것이 아니라, Java 객체로 변환하여 필요한 데이터만 쏙 뽑아내는 과정입니다.
Java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class OpenAI_Step2 {
private static final String API_KEY = "YOUR_API_KEY";
public static void main(String[] args) {
String prompt = "Java 개발자로서 성장하기 위한 로드맵을 짧게 요약해줘.";
try {
String responseBody = callOpenAI(prompt);
// Jackson ObjectMapper 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON 트리 구조로 읽기
JsonNode rootNode = objectMapper.readTree(responseBody);
// 실제 답변 텍스트 추출 (choices -> 0번째 -> message -> content)
String answer = rootNode.path("choices").get(0)
.path("message").path("content").asText();
System.out.println("\n=== GPT의 답변 ===");
System.out.println(answer);
} catch (Exception e) {
System.err.println("오류 발생: " + e.getMessage());
}
}
public static String callOpenAI(String prompt) throws Exception {
String jsonPayload = String.format("""
{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "%s"}]
}
""", prompt);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.openai.com/v1/chat/completions"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// HTTP 상태 코드 확인 (Error Handling)
if (response.statusCode() != 200) {
throw new RuntimeException("API 호출 실패! 상태코드: " + response.statusCode() + " 응답: " + response.body());
}
return response.body();
}
}
3. 주요 개선 사항 (안정성 강화)
A. 에러 핸들링 (Error Codes)
API 연동 시 발생할 수 있는 주요 에러를 사전에 체크해야 합니다.
- 401 (Unauthorized): API 키가 잘못되었거나 만료됨.
- 429 (Too Many Requests): 무료 할당량을 다 썼거나 호출 속도가 너무 빠름.
- 500 (Server Error): OpenAI 서버 자체의 일시적인 오류.
B. 보안 강화 (Environment Variables)
코드에 API 키를 직접 적는 것은 매우 위험합니다. 시스템 환경 변수를 사용하세요.
Java
// OS 환경 변수에서 키를 읽어옴
private static final String API_KEY = System.getenv("OPENAI_KEY");
4. 요약: STEP 2에서 배운 것
- JSON 파싱: 복잡한 응답 뭉치에서 Jackson을 이용해 필요한 텍스트만 추출했습니다.
- 예외 처리: statusCode를 체크하여 서버 오류나 인증 오류를 감지할 수 있게 되었습니다.
- 동적 입력: 고정된 질문이 아니라 변수를 통해 다양한 질문을 던질 수 있는 구조를 만들었습니다.
'AI' 카테고리의 다른 글
| AI 시대 주니어 개발자 생존 전략, 구글이 원하는 필수 역량 3가지 (1) | 2026.06.03 |
|---|---|
| AI 코드 분석하는 방법 (1) | 2026.05.16 |
| OpenAI API 연동 - STEP6) 비용최적화 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP5) 음성인식 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP4) 이미지 생성 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP3) 대화 문맥 유지 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP1) 연동하기 기초 (0) | 2026.05.12 |
| LLM(거대 언어 모델)이란 (0) | 2026.05.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자료구조
- 안드로이드
- 상속
- 아두이노
- c#
- 문자열
- 파이썬
- C++ 클래스
- DB연동
- 정보처리기사
- html
- 알고리즘
- 클래스
- 벡터
- Java
- 파일처리
- C언어
- Class
- MySQL
- 블루투스
- 자바
- Android
- String
- 리스트
- 배열
- C
- C++
- 데이터베이스
- 문제풀이
- OpenCV
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함
반응형
