국방오픈소스 아카데미 링크
군대에서 알고리즘 공부를 하던 중 프로젝트를 하나쯤 해보면 좋겠다고 생각하던 와중 인스타그램에서 광고를 통해 '국방오픈소스아카데미(OSAM)' 을 접하게 되었다. 원래는 온라인 강의를 제공하는 페이지이지만 여기서 장병들을 대상으로 코딩테스트, 해커톤을 주최한다고 하여 바로 도전했다.

해커톤에 참가하기 위해서는 온라인 강의이수, 이론평가, 코딩테스트, 개발 계획서를 제출하여 우 수 온라인 교육생으로 선발되어야 참여가 가능했다. 여기서 코딩테스트는 25%정도가 평가에 들어갔는다. 이 코딩테스트는 별도의 대회로 진행되었는데 생각보다 난이도가 있었고, 약 4문항 중 비교적 간단한 난이도의 2문제만 점수를 어느정도 받아 288명 중 95등 정도의 성적 밖에 받지 못했다 ㅠ 그럼에도 다행히 200명을 선정하여 진행하는 해커톤이였기에 무사히 참여할 수 있었다...!
사전에 팀을 선정해 함께 신청하는 방법, 내가 새로운 팀을 만드는 방식과 다른 팀에 개인이 참가하는 방식이 있었다. 나는 부대 내에 함께 참여할 사람이 없기도 했고, 조금 비대면 협업을 제대로 체험해보고 싶어 다른 팀에 참가하여 프로젝트를 진행했다.
우리팀은 '군대군데'라는 이름의 외박,외출,휴가 장병을 위한 플레이스 추천 플랫폼을 만들자는 기획을 했고 웹, 앱 배포를 목표 삼았다. 프론트 1명, 나를 포함한 백 2명, 크롤러&앱 개발자 1명으로 총 4명이 팀이였다.
우리는 최종적으로 해당 기술들을 사용하게 되었다. 나를 포함한 팀원 구성원들이 대부분 처음 프로젝트를 진행해보는 것 이었고, 다양하거나 적절한 기술을 적용하는 것도 중요하지만 일단 결과물을 만들 수 있는 것을 목표로 선정했다.
개발과정은 꽤나 어려움이 많았다. 모두 군대에서 싸지방을 활용하여 굉장히 제한적인 환경에서 작업하였고, 함께 직접 대면하는건 물론 함께 연락 조차 쉽지 않았다. 때문에 계획이나 기획도 쉽지 않았고 이를 극복하기 위해 비슷한 역할을 하는 웹사이트를 함께 참고하기도 했다.(망고플레이트)
각 팀마다 OSAM에서는 관련 프로젝트 경력을 가지고 있는 멘토를 배정했는데, 이때 멘토님께 들어 처음으로 Github issue, project의 개념 에 대해 알게되었다. 이에 맞춰 우리는 사이트의 기능, 크롤러의 기능 등 기능단위로 issue를 등록하고 project로 각자 개발현황을 공유함으로서 실시간 채팅이 힘들더라도 어느정도 개발이 원활해졌다.
나는 백엔드 개발자로서 DB설계, api 설계, DRF을 활용한 기능구현, 크롤러와 DB 연결, 프로젝트 배포를 맡아 작업했다. 기술 스택으로는 swagger, DRF, SQLite, AWS를 이용했다. 모두 처음 사용해보는 기술들이라 공식 문서와 튜토리얼을 따라해보는 방식으로 공부, 구글링해가며 개발을 진행했다.

먼저 데이터베이스 설계에서는 DB ERD를 이용했는데 공유하거나 보여주기 쉽도록 ERDCloud 서비스를 이용했다. 백엔드 개발자끼리 DB구조를 시각적으로 파악할 수 있다는 점도 좋았지만, 설계를 할때 적절한 구조가 무엇일까 조금 더 생각하게 해주었다.
api명세서 작성에서는 swagger를 활용하였다. DRF과 연동하여 자동으로 명세서를 작성해주는 기능이 있어 시간을 많이 단축할 수 있었다.
기본적인 백엔드서버는 DjangoRestFramework(DRF)를 활용하였다. 알고리즘 공부에 주로 사용한 언어인 파이썬으로 작성되어 있어 익숙하기도 하고, 간단하게 서버를 구축할 수 있다고 하여 선택하였다. 제대로 서버를 만들어보는건 처음이라 배워야할 점들이 많았지만, 조금 건들여보았던 Flask나 Node.js에 비해 확실히 간단하게 되어있어 서버를 무사히 완성할 수 있었다.
DB는 SQLite를 적용하였는데, 일반적으로 다중이용자가 이용할 시에는 mySQL이 유리하다고 들어 적용하고 싶었다. 그러나 마감까지의 시간 부족으로 Django에서 기본적으로 설정하고 있는 SQLite를 DB로 작성하였다.
크롤러는 별도의 프로그램으로 작성하여 주기적으로 DB에 업데이트하는 방식으로 구현했다. 음식점이나 숙소 등을 데이터로 다루기에 업데이트 주기가 짧을 필요가 없었고 성능을 고려하여 이런 방식을 선택했다.
프로젝트 배포에는 AWS를 활용하였다. 잘 알려진 서비스이기도 하고 관리나 설정에 있어 지원해주는 기능이 많아 채택하였다.
처음 목표하였던 데모 웹 배포와 앱 제작을 무사히 마칠 수 있었다. 분명 안정성, 성능, 편의성에서 아직 부족한 부분이 많지만 나름 데모로서 만족스러운 결과물이였다.
해당 주소로 데모 페이지에 접속해볼 수 있다!
✨ 제공 서비스
프로젝트에서 새로운 개발자들과 함께 협업하여 기획, 개발, 배포까지 함께 해보았다. 개발과정에서는 새로운 기술이나 개념들을 비교, 활용해야 했고 백엔드 개발과정을 전체적으로 경험을 할 수 있었다. 때문에 넓은 지식을 파악하기에는 좋았지만, 리펙토링이나 코드리뷰, 검증이 기간상 어려웠고 코드의 완성도 또는 프로젝트의 완성도는 많이 떨어졌던 것 같다. 특히 배포는 완전히 처음 해보는 경험이었는데, 로컬 환경에서 잘 작동하던 서버도 배포환경에서는 다시 설정해줘야했다. 그 외에도 AWS, 라우터, DNS, https보안 등 클라이언트와 서버까지의 연결에 있어서도 배워보는 기회가 되었다.
협업에 대한 경험은 특히 의미있었다. 장병 특성상 소통이 제한적이여서 기획이나 계획을 정확하게 잡지 않은 상태에서 작업을 진행하였고, 처음엔 백엔드 개발자가 api를 설계해주면 이후 프론트 엔드가 api에 따라 디자인하는 방식이였다. 때문에 백엔드 개발자는 필요한 endpoint의 정보를 정확히 파악하기 힘들었고, 반드시 백엔드에서 개발이 마무리되어야 프론트가 작업을 할 수 있는 순차적인 방식으로 진행되었다. 이런 문제를 해결하고자, 기간 중반쯤부터는 api 설계, 명세서를 작성해 프론트와 백엔드가 병렬적으로 작업을 할 수 있었고 서로 굳이 많은 내용을 채팅하지 않아도 효율적으로 일처리가 가능했다. 계획이 협업에 있어 얼마나 중요한 과정인가를 직접적으로 느낄 수 있었다.
최종적으로는 팀원과의 소통, 구체적이고 명확한 설계&기획, 코드의 완성도(안정성&속도)이 3가지 부분이 가장 아쉬웠다. 다음 프로젝트를 진행할 때는 부족했던 부분들을 극복하여 조금 더 완성도 높은 결과물을 목표로 해보고 싶다.