TIL Day 79.

Jen Devver·2024년 6월 7일

내배캠 TIL

목록 보기
86/91
post-thumbnail

Django 최종 팀 프로젝트

배포 시 설정

  • 배포를 하기 위해 Docker에 이식하면서 문제 발생: zh_HAns 관련해서 No such file or directory로 해당 폴더를 찾을 수 없다고 나옴. 해당 폴더가 app/locale 안에 잘 있는 것도 확인했고 도커 내에도 존재하는 것 확인. 도커를 싹 다 날리고 docker-compose up --build 를 다시 해서 실행해보았는데도 안 됐는데, zh_hans 로 소문자로 폴더명을 바꾸고 해결. 분명히 초반에도 폴더명을 zh_hans 로 바꾸고 해봤고 해결에 도움이 되지 않았는데 왜 갑자기 또 됐는지 의문..🤔
  • redis도 도커로 옮기다보니 기존에 사용하던 redis insight를 사용할 수 없게 되었다. gui로 바로 바로 반영되는지 확인하는 것이 편했는데.. 어떻게 설정하면 볼 수 있을지도 모르겠지만 우선 오늘은 host와 port 설정에 실패함.
    docker ps 로 redis 컨테이너 ID 확인 후
    docker exec -it f4ccf1381013 redis-cli 로 켜준 후에
    우리의 경우 hash로 저장해주기 때문에 hgetall <key> 로 해당 키에 잘 들어있는지 확인 가능함.

오류 개선

  1. 장바구니에 해당 메뉴가 없는데 음성으로 메뉴를 추가하려고 할 경우 에러 발생
  • 원인: 기존 로직은 해당 메뉴가 장바구니에 있으면 해당 메뉴의 수량을 변경하는 방식이라 해당 메뉴가 장바구니에 존재하지 않으면 에러가 발생
  • 해결: 분기 처리를 통해 해당 메뉴가 없으면 add_to_cart()와 같은 로직으로 메뉴를 장바구니에 저장해주고, 해당 메뉴가 있으면 그 메뉴의 수량만 변경하는 로직으로 수정
            if name not in current_cart_get:
                store_id = request.user.id
                menu = Menu.objects.get(store_id = store_id, food_name = name)
                image = menu.img
                price = menu.price
                quantity = result[0]
                item = CartItem(image, name, price, quantity)
                serializer = CartSerializer(item)
                get_menu = serializer.data
            else:
                get_menu = json.loads(current_cart_get[name])
                
            get_menu["quantity"] = result[0]
  1. 음성으로 해당 메뉴를 삭제할 경우 수량이 0인 채로 장바구니에 남아있는 오류
  • 원인: 수량이 0일 때 메뉴를 삭제하는 로직이 없었음
  • 해결: 조건문을 추가하여 수량이 0일 경우 해당 메뉴를 장바구니에서 삭제해주는 로직을 추가. 이 때 0이 문자열일 경우에 조건문을 타지 않는 점도 반영하여 수정함.
            cart = Cart(username)
            if get_menu["quantity"]=='0' or 0:
                cart.remove(get_menu["menu_name"])
            else:
                cart.add_to_cart(get_menu)
  1. 중간에 주문을 중단하면 장바구니 데이터가 그대로 남아있음
  • 원인: 일정 시간이 지나면 장바구니 데이터를 삭제해주는 로직이 없음
  • 해결: js 상 입력이 없으면 30초 후에 키오스크 첫 화면으로 돌아가면서 장바구니 안의 데이터를 삭제해주는 로직 추가
(function () {
    let timeout;

    function resetTimeout() {
        // 기존의 타임아웃을 클리어
        clearTimeout(timeout);
        
        // 새로운 타임아웃 설정 (30초 후에 페이지 리다이렉트)
        timeout = setTimeout(() => {
            clearCart();
            // window.location.href = '/orders/start_order/'; 
        }, 10000);  // 1분 = 60,000 밀리초
    }

    // 페이지가 로드될 때와 사용자가 페이지에서 클릭할 때마다 타임아웃을 리셋
    window.onload = resetTimeout;
    document.onclick = resetTimeout;
})();
  • 이 때 axios.post를 사용하면서 생긴 여러 오류 수정
    - axios.post 요청을 보내는 url이 잘못 입력되어 있어 수정: /cart/remove에서 /orders/cart/remove
    • 확인하는 과정에서 @api_view(["POST"]) 를 지우면서 서버 에러 발생: 다시 추가해줌
    • 403 Forbidden 에러는 헤더에 csrf token을 추가해주어 해결: @csrf_exempt를 넣었는데도 왜 넣어야 하는지 아직은 모름...
  1. 팝업에서도 음성 인식을 누를 수 있게 개선
  • 기존에는 팝업을 닫아야지만 음성 인식 버튼을 다시 누를 수 있었음: 팝업에 음성 인식 버튼을 추가하고 함수를 적용해 수정
  • 이 때 문제: 닫기 버튼과 같이 원하는 버튼에 필요한 함수를 적용하였는데 작동하지 않음
  • 원인: 기존 음성 인식 버튼과 같은 ID를 써주어 발생한 오류
  • 해결: 각 ID는 요소에 대해서 고유해야 하므로 새로 ID를 지정해주니 잘 작동함.

이미지 제작

  • 오랜만에 일러스트레이터 만지면서 재밌었다..!
  • 슬로건으로는 당신에게 더 가까이 로 가끔 어른들이 하는 말을 일컬을 때 "당신이 ~ 하고 말씀하셨다" 하는 그 당신을 생각하고 만들었다. 고령층에 대한 존중의 의미가 담겨있다고 생각해서 썼는데 금방 생각해낸 것치고 꽤 마음에 든다.
  • 실버 라이닝은 구름 뒤에 숨어있는 해가 구름의 윤곽을 만들어내면서 빛이 나는 현상에서 따온 것이라 구름과 해를 꼭 넣고자 했고 깔끔하면서도 단순하고 일차원적인 느낌의 디자인이었으면 했다.
  • 실버 라이닝 글씨 뒤에 실버 라이닝처럼 보이려고 흰 그림자를 넣긴 했는데.. 좀 더 깔끔해보이려면 없애는 게 나을 것 같아 고민 중.
  • 원래 할머니들께서 쓴 글씨를 토대로 만든 폰트를 써보고 싶었는데 깔끔보다는 좀 더 정감있고 손글씨스러운 폰트라 기각. 어디에선가는 꼭 쓰고 싶다. 현재 후보는 칠곡할매 폰트.
profile
발전 중...

0개의 댓글