스타트업 인턴

스타트업에서 처음으로 개발한 신기능, 릴리즈 회고

지미닝 2024. 6. 15. 15:26

신기능 개발

 최근 나는 센디에서 새로운 기술을 개발하고 있었다. 센디의 B2B 고객 중 일부는 센디 프로덕션을 사용하기를 번거롭기 때문에 관리자에게 카카오톡을 보내거나 텍스트, 엑셀로 전달하는 경우가 많다. 이런 경우 서비스본부의 관리자분들이 텍스트를 하나하나 오더폼에 입력해서 작성해야하는 번거로움이 있다.

 

 심지어 계정도 하나의 계정으로 한 기업의 여러명이 사용할 때도 있다. 그래서 관리도 잘 안될뿐더러 앞서 말한대로 관리자가 직접 쓰셔야 하기 때문에 여러므로 불편한 상태였다.

 

 따라서 CTO님께서 내게 엄청 도전적인 과제를 주셨다. 주문 카카오톡(캡쳐화면) 혹은 자연어 텍스트와 같은 것들이 주어졌을 때 LLM모델이 해당 요구사항을 실제 오더폼에 채워넣는 작업이다. 즉, 관리자분들께서 주문에 대한 텍스트나 카카오톡 캡쳐 이미지를 받으면 변환할 수 있는 프로세스를 제공해주는 것이다.

 

릴리즈의 의미

 이번 릴리즈의 의미는 내 개인적으로도 회사에서도 꽤 좋은 의미가 있다고 생각한다. 센디에게 이번 릴리즈는 두 가지 의미가 있다고 생각한다. 

 

우리 팀에서 의미

 첫 번째 의미는, 이번 릴리즈를 통해서 서비스본부 직원들의 생산성을 향상시켜줄 가능성이 있다는 것이다. 아직 서비스본부에 다른 분들이랑 대화해본 경험, 특히나 일적으로 대화해본 경험은 없지만, 제품팀의 대화에서 자세하게는 아니더라도 가끔 듣기도 했고, 손가락에 핏줄이 터져서 얼음팩을 얼리려하는데 서비스 본부 팀에만 냉동실이 있어 들어갔었는데 업무 강도가 결코 낮지 않다는 것을 느꼈다. 사람을 상대하는 일이고, 원치 않아도 정해진 근무 시간 안에는 반드시 화주/차주들의 전화를 받고 메뉴얼대로 문제를 해결하는 일을 하시기에 이것 만으로도 너무 많은 에너지를 소모하실 것이라 생각한다.

 그런데 특정 화주/비지니스를 위해서 자연어로 던저지는 텍스트를 하나하나 일일이 비지니스 계정에 로그인해서 오더 폼을 채워넣는 일은 그분들에게 있어서 많은 생산성의 손해이고, 귀찮고 번거로운 일일 것이다. 이 일을 더 간단하고 쉽게 줄여주는 것이 곧 우리 소프트웨어 개발자가 해야하는 일이라고 생각한다. 이런 의미에서 이번 릴리즈는 의미있는 일이라고 생각한다. 만약 이번 개발이 진정 그들의 생산성을 높여줬다면 outcomes으로서 가치가 있을 것이다.

 

  두 번째 의미는, 기존의 센디는 화주 - 차주를 이어주는 "자동화" 성격이 있는 플랫폼이었다면 이번에는 차주 - 플랫폼을 자동화 하는데 첫 걸음이 되지 않았나 생각한다. 이번 프로젝트는 비지니스 고객을 타겟으로 서비스 본부 분들의 향상성을 높이는 동시에 다르게 말하면 서비스본부가 해야할 일을 줄여준 셈이다. 그런데 이것이 범위를 넓혀서 일반 사용자가 활용할 수 있다면 이것도 자동화다. 다른 방향으로, 대화형 챗봇을 개발할 때도 어느정도 의미가 있다고 생각한다. 왜냐하면 이미지 OCR을 활용하여 텍스트를 추출하기도 하지만, 텍스트 자체도 처리하기 때문에 어쩌면 카카오톡을 나가지 않고서도 모델이 답장을 인식해 오더로 변환하는 작업을 진행할 수 있겠다고 생각한다.

 그런 의미에서 바라봤을 때, 이번 도전은 앞으로 있을 또다른 자동화 작업에 앞선 한걸음이라고 생각한다.

 

