2024년 회고 - 잡다한 성취와 그로 인한 희열을 느낀 한 해

jomminii·2024년 12월 31일

remember

목록 보기
2/2
post-thumbnail

# 결론부터 쓰는 회고

올 한 해는 개인적으로 좀 특별한 한 해로 기억될 것 같다. 이것저것 만들어가며 내가 개발자라는걸 느끼고, 원하는 걸 만들 수 있는 사람이라는 걸 느꼈으며, 또 나의 성취가 다른 사람에게 도움이 되게 할 수 있는 영향력 있는 사람이 될 수 있다는 걸 느꼈다.

내년 한 해도 열심히 바득바득 살아보자.

(내년에 아빠 된다!)


# 사이드 프로젝트

여러가지 사이드 프로젝트들을 진행했는데, 원래 개발할 수 있었던 분야 외에 AI 의 폭발적인 성능향상으로 내가 전문성을 가지지 못한 개발 영역에서의 프로젝트를 개발, 배포할 수 있었다.

어떤 것들을 만들었는지 나열해보자.

## 1. AWS Polly 를 이용한 AI 음성 생성 서비스

올해 초 AI 를 활용해서 만든 컨텐츠로 유튜브 채널을 만들어서 운영한 적이 있었다. 이 시기에 AI 로 만든 음성 생성이 필요했는데, 대부분 유료 서비스이고 무료 서비스는 뭔가 부족했다. 그러던 중 프리티어로 사용 중인 AWS 에서 Polly 라는 서비스로 음성 생성을 API 로 지원하고 있는걸 확인하고 서비스를 만들었다. (현재 출시는 되어있지 않다)

Streamlit 이라는 파이썬 기반 프론트 프레임워크로 UI 를 만들고, Polly 를 붙여서 서비스를 만들어 사용했다. 프리티어로 제공되는 사용량으로도 내가 사용할 양은 충분히 커버 가능했기에 비용을 아낄 수 있었다.

순식간에 기본적인 UI 를 만들어낼 수 있는 Streamlit 도 경험해보고 나니, 아이디어만 있으면 LLM 을 활용해서 어지간한 서비스는 쉽게 만들어낼 수 있을것 같았다.

## 2. 와이프를 위한 택배 엑셀 생성 프로그램

온라인 빈티지 소품샵을 운영하고 있는 와이프를 위해서 택배 접수를 위한 엑셀 생성 프로그램을 만들었다. 맥북을 사용하기에 엑셀 조작 자체도 힘들었고, 택배 접수 처에서 요구하는 엑셀의 유효성 검사를 통과하기도 쉽지 않았다. 이를 위해 접수 정보를 UI 로 입력하면 엑셀을 뽑아주는 프로그램을 만들었다.

사업 특성상 단골 고객도 많아 기존 고객이 재주문 시 기존 정보를 불러올 수 있도록 했다. 서버 연동은 따로 필요 없어서 브라우저의 indexedDB 에 정보를 저장하게 했다. 나중에 사용자가 더 생기면 서버에 저장할까 생각중이다.

지금은 이걸 안만들었으면 일을 어떻게 했나 싶을 정도로 요긴하게 잘 쓰고 있다. 체감상 작업 시간이 90% 는 줄은 것 같다.

## 3. 얼마남았지 IOS 앱 개발

일상 속 물건들의 만료기한 및 수량을 관리할 수 있는 IOS 앱도 하나 만들어서 배포했다. 갖가지 수도 필터나 개발 라이센스 등을 매번 교체 시기마다 관리하는게 번거로워서 만들었다.

이 앱을 만들 때 Claud ai 의 도움을 많이 받았다. 한달 정도 걸려 만들었다.
추가 개선은 안하고 있는데, 일단 나는 잘 쓰고 있다.

## 4. 이룸 IOS 앱 개발

지인들과 확언을 설정할 수 있는 앱도 하나 개발했다. 확언과 기간을 설정하고, 매일 확언 카운트를 하여 진행율을 확인할 수 있는 서비스다.

## 5. Dual Page Sync 크롬 확장프로그램 개발

올해의 역작이라고 할 수 있다.

