EC2 서버에 배포 후 배포된 사이트에서 추천시스템이 전혀 작동되지 않아 우선 try except 문을 지워서 어떤 오류가 발생하는 지에 대해 확인해보니 module 에러가 발생했다! sklearn 패키지가 설치 되어있지 않아서 발생한 오류 였다.
bash로 서버에 직접 접속해서 pip install sklearn 만 해주니 간단하게 해결되는 오류 였다.
하지만 이런 오류인지 아닌지 try except 문을 사용할 때 오류를 명시해주지 않으면 어떤 오류든지 전부 지나가버리니 어떤 오류인지 알 수 없는 문제가 있었기 때문에 기존에 잡으려 했던 오류인 KeyError를 명시해주어야 함을 깨달았다.
def main_view(request):
if request.method == 'GET':
# 현재 로그인 유저 정보 가져오기
current_user = request.user
user = UserModel.objects.get(id=current_user.id)
try:
# 사용자 기반 추천 시스템 필터링 거쳐 가장 비슷한 유저가 가본 음식점 중 평점 높은 순으로 리스트 가져옴
reco, similar_user, similar_top10 = recommandation(current_user.id)
similar_dict = similar_top10.to_dict()
output = ''
for key, value in similar_dict.items():
name = UserModel.objects.get(id=key).fullname
output = output + name + ' 유사도: ' + str(value)[:6] + '<br>'
# 나와 가장 비슷한 사용자의 정보
similar = UserModel.objects.get(id=similar_user)
# 내가 가본 음식점들 골라 내기
my_star = Star.objects.filter(star_user=current_user.id)
visited_restaurant = []
for star in my_star:
visited_restaurant.append(star.star_restaurant.restaurant_name)
# 추천리스트에서 내가 가본 음식점들 빼고 TOP 5개만 저장
reco_list = list(set(reco) - set(visited_restaurant))[0:5]
# print(reco_list)
# 추천 순위 TOP5 레스토랑의 이름으로 DB에서 검색해서 해당 object 받아와 리스트에 저장
recos = []
for re in reco_list:
recos.append(Restaurant.objects.get(restaurant_name=re))
reco_result = 'success'
except KeyError:
similar = '없음'
output = '없음'
recos = '아직 평점을 준 음식점이 없습니다! 평점을 부여하시면 그에 따른 추천을 해드립니다!'
reco_result = 'fail'
'오늘의 추천' 부분은 메인페이지 뿐만아니라 마이페이지에서도 출력하기로 하여서 함수화해서 각각 페이지에 출력할 수 있도록 바꿨다.
def today_recommand():
# '오늘의 추천' - 어제 가장 높은 평점을 기록한 음식점 중 하나
try:
yesterday = datetime.now().date() - timedelta(days=1)
yesterday_top = Star.objects.filter(star_date=yesterday)
# 어제의 최고 점수, 최고점수 받은 가게 추출
top_score = 0
today_reco = []
for top in yesterday_top:
if top_score < top.star_avg_score:
top_score = top.star_avg_score
for top in yesterday_top:
if top_score == top.star_avg_score:
today_reco.append(top.star_restaurant.restaurant_name)
# 추출한 가게들 중 하나만 랜덤으로 선택 해서 출력
choice = random.choice(today_reco)
today_reco_result = 'success'
today_res = Restaurant.objects.get(restaurant_name=choice)
except:
today_reco_result = 'fail'
today_res = '어제 평점이 매겨진 음식점이 없습니다.'
return today_reco_result, today_res
1차 테스트 이후 확인된 버그들과 수정할 사안들 추가할 사안들을 처리했다.
- a 태그에서 새창으로 페이지 띄울 때 필요한 속성 target="_blank" 추가
- 작성된 프린트문 주석처리하여 로딩 시간 단축 등 짜잘한 버그 수정 및 추가해야될 부분들을 추가 진행했다.
2차 테스트 때 최종적으로 CSS, HTML 짜잘한 부분까지 수정을 완료했다.
README도 한번 작성해보았는데 중점적인 것들만 한번 더 정리 해보았다.
초안을 작성하고 최종 정리로 선민님이 대신 해주셔서 git hub의 readme 작성을 완료하였다.
1. 프로젝트 개요(프로젝트 제목)
- 기획 이유, 내용
2. 설명(Introduction)
- 주제, 기간, 팀원(블로그나, 깃허브 주소링크)
3. 프로젝트 룰(Project rules)
스케쥴 관리 툴, API 설계도, 브랜치설명(배포용, 메인), 목업, DB모델링
4. 개발 스택(Development-Stack 뱃지로 등록)
Frameworks, Libraries, Module, DataBases, Hosting/Storage, Languages, IDEs/Editors
5. 사용 방법(Getting-Started)
6. 폴더 구조(Structure)
7. 개발 기능들(Development)
프로젝트 git hub 주소
https://github.com/SeonminKim1/TODAY_LUNCH
GitHub - SeonminKim1/TODAY_LUNCH: 점심 뭐 먹지 ? 점심 추천 Service
점심 뭐 먹지 ? 점심 추천 Service. Contribute to SeonminKim1/TODAY_LUNCH development by creating an account on GitHub.
github.com
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2022.06.15 django 특강, TODAY_LUNCH Project Refectoring (0) | 2022.06.15 |
---|---|
TIL 2022.06.14 TODAY_LUNCH (KPT 회고) (0) | 2022.06.14 |
TIL 2022.06.09 TODAY_LUNCH (랭킹TOP5 비동기식으로 재구현, 팝오버(부트스트랩)) (0) | 2022.06.09 |
TIL 2022.06.08 TODAY_LUNCH (오늘의 추천, 음식점 평점 수정, 평점 순위TOP5) (0) | 2022.06.08 |
TIL 2022.06.07 TODAY_LUNCH (사용자 기반 협업 필터링 추천시스템) (0) | 2022.06.07 |