소개

제작기간: 2019년 7월~11월
지역과 시간을 선택하면 해당 시간 내에 자유수영을 할 수 있는 수영장 정보를 보여주는 간단한 웹 페이지이다.
screencapture-swimswim-pythonanywhere-2019-11-10-16_00_23크기수정

screencapture-127-0-0-1-8080-2019-11-10-16_03_38크기수정 사이트 주소: http://swimswim.pythonanywhere.com/

제작 동기

때는 2019년 7월.

웹 개발을 여러모로 깔짝대보긴 했으나 제대로 웹 하나를 만들어보지는 못했다.
실력 향상겸 개인 프로젝트로 웹을 처음부터 끝까지 개발해보자는 생각이 들었고, 주제 선정을 고심했다.
당시 수영을 종종 즐기곤 했다. 당시 상황에 맞게 여러 수영장을 돌아다니며 일일입장으로 자유수영을 했는데, 이게 꽤 귀찮았다.
어떤 수영장은 주말에 문을 열지 않고, 어떤 수영장은 특정 요일에는 일일입장을 받지 않는 등 수영장마다 차이가 컸다.

그래서 여러 수영장의 시간 정보를 모아 현재 시간에 맞게 필터링해주는 서비스가 있으면 좋겠다는 생각이 들었다.
이를 바탕으로 SWIM, SWIM 을 제작하게 된다.

준비

‘무엇을’ 만들 것인가 정했으니, 다음은 ‘어떻게’ 만들 것인가를 결정해야 했다.
주변에 웹 개발을 하는 사람이 없기 때문에 혼자 백엔드와 프론트엔드를 다 맡아서 해야 했다.
이전에 웹 퍼블리싱을 공부한 적이 있어 프론트엔드는 어찌 될 것 같은데 백엔드가 고민이었다.
그러던 와중 작년에 혼자 따라해본 장고걸스 튜토리얼이 생각났다.
당시엔 웹에 대해 아는 것이 별로 없어 공부하다 힘들었던 기억이 있지만, 한번 해봤으니 더 괜찮을 것 같았다.
어떻게 만들지를 대충 결정했으니 개발에 돌입할 시간이었다.

난관

역시 한번 해본 적이 있어서 그런지 백엔드 구현은 생각보다 어렵진 않았다.
다만 몇 가지 난관이 있었는데, 데이터베이스를 구현하는 것과 queryset으로 시간, 장소를 필터링하는 것이었다. 특히 후자가 꽤 까다로웠다.

내가 원하는 것은

  1. 1페이지에서 시간(몇 시간 내인지)과 장소(도시 이름)를 받는다.
  2. Pool 모델에서 1페이지에 받은 도시에 해당하는 것을 필터링한다.
  3. 2번에서 필터된 Pool의 Timetable에서 현재 시간과 1번에서 받은 시간 내에 start time과 end time이 있는 queryset을 찾는다.

여기까지는 괜찮았지만, 더욱 어려운 문제가 있었다.
현재 시간에 사용자에게 받은 시간을 더했을 때 24시간이 넘어가는 경우였다. 거기다 일요일에서 월요일로 넘어가는 경우는 또다시 예외처리를 해줘야했다.
복잡했기에 진전이 잘 되지 않았다. Django QuerySet API 공식 문서를 몇 번 정독하고 구글링을 끊임없이 하며 어떻게든 비슷한 부분을 찾으려 노력했다.
결국 원하는 대로 필터링을 해낼 수 있었고, 기본적인 틀을 잡는데 성공한다.

screencapture-127-0-0-1-8080-2019-10-10-05_52_53

screencapture-127-0-0-1-8080-2019-10-10-05_53_13