본문 바로가기

회고록

가상화폐 자동거래 프로젝트 회고

2021년 7월 22일부터 10월 3일까지 프론트엔드 개발자로 참여한 프로젝트의 회고를 적어본다.

프로젝트 저장소 보러가기

 

GitHub - 201411108/Coin_Auto_Trading: PybithumbAPI를 이용한 코인 자동매매 웹사이트

PybithumbAPI를 이용한 코인 자동매매 웹사이트. Contribute to 201411108/Coin_Auto_Trading development by creating an account on GitHub.

github.com

시작 계기

한창 더운 여름의 어느 날. 같이 취업 준비를 위한 코딩 테스트를 공부하던 동기 형으로부터 쟝고(Django)를 사용한 백엔드 프로젝트를 하려고 한다는 얘기를 들었다. 당시 나는 프론트엔드 직무를 위주로 여러 기업들에 지원서를 넣었고, 기술 과제들을 풀며 자신감과 도전 정신이 넘쳐있었다.(과제들을 모두 불합격했다.) 프론트엔드는 어떻게 구성할 것이냐고 물어봤고, QT를 사용해서 데스크탑 앱 형태로 백엔드의 기능을 단순 보여주는 용도로 진행할 것이라는 얘기도 들었다.

 

프론트엔드 개발자가 있다면 백엔드 하는 팀원들은 프론트와 연동할 수 있는 기회를 얻을 수 있어서 좋고,
나는 내가 백엔드에 신경을 쓰지 않아도 되고, 백엔드와 통신을 좀 더 연습해볼 수 있는 기회라서 좋을 것 같잖아?

 

이런 생각으로 프론트엔드 개발자로 같이 하고 싶다는 의사를 전달했고, 프로젝트에 참여하게 되었다.

팀은 4명의 백엔드 개발자와 1명의 프론트엔드 개발자(본인)으로 총 5명으로 이루어졌다.

 

로그인 화면

 

어떤 프로젝트인가?

프로젝트는 가상화폐 거래소 중 하나인 빗썸에서 제공하는 api를 활용한 가상화폐 자동거래 서비스이다.

백엔드는 파이썬 웹 프레임워크 중 하나인 플라스크(Flask)를 사용하여 작성되었다. 빗썸 api에서 필요한 정보를 받아 자동거래 서비스를 구현하고 프론트엔드에 표시하기 위한 정보를 RestAPI로 작성하였다.

프론트는 타입 스크립트(Typescript)를 사용한 리액트(React)로 작성되었다. 사용자가 서비스를 사용할 수 있도록 UI를 작성하였고, 백엔드에서 제공하는 RestAPI를 활용하여 사용자에게 필요한 정보를 제공하고 사용자의 응답을 백엔드에 전달하는 기능을 구현하였다.

 

프로젝트 시연 영상 보기

 

서비스를 사용하는 사람은 빗썸 api에서 제공하는 키값을 통해 먼저 로그인을 진행한다. 로그인을 진행하면 내가 보유하고 있는 가상화폐 현황과 빗썸에서 가장 인기 있는 상위 20개의 가상화폐 거래 현황을 확인할 수 있다.

보유하고 있는 가상화폐와 상위 20개 가상화폐의 일부 정보는 24시간을 기준으로 업데이트되며, 일부 정보는 실시간으로 업데이트된다.

로그인을 한 이후 우측 상단의 거래 시작 버튼을 누르면 서버에서 자동거래를 진행한다. 거래 시작 버튼은 거래 종료 버튼으로 변하게 되고 거래 종료 버튼을 누르면 서버에서 자동 거래를 종료하고 진행된 거래 내역을 사용자에게 표시한다.

좋았던 점

  • 백엔드 개발자와 소통의 중요성을 몸소 느낄 수 있었다.

프로젝트를 진행하며 가장 좋았던 점을 뽑자면 소통의 중요성을 직접 느낀 것이다.

