클럽 랭킹 시스템 도입을 위한 데이터 기록 앱 개발기

Michael-Oh·2021년 8월 13일
0

데이터베이스

목록 보기
4/4

페더러 영상을 보며, 생각하다.

나는 페더러 선수를 좋아한다. 많은 사람들이 테니스 역사에서 최고의 선수라고 극찬한다. 그 이유는 바라보는 사람에 따라 다양할 것이다. 그 중 내 관점에서는 그가 가장 상황에 적확한 샷을 하기 때문에 좋아한다. 그는 자신의 샷을 선택할 때, 경기흐름과 상황을 파악하고, 상대방의 마음을 읽고, 그리고 자신이 가진 많은 샷과 패턴 중에서 공격포인트를 따기 좋은 것을 선택한다. 그 선택이 탁월하다. 그래서 상대선수로 예상하지 못하고, 해설자들도 감탄하는 샷을 날린다. 그의 경기를 볼 때면, 정말 상황에 적합한 샷을 구사한다는 생각이 든다. 어려운 샷이 아닌 어찌보면 쉽고 단순하지만 그 상황에서 득점포인트로 이어질 수 있는 최적의 샷을 계속하여 연구하고 만들어간다. 그것이 그의 테니스가 예술의 경지에 올랐다고 표현되는 이유일 것이다.
참조 영상 : https://www.youtube.com/watch?v=8LefyKfXUtg

"기술에 압도 당하기 보다 이 기술이 어떤 문제를 해결할 수 있을까?"

"데이터를 기술로 보지 말고, 문제해결의 수단으로 생각하라"라는 메세지는 굉장히 강렬했다. 배우기에 생소하고 어렵다고 느끼는 기술을 그 어려움에 압도당하지 않고, 어떤 문제를 해결할 수 있는 문제해결의 수단으로 어떻게 활용할 지 생각하며 대하려 노력했다. 그렇게 버티며 꾸준히 해 나가다 보니, 기능 하나 하나 구현하며 재미를 느꼈고, 에러 메세지를 만났을 때 일종의 선물 보따리를 하나씩 꺼내서 받는 느낌으로 변해 갔다. 그렇게 문제를 해결하기 위해 기술을 어떻게 사용할 지 고민해 나갔다.
참조영상 : https://www.youtube.com/watch?v=4BhmpyDK5j8

"테니스 실력을 객관적으로 나타내기 위해 지금 무엇부터 해야할까?"

앞의 2개의 블로그 글에서 언급한 것처럼 테니스의 실력을 '감'의 영역에서 '데이터' 영역으로 바꾸기 위해 고민했고 여러가지를 참조하였다. 그 과정에서 가장 중요한 것은 실력의 판단기준이 될 수 있는 데이터를 먼저 쌓는 것이었다. 실력을 가늠할 수 있는 데이터를 선택하고 그 데이터를 지속적으로 쌓아나가는 것이 먼저 필요했다. 매달 열리는 월례회 데이터를 쌓고, 그 데이터를 등록하고, 조회하고, 그 데이터에 일정 포인트를 도입해서 랭킹 포인트를 부여하는 방식으로 생각해 나갔다. 즉, 실력을 입증할 수 있는 데이터를 꾸준히 쌓고, 그 데이터를 조회할 수 있고, 그 데이터에 일정한 랭킹을 부여하기 위해서 랭킹 포인트를 부여하는 방식을 채택해 보았다.

플라스크를 활용하여 간단한 웹앱을 만들기


참조 : https://flask.palletsprojects.com/en/1.1.x/

플라스크(flask)는 무엇인가?

플라스크는 마이크로 웹 프레임워크이다. 웹 프레임워크는 웹 앱을 개발하는데, 필요한 작업들을 세부적인 작업들을 처리해줘서 웹을 개발하는데, 수월하게 도와준다. 플라스크는 파이썬의 다른 웹 프레임워크인 장고에 비해 패키지가 가볍고, 설정해야하는 것들이 상대적으로 적어서 빠르고 가볍게 웹을 만들 수 있는 장점이 있다. 파이썬의 또 다른 프레임 워크인장고와 비슷한 루비 온 레일즈 프레임워크와 써 봤을 때, MVC 패턴으로 DB, Controller, View파일을 관리하고, 그 구조로 이해해서 개발하는 것이 익숙했던 나에게는 flask가 처음에는 좀 생소하게 다가왔다. 그래서 그 구조를 이해하는데 좀 시간이 걸렸던 것 같다. 하지만, 직접 써봤을 때 미리 사전에 많은 컨벤션(convention)을 알고, 내부적으로 작동하는 원리를 이해하기 전까지 구조를 파악하기 어려운 장고와 같은 프레임워크에 비해, 플라스크가 짧은 시간 안에 이해하고, 개발하기에 용이했다.
플라스크 SQL알카미(Flask-SQLAlchemy)를 활용하다
웹 앱을 개발할 때, 플라스크 SQL알카미 활용하였다. 웹앱을 개발할 때 데이터 베이스(DB)와 상호작용하기 위해서는 SQL쿼리문을 활용해야 한다(SQL 데이터 베이스일 경우). 이 쿼리문으로 데이터베이스에 저장된 데이터를 조회하고, 저장하고, 삭제하고, 업데이트 등 다양한 것들을 실행시킨다. 그런데 파이썬 언어를 활용하여 개발을 진행하다가 SQL쿼리문을 써야하는 불편함을 겪에 된다. 이 때 파이썬 언어로 SQL쿼리문을 실행할 수 있는 SQL알카미를 활용할 수 있다.
Flask-SQLAlchemy는 ORM(Object Relational Mapper) 중 하나이다. ORM은 데이터베이스와 상호작용할 때, 파이썬과 같은 언어로 개발할 때 친숙한 클래스와 메소드 등을 활용하여 데이터베이스를 제어할 수 있게 해주는 것이다. 즉, 자신이 개발하고 있는 언어를 활용하여 따로 SQL쿼리문을 활용하지 않고, 개발언어 자체로 데이터베이스를 제어할 수 있도록 도와주는 것이다. 이렇게 하면 개발과정이 조금 더 수월해진다. 그리고 클래스와 메소드를 이용하여 코드를 관리하기도 편리해지는 장점이 있다.

