전체 글

전체 글

    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..

    12/2 (OSI 7계층과 새 프로젝트 시작, 금) TIL

    12/2 (OSI 7계층과 새 프로젝트 시작, 금) TIL

    새 미니프로젝트에 들어가 조사 또 조사, 팀 회의 또 회의. 결론은 ZEP이 오늘 밤 10시에 닫히게 된다고 한다 (응?)OSI 7계층과 TCP/IP 5계층에 대해 특강을 들었다. 알던 것도 있고, 모르던 것은 OSI에 대한 개념. 오늘 작성한 프로젝트 시안들 맛보기 : Uploaded by N2T

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

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

    12/1 (Postman에서 요청 성공, 목) TIL

    flask와 mysql을 연동했다. 강의 스샷으로 얻은 메소드 힌트(execute, create_engine 등)를 구글링해서 적절한 예시를 찾고 패키지를 설치했다. 마지막에 postman에서 요청 시도 해보는 부분에서 막힘오후에 더 시도하여 마침내 postman으로 POST 요청 보내는 것을 성공했다..! data를 JSON 형식으로 보내야 하는 것이었다. text()의 사용을 익혔다. 콜론(:)으로 placeholder 방식을 사용하는구먼. ( 오늘 실시간 강의는 전체적으로 어떻게 페이지 3개 짜리 웹 사이트 구조가 잡히고 작성되는지 현업 개발자의 작업을 훔쳐본 느낌이었다. Jinja 조금, Axios 조금, CSS 스타일 팁 여러개… 웹 사이트 프로젝트 구조 잡는 법, 스타일시트 깔끔하고 간편하게 ..

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

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

    11/30 (DB 설계를 처음 배워본, 수) TIL

    git diff, git log —oneline, git log -p 등 깃 명령어 연습함공부한 자료, 에러 해결 자료 정리하고 포스팅함DB설계 구축과 MySQL, DBeaver 등 (급작스레) 다루어 보았다. Uploaded by N2T

    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; // 현재 연동된 ..

    01. 미니 프로젝트 - 팀 페이지를 만들 때

    ※ 개인 기록용으로 남겨놓는 첫 팀 프로젝트 - 정리x 우왕좌왕 기록. 시간이 남아돌 때만 볼 것. 프로젝트 요구 명세: index.html - 팀 소개 대문 페이지 자유 형식 하나app.py - 댓글 Ajax 요청을 보내고 받는 서버 하나댓글 보여주기가 가능하도록. 각 개인 페이지로 이동이 가능하도록. 개발 기간 : 11/16(수) ~ 11/18(금)일주일 중 약 3일 사용 기술/언어: CSS, HTML, JavaScript(JQuery, Ajax)mongoDB, Python(Flask) 초안 : 팀 회의 하면서 혼자 끄적여 본 초안: 과도기 : 결과제출한 버전 ( =Initial commit 때의 상태 ): GitHub - devocean-han/Mini_Poject_V2 at eaced8b054f0..

    01. 미니 프로젝트 - 개인 페이지를 만들 때

    ※ 개인 기록용으로 남겨놓는 첫 팀 프로젝트 - 정리x 우왕좌왕 기록. 시간이 남아돌 때만 볼 것. 프로젝트 요구 명세 : 개인 index.html - 내 개인 소개 페이지 자유 형식 하나댓글 받기 기능 개발 기간: 11/14 (월) ~ 11/16 (수)일주일 중 약 3일 사용 기술/언어: CSS, HTML, JavaScript(JQuery, Ajax)⇒ 왜 이 기능을 사용했는지(?)ex. 이 프로그램을 개발하는 데 파이썬을 썼는데, 왜냐하면 파이썬에 이에 관련한 강력한 라이브러리 2개가 있어서이다. 일번 라이브러리는 이렇고저렇고, 2번 라이브러리는 이렇고 저렇고한 기능을 제공해서 내가 필요한 기능과 가장 부합하는 도구라서 갖다 쓰게 됨. (단순 기록용) 작업 기록디자인 샘플 검색이미지https://ww..

    11/29 (Ajax와 그 옵션들, 화) TIL, TIT

    (01. 미니 프로젝트에 이어서)어제 구현한 DELETE 기능에 비번 확인 후 삭제 기능을 추가하였다. 이제 ‘삭제’ 버튼을 누르면 비번을 입력하라는 alert창이 뜨고, 비번이 맞아야 댓글이 삭제된다. TIT (Today I Troubleshot)프로젝트 트러블 슈팅: 미니 프로젝트 때부터 있던 “ 안 제이쿼리 이벤트 호출 안됨” 에러를 오늘 튜터께 들고가서 해결봤다. (그렇다. 오늘 마침내 질문을 개시했다…!) 서버에서 json_util.dumps() → json.loads() → jsonify()의 3단계를 거쳐 가공하여 보내던 HTTP 응답을 json_util.dumps()만으로 끝내게 만들었다. Ajax의 dataType 옵션을 사용했다.요청 실패시 서버에서 반환한 errorhandler 안의 ..

    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”변수에..

    11/28 (트러블 슈팅을 메인으로 삼은 후 첫날, 월) TIL, TIT

    (01. 미니 프로젝트에 이어서)POST 요청시 비밀번호도 넣어야 하도록 구현 완료. 비번은 해시 처리하여 넣었다.GET 요청에 에러가 생겨서 업데이트함DELETE 구현 완료. ‘삭제’ 버튼을 누르면 댓글이 삭제된다. TIT (Today I Troubleshot)프로젝트 트러블 슈팅: 파이썬의 flask.json.jsonify()를 뽀개버렸다. 가 외 트러블 슈팅:삼성뮤직 싱크가사 에러 해결 ⇒ [시:분:초.00]의 요 “.00”부분을 빼먹으면 안됐다.MySQL 설치시 “mysql은 명령어로 인식할 수 없어” 에러 해결 ⇒ 환경변수를 설정해줬다.MySQL 실행시 “mysql server에 연결할 수 없어” 에러 해결 ⇒ MySQL 서버를 직접 실행시켜줬다. 참고: https://www.youtube.co..

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

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

    작은 지각변동이 있었습니다.

    😶‍🌫️ 뭘 해야 하는지 알 것 같다.나는 앞으로 코딩을 배워나가는 동안, 트러블 슈팅을 목적으로 글을 써나갈 것이다. 나의 공부와 진전을 알리기 위한 블로그 글 중에서 최고로 치는 가치는 ‘문제를 해결한 경험을 쓴 글’이 될 것이다. 내가 무엇을 공부했는지보다 어떤 사소한 문제라도 어떻게 해결했다는 과정이 더 중요한 글감이 될 것이다.기왕에 ‘나를 알리고 내보이기 위한’ 글을 쓴다면, 더 예쁘고 명료하게 정리하지도 못할 정보글들을 재생산하기보다 차라리 사소하더라도 내가 맞닥뜨린 문제들과 그를 해결하기 위해 발버둥친 기록이 더 내보일 가치가 있을 것이다. 프로젝트는 포트폴리오에, 트러블 슈팅은 블로그에. 내가 누군가 말하는 것처럼 예기치 못한 에러를 만나면 그 자체를 성장의 발판으로 여기고 기뻐하며 달려..

    MongoDB의 Multi-Document ACID 트랜잭션 part1. 트랜잭션이란

    ※ 본 글은 작성자 본인이 나중에 찾아보기 위해 메모장처럼 정리한 글이므로 형식과 내용이 자유롭고 ‘그렇다더라’식의 기록이 많을 수 있음. 주제 또한 산발적일 수 있음. 들어가며: MongoDB Atlas의 사이트를 탐색하던 중 “우리는 다중 레코드 ACID 트랜잭션도 완벽 지원한다구요! 후훗” 하는 식의(?) 광고 타이틀을 자꾸 보게 되어 이게 뭔가 싶은 마음이 들었다. NoSQL이 뭔지를 알아보려는 목적에 부합하려면 현재 NoSQL의 대표주자라고 할 수 있는 MongoDB에서 이렇게 크게 광고하는 특성을 짚고 넘어가야 할 것 같았기에 서치를 좀 해보았다. MongoDB 웹사이트에서 볼 수 있는 캐치 프레이즈들. 저 굵게 강조된 문구를 보시라 MongoDB Atlas : 모든 주요 클라우드 제공업체에서..

    11/25 (대칭 키와 비대칭 키, 금) TIL

    강의 들을 때 구현했던 최대 힙을 다시 만들어 보려고 했는데 어째선지 인덱스 초과 에러가 난다. 지금은 봐도 모르겠으니 나중에 다시 봐야겟다.HTTPS에 대한 특강을 대비하며 들은 대칭키와 비대칭키(공개키/개인키)의 개념이 재밌었다. Uploaded by N2T

    NoSQL과 수평 확장

    ※ 본 글은 작성자 본인이 나중에 찾아보기 위해 메모장처럼 정리한 글이므로 형식과 내용이 자유롭고 ‘그렇다더라’식의 기록이 많을 수 있음. 주제 또한 산발적일 수 있음. 하드웨어의 성능 확장이 필요한 때소프트웨어는 계속 업데이트 되어서 무거워지는데 하드웨어가 못 따라가고, 용량이 부족해지고(누적된 사용량을 고정된 하드웨어가 충당하지 못함), 새로운 하드웨어에 맞춘 소프트웨어들이 등장하는데 예전의 하드웨어만으로는 그 기능을 사용할 수가 없게 되어서,하드웨어 성능 확장이 필요하게 된다. 성능 확장의 2가지 방법수직 확장 Scaling up하드웨어를 더 좋은 성능으로 갈아끼우는 것. 수평 확장 Scaling out같은 하드웨어를 여러 개 사서 연결하는 것. RDB에서 수평확장하기RDB가 하는 수평확장을 전용 ..

    11/24 (재귀 함수와 쪼끔 더 친해진, 목) TIL

    BFS 탐색을 실제로 활용하는 문제를 하나 풀었다. 나 스스로는 재귀 호출 쪽으로 생각해보다가 풀지 못했던 문제이다. “너무 경우의 수가 많을 것 같은, 말하자면 재귀로 돌려야 할 것 같은데 분기가 너무 많아지는 것 같다 싶은 문제인 경우, 모든 경우의 수를 다 나열해야겠구나싶은 경우”에 BFS를 사용하면 된다고 한다..! 주어진 트리나 그래프의 자료 정보가 없는데 어떻게 가능했던 건지는, 이전에 한 번 적어봤던 BFS 탐색 코드와 비교해가며 좀 더 연구해봐야겠다. DFS에는 스택! BFS에는 큐!파이썬에서 스택은 list로 쓰고, 파이썬에서 큐는 collections.deque을 쓰고, 파이썬에서 최소힙(과 최대힙)은 heapq로 구현되어 있는 걸 쓰면 된다. 어제 저녁까지 고민하던 문제(’영화관 좌석..

    11/23 (자료 구조와 탐색, 수) TIL

    (어제에 이은) 자료 구조:트리 : 완전 이진 트리의 경우 잎 노드에서 뿌리 노드까지 도달하는 데 O(logN)O(logN)O(logN) 단계가 필요함.힙 : 최대힙과 최소힙이 있음. 완전 이진 트리의 일종이므로 원소 추가와 삭제시 시간 복잡도는 최대 O(logN)O(logN)O(logN)이 된다.그래프 : 노드와 노드 사이의 연결 관계를 강조하여 나타낸 자료 구조. 인접 행렬과 인접 리스트로 표현할 수 있음. 트리와 그래프를 탐색하기:DFS(깊이 우선 탐색)과 BFS(너비 우선 탐색) 모두 인접 리스트를 데이터 삼아 구현을 연습했다. 인접 행렬로 표현한 버전이 연결 관계를 찾을 때 O(1)의 시간만으로 빠르게 찾는다던데, 정작 탐색을 할 때는 어떻게 활용해야 할지 모르겠다. 다이나믹 프로그래밍과 메..