두 개의 브라우저를 동시에 스크롤 할 수 있는 기능을 제공하는 크롬 확장프로그램이다. 개발문서를 볼 때 종종 구글 번역을 통해 원문을 번역해서 보는데, 아무래도 번역의 질이 아주 좋진 않다보니 결국엔 원문과 번역본을 비교하면서 봐야 정확한 문서 읽기가 가능한 불편사항을 해결하기 위해 만들었다.

일부 커뮤니티를 통해 홍보를 진행했는데, 반응이 꽤 좋은 편이다.


현재 사용자 수는 3,200명 정도 되는 것 같다. 여유가 되면 더 디벨롭을 해봐서 널리 퍼뜨려 볼 예정이다.

## 사이드 회고

이것저것 많이 했다. 올해는 정말 웬만하면 머리에 떠오르면 만들어냈다.

덕분에 올해 깨달은건, '오? 이제 만들고 싶은게 있으면 만들 수 있는 인간이 되었네?'

원래도 뚝딱뚝딱 만들어 낼 수는 있었겠지만, 확실히 ai 도구들의 서포트를 받으니 속도감이 많이 달라진걸 느낀다. 이젠 속도 싸움인가...

각각의 사이드를 진행할 때면, 피버타임이 진행되듯 정말 일정한 기간동안 빡세게 개발을 하는데, 회사에서는 전부 충족되지 않는 개발 욕구가 일부 해소되는데서 오는 희열도 있고,

또 내가 사용할, 다른 사람에게 도움이 될 무언가를 만들어 냈다는데에 대한 보람도 있었다.

다만... 난 백엔드 개발자고, 회사에서 써먹을 기술도 대부분 백엔드 기술일텐데 사이드는 백엔드랑은 거리가 좀...

그래도 회사에서는 백엔드 기술을 갈고 닦으려고 노력했다. 이번엔 백엔드 이야기다.


# 회사 일!

올해는 PMS라고 불리웠고 지금은 빌딩플러스라고 불리는 자산관리 시스템을 개발했다. 올해 1월에 킥오프를 하고 10월에 출시를 했다. "상업용 부동산 디지털전환"…스파크플러스, '빌딩플러스' 출시

요 개발을 진행하면서 했던 개발 몇 가지를 적어본다.

## 1. 비즈니스 로직 및 쿼리 최적화를 통한 약 98% 속도 개선

대량의 계약에 대한 관리비 금액을 정산, 계산하는 로직에 부하가 걸린 사례가 있었다. 개발 도중에 테스트 데이터로 인한 부하긴 했지만, 계약 1,000건에 대한 금액 계산 시 74초가 소요되는 이슈였다.

여러 단계를 거치며 74초를 1.2초로 만들어냈다.

일단 가장 큰 문제의 원인이었던 부분은 aiomysqlexecutemany 메서드를 잘못 쓰고 있는 부분이었다. 이전 프로젝트부터 다량의 insert 쿼리를 사용할 때면 사용했던 메서드인데, 잘못 사용하고 있어서 정작 한 번에 쿼리가 처리되지 않고 for 문처럼 쿼리가 반복해서 실행되고 있었다.

시스템의 특성 상 대량의 데이터를 실제로 이번과 같이 처리하는 케이스가 적어 잘못 사용되고 있다는걸 인지 못하는 상태였고, 문제를 뜯어보면서 executemany 에 넘기는 쿼리의 형태가 조건에 맞지 않다는걸 발견하게 되었다. 이 부분에서 가장 많은 개선이 있었고, 비즈니스 로직과 쿼리 내에서도 개선을 더했다.

데이터 상 한 번에 DB 로직을 처리해도 되는 로직은 한 번에 몰아 네트워크 비용을 줄이고, Recursive CTE 구문을 통해서 쿼리 내에서 반복을 처리함으로써 또 추가로 네트워크 비용을 줄였다.

이 외에도 다량의 업데이트를 한 번에 처리하고자 임시 테이블을 통해 대상 데이터를 적재하고, 한 번의 쿼리로 업데이트 처리를 하게 해 추가로 네트워크 비용을 줄였다.

자세한 이야기는 관련 글에서 확인해보자.

## 2. FCM http -> http v1 전환

FCM HTTP API 의 지원이 2023년 6월 20일부터 중단되고, 2024년 6월 1일부터 기존 API 로 모바일 푸시 알림 전송이 불가해져 HTTP v1 으로 마이그레이션을 해야했다. 기존에 내가 개발한 부분은 아니었지만 이참에 FCM 관련 기능을 만져보고 싶어서 처리하게 됐다.

