최근 몇 주 전에 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) 을 이용했다면 최소한의 수정으로 동작이 가능했을 것이다..ㅋ
'개발 및 운영' 카테고리의 다른 글
libvirt + windows 11 + hyper-v 삽질기 (2) | 2024.11.21 |
---|---|
Chromium 브랜딩 빌드 및 강제 확장 프로그램 설치 개발 (0) | 2024.08.14 |
Captcha Solver 개발기 (0) | 2024.08.07 |
gdbgui 으로 커널 디버깅 하기 (0) | 2024.06.19 |
dHCI Storage Benchmark (0) | 2024.04.24 |
댓글