[weathervely 7] 유저 체감온도 로직
체감온도 로직
드디어 우리 서비스중 가장 중요한 기능인 체감온도에 대해서 기능을 개발하는 단계에 왔다.
체감온도 기능을 우리는 먼저 유저가 온보딩에 들어오게 되면, 닉네임과 동네 설정을 해주게 된다. 그런 다음 어제의 외출 시간을 설정을 해주면, 동네에 맞춰서 어제 그 시간대의 기온을 표시를 해주고, 그 온도에 맞는 두께의 옷을 보여준다. 이때 유저는 옷 두깨를 지정 해줄 수 있다. 이에 따라서 우리는 유저의 옷 두께로 체감 온도를 설정을 해주게 된다. 물론 메인 화면에 진입을 하고 나서도, 체감온도를 재설정을 해주는 기능이 있다. 그래서 메인 화면에 설정한 체감 온도에 따라 옷 데이터를 보여주게 된다.
의문점
개발을 하는 도중, 팀원이 체감 온도에서 설정한 것을 그때 그때 반영을 한다. 라는 이야기를 했었다. 그래서 내가 생각한 체감 온도라는 것은 다른데 라는 생각을 했고, 체감 온도 설정에서도 옷 두께를 설정을 해줬을 때, 그 설정을 바로 반영해서 보여준다는 것은 체감 온도의 설정이 아니라 옷 두께 변경이 맞지 않나? 라는 생각이 들었다. 이 부분에 대해서 서로가 생각하는 부분이 다른 것 같아서 회의 안건으로 내었다.
체감온도 회의
먼저 회의에서 자신이 생각하는 체감 온도가 무엇인지에 대해서 이야기를 했다. 그런데 개발자들이 생각하는 체감온도가 같고, 팀원이 생각한 체감온도와는 달랐다.
팀원이 생각하는 체감온도
팀원이 생각하는 체감온도란, 유저가 체감온도 설정에서 선택한 옷이 있다면 그 선택한 옷의 두께에 맞춰서 옷을 보여줘야 한다. 라는 생각이다. 즉, 유저가 옷 두께를 설정한다면 유저의 체감 온도를 구해서 옷을 표시를 하는 것이 아닌, 선택한 두께의 옷을 보여줘야 한다라는 것이다.
개발자가 생각한 체감온도
개발자가 생각한 체감 온도는, 유저가 체감온도 설정에서 선택한 옷이 있다면, 그 동네의 기온과 선택한 옷의 우리가 설정한 온도의 범위를 토대로 계산을 하여 이 유저의 체감 온도는 몇 도 이다 라는 것을 산출을 한다. 그 다음 기온과 체감온도의 연산을 통해 그 온도에 맞는 옷의 데이터를 보여주는 것이라고 생각했다.
회의 후
우선 팀원이 왜 그렇게 생각하는 지에 대한 것을 알게 되었다. 분명 체감 온도 설정에서 옷의 두께를 설정해 줬는데, 메인 화면에 그 두께에 맞는 옷의 데이터가 나오지 않는다면, 분명 의아해 할 것이라는 생각이 든다.
하지만, 체감 온도이라는 워딩 자체가 유저가 특정 기온에서 느끼는 온도 인데, 그것이 옷의 두께로 설정을 하는 것이 맞을까? 라는 생각이 들었다. 이것은 단순히 필터링을 하는 것과 같은 것이라 생각을 했다.
그래서 체감 온도를 구하는 공식을 수정을 하여, 팀원이 걱정하는 부분을 충족 시킬 수 있도록 개선을 해야 했다.
체감 온도 공식 개선 전
-
유저의 체감 온도 설정 히스토리 데이터 저장
유저가 체감 온도에서 설정한 데이터는 이렇게 저장이 된다. user_set_temperature 이라는 테이블에, closet_id(코디 pk)와, address_id(메인 동네 pk), user_id(유저 pk)의 데이터를 저장을 한다. 각 코디는 온도 구간이 정해져 있다. 이 온도 구간은 기상청의 데이터를 토대로 정하였다.
-
기온의 체감 온도 구하기
그리고 나서 체감 온도에 대한 연구 논문에 나와 있는 특정 기온에서 체감 온도를 구하는 공식이 있어서, 이 공식을 토대로 기온의 체감 온도를 구한다. 이 공식에는 바람, 습도 등등도 고려를 해야 한다.
-
유저의 체감 온도 설정 히스토리를 토대로 유저의 체감온도 계산
유저가 선택한 코디의 온도 구간의 평균 값을 구한다. 그 다음, 유저가 체감 온도 설정을 100회 이하로 했다면, 평균 값에 1/100을 곱한다. 체감 온도 설정을 몇회 했는지에 따라 가중치는 따로 정하였으나, 만약 잘 안되는 경우 유동적으로 변경한다. 이렇게 나온 값들을 2번에서 구했던 기온의 체감 온도에서 더해준다.
-
옷 데이터 보여주기
3번에서 구한 유저의 체감온도가 나온다면, 이 온도에 맞는 옷의 데이터를 보여준다.
체감 온도 공식 개선 후
다른 부분들은 달라진건 없고, 3번의 내용만 바뀐다. 가중치를 몇 회 이하일 때, 1/100을 곱하고, 1/1000을 곱하게 된다면, 처음 체감 온도를 설정을 했을 때, 옷이 다이나믹 하게 바뀌지 않을 것이다. 왜냐하면 우리가 정한 코디의 온도 구간도 세세하게 구간을 지정을 하지 않았고, 가중치가 너무나 작아 체감 온도의 변화가 작을 것이다.
이 부분을 개선을 하여, 가중치를 1/n 으로 변경을 하였다. n은 체감 온도 설정 횟수 이다. 이렇게 된다면, 처음 체감 온도를 재설정 했을 때, 온도의 변화 폭이 클 것이고, 점점 재 설정을 할 수 록 변화 폭이 작아질 것 이다.
느낀점
이번 체감온도 회의를 통해, 서로의 우리의 핵심 기능에 대한 이해도가 다른 것을 알았다. 만약 이 부분을 개발에 들어간 시점이 아니라, 개발을 들어가기 전, 회의를 통해 서로의 이해도를 확실하게 동일시 하고 개발에 들어갔으면 어땠을까 라는 아쉬움이 남았다. 실제로 이 이해도를 일치하기 위해서 회의를 6시간 동안 하였다.
앱 출시도 얼마 안남았다. 앱 출시 후, 앞으로의 방향성 그리고 그 방향성의 이해도를 팀원 전체 동일하게 하여, 중간의 서로의 이해도를 일치 시키기 위한 소요되는 시간을 줄여야 한다고 생각을 했다.
댓글남기기