대머리개발자

Json 안에 Json 처리 본문

개발이야기/개념

Json 안에 Json 처리

대머리개발자 2024. 4. 25. 16:11
728x90

 

실상 Map 안에 Map으로 생각해도 된다.

근데 문제는 실제 등록된 데이터를 확인해 보면 지저분하다. 우웩

 

더 나은 설계 방식은 Json 안에 Json을 저장하는 대신에,

복합 객체에 이값을 저장하고 전체 객체를 Json으로 직렬화하는 것이다.

 

⭐⭐AS-IS

val mainConfig = mutableMapOf(
  "xxx.status"  to  jsonStatus
)
Mono.zip(
    RedisConfig.getCache( "xxx:main:recommend"),
    RedisConfig.getCache( "xxx:tags"),
).publishOn(Schedulers.boundedElastic())
.doOnNext { it ->
    mainConfig["recommend"] = it.t1
    mainConfig["tags"] = it.t2
    RedisConfig.addCache(redisKey, Gson().toJson(mainConfig)).subscribe()
}.subscribe()

 

딱!! 한 번의 API로 호출을 통합 하기 위해 여러개의 데이터를 하나의 Json으로 머지하는 코드다.

 

문제는 없지만..

Gson()을 사용하면 이식성과 시스템 간 호환성을 보장하기 위해

하위 Json의 형태는 백슬래시(\)가 따옴표(")는 앞에 전부 붙여진다.

 

위에서 언급한 것처럼 어지럽다.

 

 

⭐⭐TO-BE

객체로 "트랜스폼"한다.

즉, klass 속에 klass로 처리한다.

 

하악하악. 손이 많이 간다.

하지만 Json 인식하고 깔끔하게 response가 정렬된다. 

 

Mono.zip(
    RedisConfig.getCache( "xxx:main:recommend"),
    RedisConfig.getCache( "xxx:tags"),
).publishOn(Schedulers.boundedElastic())
.doOnNext { it ->
    val klass = klassData(
        mainStatus = status
        , recommend =  Gson().fromJson(it.t1, Recommend::class.java)
        , tags = Gson().fromJson(it.t2, Tags::class.java)
    )
    RedisConfig.addCache("xxx:config", Gson().toJson(klass)).subscribe()
}.subscribe()

 

귀찮은건.. AI한테 ^^

728x90

'개발이야기 > 개념' 카테고리의 다른 글

리액터 병렬 처리  (0) 2024.05.10
JWT 사실 어려운 친구였다.  (0) 2024.04.26
네이밍 너무 힘들다.  (1) 2024.04.19
Armeria를 사용하는 이유  (0) 2024.03.12
쿠폰시스템 개발(2)  (0) 2023.12.19