

์ด๋ฒ 9์์ด๋ ํ ๋ฌ์ ์๊ฐ๋์ ๋ฐ๋ธ์ฝ์ค์ ๊ฝ ์ค ํ๋์ธ ์ค๊ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค. ์ฃผ์ด์ง api๋ฅผ ๊ฐ์ง๊ณ ๊ธฐํ ๋จ๊ณ๋ถํฐ ๊ฐ๋ฐ ๋จ๊ณ๊น์ง ํ์ ๋ชจ๋๊ฐ ์ง์ ์งํํ๋ ๋จ๊ธฐ๊ฐ ํ๋ก์ ํธ๋ก ์ฃผ์ด์ง ์๊ฐ์ด ๊ธธ์ง ์์ ๋งํผ ๋ฐ์๊ฒ ์๊ฐ์ ๋ณด๋๋ค. ๊ทธ ๊ณผ์ ์์ ํํ๋ก์ ํธ๊ฐ ๋ฌด์์ธ์ง ์ ๋๋ก ๊ฒฝํํด๋ณผ ์ ์์๋๋ฐ ์ ๋๋ก๋ ํ์ ์ด ์ฒ์์ธ ๋งํผ ๋ฐฐ์ด ์ ๋ ๋ง๊ณ ์์ฌ์ ๋ ์ ๋ ๋ง์๋ค. 9์ ํ ๋ฌ์ ๋๋์๋ณด๋ฉฐ ํ๊ณ ํ๋ ์๊ฐ์ ๊ฐ๊ณ ์ ํ๋ค.
๋น์ ์ฐ๋ฆฌ ํ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ง์ ํ์ ์๊ฐ์ ๊ฐ์ก๋ค. ๊ฒฐ์ ํด์ผํ ์ฌํญ๋ค์ด ๋ง์์ผ๋ฉฐ, ์ด๊ธฐ ์ธํ ์ ํผํผํ ํ ๋งํผ ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋๋ฐ ํธํด์ง ๊ฒ์ด๋ผ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ง ์ข ๋์ด์ง๋ ๊ฐ์ด ์์ด ๋ค๋ฅธ ํ๋ค์ด ๊ฐ๋ฐ์ ์์ํ์ ๋๊น์ง๋ ์์ํ์ง ์์ ์กฐ๊ธ ์กฐ๊ธํ ๋ง์๋ ๋ค์๋ ๊ฒ ๊ฐ๋ค. ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ ์ ํ ์ฌํญ๋ค์ ๋ค์๊ณผ ๊ฐ์๋ค.
<๋ชฉ๋ก>
์ฒ์์ ํ์๋ค๊ณผ ์ด ํ๋ก์ ํธ๋ฅผ ํตํด ์ด๋ค ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ณ ์ถ์์ง ๊ฐ์ธ์ ๊ณผ ํ์ ์ผ๋ก ๋๋์ด ๊ณต์ ํ๋๋ฐ ์ต๊ทผ ํ ํ๊ณ ๋ฅผ ํ๋ฉด์ ๊ทธ ๋ชฉํ๊ฐ ์ด๋์ ๋ ๋ฌ์ฑ๋์๋์ง ์๊ฐํด ๋ณผ ์ ์์๋ค. ๊ทธ๋ฌ๋ฉด์ ๋ชฉํ๋ฅผ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ ํ์ผ๋ฉด ๋ ์ข์์ ํ ๋ฐ ํ๋ ์๊ฐ์ด ๋ค์์ผ๋ฉฐ, ์ด๋ฅผ ์์นํํ ์ ์์๋ค๋ฉด ์์ ์ ๊ณผ ๋ง๋ฌด๋ฆฌ ํ์ ์ด๋์ ๋ ๋ฌ์ฑํ๋์ง ๋์ฑ ์๋ฟ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์ด ๋ค๋ฉด์ ๊ฐ์ ํ ์ ์๋ ์ ์ ๋ฐ๊ฒฌํด ์ข์๋ค.
์ฐ๋ฆฌ ํ์ ์์ด ๊ฐ์ฅ ์ด๋ ค์ ๊ณ , ๋ฏธํกํ๋ ๋ถ๋ถ์ด๋ผ๋ฉด ๊ธฐํ์ด์๋ค. ์ฒ์ ๊ธฐํ ๋น์ ์์ด๋์ด ํ์์์๋ถํฐ ๋๊ด์ ๋ง์ด ๊ฒช์๋๋ฐ ํ ๋งค์นญ์ด ๋ง ์ด๋ฃจ์ด์ง ์์ ์ด๊ธฐ๋ ํ๊ณ , ์ ํ๋ api ํ๊ฒฝ ์์์ ์์ด๋์ด๋ฅผ ๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ข์ฒ๋ผ ์๊ฒฌ์ด ํ๋ฐํ๊ฒ ๊ณต์ ๋์ง ์์๋ค. ๋ค๋ง ๊ทธ๋ฌํ ํ๊ฒฝ ์์์๋ ๋๋ฆ ์ฌ๋ฏธ์๋ ๊ฟ๋งค ํ๋ซํผ์ด๋ ์์ด๋์ด๋ฅผ ๊ฑด์ง ์ ์์๋๋ฐ ์ด ์์ด๋์ด๋ฅผ ์ ๊ตฌํํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ๋ค. ํ๋ก์ ํธ๊ฐ ๋๋ ๋ค ํ ํ๋ก์ ํธ ๊ณต์ ํ๋ฅผ ๊ฐ์ง๋ฉด์ ๋ค๋ฅธ ํ๋ค์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณผ ์ ์์๋๋ฐ ๊ธฐํ์ด ํผํผํ๋ค๋ ๊ฒ์ด ๋๊ปด์ง ๋ฐ๋ฉด ์ฐ๋ฆฌ ํ์ ๊ธฐํ์ ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง๋ค๋ ๊ฒ์ ์ ์ ์์๋ค. ํ ํ๊ณ ๋น์์๋ ๋์๋ ์๊ฒฌ์ด๋ฉฐ, ์ค์ค๋ก ์๊ฐํ๊ธธ ์์ด๋์ด ๋ฌธ์ ๋ผ๊ธฐ ๋ณด๋ค๋ ๊ฒฐ์ ๋ ์์ด๋์ด๋ฅผ ๊ตฌ์ฒดํํ๋ ๊ธฐํ ๋จ๊ณ๊ฐ ๋ฏธํกํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค. ๋น์ ์์ด๋์ด๋ฅผ ์ ํ๋๋ฐ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ๋ค์ธ ๋๋จธ์ง ๊ทธ ์์ด๋์ด๋ฅผ ๊ตฌ์ฒดํํ์ง ์๊ณ ๋ฐ๋ก ๊ฐ๋ฐ์ ๋ค์ด๊ฐ ๊ฒ์ด ํจ์ฐฉ์ธ ๊ฒ ๊ฐ๋ค. ์์ด๋์ด๋ฅผ ์ ํ๋ค๋ฉด ์ข ๋ ๋ค์ํ ๋ฐฉ๋ฉด์์ ๊ทธ ์์ด๋์ด๋ฅผ ๊ตฌ์ฒดํํ ๋ค ๊ฐ๋ฐ์ ๋ค์ด๊ฐ์ผ ์ข ๋ ์์ฑ๋ ์๋ ์๋น์ค๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋ค๋ ๋ฐ์ฑ๋ ํ๊ฒ ๋์๋ค.
๋์์ธ ์์ ์์๋ ๋์์ธ ์ด๊ด ์ญํ ์ ๋งก๊ฒ ๋ 2๋ช ์ด ๋ฉ์ธ์ด ๋์ด ์งํํ๊ฒ ๋์๋๋ฐ ๋ง์ ์ถฉ๋๊ณผ ๊ณ ๋ฏผ์ ์๊ฐ์ด์๋ค. ๋์์ธ ์ด๊ด์ธ 2๋ช ์ ์ฑํฅ์ด ๋งค์ฐ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ์๊ฐ์์ ๋ณผ ์ ์์ด ๋์์ธ์ ์์ฑ๋๋ฅผ ๋์ด๋๋ฐ ๊ธฐ์ฌํ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ฉด์ ๋๋ ์ ์ ๋์์ธ์ด ์ค์ํ ๋ถ๋ถ์ ์๋์ง๋ง, ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ์๋ฟ๋ ๋ถ๋ถ์ธ ๋งํผ ์ฌ๋ฌ ์ธก๋ฉด์์ ๊ณ ๋ คํด ์๊ฐํด์ผ ํ๋ ์ ์ด ๋ง๋ค๋ ๊ฒ์ ๋ค์ ํ ๋ฒ ๋๊ผ๋ค.
๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด๋ฉด์๋ ๊ธฐ๋ณธ์ ์ธ ๊ท์น์ผ๋ก ์ฒ์ ํ ํ์์ ์๊ฒฌ์ผ๋ก ์ปค๋ฐ ๋ฉ์์ง ๊ท์น์ ์ ํ์ผ๋ฉฐ, ๊ทธ ์ธ์๋ ๋ธ๋์น๋ช ๊ท์น, ๋์์ธ ํจํด ์ ์ฉ, pr ๊ท์น, merge ๊ท์น ๋ฑ ๋ง์ ๊ฒ๋ค์ ์์ํด ๊ฒฐ์ ํ๋ค. ๊ทธ ์ค ์ผ๋ถ๋ง ๊ณต์ ํ๋ค๋ฉด ๋จผ์ ์ปค๋ฐ ๋ฉ์์ง ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ชจ์ง๋ฅผ ํ์ฉํ๋๋ฐ, ์ด๋ชจ์ง๋ฅผ ํ์ฉํ ๊ฒ์ ์ฒ์์ด์์ง๋ง ๋๋ฆ๋๋ก ์ฌ๋ฏธ์์๊ณ , ๋ณด๋ ๋๋ ์ฆ๊ฑฐ์์ ์ข์๋ค๊ณ ์๊ฐํ๋ค.
<์ปค๋ฐ ๋ฉ์์ง ๊ท์น>
๊ทธ ์ธ์๋ ์ฃผ์ 1๋ฒ ์ฉ splint ํ์๋ฅผ ๊ฐ์ ธ ๊ทธ๋์ develop์ mergeํ ๋ด์ฉ๋ค์ release branch์ mergeํด ๋ฐฐํฌํด๋ณด๊ณ , ์๋ฌ ์ฌํญ๋ค์ ์ฐพ๋ ์์ ๋ ์งํํ๋ค.
<๋ธ๋์น ๊ท์น>
ex_)feat-1(์ด์๋ฒํธ)-login__button
๊ธฐ๋ณธ์ ์ผ๋ก๋ github flow๋ฅผ ์ด์ง ๋ณํ์์ผ ํ์ฉํ๋ค.