내 개인에게 의미

 이번 릴리즈는, 내가 처음으로 회사의 신기능 개발에 많은 코드를 기여한 프로젝트다. 

기술적인 의미

 6000줄에 육박하는 코드를 짰고 너무나 새로운 많은 기술들을 접했다. 특히나 기존에 나는 Spring 백엔드가 메인인 주니어 개발자였으나, 이번 프로젝트의 요구사항에 맞추어 더 기술을 선택하고자, 내가 처음으로 백엔드 개발을 공부했던 FastAPI을 사용하기로 했다. 2022년 2학기, 1학년이었던 내가 했던 FastAPI... 2024년이 된 지금 3학년이 돼서 다시 보려고 하니 조금 무서웠다. 왜냐하면 FastAPI를 하다 2학년 때 React로 빠졌던 기억이 있었다. 그러다 C++을 하고 C++에 빠지면서 Java가 유사함을 알게 되고 Java를 시작하며 Java + Spring을 하게 되었었다. 그러다 인턴까지 와서 Kotlin + Spring을 하고 있는데 다시 Python + FastAPI를 하는 것은 조금은 무서운 일이었다. 

 

 나에게는 상당히 도전적인 일이었다. 그러나 다행이도, Spring을 배우면서 Spring MVC강의를 들었었고, 현재 스프링의 어노테이션은 가령 @transaction과 같은 것들은 개발자들이 편하게 쓸 수 있도록 엄청 추상화되어있는 것이었다. FastAPI의 경우에는 그것보다 추상화 수준이 낮아 transaction 내부에 commit, flush, add와 같은 것들을 모두 찍어줘야만 한다. 그런데 MVC강의에서 스프링 내부 어노테이션이 어떻게 동작하는지 어느정도 알고 있어서 그때와는 정말 느낌이 달랐다. 무엇보다 Spring이 익숙해서 FastAPI와 Spring을 비교하면서 할 수 있어서 크게 어렵지 않았다.

 

 다음으로, 내가 해본 적 없는 다양한 기술들을 활용할 수 있었다. 바로 OCR, LLM이다. OCR의 경우 이미지에서 텍스트를 뽑아내는 기술이다. 단순히 이미지 말고도 문서에 템플릿(영수증, 문서, 사업자 등록증)을 적용해 뽑아낼 수도 있고 그냥 사진 안에 텍스트를 읽을 수도 있다. 생성형 AI (LLM) 도 정말 많이 사용했다. LLama3, GPT-4o와 같은 모델들을 다루며 작업했다.

 

 새로운 기술을 습득하는 관점에서 내게 의미가 있었으나, 더 나아가서 스타트업에서 신 기술을 주도적으로 개발할 수 있어 나에게는 정말 엄청난 의미가 있는 일이었다. 인턴 하면서 꼭 프로덕션에 기여하고 싶었는데 할 수 있는 기회가 생겨 소중했다. 이번 릴리즈를 통해서 소프트웨어 개발자로서 한 기능을 개발한다는 프로세스를 이해할 수 있었고 그 안에서 어떤 커뮤니케이션이 필요한지, 좋은 커뮤니케이션은 무엇인지, 내 기술이 어떻게 기여가 되는지 몸소 느낄 수 있어 의미 있었다. 또한, 아무리 어려운 기술이라도 좋은 동료가 있으면 해낼 수 있다는 것을 다시금 느끼게 되었다.



 

개발 과정

 이번 프로젝트의 제안자는 CTO님이셨고 나는 플랫폼 스쿼드 PM님과 커뮤니케이션을 많이 하며 작업을 했다. PM과 백엔드 기술적으로 가능하지 않은지, 가능한지도 이야기를 나눴고 UX/UI를 전달받고 서로 어느 부분이 추가되어야하는지 커뮤니케이션 하면서 진행했다.

 

이때 커뮤니케이션에서 가장 중요한게 무엇인지 알게 되었다.

