-
WIL 2. 웹개발 종합반 5주차(7월 1주차)HangHae99/WIL 2023. 7. 9. 00:02
< WIL이란? >
Weekly I Learend의 약자로, 주간 학습한 내용을 정리 후 공유하기 위해 작성하는 글이다.
아래는 웹 개발 종합반 강의 5주차를 1회독하면서 정리한 내용이다.
< 새로운 OS, 또 다시 세팅>
5주차 강의부터는 mac으로 개발환경을 옮겼다.
mongoDB 연결 하는 과정에서 오류가 있었는데, certifi 패키지를 가상환경에 먼저 설치해주니 해결되었다.
from pymongo import MongoClient import certifi ca = certifi.where() client = MongoClient('mongodb+srv://sparta:<password>@cluster0.wtgsmkg.mongodb.net/?retryWrites=true&w=majority', tlsCAFile=ca) db = client.dbspartaMongoClinet 에 사용되는 url은 공유할 때 유의해야할 필요가 있겠다.
<버킷리스트 프로젝트>
‘이루고 싶은 것을 입력하세요’ 빈칸에 버킷리스트를 적고,
‘기록하기’ 버튼을 누르면 DB에 등록되고,
이것을 다시 GET해와 홈페이지에 나타나도록(list up) 하는 프로젝트다.

1. 데이터 저장 기능 구현 (POST 연습하기: 버킷리스트 기록)
- 서버 만들기
@app.route("/bucket", methods=["POST"]) def bucket_post(): bucket_receive = request.form['bucket_give'] doc = { 'bucket': bucket_receive } db.bucket.insert_one(doc) return jsonify({'msg': '저장 완료!'})기존 sample_give에서 bucket_give로 바꿔주고,
dbprac.py 파일에서 저장 예시를 가져와 맞게 수정한다.
doc을 생성할 수 있도록 명령어를 입력한다.
(dbprac.py 파일이 없어서 다시 만든다고 30분 정도 쓴듯 하다.)
- 클라이언트 만들기
function save_bucket() { let bucket = $('#bucket').val() let formData = new FormData(); formData.append("bucket_give", bucket); fetch('/bucket', {method: "POST",body: formData,}).then((response) => response.json()).then((data) => { alert(data["msg"]); window.location.reload(); }); }프론트에서는 save_bucket() 함수를 수정해준다.
클라이언트가 ‘이루고 싶은 것을 입력하세요’ 칸에 입력한 데이터를 받는 기능을 구현한다.
이 칸과 연결된 곳의 id는 bucket 이다.
이 함수를 통해 사용자가 입력한 데이터가 백엔드로 전송되고(POST 연결), 백엔드에서는 받은 데이터를 지정해둔 doc형식으로 변환하여 MongoDB에 저장한다.
window.location.reload(); 를 통해 데이터가 전송되면 홈페이지가 자동으로 새로고침 될 수 있도록 한다.
2. 데이터 불러오기 및 전시하기 (GET 연습: 버킷리스트 보여주기)
- 서버 만들기
@app.route("/bucket", methods=["GET"]) def bucket_get(): all_buckets = list(db.bucket.find({},{'_id':False})) return jsonify({'result': all_buckets})bucket_get() 함수를 수정한다.
변수 이름은 임의로 설정 가능하다.
db의 bucket collection으로 부터 모든 데이터를 받는 변수를 만들어주고,
결과로 변수의 값을 을 반환해주도록 한다.
- 클라이언트 만들기
function show_bucket() { fetch('/bucket').then(res => res.json()).then(data => { console.log(data) alert(data["msg"]); }) }show_bucket() 함수를 수정한다.
여기서 data는 앞서 구현한 bucket_get() 함수 안의 ’result': all_buckets 와 동일하다.
따라서 코드를 다음과 같이 수정한다.
show_bucket(); }); function show_bucket() { fetch('/bucket').then(res => res.json()).then(data => { let rows = data['result'] console.log(rows) }) }rows 변수를 선언하여 data를 넣고,
콘솔을 통해 찍어본다.

data를 모두 가져와 console 에 찍어보고 정상 작동하는지 확인한다. 콘솔을 통해 확인된 이 list 는 forEach 문을 통해 하나씩 돌려주도록 한다.
function show_bucket() { fetch('/bucket').then(res => res.json()).then(data => { let rows = data['result'] rows.forEach((a)=>{ let bucket = a['bucket'] console.log(bucket) }) }) }다시 console.log() 를 통해 중간 결과값을 확인해주는 것이 필요하다.

1개의 결과값씩 차례대로 출력되는지 확인 마지막으로 temp_html 으로 홈페이지에 출력되도록 코딩한다.
temp_html + append
forEach 문이 돌기 전에 empty로 기존 리스트를 삭제해준다.
function show_bucket() { fetch('/bucket').then(res => res.json()).then(data => { let rows = data['result'] $('#bucket-list').empty() rows.forEach((a)=>{ let bucket = a['bucket'] let temp_html = `<li> <h2>✅ ${bucket}</h2> </li>` $('#bucket-list').append(temp_html) }) }) }아직 temp_html 의 용법을 정확히 모르겠다.
일단은 강의를 따라 웹페이지는 완성했다.

- 학습 포인트(보완 사항 도출)
- 정확히 이해가 안되는 것들도 있지만, 비슷한 프로젝트를 통해서 점점 이해가 되는 부분이 많아지고 있다. (회차 반복시에도 모르는 부분은 정리하고 넘어가는 것이 필요하겠다.)
- 웹개발종합반 강의 수강과 정보처리기사 자격증 공부와 병행하다보니, 시간 계획을 잘 세우는 것이 필요하겠다.
*5주차 강의 나머지 내용 정리는 WIL 2-2를 통해 게시 예정이다
'HangHae99 > WIL' 카테고리의 다른 글
WIL 4. 웹개발 종합반 2주차 2회독(7월 3주차) (1) 2023.07.16 WIL 3. 웹개발 종합반 1주차 2회독(7월 2주차) (0) 2023.07.14 WIL 2-2. 웹개발 종합반 5주차(7월 1주차) (0) 2023.07.09 WIL 1-2. 웹개발 종합반 4주차(6월 5주차) (0) 2023.06.30 WIL 1. 웹개발 종합반 4주차(6월 5주차) (0) 2023.06.29