사내 툴 개발 이야기: 임베디드 SQLite의 힘

1

사내 CLI 유틸리티 툴 개발 이야기: 임베디드 SQLite의 힘

엑셀 대신 sqlite3를 사용했더라면 위와 같은 문자를 받을 일이 없었을텐데...


안녕하세요. 지금 이 글을 작성하는 시점은 설날 연휴 직전 금요일 밤 11시 23분이고, 제가 막 퇴근한 직후인데요. 그래서 이 블로그 포스트도 늦은 시간에 작성하게 되었습니다.

사실 오늘 저는 정말 빠르게 한 툴을 개발했는데요, 이 툴이 어떻게 임베디드 SQLite를 사용해 시간을 절약하고 코드를 깔끔하게 만들 수 있었는지에 대해 공유하고 싶습니다.

툴을 개발한 배경

저는 최근에 우리 회사 제품에서 갑작스러운 오류가 발생하여 이를 분석하는 CLI 유틸리티 툴을 작성하라는 지시를 받았습니다.
문제는, 모니터링 툴에서 생성된 raw data가 너무 길고 복잡해서 현장 엔지니어들이 이를 분석하기가 어려웠다는 점이었습니다. 그래서 우리 부서에서는 엔지니어들이 빠르게 문제를 파악할 수 있도록 데이터를 시각화하거나 요약할 수 있는 툴을 만들어야 했습니다.
그 시한은 이번 주 안, 특히 설날 연휴 전 금요일까지여서 굉장히 긴박한 상황이었습니다.

주어진 기한은 2일

이처럼 급박하게 툴을 개발하던 중, 계속해서 여러 가지 데이터 처리 요청이 들어왔습니다.

  • 주로 두 상태를 비교하거나,
  • 새로 생성된 항목만 보여주거나, (filtering)
  • 기존에 있었던 항목만 보여주거나, (filtering)
  • 특정 값 이상의 항목들만 보여주거나, (filtering)
  • 출력 순서 정렬을 바꾸거나, (ordering)
  • 통계를 합산하는 등의 요청이었습니다. (aggregating)

이런 요청이 추가될 때마다 저는 급하게 매번 필터링, 정렬, 집계 로직을 직접 작성하고, 루프 안에서 breakcontinue 문을 수동으로 추가하는 방식으로 처리했습니다.

처음에는 간단했던 for loop이, 점점 if 문이 추가되기 시작하면서 매우 길어지고 읽기 어려워졌습니다. 이 과정에서 코드가 점점 지저분해지고, 디버깅이 어려워졌습니다. 결국 코드가 비효율적이고 유지보수가 힘들어지는 상황에 직면하게 되었죠.

새로 생성된 데이터는 제외하고 (no new) ... 데이터 최소 크기를 설정하고 (min diff) ... 차이의 크기로 정렬하고 (sortBy "diff") ... 나중에 추가된 친구들도 고려하고.... 코드가 정말 더러워지고 있는 모습입니다 ㅠㅠ

반복되는 패턴에서 깨달은 점

하지만 여기서 중요한 깨달음을 얻었습니다. 바로, 제가 계속해서 작성하던 로직들이 사실 반복되는 패턴이라는 점이었습니다. 데이터 필터링, 정렬, 집계 등은 매번 비슷한 방식으로 처리되었고, 결국 "왜 굳이 매번 새로운 방식으로 코드를 작성하고 있을까?"라는 의문이 들었습니다.

그때, 갑자기 임베디드 SQLite가 떠올랐습니다. 왜 이 반복적인 로직들을 직접 구현할 필요가 있을까요? SQLite를 사용하면 필터링, 정렬, 집계, 요약 등의 작업을 데이터베이스에서 처리할 수 있고, 그것만으로도 충분히 강력한 툴을 만들 수 있다는 생각이 들었습니다.

임베디드 SQLite의 도입

그래서 저는 데이터를 SQLite에 저장하고, 필요한 처리를 SQLite에서 직접 처리하도록 만들었습니다. 데이터베이스에 스키마를 미리 정의하고, 필요한 쿼리를 작성한 후, 결과를 예쁘게 출력하는 방식으로 툴을 재구성했습니다. 그 결과는 대단히 성공적이었습니다.

  • 코드는 깔끔하고 유지보수가 쉬워졌습니다.
  • 툴 사용자는 필터링, 정렬, 집계 등 모든 기능을 손쉽게 사용할 수 있었습니다.
  • 버그가 없이 빠르게 동작했으며, 개발 시간과 노력도 크게 줄어들었습니다.

