💡 주제 : 카트라이더 TMI 서비스의 기능 일부 구현
🗓 기간 : 03.21 ~ 03.25
🔨기술 스택 : React, Typescript, Redux, Redux Toolkit, styled-components
💻 담당 : 전체 기능 구현
👤 참여 인원 : 1
프로젝트 상세 설명
넥슨 카트 OpenAPI를 활용하여 카트라이더 TMI 서비스의 기능을 일부 구현한 서비스
이번 프로젝트는 개인 과제로 코스 초반에 설문을 통해 개인 과제로 진행하길 희망한다고 답변했던 기업의 과제를 진행하게 되었다. 나는 넥슨 코리아의 기업 과제를 선택하였고, 과제를 살펴보았을 때 구현할 내용이 많았으나 내가 즐겁게 구현할 수 있을 것 같은 과제 내용이라 선택하게 되었다. (무엇보다 배찌와 다오 캐릭터 같은 귀여운 이미지를 많이 활용할 수 있어서 흥미가 갔다 🥰)
프로젝트 시작 전에 구현해야 하는 사이트나 API에 대한 조사가 필요할 것 같아 하루동안 카트라이더 TMI 서비스와 API를 분석하는 시간을 가졌고, 아래 캡쳐본처럼 노션에 주요 기능과 API 분석에 대해 작성하고, API가 제공하는 데이터를 이용해 구현가능한 기능이나 추가적으로 내가 구현해보고 싶은 기능들을 정리해보았다.
물론 직접 구현해보다보니 계획했던 것을 모두 실천할 수는 없었고, API 분석의 경우에도 간단하게 분석한다고해서 알 수 있는 것이 아니었기 때문에 직접 구현하면서 API를 다시 파헤쳐볼 수 밖에 없었다. 주요 기능 분석에서도 기존 사이트의 아쉬운 부분들을 정리해두었었는데 이에 대한 해결을 구현 시에 적용 못한 부분이 있어서 아쉽고, README에도 작성하지 않았던 부분을 지금도 아쉽게 생각한다.
프로젝트는 총 5일간 진행되었으며 마지막날 마감 시간에 맞추어 제출 후에는 README를 작성하였다. 이번에는 혼자 프로젝트를 진행했기 떄문에 자세한 구현 내용 및 Issue에 대해서는 README에 자세하게 작성해두었다. 그 외 README에 미처 작성하지 못한 부분들은 아래에 추가로 정리해두려고 한다.
stroke-linecap: round
의 문제점
도넛 차트 구현 시, svg를 활용하여 구현하였는데 이 때 stroke-linecap
속성을 round
로 주어 라인의 끝이 둥글게 마무리 되도록 만들었다. 직각으로 떨어지는 것보다 부드러워 보이고 보기도 좋아서 이렇게 구현하였는데 데이터를 차트에 적용해보니 문제를 확인할 수 있었다.
문제는 끝이 둥글게 마무리 되면서 시작 및 끝 위치가 오버되는 것이었다. 중간 정도의 값일 떄는 크게 눈에 띄지 않는데, 99%, 1%와 같은 값을 표현할 때 이 같은 문제점이 두드러졌다.(쉽게 말하면 95% 정도 부터도 100%처럼 꽉차게 보였다.) 그래서 이를 조정하고자 점선의 길이와 시작 위치를 조정하는 stroke-dashoffset
의 값을 기존 계산값과 다르게 주어야 할 것 같다고 생각이 들었고, dashOffset
을 % 값에 맞게 계산하는 getStrokeDashOffset()
함수 내에서 값을 조정해주었으며, 조정 값은 테스트해보면서 어느 정도 적절한 값으로 만들어주었다.
하지만 완벽하게 해결한 것은 아니며, 이를 해결하기 위해 많은 시간을 소요할 수 없어서 우선은 결과가 어느 정도 적절하게 나오도록 값을 조정해주었다. 하지만 꼭 해결해서 도넛 차트를 완성하고 싶기 때문에 정확하게 오버되는 영역의 값을 계산하여 dashOffset을 조정할 수 있도록 따로 구현해 볼 생각이다.
tension
옵션을 주기도 했었다. 특히 그 중에서도 구현하고 뿌듯했던 부분은 라인 차트에서 hover시 나타나는 데이터가 datas의 데이터와 차이가 있어서 커스텀이 필요했는데 검색을 통해 찾아보니 tooltip
의 callbacks
에 함수를 작성하여 커스텀이 가능하다는 것을 알게되었다. 그래서 아래와 같이 작성하여 hover시 나타나는 텍스트를 수정해주었다.tooltip: {
callbacks: {
title(context: any[]) {
const { dataIndex } = context[0];
return `이전 ${total - Number(dataIndex)}경기`;
},
label(tooltipItem: { label: string }) {
return `순위: ${tooltipItem.label}`;
},
},
},
stroke-dasharray
, 시작 시점을 지정하는 stroke-dashoffset
의 경우는 정말 생소한 속성이라 활용하면서 신기하기도 했다.