<ํด๋ ๊ตฌ์กฐ>
ํด๋ ๊ตฌ์กฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ์ ์ํ ๋ฏน ๋์์ธ ํจํด์ ์ ์ฉํ์ผ๋ฉฐ, next.js๋ฅผ ์ฌ์ฉํ๋ ๋งํผ ๊ทธ์ ๋ง์ถฐ ํด๋ ๊ตฌ์กฐ๋ฅผ ๊ณํํ๋ค. ์ด ์ํ ๋ฏน ๋์์ธ ํจํด์ ์ฌ์ฉํ๋ฉด์ ๋๋ ์ ์ ๊ณต์ฉ ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํจ์จ์ฑ์ด ๋ฌด์ฒ ์ข์๋ค๋ ์ ์ธ๋ฐ ๋๋ถ์ ํ์
ํ๊ธฐ์๋ ํธํ์ผ๋ฉฐ, ํนํ atoms ์์ญ์ ์ปดํฌ๋ํธ๋ค์ ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ ๊ฒ์ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒํ๋ค.
atomic ๋์์ธ ํจํด์ ์ปดํฌ๋ํธ์ ์ ์ฉ
Services โ APIํธ์ถ ๋ด๋น
Components/UI โ ๊ณตํต๋ ์ปดํฌ๋ํธ(๋ก์งX)
Components/Services โ ์๋น์ค ๋ก์ง๊ณผ ์ฎ์ธ ์ปดํฌ๋ํธ
Templates๊น์ง๋ ์คํ์ผ์ ์์๋ง โ Pages์์ ๋ก์ง์ด ๋ค์ด๊ฐ๊ฒ
์ปดํฌ๋ํธํด๋ ์์ ์คํ ๋ฆฌ๋ถ ํ์ผ๊ณผ SCSSํ์ผ ๋ชจ๋ ๋ฃ๊ธฐ
ex) ๋ฒํผ ์ปดํฌ๋ํธ ํด๋์๋ ์คํ ๋ฆฌ๋ถ + SCSS + ์ปดํฌ๋ํธ ์์ฒด๊ฐ ๋ค์ด๊ฐ๋ค.
apiํธ์ถ์ app/services์์ ์ญํ ์ ๋ด๋น
Atomic Design ๊ด๋ จ ์ฐธ๊ณ ์๋ฃ

ํํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ conflict๋ฅผ ๋ง์ด ๊ฒช์ด๋ณด๊ณ ํด๊ฒฐํด๋ณด๋ฉด์ ์ต์ํด์ง๊ณ ์ถ์๋๋ฐ ๊ทธ ๋ฐ๋จ๋๋ก ํ๋ฐ์ผ๋ก ๊ฐ๋ฉด ๊ฐ์๋ก conflict๋ฅผ ๋ง์ด ๊ฒช๊ณ , ํด๊ฒฐํด์ผ๋ง ํ๋ค. ์ค์ค๋ก์ ์ฝ๋์ ๋ํ conflict๋ ๋ฌธ์ ๊ฐ ๋์ง ์์์ผ๋ ๋ค๋ฅธ ์ฌ๋ ์ฝ๋์์ conflict๋ ์ ์คํ๊ฒ ๋ค๋ค์ผ ํ๊ณ , ์๋ชป ํด๊ฒฐํ๋ ์๊ฐ ๊ทธ ์ฌ๋์ ์ฝ๋๊ฐ ์ญ์ ๋๊ฑฐ๋ ์๋ชป๋ ์ฝ๋๋ก merge๋๋ ๊ฒฝ์ฐ๊ฐ ์์๊ธฐ์ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๊ทธ ํด๋น ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ณผ ์ํตํ๋ ๊ฒ์ด์๋ค. ์ค์ ๋ก ๊ทธ๋ ๊ฒ ํ ๊ฒฝ์ฐ ๋ช ๋ถ ๋ด๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ผ๋ฉฐ, ํจ์ฌ ์ฝ๊ณ ์์ํ๋ค.
์ด๋ฒ์ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ฒช์๋ ์ผํ ๋ช ๊ฐ์ง๋ฅผ ์๊ฐํ๊ณ ์ ํ๋ค.
api ๋ช
์ธ์์์ response์ ์ด๋ ํ ๋ฐ์ดํฐ๊ฐ ์ฌ์ง ๋์์์๋๋ฐ ๊ทธ๊ฒ์ 100% ๋ฏฟ์ผ๋ฉด ์๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ๊ทธ ์ ๊น์ง๋ ํญ์ api ๋ช
์ธ์๋๋ก ์งํํ๋ฉด ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ฉฐ ์ง์ ํ์ธํ์ง ์๊ณ ์งํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ๊ทธ๋ฌ๋ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๊ทธ๋ ๊ฒ ํ๋ฉด์ ์๋ฌ๊ฐ ๋ง์ด ๋ฐ์ํ๋๋ฐ ๊ทธ ์ด์ ๊ฐ ํจ์จ์ฑ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ๊ธฐ ๋๋ฌธ์ด์๋ค.
์์๋ก response ํํ๋ก User ๊ฐ์ฒด๊ฐ ์ค๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค.
{
"coverImage": String, // ์ปค๋ฒ ์ด๋ฏธ์ง
"image": String, // ํ๋กํ ์ด๋ฏธ์ง
"role": String,
"emailVerified": Boolean, // ์ฌ์ฉ๋์ง ์์
"banned": Boolean, // ์ฌ์ฉ๋์ง ์์
"isOnline": Boolean,
"posts": Post[],
"likes": Like[],
"comments": String[],
"followers": [],
"following": [
{
"_id": "6169e91316cb2265df003c6d",
"user": "6169e58216cb2265df003bf4",
"follower": "6169e206aa57d952c6dc1edd",
"createdAt": "2021-10-15T20:48:19.816Z",
"updatedAt": "2021-10-15T20:48:19.816Z",
"__v": 0
}
],
"notifications": Notification[],
"messages": Message[],
"_id": String,
"fullName": String,
"email": String,
"createdAt": String,
"updatedAt": String
}
api ๋ช ์ธ์๋๋ก๋ผ๋ฉด response๋ก User ๊ฐ ์ฌ ๋ ์ ๋ฐ ํํ๋ก ์์ผ ํ๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๊ฒฝ์ฐ์์ ์ ๋ฐ ํํ๋ก ์ค์ง ์์๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ User ๊ฐ์ฒด๊ฐ ์จ๋ค๊ณ ํ์ง๋ง, User ๊ฐ์ฒด ์ค _id ๊ฐ๋ง string์ผ๋ก ์จ ๊ฒฝ์ฐ๋ ์์๋ค. ๋ณดํต object๊ฐ ์์ผ ํ๋๋ฐ string์ผ๋ก id๊ฐ๋ง ์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ์ด๋ ๋ฉํ ๋๊ป์ ์๋ ค์ฃผ์ จ๋๋ฐ ํญ์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ํจ์จ์ ์ด์ง ์์์ ์ด๋ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ๋ ๊ฒฝ์ฐ๊ฐ ํ์ ์์๋ ๋ง๋ค๊ณ ํ๋ค. ๊ทธ๋์ ๊ทธ๋๋ง๋ค ๊ทธ์ ๋ง๋ type์ ์ค์ ํด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํด ๊ฐ๋ฐํด์ผ ํ๋ค๊ณ ์กฐ์ธํด์ฃผ์ จ๋ค. ์ฒ์์๋ ์ด๋ฅผ ๋ชจ๋ฅด๊ณ ๋ช ์ธ์๋ง ๋ฏฟ๊ณ ๊ฐ๋ฐํ๋ค๊ฐ type error๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋๋ฐ ์ด๋ฅผ ์ ๋ค๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ํ์ธํ ๋ค ๊ทธ์ ๋ง๋ ๋ฐ์ดํฐ ํ์ ์ ๋ง๋ค๊ณ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊พธ๊ฒ ๋์๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ฒ์ ์ ํ๊ฒ ๋ ๊ฐ๋ ์ค ํ๋๊ฐ usequery ์๋ค. ๋ฐ์ํ ๋ฌธ์ ๋ ํ์๊ฐ์ ์ ํด ์๋ก์ด ํ์์ด ์ถ๊ฐ๋ ๋ ์ฌ์ด๋๋ฐ์ ์๋ ์ ์ฒด ํ์ ๋ชฉ๋ก์ ๋ฐ๋ก ๋ฐ์์ด ๋์ด์ผ ํ๋๋ฐ ๊ทธ๋ฌ์ง ์์ ๋ฌธ์ ๋ก ์ด๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค๋๋ฐ usequery๋ฅผ ์ฌ์ฉํ์๋ค. ์ด์ ์ด ๋ถ๋ถ์ ๋ค๋ฅธ ํ์์ด ์ง ์ฝ๋์๊ณ , usequery๊ฐ ๋ฌด์์ด๊ณ ์ฝ๋๋ฅผ ์ดํดํ๋ ์๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ค. ์ด์ ๋๋ฆ๋๋ก ์๊ฐํ ํด๊ฒฐ๋ฐฉ๋ฒ์ query key๋ฅผ ๋ค๋ฅด๊ฒ ์ฃผ๋ ๊ฒ์ด์๊ณ , ๊ทธ ์ด์ ๋ ๋์ผํ query key๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋ ๊ธฐ์กด์ ์ฒ์ ํธ์ถํ ๋ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฆ๋๋ก usequery์ ๋ํด ์ดํดํ ๋ฐ๋ก๋ ๋์ผํ query key๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฒ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๊ทธ ๋ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋ ๊ธฐ์กด์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ ๊ฒ์ผ๋ก ๋๋ฆ๋๋ก ํธ์ถ ํ์๋ฅผ ์ค์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ์ดํดํ๋๋ฐ ์ด ๋ฌธ์ ๋ฅผ ๋๋ฆ๋๋ก์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ๋ค์๋ ๋ ์๋ก์ด ๋ฌธ์ ๋ค์ด ๊ณ์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์์ง๊น์ง๋ ์ด๋ ค์ด ๊ฐ๋ ์ผ๋ก ์ข ๋ ๊ณต๋ถ๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค.
// ์๋ํ ๋ฐฉ๋ฒ๋ค - query key์ ๋ณํ๋ ๊ฐ๋ค์ ๋ฃ์ด์ฃผ๊ธฐ
import { useQuery } from '@tanstack/react-query'
import { useCurrentUser } from '@/hooks/useCurrentUser'
import { getAllUsers } from '@/services/user'
import { UserSummary } from '@/types/user'
const useGetAllUsers = () => {
const { currentUser } = useCurrentUser()
return useQuery({
queryKey: [
'getAllUsers',
currentUser?._id,
currentUser?.coverImage,
currentUser?.fullName,
currentUser?.name,
],
queryFn: async () => {
const data: UserSummary[] = await getAllUsers()
return data
},
})
}
export default useGetAllUsers
// ์๋ํ ๋ฐฉ๋ฒ๋ค - reload ํ๊ธฐ
return (
<form
onSubmit={handleSubmit(async (data) => {
try {
await editProfile(data)
setCurrentName(data.fullName)
notify('success', '๋๋ค์์ด ์์ ๋์์ต๋๋ค.')
setValue('fullName', '')
location.reload()
} catch (error) {
notify('error', '๋๋ค์ ์์ ์ ์คํจํ์ต๋๋ค.')
} finally {
location.reload()
}
})}
style={{ display: 'flex', justifyContent: 'space-between' }}
>
... ์ค๋ต ...
๊ทธ ์ธ์๋ ๊ณต์ฉ์ ์ธ ๋ถ๋ถ์ ๋ด๋นํ๋ฉด์ ๋ด ์ฝ๋์ ์ํฅ๋ ฅ์ ์ค๊ฐํ๊ฒ ๋ ์ฌ๋ก๋ค๋ ์์๊ณ , ์ ํ๋ api์์์ ์ต๋ํ ์ํ๋ ๋ฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ก์ง์ ๊ตฌ์ํ๋ ์ผ๋ค๋ ๋ค์ ์์๋ค. ์๋ง์ ์๋ฌ์ ์ด๋ ค์์ ๋ง๋ฌ์ง๋ง ๊ทธ๋๋ ์ํ๋ ๋ฐ๋ ๋ชจ๋ ๊ตฌํ์ ๋๋ฆ๋๋ก ํ ๊ฒ ๊ฐ์ ๋คํ์ด์๋ค.
ํ๋ก์ ํธ๊ฐ ๋๋ ๋ค ํ ํ๊ณ ๋ฅผ ํ๋ฉด์ ๋ฐ์ฑํ ๊ฒธ ์ข์๋ ์ ๋ค์ ๋งํ๋ ์๊ฐ์ ๊ฐ์ก๋๋ฐ ๋ค๋ค ๋น์ทํ ์๊ฐ์ ํ๊ณ ์์๋ค๋ ๊ฒ์ ์กฐ๊ธ ๋๋๋ค. ๋๋ง ์ด๋ ๊ฒ ์๊ฐํ ๊ฒ์ด ์๋์๊ตฌ๋ ๋ ์๊ฐ์ ์ง์ ๋งํ์ผ๋ฉด ์ข์์๊ฑธ ํ๋ ์๊ฐ๋ ์์๋ ๊ฒ ๊ฐ๋ค.
๊ฐ์ฅ ์์ฌ์ด ์ ์ผ๋ก ๋๋ฅผ ํฌํจํด ๋ค๋ค 2๊ฐ์ง๋ฅผ ๋ฝ์๋๋ฐ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ๋ถ๋ถ์ ์์์ ์ธ๊ธํ๋ค์ํผ ๋ค๋ค ์์ด๋์ด ํ์์ ์ง์น๊ณ , next์ ๋์ ํ๋ค๋ ๊ธฐ๋๊ฐ์ ๊ด์ฌ๊ณผ ํฅ๋ฏธ๊ฐ ๋ชจ๋ ๊ฐ๋ฐ์ชฝ์ผ๋ก ๊ฐ ์์ด๋์ด๋ฅผ ๊ตฌ์ฒดํํ๋ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ด ์ ์ ์์ฌ์์ ๋๊ผ์๋ค. ์ด ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์์ ๋งํผ ์ฐ๋ฆฌ ํ์ ๊ฒฐ๊ณผ๋ฌผ์ ๊ธฐํ๋ถ๋ถ์์ ์์ฌ์์ ๋ณด์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋๋น์๋ฅผ ๋ค๋ค ํ์ํ๋ฉด์ ์์ผ๋ก ์์ ์ต์ข ํ๋ก์ ํธ์์๋ ๊ผญ ๊ฐ์ ํด์ผ ๊ฒ ๋ค๋ฉฐ ๋ค์ง์ ํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋๊ธฐ๋ ํ๋ค.
๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์ํต๊ณผ ์ง๋ฌธ์ด์๋ค. ๋ค๋ค ๊ณ ๋ฏผ์ด ๋ง์๋ ๋ฌธ์ ์๋๋ฐ ๋ชจ๋ฅด๋ ๊ฒ์ด ์์ผ๋ฉด ํ์๋ค๊ณผ ๊ณต์ ํ๊ณ ๋ค๊ฐ์ด ๋น ๋ฅด๊ฒ ํด๊ฒฐํ๋ค. ์ด๊ฒ์ ๋ง๋ก๋ ์ด๋ก ์ ์ผ๋ก๋ ์ฝ์ง๋ง ์ค์ ์ค์ฒํ๊ธฐ๋ ์ฝ์ง ์์๋ค. ๋จผ์ ์ด๋ค ๊ฒ์ ์ด๋ป๊ฒ ์ง๋ฌธํด์ผ ํ๋์ง ๋ถํฐ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๋ ์์๋ค. ์ฆ ๋๋ฌด ํฌ๊ด์ ์ด๋ผ ์ง๋ฌธํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ ๊ฒ์ด๋ค. ์ด๋ด ๊ฒฝ์ฐ ํผ์ ํ ์ ์๋ ๋ฐ๊น์ง ์ต๋ํ ์ฝ์งํ๋ ์๋ฐ์ ์์๋ค. ์ด๋ฌํ ์ ์ด ์ต์ข
ํ๋ก์ ํธ ๋์๋ ์ผ๋จ ์ํฉ ๊ณต์ ๋ผ๋ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ผ๋ก ๋ฐ์ ํ๋ค. ๊ทธ ์ธ์๋ ์ง๊ธ๊น์ง ๋ค์ธ ์๊ฐ์ด ์๊น์์, ์กฐ๊ธ๋ง ๋ ํ๋ฉด ํ ์ ์์ ๊ฒ ๊ฐ์์, ์ง๋ฌธ์ ํ๊ธฐ ์ํด์๋ ์ง๋ฌธ ๋ด์ฉ์ ์ ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ ์๊ฐ์ด ์๊น์์, ๋ฑ๋ฑ ๋ง์ ์ด์ ๊ฐ ๋์์๋ค. ๋ชจ๋ ์๊ฒฌ์ ๋๋ ๊ณต๊ฐํ๋ ๋ฐ์๋ค. ๋ค๋ง ๊ทธ ์ํฉ์ ํด๊ฒฐํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ ํ์ ์ค๊ฐ ํ๋ก์ ํธ๋ ์๊ฐ์ ์ซ๊ธฐ๊ณ ์ฝ์ง์ ๋ง์ด ํ๋๊ฒ ์๋๊น ์ถ๋ค.
์กฐ๊ธ ์ด๋ ต๋๋ผ๋ ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ๋๋ผ๋ ์ผ๋จ ๋ง์ด๋ผ๋ ๊บผ๋ด๋ณด๋ ์ฉ๊ธฐ๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค. ๊ทธ ์ธ์๋ ์ํต๊ณผ ๊ด๋ จํด ์ํต ๋ฐฉ๋ฒ, ๊ณต์ ๋ฐฉ๋ฒ, ์ํตํ ๋ด์ฉ์ ๊ธฐ๋ก์ผ๋ก ๋จ๊ธฐ๋ ๋ฐฉ๋ฒ ๋ฑ ๋ง์ ๋ฉด์์ ์ข์๋ ์ ๋ ์๊ณ ๋ฏธํกํ๋ ๋ถ๋ถ๋ ์์๋ค. ๋ค๋ง ์ด๋ฌํ ๊ฒ๋ค์ ์ค๊ฐ ํ๋ก์ ํธ๋ฅผ ๊ฒฝํ์ผ์ ์ต์ข
ํ๋ก์ ํธ ๋์์ ๋ฐ๋ณตํ์ง ์๋๋ค๋ฉด ์ถฉ๋ถํ ๊ทธ๊ฒ๋ง์ผ๋ก๋ ์๋ฏธ๊ฐ ์์๋ ๊ฒ ๊ฐ๋ค.