바이트스트림(stream of bytes)란?
스트림은 클라이언트나 서버 간에 출발지, 목적지로 입출력하기 위한 데이터가 흐르는 통로를 말합니다.
자바는 스트림의 기본 단위를 바이트로 두고 있기 때문에, 네트워크, 데이터베이스로 전송하기 위해 최소 단위인 바이트 스트림을 변환하여 처리합니다.
예를들어 primitive type이나 array 같은 타입들은 웬만한 프로그래밍 언어가 공통적으로 사용하는 타입이기에 이러한 값들은 JSON만으로도 충분히 사용 이용이 가능합니다.
하지만 자바의 collection이나 클래스,인터페이스,임의의 객체 같은 타입들은 단순 파일 포맷으로는 타입 개수가 한계가 있습니다.
그래서 이들을 외부로 내보내기 위해서는 각 데이터를 매칭시키는 별도의 파싱(parsing)이 필요합니다.
그에 반해, 직렬화를 이용하면 파이썬이나 자바스크립트 같은 다른 시스템에서는 사용하지는 못할지라도, 직렬화 기본 조건만 지킨다면 별도의 작업없이 그냥 바로 외부에 보낼 수 있습니다.
그리고 역직렬화를 통해 읽어들이면 데이터 타입이 자동으로 맞춰지기 때문에 자바 클래스의 기능들을 곧바로 다시 이용 할 수 있습니다.
그래서 직렬화된 문자열을 DB에 저장해두고 꺼내 쓰기도 합니다.
요즘은 범용적인 JSON을 이용하는 추세가 점점 늘고 있다. 따라서 JSON 이냐 직렬화 이냐 에 대한 명확한 정답은 없고 '목적에 따라 적절히 써야 한다' 정도로 정리할 수 있을 것 같다.