https://stopmin.tistory.com/entry/%EC%BB%A4%EB%AE%A4%EB%8B%88%EC%BC%80%EC%9D%B4%EC%85%98%EC%97%90%EC%84%9C-%EA%B0%80%EC%9E%A5-%EC%A4%91%EC%9A%94%ED%95%9C-%EA%B2%83%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

커뮤니케이션에서 가장 중요한 것은 무엇일까?

1. 커뮤니케이션은 왜 중요한가?커뮤니케이션은 조직에서 일을 하다보면 중요합니다. 정말 중요시해야하는 사실은 바로, ”설명하지 못하면 아무것도 네것이 아니다.”라는 사실입니다. 우리

stopmin.tistory.com

 

설계 과정 시, 되도록 짧은 스프린트 내에 배포하는 것이 목표였고 일단 돌아가는 코드를 만드는게 목표였기 때문에, 그리고 일은 가능한 작게 만드는게 필요하기 때문에 PM과 CTO님이 많이 고민하셨다.

 

 이번 프로젝트에서 플랫폼 스쿼드 백엔드 개발자분이 여러므로 많은 지원을 해주셨다. 센디 프로덕션 로드밸런서에도 붙여야하고 스테이징과 프로덕션 배포도 나눠서 해야하는데 이런 부분들을 내가 신경쓰지 않아도 될 정도로 많이 서포트 해주셨다. (로그 작업은 내가 했다. 너무 힘..들엇다. 눈물이 났다.) 그 외에도 새로운 기술들을 소개해주시면서 시도해보라고 추천해주셨고, 내 코드에 조금 아쉬운 점이 있을 때 정말 본인의 일도 바쁘실텐데 내 PR에 정성적으로 리뷰 달아주시고, 답답하고 귀찮으셨을텐데 너무 감사했다.

 

 또한 나의 일을 많이 이끌어주셨다. 일단 무엇보다 돌아가는 코드를 만들고 성능도 프로세스를 만들고 진행시키는게 좋다라는 말씀을 해주셨는데 정말 도움이 많이 됐다. 왜냐하면, LLM의 정확도든 OCR이든 성능/시간을 개선시킨다는 것은 결코..끝을 알 수 없는 작업이기 때문에 모든 프로세스를 만들고 이후에 그 부분부분 개선 시키는 것이 훨씬 더 효율적이고 현실적이라는 점 때문이다. 이것을 일을 시작하기 전에 알려주셔서 정말 일 잘하는 법을 알려주신 것 같아 감사했다.

 

 테스트(QA)는 대부분 PM님께서 해주셨다. 덕분에 문제되는 부분을 금방금방 찾을 수 있었고, 테스트라는게 나는 그저 띡띡 눌러보고 되네~라는 생각을 많이 했는데 문서까지 남기시면서 테스트해보시고, 특히나 우리 PM분께서는 백엔드 공부를 어느정도 하셨던 분이셔서 데이터 쿼리를 쏠줄도 아시고 데이터에 되게 강하신 분이셨다. 그래서 많이 서포트되었다.

 

 개발 과정에서 많이 난간에 부딪히고 절망도 했지만, 그때마다 블로그에 정리도 조금씩 하고 노션에 기록하면서 이겨냈다. 그러나 무엇보다 우리 팀원들 한명한명이 나를 많이 도와주고 좋은 방향으로 이끌어주셨다. 

 

동료들이 있다면 할 수 있어!

 학교에서 동기들과 한 프로젝트와 결이 비슷하면서도 사뭇 달랐다. 일단 실사용자가 배포와 동시에 생긴다는 점이 다르다. 그리고 요구사항에 의해 개발한다는 것도 흥미로운 일이다. 회사를 다니면서 매순간 느낀 일이지만 "커뮤니케이션"이 정말 중요하다. 저번에 부경대에 가서 우아한 형제들에서 오신 제이슨께서도, 회사도 결국 사람이 사는 곳이기 때문에 중요한 것은 사람이라고 하셨던 기억이 난다. 당시 인턴 시작한지 한 달 정도밖에 안돼서 잘 못느꼈지만, 얼마나 이게 중요한지 깨닫게 되었다.

 

 

