1월 15일 여정 7일차이다.
로그인 기능을 구현 중에 methods를 GET을 선택해야 하는지 POST를 선택해야 하는지에 대해 문제가 발생하였다. 이 문제를 고민하는 제일 큰 이유는 methods에 따라 코드가 달라지기 때문이었다.
일단 2가지 methods로 코드를 짰다. 그리고 구글에 검색해보았다. 그러나 나의 검색 방법이 잘못 된건지 내가 원하는 답이 없었다.
결과적으로 stakoverflow를 가서 검색하여 찾았다.
밑에 주소이다.
https://stackoverflow.com/questions/43965316/for-login-get-or-post
결과적으로 말하자면 POST라고 한다. 그렇지만 가장 바람직한 것은 SSL(HTTPS)라고 한다. GET 요청의 경우 서버 데이터의 상태를 변경하지 않기 때문에 쿼리(쿼리에 담아 보낼 경우)를 캐싱할 경우 보안에 취약하다고 한다. 반면에 POST는 서버 상태를 변경시키기 때문에 캐싱을 하지 않아서 GET보다는 보안에 용이하다고 한다.
(캐시 : 컴퓨터 성능 향상을 위해 사용되는 메모리 , 캐싱 : 이 캐시 영역으로 데이터를 접근하는 방식)
function find_login() {
let id = $('#id').val()
let psswd = $('#password').val()
$.ajax({
type: 'POST',
url: '/homework/login',
data: {id: id, psswd: psswd},
success: function (response) {
let rows = response['msg']
if(rows[0].length == 1 && rows[1].length == 0){
console.log('비밀번호가 틀렸습니다.')
} else if(rows[0].length == 0 && rows[1].length == 1){
console.log('아이디가 틀렸습니다.')
} else if(rows[0].length == 0 && rows[1].length == 0){
console.log('회원가입 해주세요.')
} else if(rows[0].length == 1 && rows[1].length == 1){
console.log('회원님 환영합니다.')
}
}
})
}
@app.route("/homework/login", methods=["POST"])
def login_POST():
id = request.form['id']
psswd = request.form['psswd']
usersID = list(db.login.find({'id': id}, {'_id': False}))
usersPSW = list(db.login.find({'password': psswd}, {'_id': False}))
return jsonify({'msg': [usersID, usersPSW]})
결과적으로 내가 짠 코드이다. POST를 이용하였지만, 물론 이 중간에 클라이언트 정보를 https로 암호화하고, 비밀번호 역시 암호화 하는 과정이 필요하다.
GET은 request body에 정보를 실지 않는다. 그래서 보통 URL에 정보를 담게 된다 또한 DB를 변경하지 않는다. 반면에 POST는 request body라는 곳에 정보를 실는다 또한 DB를 변경한다. 나는 로그인이라는 것이 DB를 변경하지 않기 때문에 GET이라고 착각을 한 것 같다.
로그인 기능을 만든것과 궁금증을 해결한 나에게 오늘도 칭찬의 박수를 보낸다.