본문 바로가기
개발 및 운영

hometax 데이터 형식 xml -> json 변경 사항

by Joseph.Lee 2024. 11. 19.

최근 몇 주 전에 hometax 의 데이터 형식이 돌연 xml 에서 json 으로 변화하였다.

하루아침에 데이터 형식의 변화라니... 빠르게 전체가 변한거 보면 자체 framework 에서 xml/json 을 선택할 수 있게 되어있었나 보다. 데이터 용량 줄일려고 json 으로 바꿨나...

 

기본적으로 request 의 경우 XML + hometax 자체 무결성 검증 (무결성이 맞나... 체크섬이 더 맞는 표현일듯... 근데 의미없이 왜 이상한 코드를 넣었는지... 이해가 안되긴 함...) 형식이었는데, 무결성 검증 알고리즘 등은 그대로이고, url 들도 그대로인걸 보아 하니 딱 데이터 형식만 바뀐 듯 하다.

 

하튼.. 덕분에

https://x.com/pakyoungrok/status/1853329535170961535

- https://x.com/pakyoungrok/status/1853445203618906443

- https://x.com/hyunbinseo97/status/1853584937653596167

고통받는 자들이 있는 듯..ㅎ

 

 

나는 기존에 Jaxb 을 이용해서 request/response 을 marshal/unmarshal 을 했다. 그냥 jackson 으로만 바꿔서는 안되는게 xml 의 id attribute 으로 부터 하위 클래스가 정해진 것처럼 json 의 key 으로 부터 하위 클래스가 정해지고, 또 list 같은 경우는 좀 구조가 아래와 같이 복잡하기 때문이다.

 

여러 vo 클래스들을 싹 다 수정하기엔 공수가 크지만, 나는 jackson 의 JacksonAnnotationIntrospector 와 anyvalue 등 몇 가지 방식을 이용해서 기존 코드에 최소한의 수정으로 동작이 가능하게 수정이 가능했다.

 

@Getter
@XmlDiscriminatorValue("rtnBscAdmDVOList") // 기존거 그대로 사용
public class RtnBscAdmDVOList extends AbstractListElement<RtnBscAdmDVOList.Item> {
    @XmlElement(name = "map") // 기존거 그대로 사용
    public List<Item> items = new ArrayList<>();


    // 추가
    @Override
    public Class<Item> getItemType() {
        return Item.class;
    }

    @XmlType(name = "rtnBscAdmDVOList$item")
    public static class Item {
        @XmlElement
        @JsonProperty("chrgTxhfOgzCd")
        public String chrgTxhfOgzCd = ""; // e.g. "129"
        @XmlElement
        @JsonProperty("mateStatRsnCd")
        public String mateStatRsnCd = ""; // e.g. "01"
        @XmlElement
        @JsonProperty("txnrmYm")
        public String txnrmYm = "";
        ...
   }

 

 

 

python 이나 node 등을 사용했었다면 뭔가 공수가 커서 고통받는 사람들이 있을거 같은데...

나의 korea-scraper (https://jsty.tistory.com/360) 을 이용했다면 최소한의 수정으로 동작이 가능했을 것이다..ㅋ

반응형

댓글