Oracle 드라이버로 본 Golang의 오픈소스

웅짱·2023년 9월 14일
0

Golang에서 Oracle DB에 붙기 위해선, 오라클 드라이버가 필요하다. 오라클에서 공식적으로 지원해주고 있는 건 없고, 유저들이 만든 오픈소스 드라이버를 써야 한다. golang 생태계에서 가장 유명하고 자주 사용되는 드라이버로는 go-oragodror가 있다.

대충 업치락 뒤치락 한다.

godror : 퓨어하지 못한 드라이버

https://github.com/godror/godror
golang에서는 c로 작성된 function을 쓸 수 있다. 대충 cgo가 이것이라고 생각하면 된다. godror도 cgo를 통해 c libarary를 사용해 오라클에 접근한다. 그렇다면 c libarary는 어디서 가져올까? 정답은 오라클에서 공식적으로 배포하는 oracle-instance-client이다. 오라클 인스턴스 클라이언트에서는 godror가 필요한 c function이 들어있고, godror는 이것을 사용해서 오라클에 접근한다.

우리는 이것을 퓨어하지 못한다고 한다. 퓨어하지 못 한 건 영 좋지 못하다. 왜냐면 의존성이 생기기 때문이다. 그것도 go 내에서 생기는 것이 아니라, 프로세스 밖 호스트에 생긴다. 즉, go로 빌드된 그 프로그램은 그 자체로는 실행이 안된다는 것이다. 이보다 불합리한 것이 있을까?

go-ora : 한글 지원 안 됨

https://github.com/sijms/go-ora
다행히도 golang 생태계에도 퓨어한 오라클 드라이버가 있는데, 바로 go-ora이다. go-ora를 쓰면 쓸 데 없이 oracle-instance-client를 설치하는 데 시간을 허비할 필요가 없다. 그렇다면 go-ora는 완전무결한 드라이버일까?

나도 그런 줄 알았다. 하지만 치명적인 문제점이 있다. 오라클의 Charset을 한글 계열로 되어있을 경우에 문제가 생긴다. (KO16KSC5601, KO16MSWIN949 등)

go-ora 코드를 살펴보면 알겠지만, 오라클의 문자열을 go코드로 디코딩 하기 위해, charset마다 하나씩 인코딩 방식을 지정하고 있다. 문제는 한글계열 charset은 코드에 없다.

분명 옛날 버전 go-ora에는 예상치 못한 charset은 default로 디코딩했던 것 같은데(아마 utf-8??), 요즘 버전은 예상치 못한 charset이면 바로 에러를 터트려 버리더라....

그럼 어쩌라고?

정답: 직접 만들고 수정해야 한다.

나도 완전무결한 오라클 드라이버를 찾기 위해 고군분투했다. 처음엔 godror를 사용했지만, 컨테이너 이미지를 만드는 데서 문제가 생겼기 때문에 go-ora로 눈을 돌렸다. 하지만 go-ora는 한글 charset이 안되는 문제가 있었다. 그렇기에 다른 드라이버를 찾아보려 했지만, 다들 마땅치 않았다.

나는 현재 go-ora 드라이버를 포크를 뜬 뒤, 문자열 디코딩을 내 입맛대로 바꾸면서 사용한다. 결국엔 문제가 되는 부분을 내가 찾아서 수정했다.

Golang은 JAVA 같지 않다.

내가 만약 코드를 java로 작성했다면 이런 고민 따위 생각치도 않았을 것이다. java는 jdbc라는 아주 훌륭한 드라이버가 있다. db 드라이버 뿐만 아니다.

java는 오래되었고 golang은 오래되지 않았다. java가 오래되어 고루하다고 싫어하는 사람도 있을 수 있겠지만, 그만큼 완전무결에 가까운 오픈소스들은 어디나 많이 찾아볼 수 있다.

하지만 golang은 아직 과도기이다. 대부분의 오픈소스들은 어딘가 나사가 빠져있다. 그리고 그 나사를 다시 채우는 건 나의 몫이 될 수도 있다.

어쩌면 오픈소스에 참여할 좋은 기회일지도?

오히려 긍정적으로 생각할 수 있다. 나사가 빠져있는 오픈소스를 내가 수정해서 오픈소스에 공헌할 수도 있다. 글로벌 오픈소스에 참여했다는 자부심이 생길 수도 있고, 어쩌면 실력이 늘 수도 있다.

Golang 개발자가 연봉이 높은 이유


2023년에 스택오버플로우에서 설문한 언어별 연봉이다. 보면 알다시피 Golang 개발자는 연봉적으로 꽤나 상위권에 위치해있다.

이유야 여러가지가 있을 수 있다. 구글 개발자가 많아서 일 수도 있고, 낮은 언어에 특성상 복잡함 때문일 수도 있겠다.

내가 생각하는 한 가지 이유는, golang을 한다는 것 자체가 그만큼 실력을 증명하는 거일 수도 있다고 생각한다. golang 개발자는 어차피 없는 오픈소스, 라이브러리들을 직접 만들고 수정할 수 있는 능력이 있다. 그런 능력이 있는 사람들이 어떻게 낮은 연봉을 받겠는가.

profile
모란은 시들어도 꽃이야

0개의 댓글