5.8 KiB
5.8 KiB
Jackson Streaming API 정리 및 예제
1. Jackson Streaming API란?
Jackson Streaming API는 대량의 JSON 데이터를 메모리 효율적으로 처리할 수 있도록 설계된 API다.
기본적으로 이벤트 기반 방식(push/pull 방식)을 사용하며, JSON을 한 번에 모두 로드하지 않고 스트림 방식으로 읽고 쓸 수 있다.
✔ 주요 특징:
✅ 대량의 JSON 데이터를 처리할 때 메모리 사용량이 적다
✅ 기존 ObjectMapper 방식보다 빠른 속도로 JSON을 처리 가능
✅ JsonParser와 JsonGenerator를 사용하여 JSON을 읽고 쓸 수 있다
2. Jackson Streaming API 주요 메서드 정리
📌 JSON 읽기 (JsonParser)
| 메서드 | 설명 |
|---|---|
nextToken() |
다음 JSON 토큰으로 이동 |
getCurrentToken() |
현재 위치의 JSON 토큰 가져오기 |
getText() |
현재 위치의 JSON 문자열 값 가져오기 |
getIntValue() |
현재 위치의 JSON 정수 값 가져오기 |
getBooleanValue() |
현재 위치의 JSON 불리언 값 가져오기 |
getDoubleValue() |
현재 위치의 JSON 실수 값 가져오기 |
getCurrentName() |
현재 JSON 필드명 가져오기 |
📌 JSON 쓰기 (JsonGenerator)
| 메서드 | 설명 |
|---|---|
writeStartObject() |
JSON 객체 시작 ({ 추가) |
writeEndObject() |
JSON 객체 종료 (} 추가) |
writeStartArray() |
JSON 배열 시작 ([ 추가) |
writeEndArray() |
JSON 배열 종료 (] 추가) |
writeFieldName(String name) |
JSON 필드명 작성 |
writeString(String text) |
JSON 문자열 값 작성 |
writeNumber(int value) |
JSON 숫자 값 작성 |
writeBoolean(boolean value) |
JSON 불리언 값 작성 |
writeNull() |
JSON null 값 작성 |
3. Jackson Streaming API 예제
✔ JSON 읽기 (JsonParser) 예제
아래 JSON 파일을 스트리밍 방식으로 읽어보자.
{
"name": "홍길동",
"age": 30,
"isAdmin": false
}
🔹 JSON을 스트리밍 방식으로 읽는 코드
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
public class JsonParserExample {
public static void main(String[] args) throws Exception {
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("data.json"));
String fieldName = null;
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (token == null) break;
if (token.isStructStart() || token.isStructEnd()) {
// JSON의 {, } 같은 기호는 스킵
continue;
}
if (token == JsonToken.FIELD_NAME) {
fieldName = parser.getCurrentName();
} else if (fieldName != null) {
switch (fieldName) {
case "name":
System.out.println("이름: " + parser.getText());
break;
case "age":
System.out.println("나이: " + parser.getIntValue());
break;
case "isAdmin":
System.out.println("관리자 여부: " + parser.getBooleanValue());
break;
}
fieldName = null;
}
}
parser.close();
}
}
🔹 실행 결과
이름: 홍길동
나이: 30
관리자 여부: false
✅ JSON을 한 줄씩 읽으면서 처리하는 방식이라 메모리 사용량이 적다!
✔ JSON 쓰기 (JsonGenerator) 예제
🔹 JSON을 스트리밍 방식으로 생성하는 코드
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
public class JsonGeneratorExample {
public static void main(String[] args) throws Exception {
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new File("output.json"), com.fasterxml.jackson.core.JsonEncoding.UTF8);
generator.writeStartObject();
generator.writeStringField("name", "홍길동");
generator.writeNumberField("age", 30);
generator.writeBooleanField("isAdmin", false);
generator.writeEndObject();
generator.close();
System.out.println("JSON 파일 생성 완료!");
}
}
🔹 생성된 output.json 파일 내용
{
"name": "홍길동",
"age": 30,
"isAdmin": false
}
✅ 한 줄씩 JSON을 생성하는 방식이라 메모리 사용량이 적다!
4. Jackson Streaming API vs 일반 Jackson API
| 비교 항목 | Jackson Streaming API | 일반 Jackson (ObjectMapper) |
|---|---|---|
| 데이터 처리 방식 | 스트리밍 방식 (한 줄씩 처리) | 전체 로딩 방식 (객체 매핑) |
| 메모리 사용량 | 적음 (대량 데이터에 적합) | 많음 (작은 데이터에 적합) |
| 속도 | 빠름 | 비교적 느림 |
| 사용 예시 | 대량의 JSON 데이터를 읽고 쓸 때 | 소규모 JSON 데이터를 객체로 변환할 때 |
5. 정리
✔ Jackson Streaming API는 JSON을 한 줄씩 읽고 쓰는 방식이라 대량의 JSON 데이터를 처리할 때 매우 유용하다.
✔ JsonParser를 사용하면 JSON을 이벤트 기반으로 파싱 가능하다.
✔ JsonGenerator를 사용하면 JSON을 메모리 효율적으로 생성 가능하다.
✔ 일반 ObjectMapper보다 메모리 사용량이 적고, 속도가 빠르다!
✅ 대량의 JSON 데이터를 처리해야 한다면, Jackson Streaming API를 사용하자!