쿼리문법과 orm 라이브러리로 해당 문법을 구현하는 방법 공부하자..!!
현재 골프 선수, 일정, 결과 데이터를 보관하고, 데이터 리스트를 커스터마이징하여 반환해주는 서버를 개발하고있다. (사내 NFT 프로젝트의 일환으로)
경기 결과, 선수의 랭킹 리스트등을 반환해 줄 때 데이터들의 정렬 기준이 있는데, (크게 랭킹 리스트 정렬 기준, 경기 결과 리스트의 정렬 기준) 데이터를 저장할 때는 정렬을 하고 저장하지 않으며 단 정렬값으로 사용될 데이터들을 보관한다. 그리고 조회할 때 order by, where, join을 적절히 활용하여 정렬된 기준으로 리스트를 조회해하는 식으로 구현하였다.
우선 쿼리문으로 작성을 하였는데, oder by의 정렬값으로 사용할 값들이 매핑된 다른 테이블의 값들도 있었으며, 정렬 시, 동점자를 발생시키지 않기 위해 기획적으로 굉장히 여러 정렬값이 존재하여 쿼리문을 작성하는데도 어려움이 많았다. (결국 실장님의 도움으로 해결하였으며 새로운 sql 함수들과 지식들을 알게되었다.)
쿼리문 작성이 끝나고 이제 서버에 typeorm으로 구현을 할 차례인데, 난관이었다. 진행을 하면서 쿼리문법과 orm 구현체 코드의 문법에 대해 평소에 잘 모르다보니 이런 정렬이 가능한지도 가늠이 안되고, 구현하는데까지 너무 많은 시간이 걸렸다. (subquery, leftjoin으로 다른 테이블을 조인하고 다른 테이블의 컬럼을 order by의 정렬값으로 사용하는 것, transaction 범위를 커스터마이징 하는 것 등)
결국 구현을 했지만 구현한 쿼리문보다 더 효율적인 쿼리를 작성할 수 있으려면 쿼리문법과 orm 라이브러리를 좀 더 깊이 있게 학습할 필요가 있다고 생각했던 하루다.