














โจ 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 |
|
|
Programming Language |
|
|
Styling |
|
|
State Management |
|
|
Server & DataBase |
|
|
Formatting |
|
|
Version Control |
ย ย
JavaScript๋ ๋ณ์์ ํ์
์ ์๋์ผ๋ก ์ถ๋ก ํด์ฃผ์ง๋ง, ๋๋ก๋ ์๊ธฐ์น ์์ ๋์์ ํ ์ ์์ต๋๋ค.
TypeScript๋ ์ ์ ํ์
์์คํ
์ ์ ๊ณตํด ๋ฐํ์์ ๋ฐ์ํ๋ ํ์
๊ด๋ จ ๋ฒ๊ทธ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ,
๋ช
์์ ์ธ ํ์
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด ์ฝ๋์ ๊ฐ๋
์ฑ์ ํฅ์์ํต๋๋ค.
๋ฐ๋ผ์ ๊ธฐ์กด์ JavaScript๊ฐ ์๋, TypeScript์ ์ถ๊ฐ์ ์ธ ํ์ต์ ์ํด ์ ์ ํ์์ต๋๋ค.
ย ย
Styled-Components๋ CSS-in-JS์ด๋ฏ๋ก ์ปดํฌ๋ํธ ๋จ์๋ก ์คํ์ผ์ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ
JavaScript ํํ์์ ์ด์ฉํด ์ปดํฌ๋ํธ์ ์ํ๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์คํ์ผ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ํ ์ธ๋ผ์ธ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ํ
์ผ์๋๋ณด๋ค ์ฝ๋ ๊ฐ๋
์ฑ์ด ๋ ์ข๋ค๊ณ ํ๋จํ์์ผ๋ฉฐ,
๊พธ์คํ ์ฌ์ฉํ๋ ๊ฒฝํ์ด ์์ผ๋ฏ๋ก ๋น ๋ฅธ ๊ตฌํ์ ์ํด Styled-Components๋ฅผ ์ ์ ํ์์ต๋๋ค.
ย ย
ver.1์ ๊ธฐ์กด ์ฝ๋๋ Redux์ ์ถ๊ฐ์ ์ธ ํ์ต์ ์ํด
Redux์ ๋ณต์ก์ฑ์ ๋ฎ์ถ Redux Toolkit์ ์ฌ์ฉํ์ฌ ์ํ ๊ด๋ฆฌ๋ฅผ ์งํํ์ต๋๋ค.
ver.2๋ฅผ ์๋กญ๊ฒ ๊ตฌํํ๋ฉฐ ์ก์
์ด๋ ๋ฆฌ๋์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ atom์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ํ๊ด๋ฆฌ์ ํ์ต๊ณผ,
๋น ๋ฅธ ๊ตฌํ์ ์ํด ์๋์ ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ Recoil์ ์ ์ ํ์์ต๋๋ค.
ย ย
Axios๋ฅผ ์ด์ฉํด HTTP ๋คํธ์ํฌ ํต์ ์ด ๊ฐ๋ฅํ์ง๋ง ์๋ฒ ์ํ๊ด๋ฆฌ๋ ์บ์ฑ์ ์ง์ ์ง์ํ์ง ์์ต๋๋ค.
์บ์ฑ์ ์ด์ ์ ๋ฐ์ดํฐ๋ ๋ฆฌ์์ค๋ฅผ ์์๋ก ์ ์ฅํด ๋ค์ ์์ฒญ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ
์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๋ฏ๋ก, ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ง์ํ๋ Tanstack-Query๋ฅผ ํจ๊ป ์ฌ์ฉํ์ต๋๋ค.
ย ย
์งง์ ๊ธฐ๊ฐ ๋ด์ 1์ธ ํ๋ก์ ํธ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ฌ๋์ปค๋ธ๊ฐ ๋์ง ์๊ณ ๊ฐ๊ฒฐํ Python๊ณผ,
๋ฏธ๋๋ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ์ธ Flask๋ฅผ ์ ์ ํ์์ต๋๋ค.
๋ํ Flask์ MongoDB๋ ๋ชจ๋ JSON ๋ฐ์ดํฐ ํ์์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ๋จ๊ณผ์ ํต์ ์ด ์ฉ์ดํ๋ฏ๋ก
๋น ๋ฅธ ๊ฐ๋ฐ์ ์ํด MongoDB๋ฅผ ์ ์ ํ์์ต๋๋ค.
ย ย
ํ์
์ ์ ๋๊ธฐ๊ณ ์๋์ง, ์ค์ ํด๋ ์ปจ๋ฒค์
์ ์ค์ํ๊ณ ์๋์ง ์ฒดํนํด์ฃผ๋
ESLint์ Prettier๋ฅผ ์ง์ ํ์ฌ ์ฝ๋ ์ปจ๋ฒค์
์ ์ผ๊ด์ฑ์๊ฒ ์ ์งํ๊ณ ,
ํ์
์๋ฌ๋ ๋ถํ์ํ ๋ณ์์ ์ฌ์ฉ ๋ฑ์ ๋ฐฉ์งํ ์ ์์์ต๋๋ค.
ย ย ๐ก ํ์๊ฐ์
๐ Portal์ ์ด์ฉํ ๋ชจ๋ฌ ๊ตฌํ, true/false๋ฅผ ์ด์ฉํ ๋ก๊ทธ์ธ/ํ์๊ฐ์ ํ๋ฉด ์ค์์นญ

