Tinkerbell Glitter
[250306] update()์™€ save()์˜ ์ฐจ์ด
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
Django ORM์—์„œ `update()`์™€ `save()`์˜ ์ฐจ์ดDjango ORM์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ `update()`์™€ `save()`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•˜์ง€๋งŒ ์ด ๋‘˜์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค๋ฅด๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ DB์— ๋ฐ˜์˜๋˜๋Š” ๋ฐฉ์‹์—์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.1. `update()`: QuerySet์„ ํ†ตํ•œ ๋Œ€๋Ÿ‰ ์—…๋ฐ์ดํŠธโœ… ํŠน์ง•`update()`๋Š” QuerySet์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์—ฌ DB์— ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.๋‹จ์ผ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.Django ๋ชจ๋ธ์˜ `save()` ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ → ์ฆ‰, `pre_save` ๋ฐ `post_save` ๊ฐ™์€ ์‹ ํ˜ธ(signals)๋„ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š๋Š”๋‹ค.โœ… ์‚ฌ์šฉ ์˜ˆ์‹œfrom myapp.models import User# ..
[250305] Soft Delete๋ž€?
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
Soft Delete๋ž€? ๐Ÿ”™1. Soft Delete ์ •์˜Soft Delete(์†Œํ”„ํŠธ ๋”œ๋ฆฌํŠธ)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜๋Š” ๋Œ€์‹ , ํŠน์ • ์ปฌ๋Ÿผ(์˜ˆ: `deleted_at` ๋˜๋Š”`is_deleted`)์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.๐Ÿ” Hard Delete vs. Soft Delete๊ตฌ๋ถ„Hard DeleteSoft Delete๋ฐ์ดํ„ฐ ์‚ญ์ œ ์—ฌ๋ถ€์‹ค์ œ ์‚ญ์ œDB์— ๋‚จ์•„์žˆ์Œ๋ณต๊ตฌ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ถˆ๊ฐ€๋Šฅ๊ฐ€๋Šฅ์„ฑ๋Šฅ ์˜ํ–ฅ๋น ๋ฆ„์ผ๋ถ€ ์„ฑ๋Šฅ ๋ถ€๋‹ด๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์˜์กด์„ฑ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ•„์š”์œ ์ง€ ๊ฐ€๋Šฅ์‚ฌ์šฉ ์‚ฌ๋ก€๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๊ธฐ๋ก ๋ณด์กด์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ2. Soft Delete ๊ตฌํ˜„ ๋ฐฉ์‹1๏ธโƒฃ `is_deleted` ํ”Œ๋ž˜๊ทธ ํ™œ์šฉ์‚ญ์ œ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹.ALTER TABLE users ADD ..
[250219] Json Web Token์— ๋Œ€ํ•˜์—ฌ,,,
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
JWT (JSON Web Token)์ด๋ž€?1. JWT ์ •์˜JWT(JSON Web Token)๋Š” JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์ด๋‹ค.ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ์ธ์ฆ ๋ฐ ์ •๋ณด ๊ตํ™˜์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋””์ง€ํ„ธ ์„œ๋ช…์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋ฌด๊ฒฐ์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค.๐Ÿ’ก JWT์˜ ํŠน์ง•โœ”๏ธ ๋ฌด์ƒํƒœ(Stateless) ์ธ์ฆ → ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜์„ ์ €์žฅํ•  ํ•„์š” ์—†์Œโœ”๏ธ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ → ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํ›„ JWT๋ฅผ ์ด์šฉํ•˜์—ฌ ์ธ์ฆโœ”๏ธ ๋””์ง€ํ„ธ ์„œ๋ช… ํฌํ•จ → ํ† ํฐ ๋ณ€์กฐ ๋ฐฉ์ง€โœ”๏ธ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ → ์›น, ๋ชจ๋ฐ”์ผ, API ๋“ฑ2. JWT์˜ ๊ตฌ์กฐJWT๋Š” ์ (`.`)์œผ๋กœ ๊ตฌ๋ถ„๋œ 3๊ฐœ์˜ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.Header.Payload.Signature์˜ˆ์ œ JWT:eyJhbGciOiJIUzI1NiIsInR5cC..
[250217] ์ธ์ฆ(Authentication)๊ณผ ๊ถŒํ•œ(Authorization)
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
Django ์ธ์ฆ(Authentication)๊ณผ ๊ถŒํ•œ(Authorization)1. Django์˜ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ์‹œ์Šคํ…œ ๊ฐœ์š”Django๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ(Authentication)๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ(Authorization) ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์—ฌ ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.์ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๊ด€๋ฆฌ, ์ ‘๊ทผ ์ œ์–ด ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ์ธ์ฆ(Authentication)์ธ์ฆ์ด๋ž€?์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •. ์ผ๋ฐ˜์ ์œผ๋กœ ์•„์ด๋”” & ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜์˜ ๋กœ๊ทธ์ธ ๊ณผ์ •์ด ํฌํ•จ๋จ.1๏ธโƒฃ Django ๊ธฐ๋ณธ ์ธ์ฆ ์‹œ์Šคํ…œDjango๋Š” `django.contrib.auth`์•ฑ์„ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ ์ธ์ฆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.`User` ๋ชจ๋ธ (`django.contri..
[250210] Django Admin ์ •๋ฆฌ~
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
Django Admin์ด๋ž€?1. Django Admin ์ •์˜Django Admin์€ Django์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋™ํ™”๋œ ๊ด€๋ฆฌ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.๊ฐœ๋ฐœ์ž๋Š” Django Admin์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ, ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ณ„๋„์˜ ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š๊ณ ๋„ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.Django ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด `admin` ์•ฑ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ตœ์†Œํ•œ์˜ ์„ค์ •์œผ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 2. Django Admin ํ™œ์„ฑํ™”ํ•˜๊ธฐ1๏ธโƒฃ `admin` ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธDjango์˜ `INSTALLED_APPS` ์„ค์ •์— `django.contrib.admin`์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.# settings.pyINS..
[250205] Postman??
Back End ๐Ÿ“ฒ/Django โ›“๏ธ
Postman์ด๋ž€? (API ํ…Œ์ŠคํŠธ ํˆด) ๐Ÿฅธ1. Postman ์ •์˜Postman์€ API ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” API ํด๋ผ์ด์–ธํŠธ ๋„๊ตฌ์ด๋‹ค์ด๊ฑธ ํ† ๋Œ€๋กœ API์˜ ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์„ ์†์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ๐Ÿ’ก Postman์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ โœ” RESTful API, GraphQL API ๋“ฑ ๋‹ค์–‘ํ•œ API ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•จโœ” HTTP ์š”์ฒญ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ , ์‘๋‹ต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œโœ” API ์š”์ฒญ์„ ์ž๋™ํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œโœ” ์—ฌ๋Ÿฌ ๊ฐœ์˜ API ์š”์ฒญ์„ Collection์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จโœ” ๊ฐœ๋ฐœ์ž, ํ…Œ์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด, DevOps๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•จ2. Postman ์„ค์น˜ ๋ฐฉ๋ฒ•โœ… ์„ค์น˜ ๋ฐฉ๋ฒ•Postman ๊ณต์‹ ์›น์‚ฌ์ดํŠธ ์ ‘์†์šด์˜์ฒด์ œ์— ๋งž๋Š” ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ ํ›„ ์„ค..