lichess 분석 기능 따라잡기 이전에 포스팅했던 새로운 방식으로 코드를 변경했다. orm이 기존에비해 많이 길어지긴 했지만, 속도측면이나 데이터베이스 용량측면에서 보다 나아졌다고 확신한다. 다중 annotate 조건 django annotate를 사용할때 조건을 적용할 수 있다.
나만의 체스 분석, 연습 프로젝트 프로젝트를 진행하면서 생각나는대로 즉흥적으로 api설계를 하고 모델들을 정의하다보니 전반적으로 진행이 매끄럽지 않은듯한 느낌이 들었다. 이미 진행했던 프로젝트를 리팩토링 하는 겸 요구사항을 명확하게 정의하여 보다 깔끔한 코드를 작성하기 위해 요구사항을 정리해보려한다. 요구사항 [ ] lichess database에서 제공하는 pgn파일을 처리할 수 있는 데이터 파이프라인 구축 [x] 체스 분석 기능 체스 시작 포지션 부터 실제 게임에서 나온 수들을 카운트해서 보여줄 수 있어야함. stockfish를 활용하여 특정 포지션에서의 최선의 수를 찾는다. stockfish를 활용하여 현재 포지션의 유불리를 판단. 레이팅에 따른 다른 수들을 보여줘야함. (1800~2000 의 수들만 보여준다든가) [ ] 체스 퍼즐 체
lichess database에서 추출한 74만개의 체스 기보 데이터를 가지고 lichess나 chess.com에서 제공하는 analze기능을 따라잡아보자 체스는 전략과 계획이 필요한 대표적인 보드 게임. 체스에서 성공하기 위해서는 다양한 기술과 전략을 학습하고 연습해야 한다. 실력을 향상시키기 위해서는 자신의 게임을 분석하고, 상대방의 전략을 이해하는 것이 매우 중요하다. lichess나 chess.com과 같은 사이트들에서 여러가지 퍼즐이나 여러가지 상황에 따른 다음 수들을 실제 행해졌던 게임들에서 수집하여 보여주는 기능들이 있고, 여러가지 체스 오프닝들이나, 전략을 공부할 수 있는 퍼즐과 같은 기능들을 제공한다. 평소 체스에 관심이 많았던 사람으로써, 개인 프로젝트로 lichess나 chess.com사이트의 기능들을 클론하고, 내가 학습하기 용이한 기능들을 추가하여, 개인적인 체스 분석, 연습 사이트를 만드는 프로젝트를 진행하고 있다. [나만의 체스 분석 프로그램을
lichess database를 활용해서 각 레이팅별 가장 높은 승률의 오프닝, 가장 승률이 낮은 오프닝을 알아보자. lichess database 기준 대략 74만개의 게임을 분석. > 하위 레이팅 1200 ~ 1800, 중위 레이팅 1900 ~ 2400, 상위 레이팅 2500~ 로 설정하고 각 레이팅 별로 어떤 오프닝이 가장 인기있는지 알아보자. 하위 레이팅 most_count | | white | draw | black | count | |:----------------------------------------------|--------:|-------:|--------:|------
이전 포스팅에서는 lichess에서 제공한 체스 오프닝 데이터를 간단하게 전처리 했다. 이번엔 본격적으로 우리가 데이터베이스에 저장할 포맷으로 전처리를 진행한다. 데이터 구조 데이터를 전처리하기전에 어떤식으로 구조를 짜야 쿼리를 쉽고 빠르게 할 수 있을지에 대해서 고민을 해보다 2가지 선택지를 생각했다. double linked list hash table 결론부터 말하자면 hash table (dict)의 구조를 채용하여 전처리 하기로 하였다. double linked list의 구조도 역시 활용할만 하였으나 여러 예외처리들과 오프닝 데이터를 쿼리를 할 때 특정 오프닝의 이름을 알기 위해서 끝까지 탐색해야 한다는 점이 비효율적이라고 생각했다. 체스 기보를 나타내는 방식엔 pgn방식과 uci방식이 있는데 후에 stockfish를 활용하기 위하여 stockfish와 호환이 잘되는 uci방식으로 데이터를 저장한다. > 스톡피시는 꽤 오랜 기간동안 사용된 대중
이번 프로젝트의 구성은 Stockfish를 활용하여 Chess engine과의 대결을 할 수 있는 사이트와, chess 기보를 읽어들이는 data pipeline, 그 데이터를 저장하는 data warehouse를 구성하는 것이 목표. Why Chess? 평소 체스와 바둑 장기 등 여러 보드게임을 즐겨하는 중에 체스에 대한 매력을 느껴 여러 사이트를 전전하던 중 사람들과 대결한 기보를 체스 엔진에다가 분석을 맡기는 기능을 유료로 서비스하는 사이트들이 많았다. 물론 lichess같이 무료로 모든 것을 제공하는 사이트도 있지만, datapipeline을 구축해보고 엄청난 data(약 1.2TB)를 다뤄볼 수 있다는게 엄청난 매력 아닌가. 이번 프로젝트를 통해 대용량 데이터를 관계형 데이터베이스(MYSQL, POSTGRESSQL)과 NoSQL(MongoDB, HBASE)를 활용해서 대용량 데이터베이스에서 빠른 쿼리 응답을 수행할 수 있도록 하는 것으로 목표를 잡았다. (이