이번 과제를 진행하면서 가장 큰 문제는 Geography 자료의 처리였다.
단순 위경도 정보를 Point,LineString,Polygon등 연산 가능한 자료형으로 WKT형식으로 DB에 레코드로 넣는 것부터 시작해서 아래와 같은 테스트용 구역지도를 만들었다.
이후 킥보드를 반납한 위치가 특정 구역에 포함되는지를 검사하고 활동 구역을 벗어난 경우에 벗어난 거리를 측정하는 과정을 ST_INTERSECT와 ST_DISTANCE_SPHERE와 같은 빌트인 함수를 이용해서 판단을 하였다.
그리고 이후 추가될 다양한 할인/벌금 정책을 위해 책임연쇄패턴을 적용했다. 흔하게 웹 프레임워크에서 사용되는 middleware나 pipeline과 유사한 디자인 패턴이다. 해당 정책을 구현하는 체인을 추가해주면 확장되는 간단한 방법이지만, 각각의 체인에서 적용여부를 판단하고, 계산까지 수행을 하기때문에, DB에 요청이 빈번해지고 불필요한 체인까지 탐색하게 될 가능성이 있다.
그러다보니, 반납/정산 API에서 적용해야할 할인/벌금 정책을 파악한 이후 실제 요금의 계산을 Redirection과 Referer 해더를 통해 전달, 정상적인 반납/정산 과정을 거쳤는지 확인하는 방법을 뒤늦게나마 고민해봤다