위에 보여드렸던 코드보다 엄청 많은 기능을 할 수 있으면서도, 단 몇줄로 딸깍~

너무 기뻤습니다.

More Power, Less Responsibility (of Code Maintenance)

심지어 사용자에게 더 많은 권한을 손쉽게 부여하는 것도 가능했습니다.
SQL 문법만 안다면 해당 툴을 원하는대로 커스터마이징해서 마음대로 자유롭게, 무궁무진하게 응용해서 사용할 수 있는 겁니다.

단 5줄의 코드만으로, 사내 엔지니어분들께 정말 모든 것을 할 수 있는 인터페이스를 열어드렸습니다.
어쩌면 sql injection도 가능하겠죠...? 내부 로컬 툴이라서 괜찮습니다... ^^

이렇게 된 이상, 모든 로직을 다 사내 고급 엔지니어분들께 맡기고, 저는 사용하기 편하시도록 데이터 전처리, sqlite db insert, 그리고 pretty print에만 집중할 수 있었습니다.

이렇게 만들어두니, 해당 툴을 통해, 정말 raw 데이터를 분석해서 얻을 수 있는 온갖 정보를 모두 손쉽게 얻을 수 있었습니다.

비유하자면 말 그대로 걸어다니는 CLI 엑셀 툴이 생겨버린 걸까요?

의외로 컴공 전공자 분들은 잘 모르실 수도 있는데,...
대학에서 저처럼 4년동안 엑셀만 만지신 분들은, 엑셀이 인류에게 있어서 얼마나 위대한 도구인지 아실 겁니다...

결과물

아주 이쁘게 출력하고, 자유롭게 필터를 걸 수 있는 유용한 툴이 개발되었어요. 이 경험이 너무 소중합니다. 앞으로는 이런 툴들을 공장처럼 찍어낼 수도 있을 거 같아요. ㅎㅎ

앞으로의 툴 개발에 대한 통찰

이 경험을 통해 깨달은 점은, 사실 대부분의 유틸리티 툴에서는 데이터를 필터링하고, 정렬하고, 집계하는 로직이 반복된다는 것입니다. 그리고 이런 작업을 처리하는 데 임베디드 SQLite를 활용하면, 수많은 반복적인 코드 작성 없이도 강력하고 효율적인 툴을 만들 수 있다는 점입니다.

앞으로는, 어떤 툴을 개발하든 데이터의 필터링, 정렬, 집계와 같은 기능이 필요하다면, 임베디드 SQLite를 활용할 것입니다. 그렇게 되면, 코드가 훨씬 깔끔해지고, 원하는 기능을 빠르게 구현할 수 있으며, 저는 더 이상 복잡한 로직을 수동으로 작성하지 않아도 됩니다.

마무리

이 글을 통해, 여러분도 자신의 유틸리티 툴 개발 시 임베디드 SQLite를 적극적으로 활용해 보시길 권장드립니다. 이를 통해 더 효율적이고 깔끔한 코드를 작성할 수 있으며, 개발 생산성도 크게 향상될 것입니다.

  • 프론트 개발
  • 백엔드 개발
  • 백오피스 개발
  • 어플리케이션 개발
  • 인프라 개발
  • 시스템 개발

어떤 개발자라도 SQLite를 정말 유용하게 사용하실 수 있으실 겁니다. 모든 언어로, 심지어 웹 용으로 JS port까지 있으니 그 응용 가능성이 무궁무진합니다. 당장 업무에 한번 도입하는 것을 브레인스토밍해보세요!
정말 말도 안되는 유용성을 가진 만능 자료구조를, import 혹은 include 문 한번에 바로 사용하실 수 있습니다. 사실 모든 분야에서 사용되고 있고, 그래야만 하는 거지요.

마지막으로, 이 툴을 개발하면서 정말 큰 힘이 되어준 SQLite에 대해 감사한 마음을 전합니다. 저는 이제 언제든지 필터링, 정렬, 집계가 필요한 툴을 만들 때마다 SQLite 엔진을 뒤에 두고 작업할 것입니다. 그럼, 더 나은 툴들을 계속 만들어 나가겠습니다.

읽어주셔서 감사합니다!

0개의 댓글

관련 채용 정보