be-log

title


main


๐ŸŽฏํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

โœจ Version 2๏ธ โœจ Version 1๏ธ
ํŒ€์› ๊ตฌ์„ฑ FE 1 FE 2, BE 4
๊ตฌํ˜„ ๊ธฐ๊ฐ„ 23.08.26 ~ 23.09.01 (6์ผ) 23.05.05 ~ 23.05.11 (7์ผ)
๋‹ด๋‹น ๊ธฐ๋Šฅ ํด๋ผ์ด์–ธํŠธ&์„œ๋ฒ„ 1์ธ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌํ˜„
– JWT Token์„ ์ด์šฉํ•œ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ
– ๋ฉ”์ธํŽ˜์ด์ง€/ํ—ค๋”
– ๊ฒŒ์‹œ๊ธ€ CRUD
– ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌ๋”ฉ ๋ฐ ์ „๋ฐ˜์ ์ธ UI ๊ตฌํ˜„ ์ „๋‹ด
– JWT Token์„ ์ด์šฉํ•œ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ
– ๋ฉ”์ธํŽ˜์ด์ง€/ํ—ค๋”
– ๋Œ“๊ธ€ CRUD
๊ด€๋ จ ๋งํฌ refactoring branch (โ† click!) before_main branch (โ† click!)

โœจ  React ํ•™์Šต ์งํ›„์˜ ์ฒซ ํ˜‘์—… ํ”„๋กœ์ ํŠธ์ธ Version 1์˜
    ์ฝ”๋“œ ๊ฐœ์„  ๋ฐ CRUD์˜ TypeScript ์ ์šฉ์„ ์œ„ํ•ด Version 2๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ์‚ฌ์šฉ๊ธฐ์ˆ 

๊ตฌ๋ถ„ โœจ Version 2๏ธ โœจ Version 1๏ธ
Library React React
Programming Language TypeScript JavaScript
Styling Styled-Components Styled-Components
State Management Recoil Tanstack-Query Redux Toolkit Tanstack-Query
Server & DataBase Flask MongoDB Node.js MySQL
Formatting ESLint Prettier Not used
Version Control Git GitHub Git GitHub


๐Ÿ’ญ ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •

ย ย  TypeScript
JavaScript๋Š” ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•ด์ฃผ์ง€๋งŒ, ๋•Œ๋กœ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
TypeScript๋Š” ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ด ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ํƒ€์ž… ๊ด€๋ จ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
๋ช…์‹œ์ ์ธ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ JavaScript๊ฐ€ ์•„๋‹Œ, TypeScript์˜ ์ถ”๊ฐ€์ ์ธ ํ•™์Šต์„ ์œ„ํ•ด ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


ย ย  Styled-Components
Styled-Components๋Š” CSS-in-JS์ด๋ฏ€๋กœ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ
JavaScript ํ‘œํ˜„์‹์„ ์ด์šฉํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋‚˜ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ธ๋ผ์ธ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํ…Œ์ผ์œˆ๋“œ๋ณด๋‹ค ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์œผ๋ฉฐ,
๊พธ์ค€ํžˆ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ ๋น ๋ฅธ ๊ตฌํ˜„์„ ์œ„ํ•ด Styled-Components๋ฅผ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


ย ย  Recoil
ver.1์˜ ๊ธฐ์กด ์ฝ”๋“œ๋Š” Redux์˜ ์ถ”๊ฐ€์ ์ธ ํ•™์Šต์„ ์œ„ํ•ด
Redux์˜ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถ˜ Redux Toolkit์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

ver.2๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉฐ ์•ก์…˜์ด๋‚˜ ๋ฆฌ๋“€์„œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  atom์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ƒํƒœ๊ด€๋ฆฌ์˜ ํ•™์Šต๊ณผ,
๋น ๋ฅธ ๊ตฌํ˜„์„ ์œ„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Recoil์„ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


ย ย  Tanstack-Query
Axios๋ฅผ ์ด์šฉํ•ด HTTP ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„œ๋ฒ„ ์ƒํƒœ๊ด€๋ฆฌ๋‚˜ ์บ์‹ฑ์„ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์บ์‹ฑ์€ ์ด์ „์˜ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ด ๋‹ค์Œ ์š”์ฒญ ์‹œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ
์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฏ€๋กœ, ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” Tanstack-Query๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.


ย ย  Flask MongoDB
์งง์€ ๊ธฐ๊ฐ„ ๋‚ด์— 1์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋†’์ง€ ์•Š๊ณ  ๊ฐ„๊ฒฐํ•œ Python๊ณผ,
๋ฏธ๋‹ˆ๋ฉ€ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ Flask๋ฅผ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Flask์™€ MongoDB๋Š” ๋ชจ๋‘ JSON ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋‹จ๊ณผ์˜ ํ†ต์‹ ์ด ์šฉ์ดํ•˜๋ฏ€๋กœ
๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด MongoDB๋ฅผ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


