스파르타코딩클럽 웹개발종합반

[스파르타코딩클럽] 웹개발 종합반 5주차 기록

고을마을 2022. 3. 16. 18:00

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5주차 강의를 들었다.

4주차 때 했던 Flask 프레임워크로 API를 만드는 과정을 다시한번 복습했고,

EC2에 homework 아이유 팬명록을 올려보기도 했다.

 


5-2 [버킷리스트] 프로젝트 세팅에서부터 5-6 [버킷리스트] POST 연습(완료하기)까지

 

위와 같은 페이지를 만들어 보았다.

 

우선

Flask, pymongo, dnspython 패키지를 설치해주었고

static, templates 폴더와 index.html, app.py를 만들어주었다.

 

@app.route("/bucket", methods=["POST"])
def bucket_post():
    bucket_receive = request.form['bucket_give']
    bucket_list = list(db.bucket.find({}, {'_id': False}))
    count = len(bucket_list) + 1

    doc = {
        'num' : count,
        'bucket': bucket_receive,
        'done': 0
    }
    db.bucket.insert_one(doc)
    return jsonify({'msg': '등록 완료'})

 

서버는 bucket을 받아와서 db에 저장해주면 됐다.

근데 완료를 누르면 지워지게 처리가 되야하기에 bucket에 num과 done을 함께 넣어줘야 했다.

'num'은 bucket 갯수마다 1,2,3,4... 형태로 붙여지는 숫자이기에 

bucket_list = list(db.bucket.find({}, {'_id': False}))을 통해 db에 저장된 bucket_list를 찾아주고,

문자열 개수를 반환해주는 함수 len()을 활용해 count = len(bucket_list) + 1을 넣어주었다. 

 

function save_bucket() {
    let bucket = $('#bucket').val()
    $.ajax({
        type: "POST",
        url: "/bucket",
        data: {bucket_give: bucket},
        success: function (response) {
            alert(response["msg"])
            window.location.reload()
        }
    });
}

 

클라이언트는 bucket에 대한 정보만 서버로 보내주고, 

서버에서 받아오면 msg를 보여주고 새로고침이 되도록 했다.

 

@app.route("/bucket", methods=["GET"])
def bucket_get():
    bucket_list = list(db.bucket.find({}, {'_id': False}))
    return jsonify({'buckets': bucket_list})

 

서버에서는 받을거없이 buckets에 대한 정보를 보내주기만 하면 됐다.

 

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

                let temp_html = ``
                if (done == 0){
                    temp_html = `<li>
                                    <h2>✅ ${bucket}</h2>
                                    <button onclick="done_bucket(${num})" type="button" class="btn btn-outline-primary">완료!</button>
                                </li>`
                } else{
                    temp_html = `<li>
                                    <h2 class="done">✅ ${bucket}</h2>
                                </li>`
                }
                $('#bucket-list').append(temp_html)
            }
        }
    });
}

클라이언트에서는 buckets을 잘 받아서 반복문을 돌리고 temp_html에 붙여주기만 하면 됐다.

 

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

 

이제 서버에선 num을 받고 done의 숫자를 1로 업데이트 해주었다.

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

num_receive는 문자열로 들어오기에 int(num_receive)를 달아주는 것이 중요했다.

 

function done_bucket(num) {
    $.ajax({
        type: "POST",
        url: "/bucket/done",
        data: {num_give: num},
        success: function (response) {
            alert(response["msg"])
            window.location.reload()
        }
    });
}

클라이언트는 num을 서버에 주고 업데이트 된 done 1을 받아와서 보여주면 됨.

그리고 새로고침!

 


 

5-7 내 프로젝트 서버에 올리기에서부터 5-14 5주차 끝 & 숙제 설명까지

 

ec2 서버를 사고 접속하는 방법을 배워보았다. 

Git bash를 사용해봤다.

ls: 내 위치의 모든 파일을 보여준다.

pwd: 내 위치(폴더의 경로)를 알려준다.

mkdir: 내 위치 아래에 폴더를 하나 만든다.

cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.

cd .. : 나를 상위 폴더로 이동시킨다.

cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기

rm -rf [지울 것]: 지우기

sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)

 

#ip 넣어주기
$ ssh -i /c/Users/고승유/Desktop/sparta_mykey.pem ubuntu@13.125.64.163

# python3 -> python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

# pip3 -> pip
sudo apt-get update
sudo apt-get install -y python3-pip
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

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

# pip로 패키지 설치하기
pip install (패키지 명)

# ssh 접속을 끊어도 서버가 계속 돌게 하기
nohup python app.py &

# 강제 종료하기
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill

 

filezilla로 ec2에 업로드 해보았다.

AWS에서 80, 5000포트를 열어주고 미리 구입해둔 도메인을 연결시켜줬다. 

 

http://sparta-systudy.shop/

 

아이유(IU) 팬명록

응원 한마디 남기고 가세요!

sparta-systudy.shop

 

og태그 까지 넣어줬다.

<meta property="og:title" content="아이유(IU) 팬명록" />
<meta property="og:description" content="응원 한마디 남기고 가세요!" />
<meta property="og:image" content="https://pds.joins.com/news/component/htmlphoto_mmdata/201901/09/htm_2019010981529397722.jpg" />

 

 

이로써 웹개발 종합반 강의가 종료되었다.

잘 이해가 되지 않는 부분들이 여러개 있었는데  계속 반복 학습해서 완벽히 이해할 수 있도록 해야겠다.

항해99 7기가 시작되기 전 사전 준비 스터디를 신청해서

부트캠프 입소 전 보완해야할 사항을 체크해봐야겠다.