๐Ÿ”ฅ TIL - Day 21

Kim Dae Hyunยท2021๋…„ 10์›” 6์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
24/93

๐Ÿ“Œ ์ธ์ฆ... ์ถ”๊ฐ€..

1์ฐจ ํ”„๋กœ์ ํŠธ ๋•Œ ์‹œ๊ฐ„์ด ๊ธธ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์„ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋ชฉํ‘œ๋กœ ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋งŒ ์‹ ๊ฒฝ์ผ๋‹ค. 2์ฐจ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์ธ์ฆ๋กœ์ง์€ ๊ตฌํ˜„๋˜์—ˆ์œผ๋‹ˆ ์ด์ œ ๊ธฐ์กด ๊ธฐ๋Šฅ์— ์ธ์ฆ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๋‹ค.

์˜ค๋Š˜ ๋ชฉํ‘œ๋กœ ํ•œ ์ธ์ฆ๊ด€๋ จ ์ด์Šˆ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

JWT ํ† ํฐ ๋ฐฉ์‹์˜ ์ธ์ฆ์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ํ† ํฐ์€ ์ฟ ํ‚ค์— ๋‹ด์•„์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๊ฒ€์ฆํ•˜๋ ค๋ฉด ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฟ ํ‚ค์— ๋‹ด๊ธด token์ด ์ „๋‹ฌ๋œ๋‹ค. ์ „๋‹ฌ๋œ ํ† ํฐ์˜ ํŽ˜์ด๋กœ๋“œ ๋ถ€๋ถ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ decode๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ํŽ˜์ด๋กœ๋“œ์˜ user_id๊ฐ€ ์œ ํšจํ•œ user_id์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ† ํฐ์„ ๊ฒ€์ฆํ•œ๋‹ค. ํ† ํฐ ๊ฒ€์ฆ ๋กœ์ง์€ ์ดํ›„ ์ œ๋Œ€๋กœ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค. (์ž„์‹œ !!)

# ํ† ํฐ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ
def verify_token(mytoken):
    # ์ธ์ฝ”๋”ฉ๋œ ํ† ํฐ์˜ payload ๋ถ€๋ถ„ ๋””์ฝ”๋”ฉ
    token = jwt.decode(mytoken, jwt_secret, algorithms=['HS256'])
    # ๋””์ฝ”๋”ฉ๋œ payload์˜ user_id๊ฐ€ users DB์— ์žˆ๋Š”์ง€ ํ™•์ธ
    user = db.users.find_one({'user_id': token['user_id']}, {'_id': False})

    return user

์š”๊ตฌ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•ด๋ณด์ž.

  • ํ˜„์žฌ ์ธ์ฆํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์ถ”๊ฐ€ํ•œ ์ฆ๊ฒจ์ฐพ๊ธฐ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์‚ญ์ œ ๋˜ํ•œ ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ์‚ฌ๋žŒ๋งŒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ํ–ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

์ฆ๊ฒจ์ฐพ๊ธฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” DB(์ปฌ๋ ‰์…˜)์ด user_id๋ฅผ ๊ฐ€์ง„๋‹ค๋ฉด ๋ชจ๋“ ๊ฒŒ ํ•ด๊ฒฐ๋œ๋‹ค. ์ง€๊ธˆ ์ƒ๊ฐํ•˜๋‹ˆ ๋‹น์—ฐํ•œ๊ฑด๋ฐ ์ฐธ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค..

ํ•˜๋‚˜์”ฉ ๋กœ์ง์„ ๊ฒ€์ฆํ•ด๋ณด์ž.

1. ์ž์‹ ์ด ์ถ”๊ฐ€ํ•œ ์ฆ๊ฒจ์ฐพ๊ธฐ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
์ฆ๊ฒจ์ฐพ๊ธฐ ์กฐํšŒ API ํ˜ธ์ถœ์‹œ ํ† ํฐ๊ฒ€์ฆ์„ ์œ„ํ•ด ์ฟ ํ‚ค์—์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ user_id๋ฅผ ๊บผ๋‚ด์˜ฌ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊บผ๋‚ด์˜จ user_id๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ปฌ๋ ‰์…˜์„ ์กฐํšŒํ•œ๋‹ค. ์ฆ๊ฒจ์ฐพ๊ธฐ ์ปฌ๋ ‰์…˜์—๋Š” ๋“ฑ๋ก์‹œ user_id๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ž์‹ ์ด ์ถ”๊ฐ€ํ•œ ์ฆ๊ฒจ์ฐพ๊ธฐ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

2. ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ํด๋ผ์ด์–ธํŠธ๋งŒ ํ•ด๋‹น ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
์ฆ๊ฒจ์ฐพ๊ธฐ ์‚ญ์ œ API ํ˜ธ์ถœ์‹œ ํ† ํฐ๊ฒ€์ฆ์„ ํ†ตํ•ด ์–ป์€ user_id์™€ ์‚ญ์ œํ•˜๊ณ ์ž ํ•˜๋Š” ์ฆ๊ฒจ์ฐพ๊ธฐ๋กœ ๋“ฑ๋ก๋œ ๋ฒ•์•ˆ์˜ ID ๋ฅผ ์กฐ๊ฑด์œผ๋กœ delete_one ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

3. ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.
์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ API ํ˜ธ์ถœ์‹œ ํ† ํฐ๊ฒ€์ฆ์„ ํ†ตํ•ด ์–ป์€ user_id๋ฅผ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ปฌ๋ ‰์…˜์— ์ถ”๊ฐ€ํ•˜๋˜๋Š” Document์— ์ถ”๊ฐ€ํ•œ๋‹ค.


ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์ธ๋ฐ ๊นŠ๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋Œ€๋œธ ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.. ํ•œ ๊ฐœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ์–ด๋Š ์ •๋„ ํฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋†“๊ณ  ์‹œ์ž‘ํ•ด์•ผ๊ฒ ๋‹ค.


๐Ÿ“Œ mongoDB update $push, $unset

์ฆ๊ฒจ์ฐพ๊ธฐ API์— ์ธ์ฆ ์ถ”๊ฐ€ ๊ตฌํ˜„์‹œ ์ถ”๊ฐ€๋กœ ์•Œ๊ฒŒ๋œ mongoDB ๊ด€๋ จ ๊ธฐ์ˆ ์ด๋‹ค.

์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€์‹œ ๋“ฑ๋ก๋œ ๋ฒ•์•ˆ์˜ ID๋ฅผ user ์ปฌ๋ ‰์…˜ ์ชฝ์—๋„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด์„œ ๊ตฌํ˜„ํ•˜๋ ค๋Š”๋ฐ ๋”ฑ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค.

{
  ...,
  bookmarks: [
    bookmark_id1, bookmark_id2
  ],
  ...
}

์œ„ ํฌ๋ฉง์œผ๋กœ Document๋ฅผ ๊ตฌ์„ฑํ–ˆ์„ ๋•Œ bookmars ์˜ ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ([]) ํ˜•ํƒœ์ธ๋ฐ ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋˜๋Š”๊ฐ€ ๋ผ๋Š” ๋ถ€๋ถ„์ด์˜€๋‹ค.

๋‚ด๊ฐ€ ์ฐพ์€ ๋‹ต์€ $push ์ด๋‹ค.
bookmarks ๋ฆฌ์ŠคํŠธ์— law_id๋ฅผ append ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

db.users.update (
	{'์กฐ๊ฑดkey':'์กฐ๊ฑดvalue'},
	{'$push':{'bookmarks':law_id}}
)

๋‘๋ฒˆ์งธ๋Š” ๋ฐ˜๋Œ€์˜ ์ƒํ™ฉ์ด๋‹ค bookmarks ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ’์„ ์‚ญ์ œ๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ต์€ $unset ์ด๋‹ค.
bookmarks ๋ฆฌ์ŠคํŠธ์— law_id๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

db.users.update(
	{'์กฐ๊ฑดkey':'์กฐ๊ฑดvalue'},
	{'$unset': {'bookmark_id':law_id}}
)

mongoDB์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์•„๋Š” ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Document์˜ ์„ค๊ณ„๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์—ˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ํ•˜์ง€๋งŒ NoSQL์ด๊ณ  ์•„์ง ๊ฐœ๋ฐœ๋‹จ๊ณ„์ด๋ฏ€๋กœ ์–ธ์ œ๋“  ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜๋‹ค ใ…Ž ์ผ๋‹จ ์ €์งˆ๋Ÿฌ๋ณด๊ณ  ๋””ํ…Œ์ผ์€ ํ›„๋ฐ˜๋ถ€์—์„œ ์ฑ™๊ฒจ๋ณด์ž ใ…Ž

profile
์ข€ ๋” ์ฒœ์ฒœํžˆ ๊นŒ๋จน๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง

0๊ฐœ์˜ ๋Œ“๊ธ€