덕분에 Firebase를 한 번 만져볼 수 있는 경험이 되었고, 이번 프로젝트 외에도 다른 프로젝트에서도 내가 만든 헬퍼를 사용할 수 있도록 공통화해서 팀에 제공했다.

문서도 따로 만들어 공유하여 정보의 음영이 발생하지 않게 했다.

## 3. 팀 생산성 향상 지원

나의 개발 생산성도 높이고, 팀 내 생산성도 올라가게 하고 싶었다. 지금 개발을 하면서 어떤 부분이 불편한 지 생각해봤는데, 하나는 현재 디버거를 사용하지 않고 print 를 써서 디버깅을 하는 환경. 그리고 두 번째는 request, response 에 대한 로그가 그저 나열된 string 으로 출력되어 보기 힘들다는 부분이었다.

이를 해결하기 위해 현재 우리가 쓰고 있는 IDE 인 vscode 와 jet brains 친구들로 디버깅을 하는 법을 공부하고, 문서화하고, 세션을 열어 팀 내에 전파했다. 다행히 반응은 좋았고, 생산성에 도움이 될 것 같다는 응답을 받았다. 실제로 나부터도 디버깅하는데 시간이 줄어 개발을 하면서 더 많은 결과물을 만들어 낼 수 있었다.



그리고 로그의 출력 방식도 로컬 환경에서는 사람이 읽기 편한 형태인 가공된 json 형태로 보여줄 수 있도록 개발하여 전파했다.

개인의 성향에 따라 취사선택해서 사용할 수 있도록 가이드 문서를 제공하였다.

## 4. Profiling 을 통한 쿼리 템플릿 렌더링 속도 90% 개선

3번의 생산성 향상과 궤를 같이 하는 주제이다. 막연히 프로파일링에 대해 들어만 봤었고 실제로 내가 개발하는 프로그램에는 적용을 해본 적이 없었다. 그래서 이 기법에 대해 공부를 해서 프로그램에 적용하고, 개선하여 팀 내에 공유하면 팀의 생산성이 같이 올라갈 수 있을 것이라 기대했다.

먼저 python 에 대해 프로파일링을 할 수 있는 cProfile, pyinstrument, line_profiler 에 대해 학습을 하고, 현재 개발하는 기능 중 부하가 있는 부분에 적용해봤다.

적용 결과 다수의 쿼리를 사용하는 api 내에서 쿼리 템플릿을 로드하고 렌더링 하는 곳에 부하가 생긴다는 것을 알게 되었다.

그래서 이 부분을 캐싱을 통해 성능을 높이는 방법을 고안해 적용하였다. 이 과정에서 각각의 로직을 더 깊게 뜯어보는 법을 배우고, 캐싱과 메모리에 대해 좀 더 공부를 할 수 있는 계기가 되었다.

이 개선기를 내부 문서로 작성하여 팀 내 공유하였고, 필요하다면 프로파일링 관련 세션도 열어 팀 내에서 개발하는데 활용할 수 있도록 할 예정이다.

## 회사 일 회고

1년 내내 새로운 프로젝트에 투입되고, 킥오프를 하고, 런칭하는 사이클을 한 바퀴 돌았다. 하지만 기획의 변화만 있었을 뿐 이전의 프로젝트들과 기술적 차별성을 둘 곳이 마땅치 않아 개발적으로는 좀 목말라 있었던 것 같다.

그래서 일부러 로직을 더 깊게 파보고, 뭐 하나라도 도움이 되는 걸 해보려고 노력했다. 이것저것 눌러보며 부하가 있는 곳이 있는지 찾아보고, 또 내가 개발하면서 불편한 것을 해결하며 팀원들에게도 전파해 모두에게 도움이 되고자 했다.

다행히 일련의 성과는 있었고, 나름 만족한다.

익숙한 개발 환경이지만 파다보면 놓치고 있는 부분들이 나오고, 이걸 찾아내서 또 고쳐내고 개선해냈다는 희열을 느꼈다. 내년에도 더 파서 더 도움이 되는 일들을 해나가야겠다.

profile
고민은 격렬하게, 행동은 단순하게

0개의 댓글