글쓰는 개발자/회고

[2023년 1월 회고] 1년 7개월, AI 계약 관리 시스템 완성

뒷골목프로그래머 2023. 2. 13. 19:16
반응형

 안녕하세요, 글쓰는 개발자 입니다.

 올해 목표 중 하나로 '매주 회고를 작성하는 것'과 과감히 타협하고 '매월 회고를 작성하는 것' 으로 방향을 틀었으나, 벌써 2월 중순이 되어서야 1월 회고를 쓰게 되었습니다. 이번 달 회고는 늦지 않도록 노력해야 할 것 같습니다.

 

 올 1월 회고는 저에게 특별한 의미를 가집니다. 사실상 지난 1년 7개월의 회고라고 봐도 무방합니다. 제가 1년 7개월 동안 개발한 'AI 계약관리 시스템' 이 그랜드 오픈 하였고 오늘 이 시점으로 1개월 동안 사용자들이 잘 쓰고 있는 모습을 보니 감개무량 합니다. 그래서 1월 회고만 예외로 'AI 계약관리 시스템' 프로젝트 회고를 겸하려 합니다.

 

'내가 하는 게 맞나?'

 일을 미루거나 하기 싫다는 의미가 아닙니다. 이 프로젝트를 시작했을 때 만 1년의 경력을 채우지 않은 상태 였는데 혼자서 Backend 개발을 해야했고 Backend Architecture 설계, DB 설계, API 도출/설계, Project Structure 등 '내가 해보지 않은 것'을 '직접' 해내야 했고 대기업의 전 직원이 사용하게 될 것이라는 부담감이 뒤따랐습니다.

 

'어차피 내가 해야 할 일이다.'

 이 프로젝트에 투입되기 직전, 전자 현미경 분석 결과를 보여주는 S/W Backend 개발을 혼자 진행한 경험이 있었습니다. 그 프로젝트는 원래 5년차 개발자 한 분과 신입인 제가 함께 하기로 했었는데 프로젝트 착수 시점에 그 분이 퇴사하여 혼자 하게 되었습니다. 그 프로젝트와 이번 프로젝트의 규모는 확실히 다르지만 '성공 경험이 있으니 할 수 있을 것이다.' 라고 애써 긍정적으로 생각했습니다. 그리고 회사에 저 말고 투입 될 개발자도 없었습니다.

 차근차근 기획서를 분석하고 요구사항으로부터 '프로그램 기능 목록 도출', 'DB 설계' 순서로 작업을 진행했습니다. 그리고 제가 입사 후 처음 진행했던 프로젝트에서 가장 아쉬웠던 부분이 Web Backend와 ML(AI) 관련 코드의 강한 결합으로 유지보수와 기능 확장에 어려움이 있는 것이었기에 이번에는 Frontend, Backend, AI 로 분리하여 개발하기로 했습니다.

 

'동료와 함께하다.'

 정식 착수 전 Demo 개발과 고객 시연을 성공적으로 끝내고 실 개발에 들어갈 때 즈음 저와 함께 국비학원을 다녔던 형을 회사에 소개했고 이 프로젝트의 Backend 개발자로 합류하게 되었습니다. 이전에 SM 회사에서 유지보수 하면서 봤던 경험을 살려, 빈약했던 Log 관리 부분을 강화했고 인증/인가 부분도 동료가 작업하였습니다. 그리고 저 또한 원활한 협업을 위해 개발 Flow를 확립하고 서로 코드리뷰를 반드시 하기로 했으며, 프로젝트가 마무리되는 시점까지 잘 지켜졌습니다. 의견이 맞지 않는 순간도 많았지만 결국은 잘 만들기 위한 것이라는 걸 서로가 알기에 프로젝트를 성공적으로 마무리 할 수 있었습니다.

 

