ํ์ ์ฃผ์
API ๋ช
์ธ์ ํ์๋ฅผ ์งํํ๋ค.
- ๊ฐ์ ๋จธ์ฑ๋ ํฐ์ API ๋ฅผ ์กฐ์ฌํด์จ๋ค.
- ํ๋๋ช ํต์ผํ, ๊ณตํต API ๋ฌถ๊ธฐ,
- queryOptions ๋ก queryKey ๊ด๋ฆฌ
api-docs ๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์์ ์คํํ๋ ๋ฐฉ๋ฒ
yarn api-docs start
express ๊ณต๋ถํ๊ฑฐ ๊ณต์ ํ๊ธฐ
- ์ํ์ฝ๋ฉ express ๊ฐ์ ๋ฃ๊ณ ๊ณต์
์คํ๋ ํ
์คํธ ์ฝ๋ ๊ฐ์
ํ์ฌ ๋ช ๊ฐ์ง ํด๋์ ์์ ์ ๋ํด์..
Express ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
์์ธ ๋ด์ฉ์.. ์ด PR ์์ ํ์ธ ๊ฐ๋ฅ.
(๋ฆฌํฉํ ๋ง ์๋ฃ ์ ์ ๊ฑฐ๋ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์๋ ์ธ๋๋ฐ๋ฅผ ๋ถํ ๋์์!)
๐ src ๐ _apis: ๊ธฐ์กด์ ๊ตฌํ๋ SNS API, ์ฌ๋ API ๋ฑ ์ธ๋ถ ์๋น์ค์ ๋ํ ๋ก์ง (์ถํ ์ ๊ฑฐ๋ ์์ ..) ๐ _handlers: ๊ธฐ์กด์ ๊ตฌํ๋ ์ฌ๋ ๊ด๋ จ ์ปจํธ๋กค๋ฌ ๋ก์ง (์ถํ ์ ๊ฑฐ๋ ์์ ...) ๐ config: ๊ฐ์ข ์ค์ ๋ก์ง ๐ domains: ๊ฐ ๋๋ฉ์ธ์ ๋ํ ์์ค์ฝ๋ (์ฐ์ REST API์ ๊ฐ์ฅ ์ ๋ถ๋ถ์ ํด๋น๋๋ ๊ฒ๋ค๋ก ๋ฌถ์ด ๋์์ด์.) ๐[domain].controller.ts: ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ์ฒ๋ฆฌํ๋ ๊ณณ ๐[domain].service.ts: ๋๋ฉ์ธ์ ๋ํ ๊ฐ์ข ๋น์ฆ๋์ค ๋ก์ง์ด ๋ค์ด๊ฐ๋ ๊ณณ ๐[domain].repository.ts: DB์ ์ก์ธ์คํ๋ ์ง์ ์ ์ธ ๋ก์ง์ด ๋ค์ด๊ฐ๋ ๊ณณ ๐[domain].validator.ts: ํด๋ผ์ด์ธํธ์ Request ๊ฐ์ฒด์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฌ ๋ก์ง์ ์์ฑํ๋ ๊ณณ ๐ middlewares: ํน์ ๋๋ฉ์ธ์ ์ข ์๋์ง ์๊ณ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ๋๋ Express ๋ฏธ๋ค์จ์ด (์ ํจ์ฑ ๊ฒ์ฌ, ๋ก๊ทธ์ธ ๊ฒ์ฌ ๋ฑ) ๐ models: TypeORM ์คํค๋ง (๊ทธ๋๋ก DB์ ์ ์ฉ) ๐ types: ๊ฐ์ข ํ์ ๐ utils: ๊ฐ์ข ์ ํธ์ฑ ๋ก์ง
ํ์๊ฐ์ ๊ธฐ๋ฅ ๊ตฌํ
์ฐ์ ๊ฐ๋จํ๊ฒ accessToken๋ง ๋ฐ๊ธ ๋ฐ๋๋ก ํด ๋์์..
Express์ Jest ์ค์น
Jest ์ค์นํ๊ณ , ๊ฐ๋จํ๊ฒ ๋จ์ ํ
์คํธ ๋ช ๊ฐ ์์ฑํด๋ณด์์.. (auth service, ๋ฏธ๋ค์จ์ด ๋ฑ๋ฑ)
Express๋ฅผ ๋ก์ปฌ์ ๋์ฐ๊ธฐ ์ํด์..
- Express ์๋ฒ์์ MySQL, Redis๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ปดํจํฐ์ ์ค์น๊ฐ ํ์..
- ๊ฐ์ ๋ก์ปฌ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๊ฒฝ๋ณ์ .env์์ ๋ณ๊ฒฝํ๋ ๊ณผ์ ํ์
- (์๋ Docker ์ปจํ ์ด๋๋ก ํ๊ฒฝ์ ๋ง๋ค์ด ๋์ ์ ์์ ๊ฑฐ ๊ฐ์๋ฐ.. ์์ง ๊ทธ ์ชฝ๊น์ง ํ์ต์ ๋ชปํด์ ํด๋์ง ๋ชปํ์.. ๐)
- env ํ์ผ์ ํ์์ฉ ๋์ค์ฝ๋ ์ฑ๋์ ์ ๋ก๋ํด๋์์
ํ์ ๊ฒฐ๊ณผ
์คํค๋ง
- User ์คํค๋ง ๋ณ๊ฒฝ
- username โ email
- image_name โ image_url
- Comment ์คํค๋ง
- author โ author_id (์ญ์ ๊ธฐ๋ฅ ๋๋ฌธ์ FK ์ฐ๊ฒฐํด์ผํจ.)
- nickname ์ถ๊ฐ (๋๋ค์ ํ๋)
- updated_at ์ ๊ฑฐ
API
- PUT /users/{userId}
- ์ก์ธ์ค ํ ํฐ header์ ์ถ๊ฐ ์๋ฃ.
- GET /posts
- ์์ฑ์ ์ด๋ฆ ๋ค์ด๊ฐ์ผ ํจ.
- comments ๋ฐฐ์ด ๋์ ์ commentCount๋ง ์์ด๋ ๋จ. (FE๋ ์์ ์ฌํญ ๋ฐ์)
โ authorId, authorName ํ๋ ์์ฑ ์๋ฃ.
โ commentCount ๋ก ๋ณ๊ฒฝ ์๋ฃ.
- GET /posts/{postId}
- ์ก์ธ์ค ํ ํฐ ์์ด๋ ๋จ.
โ ์ก์ธ์ค ํ ํฐ ์ญ์ ์๋ฃ.
- POST /posts/{postId}/comments
- ๋นํ์ ์ ์ฉ์ด๋, ํ์ ์ ์ฉ์ด๋ ๊ตฌ๋ถํด์ API ํฌ์ธํธ ์์ฑํ๊ธฐ.
โ ๊ฐ์ API์ query ํ๋ผ๋ฏธํฐ๋ก asSignedUser=true | false ๊ฐ์ ๋ฐ๋ผ์ ๋นํ์๊ณผ ํ์ ์ ์ฉ์ ๊ตฌ๋ถํ์. ์๋ฃ.
- ํธ์ง ์ญ์ API ์ถ๊ฐํด์ผ ํจ.
โ DELETE /comments/{commentId} ์๋ฃ.
- ๋ก๊ทธ์ธ API์์ validation ์๋ณด๋ด์ฃผ๊ธฐ.
- validationFilter์ ์ธ์ ํ๋ ๋ณด๋ด์.. validation ํ๋ ์ค์ง ์์ค์ง ์์ ํ๊ธฐ
(2์ฃผ) ์์ ๋ถ๋ฐฐ
- ์ํ: ์ธํ๋ผ, ํจํค์ง ๋งค๋์ , ์๋ํ, Github Actions, โฆ ๋ฑ๋ฑ ํด๋ณด๊ณ ์ถ์
PR ๋น๋ ์คํจ ์ฒดํฌํ๊ธฐ.ERD-cloud๋ก ERD ์ฎ๊ธฐ๊ธฐ์ค๋ ์๋ ผํ ๋ด์ฉ ๋ฐํ์ผ๋ก API DOCS ์ ๋ฐ์ดํธํ๊ธฐ.์ค๋ ์๋ ผํ ๋ด์ฉ ๋ฐํ์ผ๋ก DB, Auth ๋ก์ง ๋ณ๊ฒฝํ๊ธฐTanStack Query V5 ๋ง์ด๊ทธ๋ ์ด์ (๋จ์ํ ๋ฒ์ ๋ง ์ฌ๋ฆฌ๊ธฐ)- Query Key Factory ํจํด์ผ๋ก queryOptions ์ ๋ฆฌ (์๋ก์ด API ์ ์ฉ)
- ๋ฐฑ์๋ API
/auth
๊ด๋ จ APIPUT /users/{userId}/slack}
์ฌ๋ ๊ณ์ ์ฐ๋POST /slack/verification
์ฌ๋ DM์ผ๋ก ์ธ์ฆ ๋งํฌ ์ ์ก- ํ ์คํธ ์ฝ๋ ๊ณต๋ถโฆ. (ํ ์ ์์ผ๋ ค๋ ใ 0ใ )
- ์ฃผ์ฐ
- ํฐํธ ๊ด๋ จ ์ต์ ํ
- ํ ์คํธ์ฝ๋ ๊ณต๋ถ โ ํนํ msw์ ์ด๋ป๊ฒ ํ ์คํธํ ์ง์ ํนํํด์ ๊ณต๋ถํ๊ณ ์ถ์
- ๋ฐฑ์๋ ๊ณต๋ถ + api
- GET
/users
์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ - GET
/posts/{postId}/comments
๋๊ธ ๋ค๊ฑด ์กฐํ - GET
/comments/{commentId}
๋๊ธ ๋จ๊ฑด ์กฐํ
- ํธ์
- Post, Comment api ์ด์ ๊ตฌํ
- GET
/posts/{postId}
๋จธ์ฑ์ด ์์ธ ์กฐํ - DELETE
/posts/{postId}
๋จธ์ฑ์ด ์ญ์ - POST
/posts/{postId}/comments
ํน์ ๋จธ์ฑ์ด์๊ฒ ํธ์ง ์์ฑ - Tanstack Query ์ฌ์ฉ ํจํด ๊ณต๋ถ
- ํ ์คํธ ์ฝ๋ ๊ณต๋ถ
- ํธ์:
- ๋ฐฑ์๋ API ๊ตฌํ
/posts
๋จธ์ฑ์ด ๋ชฉ๋ก ์กฐํ/posts
๋จธ์ฑ์ด ์์ฑ- ์ต์ ์, ์ธ๊ธฐ์ โํ ๊ธ๋ฒํผโ ๋จธ์ฑ์ด ๋ชฉ๋ก ์กฐํ
- ๋จธ์ฑ ์์ฑ react hook form ์ ์ฉ (๊น๋จน๊ณ ์์..)
- ๋ฐฐํฌ ๊ณผ์ ์ฝ๋ , API ์์ฒญ ํ DB ํ์ธ
- ํ์ง
- ๊ธฐ์กด ์ฝ๋๋ฅผ useSuspenseQuery ํ ์ผ๋ก ๋ณ๊ฒฝ
- ์๋ฒ API ๊ตฌํ (ํ๋กํ ์ด๋ฏธ์ง s3 ์ ๋ก๋ ๊ณต๋ถํ๊ธฐ )
- GET
/users/{userId}
ํน์ ์ฌ์ฉ์์ ์ ๋ณด ์กฐํ - PUT
/users/{userId}
์ฌ์ฉ์์ ์ ๋ณด ์์ - PUT
/users/{userId}/photo
์ฌ์ฉ์์ ํ๋กํ ์ด๋ฏธ์ง ์์
๊ท์น
- 2์ฃผ์ 1๋ฒ ํ ํฌ์คํ ์์ฑํ๊ธฐ(๊ฐ์ธ ๋ธ๋ก๊ทธ์ ์์ฑํ๊ณ ๊นํ๋ธ wiki์ ๋ธ๋ก๊ทธ url ๋๋ ๋ด์ฉ ๋ณต๋ถํ๊ธฐ)
- PR ๋ฆฌ๋ทฐ ๊ท์น
- ์ด์ ์ฌ๋ฆฌ๊ณ ๋ธ๋์น ๋ง๋ค๊ธฐ
- PR ์ฌ๋ฆด ๋
D-3
,D-1
๋ผ๋ฒจ ๋ฌ๊ณ PR ์ฌ๋ ธ๋ค๊ณ ์นดํก๋ฐฉ์ ์ฌ๋ฆฌ๊ธฐ ์ต.๋.ํ
๋ชจ๋ ์ธ์์ด ์ฝ๋๋ฆฌ๋ทฐ ํด์ฃผ๊ธฐ- PR ๊ผญ ์ชผ๊ฐ์ ์ฌ๋ ค์ฃผ์ธ์. ํ๊บผ๋ฒ์ ์ฌ๋ฆฌ๋ฉด Merge X
- ์คํฌ๋ผ ํ์ - ์ฃผ 1ํ
๊ถ๊ธํ ์ ์ ๋์ฝ์์ ์ค์๊ฐ or ๋น๋๊ธฐ ์ปค๋ฎค๋์ผ์ด์
- ๋จธ์ฑ ๋ ํฐ ์์ ์ค์๋ ๋์ฝ์ ๋ค์ด์์๊ธฐ!