플라스크 SQL알카미(Flask-SQLAlchemy)를 활용하다

웹 앱을 개발할 때, 플라스크 SQL알카미 활용하였다. 웹앱을 개발할 때 데이터 베이스(DB)와 상호작용하기 위해서는 SQL쿼리문을 활용해야 한다(SQL 데이터 베이스일 경우). 이 쿼리문으로 데이터베이스에 저장된 데이터를 조회하고, 저장하고, 삭제하고, 업데이트 등 다양한 것들을 실행시킨다. 그런데 파이썬 언어를 활용하여 개발을 진행하다가 SQL쿼리문을 써야하는 불편함을 겪에 된다. 이 때 파이썬 언어로 SQL쿼리문을 실행할 수 있는 SQL알카미를 활용할 수 있다.

Flask-SQLAlchemy는 ORM(Object Relational Mapper) 중 하나이다. ORM은 데이터베이스와 상호작용할 때, 파이썬과 같은 언어로 개발할 때 친숙한 클래스와 메소드 등을 활용하여 데이터베이스를 제어할 수 있게 해주는 것이다. 즉, 자신이 개발하고 있는 언어를 활용하여 따로 SQL쿼리문을 활용하지 않고, 개발언어 자체로 데이터베이스를 제어할 수 있도록 도와주는 것이다. 이렇게 하면 개발과정이 조금 더 수월해진다. 그리고 클래스와 메소드를 이용하여 코드를 관리하기도 편리해지는 장점이 있다.

데이터를 저장, 조회, 삭제, 수정, 랭킹포인트를 부여할 수 있는 웹앱

위의 그림과 같이 routes폴더와 templates 폴더를 만들어서 관리한다.
routes폴더는 실제 사용자가 입력하는 URL주소와 model파일, view 파일간의 상호작용할 수 있도록 일종의 가이드 역할을 해준다. 아래의 그림과 같이, 각 URL 주소에 따라 서로 다른 페이지를 보여준다. 그리고 그 페이지에서 입력되거나 처리된 파일들을 DB와 상호작용하여 저장하고, 삭제하고, 조회하도록 컨트롤 한다. 그 일련의 과정을 어떻게 해야할 지 이 폴더의 파일들을 관리한다.
templates 폴더에서는 각각의 웹 페이지에서 사용자에게 보여줄 화면을 어떻게 구성할지 코드로 구현해 놓은 파일들을 모아 둔다. 사용자가 URL주소를 입력하면, 그에 해당하는 view파일을 불러와서, 사용자에게 그 화면을 보여준다. 즉routes의 파일들과 URL를 통해 상호작용할 때 사용자에게 보여줄 view파일을 관리한다.

화면구성

실제 웹앱의 기능

우선 메인 페이지에는 실제 경기한 기록들이 나타난다. 대회 종류, 월례회 일정, 이긴 선수들, 진 선수들, 획득한 게임수 등을 나타내준다.

다음으로 이런 월례회 결과를 입력할 수 있는 페이지가 있다. 대회 종류, 월례회 일정, 이긴 선수들, 진 선수들, 획득한 게임수를 입력하여 저장할 수 있다.

그리고 이렇게 입력한 정보들 중 자신의 결과를 알아보고 싶으면 조회할 수 있다. 아래와 같이 자신의 이름을 입력한 후 GET 버튼을 누르면, 자신의 경기 결과만 조회해볼 수 있다.

그런데 만약 입력한 결과 값이 실수로 인해 다르게 입력되었을 경우, 수정할 수 있다. 예를 들어 위에 3번째 경기의 winner2의 이름과 loser1의 이름 그리고 Num of loser game이 수정해야할 경우 아래와 같이 수정할 수 있다.

그리고 각 경기에 대한 결과를 바탕으로 랭킹 포인트를 부여하여, 자신의 이름을 입력하면 랭킹 포인트를 확인할 수 있다.

에러의 대한 두려움이 많이 사라지다

참조영상 : https://www.youtube.com/watch?v=xBG4xGX6D_Q

이번 프로젝트를 통해서 가장 크게 느낀 것은 에러에 대한 두려움이 많이 사라졌다는 것이다. 새로운 기능을 추가할 때 만나는 에러를 조금 더 담담하게, 그리고 일종의 선물을 받는 것처럼 느끼려고 노력했던 시간이었다. 그리고 작은 기능하나가 구현되었을 때 느끼는 희열감도 느낄 수 있었다. 에러가 발생하는 것이 문제가 아니라 그 에러를 두려워하는 나의 마음의 문제임을 느꼈던 시간이었다. 매 공마다 최선을 다하는 흙신 라파엘 나달의 말처럼, 에러에 두려워하는 나의 마음을 다 잡을 수 있었던 시간이었다.

profile
초보 개발자의 테니스 과학적 분석 Dev-Log

1개의 댓글

comment-user-thumbnail
2021년 9월 12일

안녕하세요.

테니스 관련 어플 개발을 준비중인데 개발자 님과 소통 해볼 수 있을까요?

Kwk2020@gmail.com 연락 부탁드립니다

답글 달기