Skip to main content Link Search Menu Expand Document (external link) Copy Copied
CoinBank
모의 가상화폐 거래소
플랫폼
데스크탑 응용 프로그램
인원
2명
팀장
기간
6일
19.05.03. ~ 19.05.08.

시작하며

담당업무

  • 프로젝트 기획 및 업무 분배 80%
  • javax의 Swing을 이용한 화면 구성 100%
  • 전체 기능(로그인, 대시보드, 매도 및 매수, 내역, 마감) 구현 90%

기술스택

언어
  • Java
API, Library
  • javax
IDE
  • Eclipse

미리보기

2019-coinbank-thumb01.png 2019-coinbank-thumb02.png
2019-coinbank-thumb01.png 2019-coinbank-thumb02.png

어려움과 극복

협업의 고충

기획 회의가 수월하게 진행되었지만, 개발 과정에서의 협업은 의견이 잘 맞지 않아 많은 고충이 있었다. 팀원들과 개발 방향에 대해 지속적으로 소통하려고 노력했고 방향성을 잡아나갔다. 팀 내에서의 능력 편차를 보완하기 위해 자율적으로 기능을 선정하고, 다른 팀원이 이해할 수 있도록 코드에 대한 설명을 주석으로 상세하게 작성하는 방법을 도입했다. 그럼에도 불구하고 일부 팀원의 포기 선언과 이탈이 발생해 어려움을 겪었지만, 이번 프로젝트를 통해 왜 협업 능력이 강조되는지 깊이 이해하게 되었습니다.


예외 처리

지금 와서 생각해 보면 사전 조건이 충분하지 않은 상황이라면 진입 루트가 숨겨져 있거나 비활성화되어 있는 편이 낫다는 생각이 든다. 하지만 개발 과정에서는 미처 고려하지 못 했다. 일단 하나의 기능을 구현하고 이후 벌어지는 일에 대해 급하게 조취를 취하는 방식으로 진행되었기 때문이다. 대신 기획된 스토리 라인을 벗어나거나 프로그램을 다운시킬만한 에러가 발생할 수 있는 예외 상황을 예측하여 따로 처리해주었다.


시세 변동 시점

실시간으로 변동되는 코인의 시세를 원했지만, Thread에 대한 개념을 모를 때라서 우리가 할 수 있는 선에서 대체해야 했고, 결국 작동되는 지점을 직접 정해주기로 했다. 그나마 자연스러운 흐름이라고 판단해 매도, 매수 직후로 설정하기로 결정했다.


시세 변동 범위 알고리즘

각각의 코인마다 다른 변동 폭을 가지며 그 수치에 대한 부분을 쉽게 컨트롤할 수 있었으면 했다. 그래서 일단 코인 객체가 생성될 때 변동 폭을 파라미터로 전달하여 생성했다. 매수, 매도 시에 시세 변동이 이루어지는 구조상 저렴한 코인을 매수, 매도하면서, 시세 변동의 차익을 보는 편법을 막기 위해 개별적으로 시세 변동이 이루어질 수 있도록 객체의 메소드로 구성했다.

단순하게 랜덤으로 가격을 변동하기에는 항상 들쭉날쭉하게 가격 차이가 나는 문제가 발생했다. 극적인 차이가 종종 나오게 하기 위해 고민했다. 그 편차를 미세하게 조절하기 위해 최소, 최대 가격 폭을 한정했다. 최소 가격에 개발자가 지정한 수준의 변화가 이루어진 값을 구한 뒤 더함으로써 이에 대한 부분을 해결했다.


배운 점

클래스 구성

Java를 배우면서 가장 중요했던 것은 오브젝트이자 객체였다. 그런 객체를 구성하는 클래스 단위를 나누어 설계 하는것은 어려운 일이었다. 나름 MVC 모델에 대해 들은 적이 있어 역할에 따른 분리도 시도해보고 싶었다. 여러가지로 욕심도 많고 고민도 많았지만 너무 개념적인 구분에 초점을 둔 나머지 메시지 클래스라던가, 유틸리티 클래스같이 기능에 따른 분리를 하지 못한게 아쉽게 느껴진다.


자세하게 주석을 적는 것

팀원간의 소통과 전달이 미숙해 고충을 덜어주기 위해 디테일인 부분보다는 상징성에 가깝게 변수명을 지었다. 그러고 로직과 변수에 대한 주석을 철저하게 써놓았다. 제대로 된 명명법을 알지 못해서 프론트 언어에서 사용하는 _(언더바) 스타일을 사용한 것은 참 아쉽다. 프로젝트가 종료된 후 주렁주렁 주석이 많은 것보다 주석을 대체할정도로 직관적인 명명법으로 작성하는 것이 좋다는 피드백을 받았다.


성과 및 결과

프로그램 개발 경험

처음으로 직접 기획한 아이디어를 새롭게 배운 언어와 환경에서 제대로된 프로그램으로 구현해냈다. 기획, 설계, 구현, 통합, 테스트 과정을 거치며 기획을 분명하게 정의하는 것, 신중하게 분석해서 설계 하는 것이 생각보다 더 중요하다는 것을 알게되었다.


교육 내용 반영하기

19일간의 학습 내용을 실제 프로젝트에 최대한 많이 반영하려 노력했다. 가령, 다양한 문법을 적용해보기 위해 단순히 if문과 else-if문만을 사용하지 않고, 적합한 곳에 switch문을 대신 사용했다. 더 복잡한 로직을 작성하는 경험을 위해 시세 변동 메서드 같은 경우 각 코인마다 가지고 있는 변동폭을 기준으로 상한과 하한을 설정하고, 그 차이를 활용하여 시세 변동 알고리즘을 구성하여 예측가능성을 낮출 수 있었다. 그리고 모든 진행 과정은 Console이 아닌 Swing 라이브러리를 사용하여 GUI를 구현했다. 그 과정에서 화면 흐름에 따라 기능을 설계하는 것이 달라진 다는 것을 배울 수 있었다.


마치며

직접 코드를 처음부터 끝까지 작성해서 만들어 보는 첫 프로젝트이기 때문에 너무 설레었고 특별한 경험이었다. 그것도 Java라는 매력적인 언어로 로직과 연산도 함께했고, 프로그램 형태로 결과물이 나온 것도 신기했다. 팀장으로서는 팀원들에게 같은 비전을 공유하며 계속 도전하고 싶게끔 하고 싶은데 역량이 부족해 아쉬웠다.