항해99 사전스터디 - 웹개발 종합반[5주차] - 완강!

LIHA·2023년 1월 2일
0

항해99

목록 보기
6/54
post-thumbnail
post-custom-banner

버킷리스트 만드는데 순서를 거꾸로 해볼라니까 뭔가 되질 않았다!
했던 여러가지 실수들이

  1. JS 문법을 검색해야 하는데 파이썬 문법을 검색해서 reverse만 나왔다.
  2. let i = rows.length;로 선언하니 동작하지 않았다.
    ▶rows.length-1 이어야 동작했다. length-1이면 인덱스 수니까, 5번째여도 4번이기 때문에 그런듯 했다.
  3. i도 i > 0; 으로 선언하니 동작하지 않았다.
    ▶인덱스가 0부터 시작하기 때문인지, 0번 뺀 나머지는 불러와질 줄 알았는데 이 수식까지 정확하게 맞추지 않으니 아예 데이터가 뜨지 않았다.

영준님이 팬명록 배포때 쓰신 코드를 토대로 JS for문의 역순 문법을 알고는 있었는데, 왜 그렇게 나오는지 궁금해서 하나씩 바꿔봤더니 기가막히게 동작을 안한다. 역시, 세상 쉬운게 없고만🤔


        function show_bucket() {
            $.ajax({
                type: "GET",
                url: "/bucket",
                data: {},
                success: function (response) {
                    let rows = response['buckets']
                    for (let i = rows.length-1; i >= 0; i--) {
                        let bucket = rows[i]['bucket']
                        let done = rows[i]['done']
                        let num = rows[i]['num']

그리고 자료형의 중요성!

@app.route("/bucket/done", methods=["POST"])
def bucket_done():
    num_receive = request.form['num_give']
    db.bucket.update_one({'name': int(num_receive)}, {'$set': {'num': 1}})
    return jsonify({'msg': 'BUCKET 완료!'})

db.bucket.update_one({'name': int(num_receive)}, {'$set': {'num': 1}})

클라이언트에서 서버로 숫자를 넘겨줘도 서버는 다 문자로 받는다. 그러므로 다시 숫자로 받아오려면 num_receive에 int()를 씌워주어야 한다!
자료형만 주의하면 큰 문제는 없을 듯 하다.

은 무슨, 내 버킷리스트는 버킷을 차기도 전에 고장이 나부렀다!!

으아아아아아 왜안동랜ㅇ래어ㅑㅐ어래야너래얀러애너랴ㅐㄴㅇ!!!!

    num_receive = request.form['num_give']
    db.bucket.update_one({'name': int(num_receive)}, {'$set': {'done': 1}})
    return jsonify({'msg': 'BUCKET 완료!'})
   

▶왜 안되긴 멍충아 num을 name으로 받아오니까 안되지!!
변수 키값이 num, bucket, done 밖에 없는데 어디 저세상에 있는 변수인 name을 받아오겠다고 하니 될 리가 없었다.
name은 이 구문을 복붙해올때 원본에 있던 키값. 'name':'bobby'였음.
해결했다!!

도중에 DB에서 자료를 삭제했더니 num 순서대로 나오지 않는다. 순차적으로 정렬할 순 없을까?🤔

  temp_html.sort()
  console.log(temp_html)

->실패!

rows.sort(num)
-> 실패!

  	 {return a.num < b.num ? -1 : a.bum > b.num ? 1: 0})

->실패!

자바스크립트는 배열에서 요소를 꺼내서 정렬하기 때문에 Array.sort가 기본이다. 그렇다면... 여기서 쓸수 있는 배열은 rows인데🤔

          rows.sort(function (a, b) {
              return a.{num} ? -1 : a.bum > b.num ? 1 : 0})
           console.log(rows.sort())

->실패! 이것도 안되넹... 힝구

    all_bucket = list(db.bucket.find({}, {'_id': False}).sort({'level': -1, 'xp': -1}))

->으아아 이거 했더니 아예 안나와!!!😭😭😭😭😭😭

사랑해요 스택 오버플로우!!!! 찾았따!!!!🤩🤩

mongoDB에 있는 데이터를 정렬된 상태로 출력되게 하는 방법!

https://stackoverflow.com/questions/8109122/how-to-sort-mongodb-with-pymongo

https://stackoverflow.com/questions/64609867/how-do-i-sort-database-data-in-mongodb-javascript-node-js
생각해보면 이 글도 같은 답을 주고 있었는데, 솔루션을 그대로 복붙한 탓에 키값이 내 데이터랑 다른 줄도 모르고 뭐야, 안되잖아😭 했었다.

▶html쪽을 건드릴게 아니라 mongoDB에서 넘겨줄때 애초에 sorted 된 채로 넘겨주면 되는구나! 번호가 중구난방이라 정렬하고 싶었는데, 만족 :)

※다만, 나는 추천해준 방법 중 pymongo 참조하는 것이 불가능해서, 그냥 sort('키값', -1(오름차순)) 을 사용했다.

db.Account.find().sort("UserName")
db.Account.find().sort("UserName",pymongo.ASCENDING)
db.Account.find().sort("UserName",pymongo.DESCENDING)

->나는 왜인지 이 방법을 쓸 수 없었다. 그래서 아랫 방법을 사용!

db.Account.find().sort('UserName', -1)
db.Account.find().sort('UserName', 1)

검색어 : python mongodb sort db.user.find


이제 나의 팬명록을 전세계(?)에 등록할 차례.
aws EC2에서 서버를 슥 대여할 것. 이용할 서버는 Ubuntu 20.04이다.
Linux와 만나는건 처음이네😆

이게 내 서버인가? 호오🤔
리눅스 특: 아무 일도 안 일어나면 잘 된것임!
현재 디렉토리 시점에서의 폴더를 보자 - ls
특정 디렉토리로 이동 - cd (디렉토리 이름) ex) cd sparta
이 폴더 밖으로 나감 - cd ..

파일질라에 올려야 할 파일들 : app.py, static, template(이 안에 index.html이 있을 것)
실수로 venv를 올렸다면 -> 삭제하면 됨.

localhost:5000에 접속이 되지 않는다! -> :5000으로 들어갈 수 있게 열어주지 않아서 그렇다. EC2 콘솔에서 인바운드 규칙을 편집해주자. 이때 여기서 :5000과 :80을 열어줄 것.

:5000은 뭐에요? 어떻게 뗄 수 있어요? :80은요?
네이버는 80포트를 써요. 하지만 우리는 5000포트를 쓰지. 그래서 우리는 깃배쉬 마지막 줄에 포트 5000으로 리다이렉트 해달라는 명령어를 넣었다.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

localhost:5000에서 :5000을 뗄 수 있는 명령어!

  • 네? 네이버가 80포트 쓰는게 저랑 뭔 상관이에요?
    ▶http 요청은 기본으로 80포트를 씁니다. 그러나 우리는 5000포트를 쓰고있기 때문에 매번 :5000을 안붙이면 원래는 접속이 안됨.

  • 나도 80포트처럼 편하게 쓰고싶은데!😫
    ▶그래서 80포트의 요청을 5000포트로 넘겨주는 기능을 걸어 놓았습니다!
    -나는 원래 80포트가 아니니 번호를 생략할 수 없는데,
    -그래서 80포트 쓰는것처럼 주소만 입력하면 요청은 당연히 80포트로 가지 내 사이트가 뜨는게 아닌데,(내 사이트는 5000포트니까)
    -그 요청을 가로채서 5000포트로 넘겨 내 사이트를 요청 결과로 띄워주는것!

즉, 원래 80포트인것처럼, 주소만 입력해도 접속이 되게끔 해주는 것.

이게 포트 포워딩(port forwarding)!


어? 잠깐만. 뭐야 나 이거 이해안돼. 뭐야? 뭐지? 일단 잠을 좀 자고 일지를 다시 정리해보자... 어... 뇌가 고장났나보다... 디버깅이 필요하다... 잠시만... ps -ef | grep 'python lihas_brain.py' | awk '{print $2}' | xargs kill 좀 입력하고... 으어어...
수면부족으로 인한 멘붕을 뒤로하고 이해했다! 😆

(이미지 출처 : 합쥐 작가님 https://www.instagram.com/hab__g/)

뭐야, 기껏 배포가 코앞인데 응원 남기기도 저장도 되지 않는다...!! DB에 저장돼있는 데이터도 불러와지지 않는다...!!! 어쩌지...? 뭐가 문제지...? 인덱스 코드를 봐도 다른 분들하고 크게 문제되게 다를건 없는데...? 마음이 얼어붙는다... 🥶🥶🥶🥶
app.py부터 index.html까지 몇번을 다 봤는데도... 문제 없는 것 같은데도... 뭐지? 왜 이러지...? 마음가짐의 문제인가...? 착한 사람만 코멘트 가능...? 지금까지 잘못 살아온 인생에 대한 UP-BO...?

(오늘따라 수달로 자주 변하는 것 같은 나)

▶답을 찾았다! mongoDB에서 IP를 Network Access 허용하지 않았기 때문!!
이모양으로 살았는데도 다행히 업보는 아니었다
고마워요 즉문즉답!! 역시 선배들이 먼저 축적한 지식...!! 달다!!(?)

https://spartacodingclub.kr/community/fastqna/all/639f2fd69c58e43b43a05113/%EC%9B%B9%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80%20%EC%99%84%EB%A3%8C%ED%96%88%EB%8A%94%EB%8D%B0%20%ED%8C%AC%EB%AA%85%EB%A1%9D%EC%9D%98%20'%EC%9D%91%EC%9B%90%20%EB%82%A8%EA%B8%B0%EA%B8%B0'%20%EB%B2%84%ED%8A%BC%EC%9D%B4%20%EC%95%88%EB%88%8C%EB%9F%AC%EC%A0%B8%EC%9A%94?origin=shared

기쁜 마음이 여기까지 전해지는 것 같은 '아!!!!' 씨의 코멘트. 절대 저라는 건 아닙니다.

12기 동료들이 벌써 100명이 넘은 모양이다. 1등은 언제 승선 하신걸까?🤔
모쪼록 우리 동기들, 같이 무사히 항해를 마쳐 저마다 원하는 곳으로 갈 수 있었으면 :)

네...!!!!🥺🥺🥺🥺🥺

그저 르탄이의 귀여움에 부담도 적다니 들어나 볼까? 싶어 시작했던 내배단 국비수업부터 늘 재미있게 이끌어주신 범규 대표님.

수학과학에 빠삭한 천재들이나 하는줄 알았던 코딩을 배울 수 있게 해주신 덕분에 항해까지 승선할 수 있었다. :9

이렇게 적으니까 되게 홍보글 같지만 제 돈 펑펑 내고 배웁니다🤤...
제게는 스코클이 취향에 잘 맞았고, 비전공 노베이스 입문자 눈높이에 맞춘 설명 덕분에 쉽고 재미있게 배우고 이해할 수 있었다는 개인적 의견입니다.😎
누가 html의 class를 짱구바지로 설명해 주겠습니까... 범규 대표님 수업 듣다가 python.org 같은데 가서 설명 보면 kijul 합니다. 저도 알고싶지 않았..(?)

(근데 범규 대표님 수업 듣다가 다른 데 가서 갑자기 알고리즘이니 뭐니 들으려고 하면 진짜 이렇게 됩니다. 우주미아 된 기분. 진짜 스스로의 지능을 의심하게 됨. 강사님 입에서 나오는 모든 글자를 단 한 개도 이해하지 못하겠는데 저 분은 이걸 이해하고 이걸로 일하고 돈을 버신대. 갑자기 왱알왱알해짐. 이런 기분을 어떻게 아냐면 나도 알고싶지 않았음.)

뭐, 아무튼.
보통 게임은 백엔드 언어인 C++이나 C#으로 만들기 때문에, 마찬가지로 C++ 기반인 언리얼엔진 엔지니어를 희망하는 나는 적성인 프론트엔드와의 선택에서 고민을 하는 중이지만...🙄

일단 지금 마음은... 도와줄 수 있는 전문가가 있을 때 어려운걸 해두지 않으면 혼자서는 영원히 못 할것 같아서, 주특기를 바꾸고 싶진 않다는 입장...인데, 이건 개발자인 애인과 좀더 대화를 해봐야겠다.🤔

우리가 과연 끝까지 살아남아 주특기를 지키고 봄을 맞을 수 있을까?
모쪼록 어떤 길로 가든 항해를 함께 끝마치고 더 넓은 바다에서 만날 수 있었으면 좋겠다. :)

만세!

profile
갑자기 왜 춤춰?
post-custom-banner

0개의 댓글