일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 디비
- node
- node.js
- S3
- 노드
- IT
- ES6
- 인터럽트
- 백준
- 탐욕기법
- 알고리즘
- 되추적
- access control
- 자바스크립트
- 컴퓨터보안
- DATABASE
- 운영체제
- 병행제어
- 스프링부트
- 데이터베이스
- AWS
- DB
- 컴퓨터
- API문서
- 컴퓨터 보안
- 백트래킹
- 보안
- rest docs
- NEST
- OS
- Today
- Total
개발스토리
DefaultSerializer requires a Serializable payload but received an object of type [...] 본문
DefaultSerializer requires a Serializable payload but received an object of type [...]
무루뭉 2021. 9. 6. 12:27
스프링 시큐리티를 써서 소셜 로그인을 적용하다가 만난 에러이다...
우선 에러 로그를 그대로 번역하자면 아래와 같다.
"DefaultSerializer에는 직렬화 가능한 페이로드가 필요하지만 [...] 유형의 개체를 수신했습니다"
우선 직렬화 가능한 페이로드가 필요한 것 같다.
[...]에 내가 사용한 dto 폴더를 나타내 주는데 그 dto 파일에서 직렬화를 적용시켜주어야 한다는 의미 같다.
그래서 직렬화에 대해서 또 어떻게 적용할 지 알아보았다.
직렬화란?
■ 자바에서 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)를 아우른다.
■ 시스템적으로는, JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태를 이야기 한다.
어떻게 사용할까?
java.io.Serializable 인터페이스를 상속받고, java.io.ObjectOutputStream 객체를 이용한다.
왜 사용할까?
- 직접 데이터를 문자열 형태로 확인 가능한 직렬화 방법
- api나 데이터 변환 시 많이 사용
- 다량의 데이터 직렬화시 csv, json 등으로 많이 사용한다. csv, json이 자바 직렬화는 아니다.
참조 블로그 : https://velog.io/@redcarrot01/TroubleShooting-springboot-DefaultSerializer-requires-a-Serializable-payload, https://techblog.woowahan.com/2551/
이해를 편하게 하기 위해 User 클래스가 있다고 보자.
우선 User 클래스가 엔티티일 경우 User 클래스에 직렬화 코드를 넣으면 안된다.
이유가 뭘까?
- 엔티티 클래스에는 언제 다른 엔티티와 관계가 형성될 지 모른다.
예를 들어, @ManyToMany 등 자식 엔티티를 가지고 있다고 보면, 직렬화 대상에 자식들까지 포함되어야 하니 성능 이슈, 부수 효과가 발생할 확률이 높다.
그렇다면 어떻게 할까?
- 직렬화 기능을 가지 Dto 하나를 추가로 만드는 것이 운영 및 유지보수하는 데 편하다.
위 정보들을 토대로
user 클래스(엔티티)는 냅두고 userDto(예시) 파일을 하나 생성해서 클래스에 implements Serializable을 붙여서 해결했다.
기본 자바 라이브러리만 사용해도 직렬화와 역직렬화를 할 수 있지만, 그에 따른 장단점이 존재하는 듯 보였다.
+ 더 알아보다가 직렬화의 필요성에 관련한 블로그 남긴다
'삽질 기록' 카테고리의 다른 글
단 건 조회 시 데이터가 없다면..?부터 시작된 이야기 (1) | 2021.12.10 |
---|---|
java.lang.illegalargumentexception at least one jpa metamodel must be present (2) | 2021.09.09 |
could not autowired no beans of... (0) | 2021.08.17 |