주변 지인들로부터 실제 현업에서 프론트엔드 개발자와 백엔드 개발자 간 소통이 많아야 프로젝트가 잘 될 수 있다라는 말을 들은 적이 있다.말로만 들었을 때 잘 와닿지 않았는데 이번 프로젝트를 진행하며 왜 두 파트 사이의 소통이 중요한지 작은 부분이라고 깨달음을 얻을 수 있었다.

프로젝트 초반에는 서로 협업을 하지 않고 서로 맡은 파트들만 각자 진행하는 방식으로 진행하였다. 이렇게 하니 프론트엔드에서는 화면을 모두 구성하였지만 막상 백엔드에서는 다른 작업을 하고 있어 필요한 정보를 보내주는 api가 작성이 되있지 않기도 했고, 백엔드에서 api를 작성했지만 프론트엔드에서 다른 기능을 구현하고 있어 해당 api가 잘 동작하는지 확인하지 못하는 등등 여러 문제들을 마주하게 되었다. 프로젝트 중반이 넘어가고 나서야 서로 내용을 공유하며 필요한 부분에 집중할 수 있게 되었다.

 

헷갈리는 의견을 바로 공유해서 해결할 수 있었다.

 

특히 api를 작성하는 부분에서 보내주는 데이터나 형태 등을 바로바로 논의할 수 있는 환경을 조성하고 나서는 작업에 소모되는 시간을 크게 줄일 수 있었다. 오히려 소통이 너무 과하면 서로 의견 충돌이 있지 않을까 다소 걱정했지만 오히려 빠르게 소통해서 발생한 혹은 발생할 문제를 해결하는 것이 훨씬 더 좋다는 것을 느낄 수 있었다.

 

  • 깃 머지 시 충돌 등 팀 프로젝트에서 겪을 수 있는 문제들을 경험하고 해결해 볼 수 있었다.

프로젝트에서는 버전 관리 도구로 깃허브(Github)를 사용하였다. 개발하는 기능에 따라 여러 브렌치로 나누고 기능 구현이 끝나고 나면 main 브렌치로 머지하는 방식으로 개발을 이어나갔다. 다들 여러 사람과 하나의 깃 레포지토리에서 브렌치를 나누어 작업하는 것이 익숙하지 않다 보니 많은 문제 상황들을 겪게 되었다. 특히, 첫 번째 머지를 할 때는 수많은 컨플릭트(conflict)들을 마주하게 되었고, 이를 해결하기 위해 사회적 거리두기 시간제한이 있는 18시가 거의 다 되어서야 머지를 완료할 수 있는 경험을 겪게 되었다.

컨플릭트를 처음 맞이하게 되면 일단 한숨부터 나온다. 어디서부터 손을 봐야 할지, 누가 작성한 코드로 해야 하는지, 어떻게 수정해야 구현된 기능들이 손상 없이 합칠 수 있는지 등등등 컨플릭트를 해결하고 머지를 하기 위해서는 많은 과정들을 필요로 한다. 솔직히 혼자 프론트엔드 개발자였기 때문에 이 컨플릭트 문제에서는 다소 자유로울 수 있지만 다른 팀원들이 이 문제를 겪고 해결해나가는 과정을 함께하면서 앞으로 어떤 프로젝트를 진행하던 컨플릭트 문제에서 당황하지 않고 조금 더 빨리 해결할 수 있는 능력을 쌓을 수 있었다.

 

프론트엔드 개발을 함께하는 팀원이 있었다면 다른 좋은 점들을 느꼈을 수 있을 것이라고 생각하는데 일단 회고록을 작성하는 지금 현재 느낀 좋았던 점은 이 2가지를 뽑을 수 있을 것 같다.

아쉬웠던 점

그렇다고 마냥 좋은 점만 있는 것은 아니다. 아쉬운 점도 있다. 아쉬운 점도 좋았던 점과 마찬가지로 2가지를 뽑아보겠다.

  • 일정에 쫓겨 기술 부채(technical debt)를 많이 남기게 되었다.

