개발팀 기술검토 의뢰(?)로 들어왔다. 회사 서버에서 주문을 집행하기 위해 증권사 Open API 이용이 가능하냐는 것. 근데 문제는 그 증권사 API는 ActiveX 기반이다. 변태같은 레거시다. 그리고 서버는 당연 리눅스.
결론부터 말하면 기술적으로는 된다.
방법은 간단히 말하면 wine이다. 윈도우 프로그램을 리눅스에서 돌릴 수 있도록 해주는 프로그램이다. 그래서 ActiveX를 이용하는 것 자체는 빠르게 해결되었다.
그런데 다음 문제가 남아 있었다. 인코딩이 EUC-KR이라는 것이다. 담당자가 사고치기 싫다고 레거시는 하나도 안 건드린 듯 하다.
UTF-8에 비해 용량이 반밖에 안되는 EUC-KR을 이용하기 때문인 것으로 보이지만, 여튼 그걸 전송속도 빠르다고 자랑….하고 있었다. 역시 꿈보다 해몽이다. 담당자는
- 사고도 안치고
- 성능 우위도 홍보하고
- 꿀도 빨았을 것이다
역시 사람은 머리를 써야 한다. 여기서 머리라는건 잔머리도 포함인 듯 하다.
뭐 그래도 원래 금융쪽은 레거시 파티다. 그래서 EUC-KR일 것이라는걸 빠르게 눈치채고 같이 해결. 환경변수 세팅으로 해결했다.
LANG=ko_KR.EUC-KR
각설하고, 여기서 한가지 주의할 것이 있다. 이걸 .bashrc같은데 박아넣는 불상사는없어야 한다. 이 환경변수는 wine을 이용할 때 외에는 이용되지 않아야 한다. 안그럼 그럼 평소에 한글이 깨진다. 그래서 난 wine을 도커로 돌림. 비슷한 이유로 리서치팀 프로그램을 돌릴 때 필요한 conda도 로컬에 직접 설치하지 않고, 도커 컨테이너에 home 디렉터리 마운트 해서 필요할 때만 씀.
다음 문제는 공인인증서이다. 한국투자증권 API의 경우 Token을 이용할 수 있도록 되어 있어서 편했는데, 의뢰받은 API는 그게 아니었다. 공인인증서를 매번 사용해야 함. NPKI 디렉터리를 위치해야 하는 위치에 아무리 둬봐도 인식이 안됨. 힌트는 인코딩에 있다.
LC_ALL=ko_KR.UTF-8
이 부분을 처음엔 따로 세팅하지 않았었다. 그래서 UTF-8 인코딩인 공인인증서는 인식이 안된 것. 저렇게 넣어 주니 잘 인식되었다.
해결 완료.