'나는 무엇을 얻었는가?'

 설계부터 운영까지 개발 전 과정에 참여하고 직접 해보았다는 것이 성공 경험은 저에게 큰 자산이 되었습니다. 처음에는 '내가 하는 게 맞나? 해도되나? 내가 해서 잘못되고 서버가 죽으면 어떻게 하지?' 라는 두려움 덕분에 열심히 공부하고 꼼꼼하게 개발했습니다. 그리고 아래 경험을 얻었습니다.

 

  1. 실무에서 직접 docker-compose 를 사용하여 Infra를 구성했습니다.(고객사에서 원하지 않아 운영 환경에서는 host에 바로 배포했습니다.)
  2. 개발 중 Table을 지우는 과정에서 cascade 때문에 data가 날아간 경험 덕분에 Cronjob을 활용해 일 단위 DB 백업을 진행했습니다. 
  3. 유지 보수 가능하고 확장성 있는 코드 개발을 통해 실제 프로젝트 막바지에 발생한 고객의 신규 기능 개발에 대응 할 수 있었습니다.
    1. 최초 개발 시점에 기능 추가가 예상되는 경우 Factory Pattern 을 활용해 추상 클래스를 상속받는 형태로 확장 가능케 개발
  4. 기술 스택을 직접 고민하여 결정했습니다. email 발송 기능을 위해 celery를 선택했고 적합한 message broker 를 redis로 선택했습니다.
  5. 테스트 코드를 작성했습니다. 사내 개발자 중 테스트 코드를 작성하는 분이 없어서 '쿠*'에 재직 중인 친구에게 도움을 요청해 Unit Test 수행 관련 자문을 구하고 프로젝트 말미에 이것을 적용했습니다.

 

'그렇다면 앞으로 무엇을 해야할까?'

 현재 저는 MLOps Platform 개발에 참여했습니다. ML Backend 개발을 맡았고 전체 Architecture를 잡았습니다. MSA 로 개발될 예정이며, ML Backend 는 ML Engine과 Data Server 로 구성될 것이며, 이 모든 환경은 K8S 위에서 구축되며, 저를 포함해 4명의 개발자가 함께합니다.

 'AI 계약 관리 시스템' 개발 과정에서 아쉬웠던 부분을 해결하고 적용하고 싶었던 것을 적용하고자 합니다.

  1. 개발 과정을 체계화 하자.
    1. 일감 Ticket을 발생하고 Ticket 번호를 Prefix로 Git Branch를 생성
    2. commit 시에는 commit convention을 따르도록 함
    3. 이를 위해 사내 개발 Convention 문서를 작성하고 개발자들 에게 공유
    4. 코드 리뷰를 반드시 진행하며, Merge Request 시 자동으로 MS Teams에 알림이 뜨도록 webhook 설정
  2. TDD 까지는 아니더라도 Unit Test를 반드시 작성 하자.
  3. 배포 자동화 환경을 구축하자.

이 중에서 1번 '개발 과정을 체계화 하자.'는 완료한 상태 입니다. 하나씩 차근차근 적용 시켜서 2월 회고에는 배포 자동화 환경 구축 까지 완료하고 싶습니다.

 

 처음에는 부담되고 두려운 존재로만 느껴졌던 'AI 계약 관리 시스템' 프로젝트가 1년 7개월 뒤에는 성공 경험으로 돌아와 프로젝트를 리딩 할 수 있다는 자신감이 생겼습니다. 또한, '내 부족한 점을 메워주는 훌륭한 동료가 없었다면 정말 힘든 프로젝트였겠구나...' 라는 생각도 동시에 들고 동료에게 고마운 마음이 듭니다. 앞으로 진행할 프로젝트는 제가 맡은 파트만 4명이 투입되고 프로젝트 전체로 보면 최소 7명이 투입됩니다. 더욱 더 활발하게 코드 리뷰를 진행하고 이 절차를 내재화 해서 개발 process 확립에 도움이 되었으면 좋겠습니다.

 

- 끝 -

 

 

반응형