인터넷 우체국 사업자 포털 오픈API


인터넷에서 우편번호 검색하는 서비스가 있나 하고 검색을 하던 중 반가운 페이지에 도착했다.

이름하여, “오픈API“!!!

아… 이제 우리나라도 이런거 되는구나! 역시!!!

기쁨은 아주 잠시 뿐, 실망스러운 부분이 너무도 많다.

References


다음 링크들을 참고하였다.

HTTP

  • GET POST 둘 다 된다. (이건 좋은 건가?)
  • query request parameter는 인코딩을 아예 안하거나(@@?) euc-kr로 하면 된다.
  • Accept-Language: ko를 꼭 써줘야 한다.

XML

  • 오랜만에 보는 encoding="euc-kr"이다.
  • 아주 멋찐 <![CDATA[]]>!!!
  • 역시나 XML Namespace를 기대하기는 어렵다.
  • 특정 element localname({}postcd)이 예시문서({}zipcode)와 다르다.
  • 서울 광진구 구의1동 248~252 이 따위로 주면 번지 구간을 어떻게 자르라는 건가?

How should be

EJB, JAX-RS

여기에 Stateless Session Bean과 JAX-RS Resource들을 구현해 놓았다. 참고하시길.
단 PostalCodesBean을 쓰려면 다음과 같이 ejb-jar.xml에 regkey값을 설정해줘야 한다.

<?xml version="1.0" encoding="UTF-8"?>

<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"
         version = "3.1"
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
  <enterprise-beans>
    <session>
      <ejb-name>PostalCodesBean</ejb-name>
      <env-entry>
        <env-entry-name>com.googlecode.jinahya.epost.openapi.PostalCodesBean/regkey</env-entry-name>
        <!--env-entry-type>java.lang.String</env-entry-type-->
        <env-entry-value>{your_regkey}</env-entry-value>
      </env-entry>
    </session>
  </enterprise-beans>
</ejb-jar>

XML Schema

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0"
           targetNamespace="http://jinahya.googlecode.com/epost/openapi"
           xmlns="http://jinahya.googlecode.com/epost/openapi"
           xmlns:tns="http://jinahya.googlecode.com/epost/openapi"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <xs:element name="postalCodes" type="postalCodes"/>

  <xs:complexType name="postalCode">
    <xs:sequence>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="code" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="postalCodes">
    <xs:sequence>
      <xs:element name="postalCode" type="postalCode" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

XML

<?xml version="1.0" encoding="utf-8"?>
<postalCodes xmlns:xs="http://www.w3.org/2001/XMLSchema"
	     xmlns="http://jinahya.googlecode.com/epost/openapi"
	     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <postalCode>
    <address>서울 광진구 구의1동 632~640</address>
    <code>143835</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 257</address>
    <code>143828</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 253~254</address>
    <code>143827</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 248~252</address>
    <code>143826</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 232~241</address>
    <code>143824</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 221~222</address>
    <code>143823</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 서울광진경찰서</address>
    <code>143703</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동</address>
    <code>143201</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 새한아파트</address>
    <code>143722</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 242~243</address>
    <code>143825</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 246</address>
    <code>143825</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 641~655</address>
    <code>143836</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 크레신타워3차</address>
    <code>143716</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 225~226</address>
    <code>143960</code>
  </postalCode>
  <postalCode>
    <address>서울 광진구 구의1동 229~231</address>
    <code>143962</code>
  </postalCode>
</postalCodes>

Comments

<bluff>지금 내가 가는 길을 누군가 먼저 걷지 않았다면 내 발은 온통 자갈에 채여 멍이 들고 가시에 찔려 피를 흘리고 있을 것이다.</bluff>

— 나 —

아래는 그 ‘누군가’에 해당하는 분들의 말씀들이다.

어지간히 단가가 쌌던 모양이다.

— Dopany Soft —

여담이지만 우리나라 API제공은 전혀 친철하지 않다..
그냥 알아서 쓸려면 쓰고 말라면 말라는 식이다.

우체국 API페이지도 들어가보면 참 부실하기 짝이 없는 도움말들..
뭐 이유야 훤히 보이는 거지만..
외부에 맞겨서 API개발하고 소스는 돌아가지만
그 시스템을 아는 사람은 우체국 쪽에 별로 없다..
그래서 도움말도 외부업체에서 받은 기술서가 전부고 그마저도 대충 보여주고 마는 거겠지…

— 수유산장 —

Leave a comment