ย ย  ESLint Prettier
ํƒ€์ž…์„ ์ž˜ ๋„˜๊ธฐ๊ณ  ์žˆ๋Š”์ง€, ์„ค์ •ํ•ด๋‘” ์ปจ๋ฒค์…˜์„ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฒดํ‚นํ•ด์ฃผ๋Š”
ESLint์™€ Prettier๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๊ณ ,
ํƒ€์ž… ์—๋Ÿฌ๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ๋“ฑ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘€ ๊ธฐ๋Šฅ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

ย ย ๐Ÿ’ก ํšŒ์›๊ฐ€์ž…

๐Ÿ“Œ Portal์„ ์ด์šฉํ•œ ๋ชจ๋‹ฌ ๊ตฌํ˜„, true/false๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด ์Šค์œ„์นญ

๋กœ๊ทธ์ธ ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด์Šค์œ„์น˜
  • React์˜ Portal์„ ์ด์šฉํ•ด ๋ชจ๋‹ฌ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ๋ชจ๋‘ ์ขŒ์ธก์— ๊ณตํ†ต๋˜๋Š” ์˜์—ญ์ด ์žˆ์œผ๋ฏ€๋กœ, useState์— true/false๊ฐ’์„ ๋ถ€์—ฌํ•ด
    ๋ฒ„ํŠผ ํด๋ฆญ์— ๋”ฐ๋ผ ์šฐ์ธก์˜ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ์˜ ํ™”๋ฉด์ด ์Šค์œ„์นญ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋˜ํ•œ ํ™”๋ฉด์ด ์Šค์œ„์นญ๋  ๋•Œ ๊ธฐ์กด์˜ input์— ์ž…๋ ฅํ–ˆ๋˜ ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ํšŒ์›๊ฐ€์ž… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์œ ํšจ์„ฑ ํšŒ์›๊ฐ€์ž…
  • input์— ์ž…๋ ฅํ•˜๋Š” onChange๊ฐ’์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ์ •๊ทœํ‘œํ˜„์‹์„ ํ†ตํ•ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ–ˆ๊ณ ,
    ํ•ด๋‹น ๊ฐ’์ด ์œ ํšจํ•œ์ง€์˜ ์—ฌ๋ถ€๊ฐ€ ์•ˆ๋‚ด๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ํ™•์ธ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ํ•„์ˆ˜๊ฐ’์ธ ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋‹‰๋„ค์ž„ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜,
    ๋ชจ๋“  ๊ฐ’์€ ์ž…๋ ฅํ–ˆ์œผ๋‚˜ ํ•˜๋‚˜๋ผ๋„ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ
    button์˜ disabled ์†์„ฑ์„ ์ด์šฉํ•ด ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์ด ๋น„ํ™œ์„ฑํ™”๋˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” flask_bcrypt๋ฅผ ์ด์šฉํ•ด ์•”ํ˜ธํ™”ํ•˜์—ฌ DB์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ID ์ค‘๋ณต์ฒดํฌ

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์•„์ด๋””
  • ์ž…๋ ฅํ•œ ID๊ฐ€ DB์— ์กด์žฌํ•˜๋Š”์ง€ ์ค‘๋ณต ์ฒดํฌ๋ฅผ ์ง„ํ–‰ํ•ด ์ค‘๋ณต์ผ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ–ˆ๊ณ ,
    ๋™์‹œ์— ID input์„ ์ดˆ๊ธฐํ™”์‹œ์ผœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.



ย ย ๐Ÿ’ก ๋กœ๊ทธ์ธ

๐Ÿ“Œ ID/PWD ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

ID ์œ ํšจ์„ฑ ๊ฒ€์ฆ PWD ์œ ํšจ์„ฑ ๊ฒ€์ฆ
ID ์œ ํšจ์„ฑ ๊ฒ€์ฆ
  • ์ž…๋ ฅํ•œ ID/PWD๊ฐ€ DB์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ ,
    ํ•ด๋‹นํ•˜๋Š” input์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ’ ์—ญ์‹œ bcrypt๋ฅผ ์ด์šฉํ•ด ์•”ํ˜ธํ™”๋œ ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋กœ๊ทธ์•„์›ƒ ์‹œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ/ํ† ํฐ ์ดˆ๊ธฐํ™”

๋กœ๊ทธ์ธ์•„์›ƒ ํ† ํฐ
  • ๋กœ๊ทธ์ธ ์‹œ ๊ฐ’์ด ๋ชจ๋‘ ์ผ์น˜ํ•  ๊ฒฝ์šฐํ•˜์—ฌ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ๋งŒ jwt ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•œ ํ† ํฐ์€ react-cookie ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด cookie์— ์ €์žฅํ•˜๊ณ ,
    response๋กœ ๋ฐ›์€ id์™€ nickname์€ Local Storage์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ์•„์›ƒ ์‹œ unset_jwt_cookies๋กœ ๋ฐœ๊ธ‰ํ•œ ํ† ํฐ์„ ์‚ญ์ œํ•˜๊ณ ,
    ํ•ด๋‹น ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ cookie์™€ storage์— ์ €์žฅ๋œ ๊ฐ’์„ ์‚ญ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ JWT ํ† ํฐ์„ ์ด์šฉํ•œ ์ธ์ฆ/์ธ๊ฐ€ ์ฒ˜๋ฆฌ