프로젝트를 진행하다보면 가장 흔하게 경험하는 문제가 바로 기한에서 오는 압박감으로 인한 문제라고 생각한다. 이번 프로젝트도 이를 피하지 못하였다. 원래는 팀원들 중 몇 명이 아직 학생이기 때문에 개강 전인 9월 전에 마무리를 하려고 했으나, 작업을 하다보니 생각보다 해야할 작업이 많아서 좀 더 연장되게 되었다. 그렇게 프로젝트를 진행하던 중 KBSC 공모전을 알게 되었고 이를 지원하게 되며 또 기한의 압박에 시달리게 되었다.

이 기한의 압박으로 인해 구현한 서비스에는 많은 기술 부채가 존재한다. 몇몇을 소개하면 다음과 같다.

  • 로그인 기능 시 jwt 등의 방법을 사용하지 않고 세션 스토리지(session storage)를 사용하였다. 이는 보안 문제 등으로 이어질 수 있어서 제대로 구현된 로그인 기능이라고 말하기 어렵다.
  • 실시간 통신 방법이라고 말했지만 실제로는 실시간 통신이 아니다. 실시간 통신이 이어지는 부분은 빗썸 서버와 백엔드에 구현되어 있고 백엔드와 프론트가 통신하는 방법은 RestAPI를 지속적으로 호출하는 방법을 사용하여 구현되어 있다. 원래 기획한 대로면 웹소켓(Websocket)을 사용해서 구현되어야 하는 부분이지만 기한으로 인해 제대로 구현하지 못하고 넘기게 되었다.
  • 사용자 UX적인 측면이 고려되지 않았다. 로그인 시 백엔드에서 DB로부터 정보를 받아오기 때문에 일정 시간이 소모된다. 이 때, 화면에 어떠한 표시도 되지 않아 사용자 UX가 좋다고 말할 수 없다.

우선 동작하는 코드를 만들어야 했기 때문에 많은 기술 부채를 남기게 되었다. 이는 차차 리팩토링과 함께 진행할 예정이고, 리팩토링과 기술 부채를 해결해나가는 과정은 블로그 포스팅으로 다루려고 생각하고 있다.

 

  • KBSC의 주제를 잘못 알고 참여 신청을 하였다.

이 아쉬운 점은 프로젝트의 아쉬움이라기 보다는 개인적인 아쉬움이다. 이번 KBSC의 주제는 "환경을 바꾸는 소프트웨어"였다. 공고를 보고 든 생각은 '아, 환경을 바꾸는 소프트웨어라면 우리가 진행하고 있는 프로젝트도 가상 화폐가 도입되는 경제 환경을 바꾸는 소프트웨어라고 말할 수 있겠구나.'라는 생각이었다. 지금 생각해보면 참 얇게도 생각했다. 이런 짧은 생각으로 팀원들에게 참여해보자고 권했고, 신청서를 제출하기 전 날에서야 이 환경이 자연 환경을 말하는 것을 알게 되었다. 굉장히 부끄러웠다. 당연히 주제를 맞지 않는 프로젝트를 제출했기 때문에 본선에 진출하지 못했다. 팀 프로젝트이기 때문에 의견을 낼 때는 한 번 더 생각하고 의견을 제시해야겠다는 다짐을 하게 되었다. 한 편으로는 같이 확인해주지 않은 팀원들에 대한 원망을 0.5 티 스푼만큼 했다.

결론

회고를 해보니 생각보다 많은 일들이 있었구나를 알게 되고 앞으로 개선해나가야 할 점도 알 수 있어서 좋은 것 같다. 앞으로 어떤 프로젝트를 하게 될 지 모르겠지만 이번 프로젝트의 경험을 비료삼아 더 나은 결과물을 완성해야겠다는 다짐을 하게 된다. 재밌게 진행한 프로젝트이고 비록 많은 부채와 함께하지만 공모전에 제출할 수 있었던 프로젝트라 기억에 남을 것 같다.

이상으로 인생 첫 개발 회고록을 마치도록 하겠다.

반응형