1월 13일 여정 5일차이다.
입학 시험을 치렀다. 내가 열심히 공부를 한 것인지 아니면 난이도가 쉬웠던 것인지는 모르겠지만, 예상과는 다르게 잘 풀어낸 느낌이다.
입학 시험 준비 중에 어려웠던 부분에 대하여 정리하고자 한다. 기능은 간단히 이러하다.
문제는 보여주는 것은 문제가 되지 않았다. 특정 포스트한 영화를 삭제하려고 할 때 문제였다. 막상 기능을 구현하려고 하니 머리 속이 복잡해졌다.
일단 나는 자바스크립트로 접근을 하였다. 삭제버튼을 눌렀을때 parentNode를 타고 올라가 영화를 제목만 불러오려고 시도하였다. 제목을 일종의 ID로 사용하려 했다. 그러나 실패하였다. 왜냐하면 기본적으로 짜여있는 코드가 제이쿼리였고, 그리고 그렇게 접근하기에는 너무 복잡해졌다.
내가 배운 것을 가만히 생각해보았다. 이미 나는 웹개발 5주차 때 버킷리스트에서 삭제하는 법을 배웠었다.
@app.route("/movie", methods=["POST"])
def movie_post():
count = len(movie_list) + 1
doc ={
'title': title,
'image': image,
'desc': desc,
'star': star_receive,
'comment':comment_receive,
'num':count
}
일단 서버 쪽에서 영화를 저장 할 때, 영화 정보에 count라는 숫자를 같이 넣었다. 이것은 나중에 내가 어떤것을 삭제할지 구별하기 위해서이다.
@app.route("/movie/remove", methods=["POST"])
def movie_remove():
num_receive = request.form['num_give']
db.movies.delete_one({'num': int(num_receive)})
return jsonify({'msg':'삭제 완료!'})
위 코드 역시 서버쪽이다. 어떤 정보를 갱신 혹은 업데이트 하기에 POST로 선택하였다. 그리고 프론트에서 num_receive로 값을 받았다. 그것으로 delete_one이라는 것으로 num값만 찾아서 Flask로 DB 데이터 삭제하기를 실행하였다.
for(let i = 0; i < rows.length; i++){
let num = rows[i]['num']
let temp_html = ` <button onclick="removeMovie(${num})">삭제하기</button>
</div>
</div>
</div>`
$('#cards-box').append(temp_html)
}
}
})
}
프론트에서는 버튼에 onclick으로 removeMovie(${num}) 함수에 인자값으로 num을 넘겨주었다. 이 temp_html을 cards-box에 append 하였다.
function removeMovie(num) {
$.ajax({
type: 'POST',
url: '/movie/remove',
data: {num_give:num},
success: function (response) {
alert(response['msg'])
window.location.reload()
}
});
}
프론트 removeMovie(num) 함수에서 받은 num 값을 그대로 POST로 백엔드에 data에 실어서 넘기고 있다.
최종적으로 그럼 원하는 것이 삭제가 완료된다.
특정한 무엇인가를 삭제하려 할때 보통은 값에 ID를 많이 붙인다. 자바스크립트를 배울 때도 그래왔고, 리엑트를 배울때 역시나 그랬다. 내가 접근하려 했던 parentNode는 어떻게 보면 내가 접근부터 잘못하고 있다는 것을 알려주고 있다. 항상 배운데로 접근하는 노력이 필요한 것 같다.
내일(1월 14일) 입학 시험 결과가 나온다. 나의 WIL 첫 목표가 잘 이루어 지기를 기원하는 바이다.