버전 관련하여 문의드립니다
56
4 câu hỏi đã được viết
강의 예제는 Spring Boot 3.5.7 기준인데, 현재 프로젝트를 Spring Boot 4.1.0으로 생성해서 따라가고 있습니다.
Jackson 3부터 패키지가 com.fasterxml.jackson.*에서 tools.jackson.*으로 변경되고, JsonDeserializer도 ValueDeserializer로 변경된 것으로 확인했습니다.
그래서 우선 아래와 같이 수정해서 진행하고 있습니다.
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ValueDeserializer;
public class JsonStringDeserializer extends ValueDeserializer<String> {
@Override
public String deserialize(
JsonParser jsonParser,
DeserializationContext deserializationContext
) throws JacksonException {
JsonNode node = deserializationContext.readTree(jsonParser);
return node.toString();
}
}
Spring Boot 4.1.0으로 계속 진행하면서 이런 식으로 변경된 API에 맞춰 수정해도 괜찮을까요?
아니면 이후에도 버전 차이로 수정해야 할 부분이 많이 발생할 수 있어서, 강의에서는 Spring Boot 3.5.x로 맞추는 것을 권장하시는지 궁금합니다.
( 가능하다면 Spring Boot 4 / Jackson 3 기준의 해당 예제 코드도 안내 부탁드려도 될까요? )
Câu trả lời 1
0
안녕하세요, 인프런 AI 인턴입니다.
아직안팔리는_1인창업자님, 결론부터 말씀드리면 강의를 그대로 따라가실 목적이라면 Spring Boot 3.5.x로 맞추시는 것을 권장드립니다.
Spring Boot 4와 Jackson 3에서는 다음과 같이 API 변경 범위가 있습니다.
com.fasterxml.jackson.*패키지에서tools.jackson.*패키지로 변경
JsonDeserializer대신ValueDeserializer사용
- Jackson의 일부 메서드와 확장 클래스 사용 방식 변경
- Spring Boot에서 제공하는 Jackson 관련 추상 클래스와 설정 방식의 차이 가능성
- 강의 예제의 의존성, import, 직렬화·역직렬화 설정 코드 수정 필요
따라서 현재 작성하신 것처럼 단순히 import와 부모 클래스만 변경해서 해결되는 부분도 있지만, 이후 예제에서 Jackson 설정이나 커스텀 직렬화·역직렬화를 다루면 추가 수정이 발생할 수 있습니다.
강의의 예제 코드가 다음과 같다고 가정하면 Spring Boot 3.x에서는 JsonDeserializer를 사용합니다.
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
public class JsonStringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(
JsonParser jsonParser,
DeserializationContext deserializationContext
) throws IOException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
return node.toString();
}
}
Spring Boot 3에서는 커스텀 역직렬화기를 @JsonComponent로 등록할 수도 있습니다.
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.springframework.boot.jackson.JsonComponent;
import java.io.IOException;
@JsonComponent
public class JsonStringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(
JsonParser jsonParser,
DeserializationContext deserializationContext
) throws IOException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
return node.toString();
}
}
Spring Boot 4와 Jackson 3 기준으로는 질문하신 것처럼 다음과 같이 변경하는 방향으로 이해하시면 됩니다.
import org.springframework.boot.jackson.JsonComponent;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ValueDeserializer;
@JsonComponent
public class JsonStringDeserializer extends ValueDeserializer<String> {
@Override
public String deserialize(
JsonParser jsonParser,
DeserializationContext deserializationContext
) throws JacksonException {
JsonNode node = deserializationContext.readTree(jsonParser);
return node.toString();
}
}
다만 node.toString()의 결과가 의도한 값인지 확인하셔야 합니다.
예를 들어 입력 JSON이 다음과 같다면,
"hello"
node.toString()은 JSON 형식인 다음 값을 반환할 수 있습니다.
"hello"
따옴표를 제외한 문자열 값인 hello가 필요하다면 Jackson 3의 JsonNode에서 제공하는 문자열 추출 메서드에 맞춰 변경해야 합니다.
즉, 해당 역직렬화기가 JSON 원문을 문자열로 보존하기 위한 목적이라면 toString()이 적절할 수 있지만, JSON 문자열의 실제 값만 얻으려는 목적이라면 문자열 전용 메서드를 사용해야 합니다.
Spring Boot 공식 문서에서도 커스텀 직렬화·역직렬화기는 JsonSerializer, JsonDeserializer 또는 @JsonComponent를 이용해 등록할 수 있다고 설명하고 있습니다. 또한 @JsonComponent가 붙은 빈은 Jackson에 자동 등록됩니다.
따라서 선택 기준은 다음과 같습니다.
- 강의 내용을 빠르게 따라가는 것이 목적이라면 Spring Boot 3.5.x 권장
- Spring Boot 4와 Jackson 3을 학습하는 것이 목적이라면 현재 방식으로 진행 가능
- 다만 이후 예제마다 변경된 API와 import를 직접 확인해야 함
- 에러가 발생했을 때 강의의 Spring Boot 3 코드와 현재 Jackson 3 코드를 비교해야 함
특히 네트워크 통신 자체인 HTTP, SSE, WebSocket, WebRTC의 개념은 Spring Boot 버전이 바뀌어도 크게 달라지지 않습니다.
반면 DTO 변환, Jackson 설정, 커스텀 직렬화·역직렬화, 메시지 변환기 설정 부분은 버전 차이의 영향을 받을 수 있습니다.
따라서 강의 실습을 안정적으로 완료하려면 Spring Boot 3.5.x를 사용하시고, Spring Boot 4와 Jackson 3은 별도의 마이그레이션 학습 대상으로 접근하시는 것을 추천드립니다.
참고 문서:
JpaPagingItemReader는 좋은게 없는거야..??
0
5
1
입문 강의 듣고 바로 들어도 괜찮을까요?
0
16
1
리프레시토큰
0
22
1
DB 연결 후 회원가입 시 생성되는 id 번호 질문
0
32
1
선생님 안녕하세요.
0
46
0
https 도메인
0
40
1
로그인 확인
0
62
3
ttl 산정 기준
0
40
1
정처기 2026-3 실기 문의
0
91
2
정처기 실기 3회 컴싸 사용 여부
0
58
1
자바 킴쌤 클래스 기초part2.pdf파일은 어디서 받을 수 있나요?
0
37
1
오타 제보 드립니다.
0
62
2
모의고사 1 회 2번문제 중
0
75
2
26-2 이론문제 재탕
1
57
1
26-2년도 코드문제
0
38
0
26-2 코드문제
0
45
1
15분 48초 질문
0
63
2
26-1년도 이론문제 재탕
0
70
1
26-1년도 코드문제 재탕
0
50
0
이론재탕만 눈치챘어도
0
80
1
25-3년도 이론문제 재탕
0
60
1
25-3년도 코드문제 재탕
0
45
0
출력값 문의
0
58
2
강의 관련 질문드립니다.
1
64
2

