<- Back to projects and build log

까먹고 있었던 내 오픈소스 프로젝트를 들추어보다.

마치 갤러리에 오래된 사진을 정리하듯이, 깃허브 레포지토리들을 정리해야 할 일이 있었다. 그 속에서 이런 레포를 찾았다. hwp converter api라는 레포지토리이다. 내가 이 레포를 찾고 놀란 점은 비단 내가 직접 만들고 게시한 프로젝트를 아주 완벽하게 까먹고 있었다는 것과 더불어, 그 레포에 11개의 깃허브 스타가 달려있었다는 점이다. AutoRAG를 통해 4천개가 넘는 깃허브 스타...

open-source / github / hwp-converter-api / rag
까먹고 있었던 내 오픈소스 프로젝트를 들추어보다. 글 대표 일러스트
Jeffrey Kim의 SecondBrain 빌드 로그 아티클 커버

Quick context

First, this page captures one concrete build-log step, research note, or project lesson from Jeffrey Kim.

Next, use the tags, related reading, and home archive to move from this note to deeper material in the same topic cluster.

Finally, follow the RSS feed if you want the next experiment, retrospective, or paper review as soon as it ships.

마치 갤러리에 오래된 사진을 정리하듯이, 깃허브 레포지토리들을 정리해야 할 일이 있었다. 그 속에서 이런 레포를 찾았다. hwp-converter-api라는 레포지토리이다. 내가 이 레포를 찾고 놀란 점은 비단 내가 직접 만들고 게시한 프로젝트를 아주 완벽하게 까먹고 있었다는 것과 더불어, 그 레포에 11개의 깃허브 스타가 달려있었다는 점이다. AutoRAG를 통해 4천개가 넘는 깃허브 스타를 받아본 적이 있는 나이지만, 이 11개의 스타는 보다 특별하게 느껴졌다. 왜냐하면, 나는 단 한 번도 이 hwp-converter-api라는 레포를 홍보하거나 외부로 알린 적이 없기 때문이다. 내가 한 것은 그저 private 상태의 레포를 public으로 바꾸었을 뿐이다. 흔히 새 프로젝트를 진행하면 올리는 긱뉴스나 레딧, 그리고 나의 링크드인에도 게시한 적이 없는, 그런 프로젝트였다. 다시 말해, 누군가 찾아와서 사용하는 것을 전혀 기대하지 않은 프로젝트인 것이다.

음… 일단 이 프로젝트가 어떤 것인지 잠깐 이야기 해보겠다.

hwp-converter-api는 뭐하는 것이고 왜 만들었는가?

아주 간단한 일을 한다. hwp 파일을 API 서버로 전송하면 그것을 텍스트로 바꾸어서 응답으로 보내주는 역할을 한다. hwp 파일 reader용 API 서버를 만들었다고 보면 된다.

그러면 이것을 왜 만들었을까? 당시 (2년여 전)에는 hwp 파일을 읽고 파싱하는 것이 python에서 매우 힘들었다. 물론 가능은 했지만, 뭔가 제대로 된 라이브러리가 없었다.

RAG를 할 때에는 무엇보다 파싱이 중요하다는 것 모두들 알고 있을 것이다. 그리고 한국인이라면 피할 수 없는 hwp 파일의 골치 아픔도 누구나 공감할 것이다. 나도 간단한 RAG를 만들어 보며 그런 골머리를 앓고 있었고, hwp 파일을 처리하는 라이브러리를 찾던 중 Java로 되어 있는 hwplib과 hwpxlib을 접하게 되었다.

처음에는 Python으로 해당 라이브러리르 포팅하고 싶었으나, Java를 Python과 연결하는 간단하지 않은 일이었다. 당시에는 물심양면 나를 도와줄 클로드 코드나 커서도 없었다. (gpt-4가 막 나왔던 때였던가??)

그렇다면 그냥 Java로 API 서버를 만들고 그 서버에 요청을 보내서 hwp 파싱을 구현해야 겠다는 생각을 하게 되었다. Python으로 HTTP 요청 보내기는 식은 죽 먹기 아닌가?

그래서 Javalin을 이용해서 코틀린으로 아주 간단한 API 서버를 구현했다. 그냥 hwp 파일을 보내면 파싱해서 보내주는… 그게 이 프로젝트의 전부이다. hwp와 hwpx 각각 하나의 엔드포인트만 존재한다.

오픈소스의 강력함

내가 새삼스럽게 이런 글을 쓰는 이유는, 하루 만에 쓰여진 아주 작은 프로젝트가 적어도 8명 (스타 11개중 3개는 팀 동료와 나다) 에게 도움이 되었다는 사실이다. 내가 기억도 못하던 작은 프로젝트가 누군가에게, RAG 커뮤니티에 좋은 영향을 끼치고 있었다는 것이다!

내가 이 작은 프로젝트를 그냥 내 맥에, 아니면 private 레포로 남겨 두었다면 아무런 일도 일어나지 않았을 것이다. 하지만 public으로 열여두고, 정말 아무것도 안했음에도 누군가 내 레포를 찾아준 것이다. 아주 놀라운 일이 아닐 수 없다.

이래서 내가 오픈소스를 좋아한다는 생각이 확 느껴지는 경험이었다. 그리고 아무리 작은 기여라도, 아무리 작은 기능이더라도 오픈소스로 공개하는 것이 좋겠다는 생각도 더 굳어지게 되었다. 그 이유를 다시금 꼽자면… 그냥 재밌지 않은가? 내가 까먹었던 무엇인가를 다른 사람들이 용케도 찾아내어 “스타”로 칭찬을 해주다니;;

뭐… 결론을 내자면, 여러분이 만들었던 아주 작은 프로젝트라도 public 전환이 두려워서 망설이고 있다면, 주저없이 public 레포로 전환해 보는 것은 어떠할까? 별 것 아닌 프로젝트라도 누군가에게는 큰 도움이 될 수 있을 것이라 확신한다.

Related reading

같이 읽으면 좋은 프로젝트 로그와 연구 노트를 이어서 탐색해보세요.