๐Ÿ‘ฆ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„/TIL(Today I Learned)

TIL_220524_ํŒ€ ํ”„๋กœ์ ํŠธ

  • -

ํŒ€ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์ œ์ถœํ•˜๋Š” ๋‚ 

 

๋‚˜์˜ ๋ฐœ์ž๊ตญ์„ ๋Œ์•„๋ณด๋Š” ์‹œ๊ฐ„

 

๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ฐœ์ž๊ตญ

 

GITHUB

 

์ฒ˜์Œ์œผ๋กœ ์•Œ์ฐจ๊ฒŒ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. (๋ฟŒ๋“ฏ)

 

๊นƒ ๊ฐ•์˜๋กœ ๋นŒ๋“œ์—…๋œ ๋‚˜์˜ ๊นƒ ๋Šฅ๋ ฅ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜์—ˆ๋‹ค.

๋Šฅ์ˆ™ํ•˜์ง„ ๋ชปํ•˜๋”๋ผ๋„ ๋ธŒ๋žœ์น˜๋ฅผ ๋‚˜๋ˆ„์–ด ์ž‘์—…ํ•˜๋Š” ์Šต๊ด€
์„ธ๋ฐ€ํ•œ ์ž‘์—…์—๋„ ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋Š” ์Šต๊ด€
์ด์Šˆ ๋“ฑ๋ก๊ณผ ์ด์Šˆ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ž‘์—… ๋‚ด์—ญ์„ ๊ธฐ๋กํ•˜๋Š” ์Šต๊ด€ ๋“ฑ

์•ž์œผ๋กœ ํ˜‘์—…ํ•  ํ˜„์žฅ์—์„œ ํˆฌ์ž…๋˜๊ธฐ ์œ„ํ•œ ๋ฐ‘๊ฑฐ๋ฆ„์„ ๋‹ค์ ธ๊ฐ€๋Š” ์ค‘!!

 


 

