트러블 슈팅 Troubleshooting

    MongoDB의 ObjectId 최대한 간단하게 처리해서 프론트로 넘겨주기 ✔️

    MongoDB의 ObjectId 최대한 간단하게 처리해서 프론트로 넘겨주기 ✔️

    아무리 정리하려고 해도 이상하게 매끄럽게 한 두 문장으로 문제 상황과 해결이 정리가 안 된다… 감안하고 봐주시길. 배경 스토리:MongoDB의 데이터를 프론트로 보내주려고 할 때, 발목을 잡는 것이 MongoDB 고유 객체인 ObjectId이다. 이걸 그대로 프론트로 실어 보내려고 하면 에러가 난다. 그래서 사용하는 게 json_util.dupms()로 ObjectId를 한 번 파이썬이 인식 가능한 형태로 풀어주는 것이다. 그러면 ObjectId는 풀어지는데 다른 멀쩡한 문자까지 깨지게 되어, 그걸 또다시 정상적으로 바꿔주기 위해 json.loads()를 써주고 마지막으로 포장하는 게 jsonify(). 이렇게 3단계를 거쳐서 프론트로 보내주고 있었다. GET 요청의 응답으로 Response객체가 아닌 ..

    jsonify()는 뭘 어떻게 포장해서 프론트로 보내는가 ✔️

    발단:app.py에서 return jsonify(”쌩 메세지”)로 보내고, 프론트에서 success: function(response) { alert(response) } 해도 alert(response[’msg’]) 때와 똑같은 형식으로 잘 뜨는 것을 발견했다. 이유가 궁금했다. response를 jsonify로 안 보내면 어떻게 되지?⇒ jsonify()로 안 보내도 된다. 이 포스트에 연구해놓았다.response를 jsonify로 잘 보내도, ‘키’값이 없는데 어떤식으로 저장돼서 보내지고 출력되는 거지? ⇒ 결론부터 말하면, jsonify()는 위치 인자를 그냥 나열하는 것(jsonify(”메세지1”, “메세지2”, …))과 키워드 인자쌍을 주는 방식(jsonify({”msg”: “메세지1”, “m..

    비번 확인해서 삭제시키기 + 실패시 에러 메세지 띄우기 ✔️

    비번 확인해서 삭제시키기 발단: DELETE 요청 실패시 서버에서 반환한 errorhandler 안의 메세지를 프론트가 적절히 받지 못해 임의의 alert 내용을 띄우도록 했었는데, 이 사항을 뜯어본 과정을 기록해 보았다. 결론부터 말하면, Ajax의 error 옵션을 사용해서 추출해낼 수 있었다. Ajax 삭제 요청시 “실패하면”의 조건을 달고 싶을 때 error 옵션을 쓴다. “성공하면”의 조건을 달 때 success 옵션을 쓰는 것과 같이. 아래는 템플릿 그대로 “실패하면” 콜백에게 인수 3개 쥐어주고 뭐가 나오는지 실험해 본 결과이다.Ajax의 error 옵션 실험:# app.py @app.route("/api/comments/delete/", methods=["DELETE"]) def delet..

    HTML 스크립트 태그 내에서 제이쿼리 이벤트가 무시되는 에러 해결 ✔️

    이걸 그냥 실행시키면 id=”official”속성을 가진 문서 객체가 생성되기도 전에 저 스크립트를 실행하고 넘어가게 되어 아무 일도 일어나지 않는다. 이를 방지하기 위해 두 가지 해결책이 있다: // 1. // 2. 둘 모두 잘 동작함을 확인했다. 그런데 1번이나 2번이나, “official”이라는 id를 가진 버튼에 마우스를 올릴 때마다 반복되서 실행되는데 그건 어떤 원리로 가능한 건지 모르겠다. ⇒ 저 함수들은 이벤트를 ‘연결지어줌’을 완료한 것이기 때문일까?개인적으로 2번이 더 이해가 안가고 1번이 더 안전하고 확실해 보인다. 앞으로 1번 방식을 사용하기로 한다. 참고로:부트스트랩 버튼을 해주고 class를 부트스트랩 버튼 클래스들로 똑같이 채우기만 하면 똑같은 모양으로 만들어지는 신기한 현상을 ..

    MySQL 설치시 “ERROR 2003: Can’t connect to MySQL server” 에러 해결 ✔️

    MySQL 서비스 실행하기 결론부터 말하면 ⇒ MySQL 서버를 직접 실행시켜줬다. 환경변수까지 설정하고 명령 프롬포트에 mysql 명령어를 입력해보니 이번엔이런 에러가 떴다. MySQL을 설치할 때 “컴퓨터 부팅할 때 startup(시작 프로그램)으로 끼워넣지 말라”고 설정했어서 이건 예상한 문제였다. 해결: 💡시작 > “서비스” > “MySQL80” 서비스 “시작”하기MySQL 서버를 켜주었다. 이 후에 다시 명령 프롬포트에 mysql 명령어를 입력해보면 아래와 같이 잘 된다. + 간단 명령어 팁:USER> mysql -u root -p : 처음 MySQL 실행하기 mysql> select version(); // 설치된 MySQL 버전 확인mysql> show databases; // 현재 연동된 ..

    MySQL 설치시 “mysql은 내부 또는 외부 명령 …이 아닙니다” 에러 해결 ✔️

    MySQL 설치후 명령 프롬포트 실행시 “mysql은 명령어로 인식할 수 없어” 에러결론부터 말하면 ⇒ MySQL Server 8.0에 대한 환경변수를 설정해줘야 했다. 우여곡절의 설치 후 mysql은 실행할 수 있는 대상이 아닙니다 판정을 받고 환경변수를 설정해줬는데도 계속 이러는 것이다. 컴퓨터 재부팅까지 하고서도 그러길래 계속 구글링을 하던 중, 어이없게도 내가 계속 “C:\Program Files\MySQL\MySQL Shell 8.0\bin”이란 경로가 환경변수로 들어가 있는 것을 MySQL Server 8.0으로 잘못 읽고 있었던 것을 알게되었다…. Server 8.0을 등록해줘야 하는 건데 말이다. 결론:💡시작 > “고급 시스템 설정 보기” > 환경 변수 클릭 > USER의 “Path”변수에..

    삼성뮤직 싱크가사 에러 해결 ✔️

    삼성뮤직 싱크가사 넣기 결론부터 말하면, 가사 파일에서 [시:분:초.00]의 요 “.00”부분을 빼먹으면 안됐다. 아 이거 전에 삽질하면서 다 알아놨던 건데 오늘 다시 싱크가사 하나 만들어서 넣으려고 하니 핸드폰 삼성뮤직이 전혀 인식을 못하는 것이다.결론부터 말하면 싱크가사 파일에 밀리초 단위를 안 넣어서 벌어진 일이었다. 설마설마했는데 이게 원인이었을 줄이야… 일단 기본 명제 2개:mp3 파일명과 lrc 파일명이 동일해야 한다.같은 폴더 내에 있어야 한다.이 규칙만 잘 지키면 그냥 메모장으로 음악 파일에 간단한 구간 마크를 만들어 넣을 수 있다. 오늘 추가된 3번째 명제:💡아래와 같이 [분:초]에 .밀리세컨드(?)가 빠지면 전혀 인식 못함 주의[00:00.00]0. Intro [00:10.00]#1. ..