안녕하세요🙏 개발자 재민콩입니다.
이번글에선 음식점 추천 API 개발에 대해 포스팅하려고 합니다.
API 개발에 사용된 언어는 Python의 오픈 소스 웹 프레임워크인 Django입니다.
Django REST framework를 이용하여 API 개발을 진행했습니다.
Django를 선택한 큰 이유는 아래 3가지입니다.
1. CRUD 기능이 있는 관리자 페이지를 자동으로 생성
2. 기본으로 제공되는 로그인, 회원가입, 인증, Python의 강력한 라이브러리 등
3. DB table을 model.py에 class로 손쉽게 작성(다른 웹, 응용프로그램 프로젝트에서 DB를 Generate 하는 프로젝트도 해봤지만 제일 간편하고 좋았습니다)
DB는 Python과 잘 어울리는 오픈소스인 Postgresql를 사용했습니다.
그리고 Django REST framework + Postgresql로 개발환경을 구축을 먼저 진행했습니다.
아래 글을 참조하시면 개발환경 세팅과 간단한 API개발을 확인할 수 있습니다!
[Django] Django REST framework + Postgresql API 개발
개발환경 구축을 완료하고 먼저 알아본건 제일 중요한 음식점 데이터입니다.
처음 찾은 공공데이터는 공공데이터포털 전국 일반음식점 표준데이터입니다. 데이터를 보면서 제일 걱정됐던 부분은 음식점의 좌표가 일반적으로 알고 있는 위경도 정보가 아니고 좌표계 정보인 중부원점TM(EPSG:2097)로 표기되어 있는 것이었습니다. 음?? 이게 뭘까.. 🙋🏻
먼저 좌표계란 지구는 완벽한 원이 아닌 타원형 아니 사실 타원이라 하기도 조금 애매하다고 합니다. 따라서 지구를 타원체(Ellipsoid)로 정의하여 해당 타원에서의 위치를 표현하게 되는데, 어떤 타원체를 사용하지/어떤 기준점을 사용할지를 정의하게 되는데 이를 좌표계라고 한다고 합니다. 저희가 자주 보는 위경도 정보는 WGS84라고 부른다고 합니다!
음식점 API를 개발하면서 내 위치를 기준으로 몇 km 떨어져 있는 음식점을 가져올 때 내 위치의 정보를 javascript의 navigator.geolocation 기능을 사용할 예정이기 때문에 거리 비교를 원활하게 진행하기 위해선 위경도로 된 데이터가 있으면 좀 더 수월하게 개발을 진행할 수 있을 것 같아서 다시 검색을 해봤습니다.
다음으로 선택한 게 위경도 정보를 제공하는 경기도데이터드림 일반음식점 현황_인허가입니다.
서울, 경기, 지방 모든 음식점 데이터를 찾아 넣으면 좋지만 추후 업데이트를 계획하고 먼저 경기도 내에서만 사용이 가능하도록 경기도 일반 음식점 현황 공공데이터를 제공받았습니다!
이제 필요한 건 제공받은 공공데이터를 제가 만든 DB에 migration 하는 작업입니다.
먼저 model.py에 class를 생성합니다. 프로젝트가 크고 복잡하지 않기 때문에 DB ERD 설계라 할 것도 없이 작업을 진행했습니다.
python manage.py makemigration && python manage.py migrate를 통해 class로 table을 생성해 주고, pandas 라이브러리를 통하여 엑셀의 데이터를 읽어와 등록, 수정, 삭제하는 작업을 진행했습니다.
음식점 데이터를 가져올 때 폐업된 음식점을 제외하고 가져오니 총 대략 12만 건 정도가 됐는데.. 데이터를 migration 하는데 대략 4~5시간 정도 걸렸던 것 같습니다.(혹시 pandas 말고 다른 라이브러리 혹은 좀 더 빠른 migration 방법이 있으면 공유 부탁드립니다! 🙏)
오랜 시간 걸리다 보니 admin 페이지에 접속하여 데이터가 잘 들어가고 있는지 중간중간 확인했습니다!
데이터가 잘 들어간 후에는 나머지 필요한 DB를 설계했습니다.
1. 음식점
2. 유저(회원가입을 진행하지 않아도 App이용 가능하도록)
3. 음식점 기록(회원가입 시 음식점을 기록하여 통계로직을 통해 나의 음식점 방문유형을 캐릭터로 보여주기 위해)
4. 음식점 검색결과 로그(검색 후 방문기록을 하지 못했을 경우 로그를 확인하여 기록하기 위해)
설계를 진행한 뒤에는 API 개발을 진행했습니다. 전체적인 개발을 진행하면서 조금 고생했던 부분은
음식점 추천 API, 기존 Django 제공하는 유저 테이블에 컬럼을 추가해야 하는 부분, 통계를 내는 부분이었습니다
개발할 때는 머리를 뜯으며 고민하지만 지나고서 보면 이런 걸로 헤매나 싶네요.. 갈길이 먼 것 같습니다 🥹
유저 테이블에 컬럼을 추가하는 부분은 아래글에서 확인할 수 있습니다!
다음은 Flutter 개발로 찾아뵙겠습니다!
'Project > 오늘은 무엇을 먹을까?' 카테고리의 다른 글
[오늘은 무엇을 먹을까?] 오무먹 커뮤니티 추가 (3) | 2023.02.06 |
---|---|
[오늘은 무엇을 먹을까?] Server 세팅 (12) | 2023.01.06 |
[오늘은 무엇을 먹을까?] PWA 개발 (12) | 2023.01.05 |
[오늘은 무엇을 먹을까?] Flutter 개발 후 PWA로 계획 변경 (2) | 2023.01.04 |
[오늘은 무엇을 먹을까?] 프로젝트 기획 (2) | 2023.01.02 |