소프트웨어 개발자 한 명 혼자서 할 수 있는 일은 꽤나 한정적이다.

그러나 우리 사회에서 해결해야 할 소프트웨어 개발자들의 문제는 결코 개발자 혼자가 할 수 있는 일이 아니다. 누군가 그 문제를 정의할 줄 알아야하고 해결 프로세스를 결정해야하며, 그 프로세스가 나오는 절차도 팀원들에게 전달하여 싱크를 맞추고 이해시키고 설득 시키는 과정도 사람이다. 그리고 개발도 각자 다른 스택을 사용하는 클라이언트/서버 개발자와 PM이 모여서도 정말 많은 커뮤니케이션을 필요로 한다. 모든 과정이 사람이다. 기술은 "기술자"로서의 도구일 뿐, 막상 사람이 결국 메인이라는 것을 깨닫게 되었다. 아무리 힘든 일이라도 팀원들이 도와주고 응원해준다면 해낼 수 있다.

 

 그래서 나는 이번 프로젝트를 통해서 더 사람이 중요하다는 것을 깨닫게 되었고, 도전적인 일을 하는 것도 믿음직한 팀이 있다면 괜찮다고 생각했다. 

 

 

더 남기고 싶은 말

 나중에 나갈 때도 말씀드릴거지만, 센디 구성원들에게 너무나 감사하다. 부족하고 가진거라곤 친근함, 친절함, 적극적임 같은 한눈에 볼 수 없는 장점만 가진 나에게 기술적이고 도전적인 일을 주셔서 너무나 감사하다. 어쩌면 내가 22살로 제일 어리고 개발도 경험이 제일 적은 편이라 당연히 믿고 맡겨주시기 쉽지 않았을텐데 맡겨주셔서 너무 감사하다. 이번 릴리즈는 남들이 생각하면 웃기겠지만 내게 내 전공에 대해 어느정도 더 강한 확신이 생겼고, 내 인생에서는 내 전공으로서 이뤄본 무언가 중에 가장 크다.

 

 이런 경험을 대학생 시절에 느끼게 해주셔서 회사에게 감사하고, 코찔찔이 대학생인 나에게 기회를 주신 CTO님에게 너무나 감사하다. 아무것도 못하던 1학년이었던 나부터 현장실습에 합격해 기능을 개발할 수 있는 사람이 된 나를, 2년째 한결같이 항상 곁에서 응원해주는 나의 남자친구도 너무 고맙다. 덕분에 개발하면서 기술적으로 좌절한 날에는, 그날 하루가 좌절했을 뿐 불행하지 않았고, 내일 다시 일어나 도전하게 도와주었다. 마치 뭔가 대단한 것을 한 것 처럼 쓰는 것 같아 웃긴데.. 그래도 너무나 감사하다.

 

 사실, 릴리즈 하고나니 기술적으로는 아쉬움이 많이 남는다. 조금 더 개발을 잘했더라면 더 잘만들지 않았을까, 더 많은 것을 더 구현할 수 있지 않았을까 아쉬움이 든다. 그렇지만 함께했던 팀원들이 내가 아쉽다고 하더라도 잘했다고, 수고했다고 말씀해주셔서 너무 감사하다. 정말 우리 CTO 김태훈 박사님께서 원했던게 이런 것이었구나, 프로젝트를 시작하고 끝맺을 때 서로가 적이 아닌 팀으로서 남게 될 것이라는 그 말이 무슨 말씀인지 느끼게 되었다. 앞으로 기술적으로 더 노력하고 내 주변의 좋은 사람들을 위해서 더 노력하겠다.

 

 

 그리고 월요일에 가서... 오류도 좀 고치고... 개선해야겠다. (릴리즈는 시작일 뿐... 끝이 아닌 것 같다.)

 

그리고 나는 누군가를 편하게 해준다는게 좋은 것 같다. 앞으로 어느 회사를 가든 우리 회사 직원들을 생산성을 높여주든, 고객들로 하여금 불편함을 개선해주고 도와주는 일을 하고 싶다.