๊ธ€ ์ž‘์„ฑ ์ธ์ฆ
  • ๋ชจ๋“  ํ™”๋ฉด์— ๊ณตํ†ต์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” Header์—์„œ useEffect๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง์ด ๋  ๋•Œ๋งˆ๋‹ค
    storage์™€ cookie์— ์žˆ๋Š” ๊ฐ’์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์˜๋กœ ์‚ญ์ œํ–ˆ์„ ๊ฒฝ์šฐ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋Š” alert๋ฅผ ๋ณด๋‚ด๊ณ 
    ๋กœ๊ทธ์•„์›ƒ ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

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



ย ย ๐Ÿ’ก ๊ฒŒ์‹œ๊ธ€

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๋ฐ ์ž…๋ ฅ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

๋งˆํฌ๋‹ค์šด์„ ์ด์šฉํ•œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
๋งˆํฌ๋‹ค์šด์„ ์ด์šฉํ•œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ
  • react-md-editor๋ฅผ ์ด์šฉํ•ด ๋งˆํฌ๋‹ค์šด์œผ๋กœ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑ ๋ฐ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ž‘์„ฑ API ํ˜ธ์ถœ ์ „ ๋ชจ๋“  ์ž…๋ ฅ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ํŠนํžˆ ์ธ๋„ค์ผ์„ ๋‹ด๋‹นํ•˜๋Š” ์ด๋ฏธ์ง€ URL์˜ ๊ฒฝ์šฐ ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค
    new Image()์˜ ์ด๋ฏธ์ง€ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น url๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜์—ฌ
    ์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€ URL๊ฐ’์˜ ์ž…๋ ฅ์„ ์ œํ•œํ–ˆ์Šต๋‹ˆ๋‹ค.

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

  • ํŽ˜์ด์ง€ ์ง„์ž… ์‹œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ธ์ง€, ์ˆ˜์ •์ธ์ง€ ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜์—ฌ
    ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ, ์ˆ˜์ • ๋‘ ๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ํ•œ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์žฌ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •/์‚ญ์ œ

๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ
๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •
  • ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •, ์‚ญ์ œ๋Š” ๋กœ๊ทธ์ธ ํ›„ storage์— ์ €์žฅ๋œ id๊ฐ’๊ณผ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ž์˜ id๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ
    ์ผ์น˜ํ•  ๊ฒฝ์šฐ์—๋งŒ ์ˆ˜์ •, ์‚ญ์ œ ๋ฒ„ํŠผ์ด ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์‹œ์—๋Š” useLocation์˜ state๋ฅผ ์ด์šฉํ•ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ • ํŽ˜์ด์ง€๋กœ ๋„˜๊ฒจ์ฃผ์—ˆ์œผ๋ฉฐ,
    ์„ค์ •ํ•œ flag๊ฐ’์œผ๋กœ ์ž‘์„ฑ, ์ˆ˜์ • ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•œ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ ํ›„์—๋Š” ๋ฉ”์ธํŽ˜์ด์ง€๋กœ ๋žœ๋”ฉ์‹œํ‚ด๊ณผ ๋™์‹œ์—
    invalidateQueries๋ฅผ ์ด์šฉํ•ด ์‚ญ์ œ๋œ ๋‚ด์—ญ์ด ๋ฐ˜์˜๋˜์–ด ๋‹ค์‹œ ๋ณด์—ฌ์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์ •, ์‚ญ์ œ์—๋„ ์„œ๋ฒ„๋กœ ๋„˜์–ด์˜ค๋Š” ํ† ํฐ์˜ ๊ฒ€์ฆ ๋ฐ ํ•ด๋‹น ํ† ํฐ์— ๋‹ด๊ธด ๊ฐ’์ด
    DB์— ๋‹ด๊ธด ์ž‘์„ฑ์ž์˜ id๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์ธ๊ฐ€ ํ™•์ธ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.



ย ย ๐Ÿ’ก ๊ธฐํƒ€

๐Ÿ“Œ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ

์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์†Œ์ฐฝ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ
    route์˜ path=”*”๋ฅผ ์ด์šฉํ•ด 404 ์—๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๋žœ๋”ฉ๋˜๋„๋ก ์ฒ˜๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒŒ์‹œ๊ธ€ ๋ฐ ๋กœ๋”ฉ

์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒŒ์‹œ๊ธ€ ๋ฐ ๋กœ๋”ฉ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์†Œ์ฐฝ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒŒ์‹œ๊ธ€ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์กฐํšŒ๋ฅผ ์‹œ๋„ํ•  ๊ฒฝ์šฐ
    ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ๋ผ๋Š” alert๋ฅผ ๋„์šฐ๋ฉฐ ๋ฉ”์ธํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ๋žœ๋”ฉ ์ฒ˜๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ ์ค‘ ๋กœ๋”ฉ์ด ์žˆ์„ ๊ฒฝ์šฐ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ
    ์กฐํšŒ ๋Œ€๊ธฐ ์ค‘์ž„์„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.





Hansol Olivia Kim | @GitHub | @Blog

Visit original content creator repository https://github.com/Be-log/be-log

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *