본문으로 바로가기
2222

원티드x위코드 백엔드 프리온보딩 6번째 과제 회고입니다.

 

앞선 과제가 있었지만 우선 이번 과제에 대한 회고를 작성해 보려고 합니다.

처음으로 블로그에 써보는 회고인 만큼 주절주절 쓰일 수 있습니다..

 

과제는 6명에서 진행되며 저는 팀에서 팀장을 맡고 있습니다. 팀을 이끌거나 전체적인 시각에서 진행상황을 보며 일을 분배하는 것을 좋아해 팀장을 맡게 된 거 같습니다. 팀장을 하면서 드는 생각에 관현 회고는 추후 작성해 보려고 합니다.

 

그럼 과제에 대한 설명은 아래와 같습니다.

평소 킥보드를 종종 이용해 과제에 대한 이해는 어렵지 않았습니다.

하지만 다양한 조건으로 인해 디테일 적으로 신경써야 하는 부분이 많았던 과제였습니다.

개발을 하며 가장 많은 시간을 쏟았던 것이 세 가지에 대해서 중점적으로 회고를 해보려고 합니다.

첫째는 초기 데이터입니다.

최대한 실제와 비슷한 환경을 만들기 위해서 실제 지역의 좌표를 구해 데이터를 구성하였습니다.

금지 구역은 공원, 학교, 아파트와 같은 곳을 지정하였으며, 파킹 존은 지하철역, 버스정류장 근처로 지정하였습니다.

둘째는 사용자의 반납 위치입니다.

사용자가 반납을 할 때 보내주는 위치 정보를 바탕으로 어떤 곳에 반납했는지 계산하는 로직이 필요했습니다.

금지 구역에 반납하지는 않았는지, 파킹존에 반납을 했는지, 혹은 지역 내에 반납을 했는지 확인이 필요했습니다.

이번 프로젝트에서 처음으로 POLYGON, POINT와 같은 것을 접하였고 이것을 사용하는 방법을 익히는 시간이 소요되었습니다.

최종적으로 MySQL 함수의 ST\_Contains, ST_DISTANCE, ST_GEOMFROMTEXT ST_ASTEXT을 이용하여 사용자의 반납 정보를 분석함으로써 해결하였습니다.

ST_Contains(area.area_boundary, ST_GeomFromText(`POINT (${latitude} ${longitude})))

ST_DISTANCE(ST_GEOMFROMTEXT(ST_ASTEXT(parkingzone.parkingzone_center_coord), 4326), ST_GEOMFROMTEXT(:p, 4326)) < parkingzone.parkingzone_radius)

ST_Contains(forbidden_area.forbidden_area_boundary, ST_GeomFromText(`POINT (${latitude} ${longitude}))

셋째는 이벤트 계산입니다.

사용자의 행동에 따라서 혹은 정책에 따라서 다양한 요금 기준이 있습니다.
예를 들어 파킹존의 반납을 한다면 할인을 해주고 금지 구역에 반납한다면 벌금을 부과하는 등 다양한 이벤트가 존재할 수 있습니다.
이것을 추가하기 위해서 매번 소스를 추가해야 한다면 과제에서 이야기하는 새로운 할인이나 벌금 조건이 쉽게 추가를 할 수 없다고 생각하였습니다.
그래서 이벤트 테이블을 제작하여 반납 시 조건에 맞는 이벤트를 적용시켜 할인 / 벌금을 적용하였습니다.

먼저, 이벤트를 적용하기 위해서 비슷한 다른 서비스를 생각해 보았습니다.

가장 먼저 떠올린 서비스는 쿠폰 조건이었습니다.

  • 50,000만 원 이상 구매
  • 특정 상품 구매
  • 특정 카테고리 상품 구매
    등 다양한 조건이 있었습니다.

저는 여기서 이러한 조건들을 적용하기 위해서 어떻게 할까?라는 생각을 했습니다.
그 결과 비교할 수 있는 데이터를 분류하여 조건을 만들면 되겠구나 생각하였습니다.

그래서 저희 서비스의 킥보드 반납 시 얻을 수 있는 데이터를 정리했습니다.
그 결과, "요금", "지역", "이용 시간", "지역에 주차 여부", "주차장에 주차 여부", "금지구역 주차 여부"와 같은 데이터를 얻을 수 있었고 해당 데이를 비교하여 이벤트를 적용 여부를 판별하였습니다.

저희는 예시로 아래와 같은 조건을 저장하였고.

  • 금지 구역 반납 시 6000원 벌금
  • 주차장 반납시 15% 할인
  • 특정 지역 반납 시 20% 할인
  • 만원 이상 이용 시 5% 할인
  • 15분 이상 이용시 10% 할인

리스트를 가져와 적용 조건을 가지고 적용되는 것을 구한 후 비용을 할인 / 벌금을 적용하는 방법으로 해결했습니다.