-
React์ Portal์ ์ด์ฉํด ๋ชจ๋ฌ์ ๊ตฌํํ์์ต๋๋ค.
-
ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ๋ชจ๋ ์ข์ธก์ ๊ณตํต๋๋ ์์ญ์ด ์์ผ๋ฏ๋ก, useState์ true/false๊ฐ์ ๋ถ์ฌํด
๋ฒํผ ํด๋ฆญ์ ๋ฐ๋ผ ์ฐ์ธก์ ํ์๊ฐ์ /๋ก๊ทธ์ธ์ ํ๋ฉด์ด ์ค์์นญ๋ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค. -
๋ํ ํ๋ฉด์ด ์ค์์นญ๋ ๋ ๊ธฐ์กด์ input์ ์ ๋ ฅํ๋ ๊ฐ์ด ์ด๊ธฐํ๋ ์ ์๋๋ก ํ์์ต๋๋ค.

-
input์ ์ ๋ ฅํ๋ onChange๊ฐ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ์ฌ ์ ๊ทํํ์์ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํํ๊ณ ,
ํด๋น ๊ฐ์ด ์ ํจํ์ง์ ์ฌ๋ถ๊ฐ ์๋ด๋ฉ์์ง๋ฅผ ํตํด ๋ฐ๋ก ํ์ธ๋ ์ ์๋๋ก ํ์์ต๋๋ค. -
ํ์๊ฐ์ธ ์์ด๋, ๋น๋ฐ๋ฒํธ, ๋๋ค์ ์ค ํ๋๋ผ๋ ๊ฐ์ด ์ ๋ ฅ๋์ง ์์๊ฑฐ๋,
๋ชจ๋ ๊ฐ์ ์ ๋ ฅํ์ผ๋ ํ๋๋ผ๋ ์ ํจ์ฑ ๊ฒ์ฆ์ ํต๊ณผํ์ง ๋ชปํ ๊ฒฝ์ฐ
button์ disabled ์์ฑ์ ์ด์ฉํด ํ์๊ฐ์ ๋ฒํผ์ด ๋นํ์ฑํ๋๋๋ก ๊ตฌํํ์์ต๋๋ค. -
๋น๋ฐ๋ฒํธ๋ flask_bcrypt๋ฅผ ์ด์ฉํด ์ํธํํ์ฌ DB์ ์ ์ฅํ์์ต๋๋ค.

-
์ ๋ ฅํ ID๊ฐ DB์ ์กด์ฌํ๋์ง ์ค๋ณต ์ฒดํฌ๋ฅผ ์งํํด ์ค๋ณต์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ ,
๋์์ ID input์ ์ด๊ธฐํ์์ผ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
ย ย ๐ก ๋ก๊ทธ์ธ
ID ์ ํจ์ฑ ๊ฒ์ฆ | PWD ์ ํจ์ฑ ๊ฒ์ฆ |
---|---|
![]() |
![]() |
-
์ ๋ ฅํ ID/PWD๊ฐ DB์ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ ,
ํด๋นํ๋ input์ ์ด๊ธฐํํ์ฌ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ ์ ์๋๋ก ํ์์ต๋๋ค. -
์ ๋ ฅํ ๋น๋ฐ๋ฒํธ ๊ฐ ์ญ์ bcrypt๋ฅผ ์ด์ฉํด ์ํธํ๋ ๊ฐ์ด ์ผ์นํ๋์ง ํ์ธํ์์ต๋๋ค.

-
๋ก๊ทธ์ธ ์ ๊ฐ์ด ๋ชจ๋ ์ผ์นํ ๊ฒฝ์ฐํ์ฌ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์ ๊ฒฝ์ฐ๋ง jwt ํ ํฐ์ ๋ฐ๊ธํ์์ต๋๋ค.
-
์๋ฒ์์ ๋ฐ๊ธํ ํ ํฐ์ react-cookie ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด cookie์ ์ ์ฅํ๊ณ ,
response๋ก ๋ฐ์ id์ nickname์ Local Storage์ ์ ์ฅํ์์ต๋๋ค. -
๋ก๊ทธ์์ ์ unset_jwt_cookies๋ก ๋ฐ๊ธํ ํ ํฐ์ ์ญ์ ํ๊ณ ,
ํด๋น ์์ฒญ์ด ์ฑ๊ณตํ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์์๋ cookie์ storage์ ์ ์ฅ๋ ๊ฐ์ ์ญ์ ํ์์ต๋๋ค.

-
๋ชจ๋ ํ๋ฉด์ ๊ณตํต์ ์ผ๋ก ์ถ๋ ฅ๋๋ 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๋ฅผ ๋์ฐ๋ฉฐ ๋ฉ์ธํ์ด์ง๋ก ๋ค์ ๋๋ฉ ์ฒ๋ฆฌํ์์ต๋๋ค. -
์๋ฒ์ ์ฐ๊ฒฐ ์ค ๋ก๋ฉ์ด ์์ ๊ฒฝ์ฐ ๋ก๋ฉ ์คํผ๋๋ฅผ ๊ตฌํํ์ฌ
์กฐํ ๋๊ธฐ ์ค์์ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ ์ ์๋๋ก ํ์์ต๋๋ค.

Leave a Reply