๐Ÿ“Œ ํ•„์ˆ˜ ๊ธฐ๋Šฅ

  •  ์‚ฌ๋ฌผ์ธ์‹ ๊ธฐ๋Šฅ
  •  ์—…๋กœ๋“œ ์ด๋ฏธ์ง€ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ ์ถœ๋ ฅ ์„œ๋น„์Šค ((ex. ๋‚จ์„ฑ, ์—ฌ์„ฑ ์„ฑ๋ณ„ ๊ตฌ๋ถ„ ๋“ฑ)
  •  ์ด๋ฏธ์ง€๋งˆ๋‹ค ์ธ์‹ํ•œ ์‚ฌ๋ฌผ์˜ ์ •๋ณด๋ฅผ ๋กœ๊ทธ์— ์ €์žฅํ•ด์ฃผ์„ธ์š” (DB ์ €์žฅ)

๐Ÿ“Œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

  •  ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ์…‹์„ ๋งŒ๋“ค์–ด์„œ ํ•™์Šต
  •  ๋ธŒ๋ผ์šฐ์ €์˜ ์›น์บ  ๊ธฐ๋Šฅ ์‚ฌ์šฉ์œผ๋กœ ์ดฌ์˜ ํ˜น์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‚ฌ๋ฌผ์ธ์‹
  •  ๊ฒฐ๊ณผ ๊ณต์œ  ๊ธฐ๋Šฅ
  •  ํšŒ์›๊ธฐ๋Šฅ
    • ์†Œ์…œ ๋กœ๊ทธ์ธ(๊ตฌ๊ธ€, ์นด์นด์˜ค) ๊ธฐ๋Šฅ

๐Ÿ“Œ ๋„์ „ ๊ณผ์ œ

  •  GIT์˜ Pull Request๋ฅผ ์š”์ฒญ์‹œ ํŒ€์› ์ค‘ ํ•œ ๋ช… ์ด์ƒ์ด ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ›„ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ์•„์ฃผ์„ธ์š”. ๋ฆฌ๋ทฐ๊ฐ€ ๋๋‚˜๋ฉด Merge๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.
  •  ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”. (flask์—์„œ๋Š” render_template ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  json ๋ฐ์ดํ„ฐ๋งŒ ๋ณด๋‚ด์ฃผ๋Š” ๋ฐฉ์‹)
  •  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— Postman์„ ์ ๊ทน ํ™œ์šฉํ•ด์ฃผ์„ธ์š”
  •  jQuery๋Œ€์‹  javascript๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  •  Flask ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ API ๋ชจ๋“ˆํ™”

 

๋งˆ์ง€๋ง‰ ๋‚ ์„ ์•ž๋‘๊ณ  ๊ณ ๊ตฐ๋ถ„ํˆฌ ํ•ด์ค€ ์šฐ๋ฆฌ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ด๋งŒํผ์ด๋‚˜ ์ด๋ค„๋ƒˆ๋‹ค.
์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ์ „๋ถ€ ์ถฉ์กฑํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ, ์„œ๋กœ์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฆฌ๋ทฐํ•˜๋ฉฐ ๋ฐฐ์šฐ๊ณ , ๊ฒฝํ—˜ํ•˜๋Š” ๊ท€ํ•œ ์‹œ๊ฐ„์ด ๋˜์—ˆ๋‹ค.

 


 

flask - blueprint

 

ํ”„๋กœ์ ํŠธ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์ตœ์ข… ๊ตฌ์„ฑ

 

 

์ฒ˜์Œ ์ ์šฉํ•ด๋ณด๋Š” ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋Š” ์ฒ˜์Œ ๊ตฌ์„ฑ์„ ์„ธํŒ…ํ•˜๋Š” ๋ฒ•๋ถ€ํ„ฐ ์ƒ๋‹นํ•œ ๊ธด์žฅ๊ฐ์„ ์ฃผ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ•œ ๋ฒˆ ๊ตฌ์„ฑํ•˜๊ณ  ํ๋ฆ„์„ ์ดํ•ดํ•˜๋‹ˆ ํ™•์‹คํžˆ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ํŒ€์›๊ฐ„์˜ ์ถฉ๋Œ์„ ํ™•์‹คํ•˜๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋„ˆ๋ฌด ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 


 

code : ๊ธฐ๋Šฅ ํŒŒํŠธ (๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๋ณ‘ํ•ฉ ์ด๊ด„)

 

ํšŒ์›๊ฐ€์ž… ์ค‘๋ณต ๊ฒ€์‚ฌ์ฒ˜๋ฆฌ ๋ฐ ๊ณต๋ฐฑ ์ฒ˜๋ฆฌ

backend

    # ์ž…๋ ฅ ์ •๋ณด์— ๋Œ€ํ•œ ์—๋Ÿฌ
    try:
        if not user_id_receive or not email_receive:
            sign_error = 770
            return jsonify({'message': 'fail', 'sign_error': sign_error})
        elif '@' not in email_receive or '.' not in email_receive:
            sign_error = 771
            return jsonify({'message': 'fail', 'sign_error': sign_error})
        elif not password_receive or not password_check_receive:
            sign_error = 772
            return jsonify({'message': 'fail', 'sign_error': sign_error})
        elif password_receive != password_check_receive:
            sign_error = 773
            return jsonify({'message': 'fail', 'sign_error': sign_error})
        elif not user_age_receive:
            sign_error = 774
            return jsonify({'message': 'fail', 'sign_error': sign_error})
            # ์ค‘๋ณต ์ฒ˜๋ฆฌ
        elif db.member.find_one({'user_id': user_id_receive}):
            sign_error = 775
            return jsonify({'message': 'fail', 'sign_error': sign_error})
        elif db.member.find_one({'email': email_receive}):
            sign_error = 776
            return jsonify({'message': 'fail', 'sign_error': sign_error})
    except:
        status = 200
        return jsonify({'message': 'success', 'status': status})

frontend

if (response_json.sign_error == 770) {
    alert("์•„์ด๋”” ํ˜น์€ ์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
    return
} else if (response_json.sign_error == 771) {
    alert("์ด๋ฉ”์ผ ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.")
    return
} else if (response_json.sign_error == 772) {
    alert("๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.")
    return
} else if (response_json.sign_error == 773) {
    alert("๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.")
    return
} else if (response_json.sign_error == 774) {
    alert("๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.")
    return
} else if (response_json.sign_error == 775) {
    alert("์ค‘๋ณต๋œ ์•„์ด๋””์ž…๋‹ˆ๋‹ค.")
    return
} else if (response_json.sign_error == 776) {
    alert("์ค‘๋ณต๋œ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.")
    return
} else {
    alert("๊ฐ€์ž… ์™„๋ฃŒ!")
    window.location.replace(`${frontend_base_url}/templates/login.html`);
}
 

 

์ข…๋ฅ˜๋ณ„ ์—๋Ÿฌ ๊ฒ€์ถœ์— ๋Œ€ํ•œ ์ •์˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.

์ฒ˜์Œ์— ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€ ์ž˜ ๋ชฐ๋ž๋‹ค.(์‚ฌ์‹ค ์ •๋‹ต์€ ์—†๋‹ค.)

ํ•˜์ง€๋งŒ ์ฝ”๋”ฉํ•˜๋ฉด์„œ ํŠœํ„ฐ๋‹˜๊ป˜ ๋“ฃ๊ธฐ๋ก  ์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚˜๋ˆ„์–ด ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ํ˜‘์—…์—์„œ๋„ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•˜์…จ๋‹ค.

ํ˜‘์—…์— ํ•œ ๊ฑธ์Œ ๋‚˜์•„๊ฐ”๋‹ค.

 


 

fetch() ํ•จ์ˆ˜

async function getName() {
    const response = await fetch(`${backend_base_url}/getuserinfo`, {
        headers: {
            'Authorization': localStorage.getItem("token")
        }
    })

    // status 200 ํ™•์ธ ์กฐ๊ฑด๋ฌธ
    if (response.status == 200) {
        response_json = await response.json()
        return response_json.email
    } else {
        return null
    }
}

 

function ํ•จ์ˆ˜๋ช…() ์œผ๋กœ ์‹คํ–‰ ์‹œ backend ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ await fetch(backend ๊ฒฝ๋กœ) ์ •์˜ ํ•˜๊ณ  
backend ๋กœ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ , response๋ฅผ _json ํ™” ํ•˜์—ฌ return ์œผ๋กœ ๋ณด๋ƒ„

๋Œ€๊ฐ• ์ด๋Ÿฐ ๋กœ์ง
๋„ˆ๋ฌด ์ƒ์†Œํ•œ ๋‚˜๋จธ์ง€ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ฝค ์• ๋จน์—ˆ์ง€๋งŒ, ์ƒ๊ฐ๋ณด๋‹ค ์žฌ๋ฐŒ๋‹ค.

 

 

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.