Home Boostcamp AI Tech 최종 프로젝트 회고록 [Wrap-Up]
Post
Cancel

Boostcamp AI Tech 최종 프로젝트 회고록 [Wrap-Up]

최종 프로젝트 회고록

학습 목표 및 활동 내용

  • 개발 인프라 구축
    • 협업을 위한 공동 템플릿(개발 환경) 제작
    • Bash shell script 기반 개발 환경 구축
  • 모델 파이프라인 구축
    • Micro-Service 지향 Architecture 구성
    • 파이프라인을 직접 설계하고 구축
    • 기능 연계를 위한 코드 병합 주도
  • Product Serving
    • Frontend의 View 기능들을 비동기적으로 수행함으로써 시각화 효과 상승
    • 모델 추론 기능을 비동기적으로 수행함으로써 Inference 수행 시간 단축

구현

  • Infra
    • 제공하는 서버에서 Docker in docker 권한 부재로 인해 Anaconda 환경으로 개설
    • 처음 사용하는 사용자들도 최소한의 커맨드로 쉽게 환경을 구축하도록 유도
  • Frontend
    • Vue 웹 프레임워크로 작성하고자 하였으나, 팀원들의 코드 이해 및 협업을 위해 강의에서 배운 Streamlit을 활용
  • Backend
    • Python의 Fast API 라이브러리를 활용하여 통신
    • 실제로는 한 서버에서 돌아가지만, 여러 개의 Micro-service로 취급하여 통신에 집중
  • 데이터 관리
    • MongoDB의 데이터베이스에 기본 환경 변수를 저장하여 구축
    • 팀원들의 모델 개발 편의를 위해 파일 관리는 따로 구성하지 않고 서버 자체에 저장
  • 코드 병합
    • 팀원들에게 Gitflow 활용을 적극적으로 권유
    • 읽기 쉬운 코드 및 패키지 관리를 최우선으로 고려하여 가독성이 우수한 코드를 유도

한계점 및 아쉬운 점

  • Docker in docker
    • 모델의 파이프라인을 개략적으로 설계한 결과, 실질적으로 기능마다 요구하는 사양이 크게 차이가 나 Docker-Compose 환경을 고안
    • 제공하는 서버는 이미 Container 환경으로 Docker in docker에 대한 권한 부재
    • 피치 못해 Anaconda 환경으로 여러 개의 환경을 구상하여 같은 터미널 상에서 Background로 서버를 개설하도록 수정
  • Container 환경의 제약
    • Redis를 통해 데이터를 관리하고 Kafka, RabbitMQ를 통해 서비스 환경 변수 등 비동기 데이터를 공유하도록 설계 및 경험 유도
    • 해당 오픈소스를 설치하고 나면 재부팅이나 서비스 재시작을 유도하지만 Container 내부에서 reboot, systemctl 명령어에 대해 제한
    • 본 제약에 따라, MongoDB를 사용하여 서비스 시작 시 Backend에서 환경 변수 데이터를 넣고 다른 환경에서는 이를 호출하여 활용

회고

  • 설계와 협업을 잘 하자

코드를 병합할 때, 팀원들이 작성한 코드를 다시 함수화하여 Controller로 호출하도록 구조화하여야 했다. 하지만 명세가 구체적으로 설계되지 않아 팀원들이 작성한 코드를 일일이 이해하고, 재수정하는 작업을 거쳐야했다. 본인이 필요한 형태에 대한 명세를 구체적으로 제시하지 않아 일어난 일로 생각하여, 책임감에 밤새 코드를 수정하였고, 코드를 일관화 하였다. 이후, 팀원들이 ‘코드 수정은 이를 개발한 팀원과 같이 했으면 빠르게 할 수 있었을 것이다’라고 해 주었고, 이러한 말들에 책임감으로써 부담을 짊어지고 본 과정를 수행했다는 점에서 팀의 기능을 제대로 작동시키지 못한 것 같아 많이 반성하게 되었다.

  • Product serving 퀄리티

개발에 장벽이 너무 많다. 주어진 환경은 Container 환경이기 때문에 외부 오픈소스 활용 등 개발 환경에 큰 제약이 따랐다. 뿐만 아니라 AWS나 GCP와 같은 클라우드 서비스도 활용하고자 하였지만, Product serving의 전반적인 부분을 담당하다 보니 기존에 학습하지 않은 클라우드 서비스까지 적용하기엔 너무 큰 부담으로 느껴졌다. 또한, 환경마다 사양이 다른 서비스인 만큼 쿠버네티스도 적용하고 싶다는 생각이 들었다. 컴퓨터 공학을 재학하면서 많은 것을 경험해보았다고 생각했지만, 아직 부족했다는 것에 많은 회의감을 느꼈다. 추후 개선하게 된다면 위의 문제점들을 해결하여 더욱 완성도 높은 서비스를 제작하고자 한다.

  • 우수한 팀

언제나 웃음이 끊인 적이 없는 최고의 팀이다. 내가 지방에 살다보니 서울 오프라인 미팅 때 교통비를 거리낌없이 지원해주거나, 밤을 새거나 협업하는 데 함께 있어주거나 도와주는 등 항상 빚지기만 했던 것 같다. 마지막 프로젝트인게 많이 아쉬울 정도로 좋은 팀이었다. 다양한 인간관계에서 협업을 진행하면서 트러블이나 갈등이 있기 마련인데 이러한 점들을 진짜 갈등으로써 잘 풀어 나갔다. 막 임팩트 있는 팀은 아니었다고 생각했지만, 오프라인 미팅에서 운영진 님들과 적극적으로 소통하고, 멘토님과도 적극적으로 활동을 이어나가는 등 시간이 갈수록 우수한 팀으로 거듭하는 느낌이 들었다. 아직은 지방에 있어서 많이 아쉽지만, 꼭 많은 곳에서 함께 했으면 좋겠다.

This post is licensed under CC BY 4.0 by the author.