Turtleneck Blog๋ ๊ฐ๋ฐ์๋ค์ ์ํ ํ ํฌ ๋ธ๋ก๊ทธ ํ๋ซํผ์ ๋๋ค. ์ฌ์ฉ์๋ ๋งํฌ๋ค์ด ์๋ํฐ๋ฅผ ํตํด ์ฝ๊ฒ ๊ธ์ ์์ฑํ๊ณ , ๋ค๋ฅธ ์ฌ์ฉ์๋ค๊ณผ ์ข์์ ๋ฐ ๋๊ธ์ ํตํด ํผ๋๋ฐฑ๊ณผ ์ํตํ ์ ์์ต๋๋ค. ์ด ํ๋ซํผ์ ์ ๋ฌธ์ ์ธ ๊ธฐ์ ํฌ์คํธ๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ๊ณ , ์ฝ๋ ๋ฐ ๊ธฐ์ ์ ๋ํด ๋ ผ์ํ ์ ์๋ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค. ๋ธ๋ก๊ทธ๋ ๋จ์ํ ์ ๋ณด ๊ณต์ ๋ฅผ ๋์ด์, ๊ฐ๋ฐ์ ๊ฐ์ ์ํต๊ณผ ํผ๋๋ฐฑ์ ํตํด ์๋ก์ ์ฑ์ฅ์ ๋์ธ ์ ์๋ ์ปค๋ฎค๋ํฐ๋ฅผ ์งํฅํฉ๋๋ค. ์ฌ์ฉ์๋ ํฌ์คํธ๋ฅผ ์์ฑํ๊ณ , ๋ค๋ฅธ ์ฌ์ฉ์๋ก๋ถํฐ ํผ๋๋ฐฑ์ ๋ฐ์์ผ๋ก์จ ์์ ์ ๊ธฐ์ ์ ์ญ๋์ ํค์ฐ๊ณ ๋ ๋์ ๊ธ์ ์์ฑํ๋ ๊ธฐํ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
- ๋งํฌ๋ค์ด์ ํตํ ๊ฐํธํ ๊ธ ์์ฑ:
react-markdown-editor-lite
์markdown-it
์ ์ฌ์ฉํด ์ฝ๊ฒ ํฌ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋งํฌ๋ค์ด์ ์ด์ฉํ๋ฉด ์ฝ๋ ๋ธ๋ก, ํ, ๋ฆฌ์คํธ ๋ฑ ๋ค์ํ ํ์์ ๊ฐํธํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ง๊ด์ ์ธ ํธ์ง ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. - ์ข์์ ๋ฐ ๋๊ธ ๊ธฐ๋ฅ: ๊ฐ ๊ฒ์๋ฌผ์ ๋ํด ์ข์์์ ๋๊ธ์ ๋จ๊ธธ ์ ์์ด, ์ฌ์ฉ์ ๊ฐ์ ํ๋ฐํ ์ํต์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ฑ์๋ ์์ ์ ํฌ์คํธ์ ๋ํ ํผ๋๋ฐฑ์ ์ง์ ํ์ธํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ธ์ ํ์ง์ ๋์ผ ์ ์์ต๋๋ค.
- ๊ด๋ฆฌ์ ๊ธฐ๋ฅ: ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ, ๋๊ธ ๊ด๋ฆฌ, ๋ธ๋ก๊ทธ ์ ๋ณด ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํตํด ๋ธ๋ก๊ทธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ์๋ ์ฌ์ฉ์ ํ๋์ ๋ชจ๋ํฐ๋งํ๊ณ , ์ํํ ๋ธ๋ก๊ทธ ์ด์์ ์ํด ์ฝํ ์ธ ๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ํ๋ก ํธ์๋: React, Sass,
react-markdown-editor-lite
,markdown-it
์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค์ ์คํ์ผ์ ๊ตฌํํ์ต๋๋ค. ๋ฐ์ํ ๋์์ธ์ ์ ์ฉํ์ฌ ๋ค์ํ ๊ธฐ๊ธฐ์์ ์ต์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. - ๋ฐฑ์๋: Next.js, NextAuth(JWT ์ฌ์ฉ), Mongoose, Bcrypt๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ธ์ฆ ๊ธฐ๋ฅ์ ๊ฐํํ์ต๋๋ค. ํจ์จ์ ์ธ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ํตํด ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , JWT๋ฅผ ์ฌ์ฉํ ๋ณด์ ๊ฐํ๋ฅผ ๋๋ชจํ์ต๋๋ค.
- ๋ณด์: ์ธ์ฆ ๋ฐ ๋ณด์ ๊ฐํ๋ฅผ ์ํด
next-auth
์ Bcrypt๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ๋น๋ฐ๋ฒํธ๋ ์์ ํ๊ฒ ํด์ฑ๋์ด ์ ์ฅ๋๋ฉฐ, ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ ๋ณดํธ๋ฉ๋๋ค. - ๋ฐ์ดํฐ๋ฒ ์ด์ค: MongoDB, Mongoose๋ฅผ ์ฌ์ฉํ DB ์ฐ๊ฒฐ ๋ฐ ์ค์ ์ ํตํด ํ์ฅ์ฑ ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฒ์๊ธ, ์ฌ์ฉ์, ๋๊ธ ๋ฑ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
NFE1_2_3_TurtleNeck/
โโโ client/
โ โโโ public/
โ โ โโโ images/
โ โโโ src/
โ โ โโโ app/
โ โ โ โโโ admin/
โ โ โ โโโ api/
โ โ โ โโโ auth/
โ โ โ โโโ [...nextauth]/route.js
โ โ โโโ components/
โ โ โ โโโ Footer/
โ โ โ โโโ Navigation/
โ โ โ โโโ PostCard/
โ โ โ โโโ MainPostCard/
โ โ โโโ utils/
โ โ โ โโโ api.js
โโโ server/
โโโ app/
โ โโโ api/
โ โ โโโ admin/
โ โ โโโ auth/
โ โ โโโ category/
โ โ โโโ comment/
โ โ โโโ like/
โ โ โโโ post/
โ โ โโโ upload/
โ โโโ db/
โ โโโ models/
โ โโโ dbConnect.js
โโโ public/
โโโ uploads/
์์ ๊ฐ์ ํด๋ ๊ตฌ์กฐ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฝ๋๊ฐ ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฉฐ, ์ ์ง ๋ณด์์ ๊ธฐ๋ฅ ํ์ฅ์ด ์ฉ์ดํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ฐ ํด๋๋ ์ญํ ์ ๋ฐ๋ผ ์ธ๋ถํ๋์ด ์์ผ๋ฉฐ, ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง๊ด์ ์ผ๋ก ์ ์ ์์ต๋๋ค.
- ๊ธฐํ/์ค๊ณ (10/14 - 10/23): ์ฃผ์ ์ ์ , ์๊ตฌ์ฌํญ ์ ์์ ์์ฑ, ํ๋ก์ ํธ ๊ตฌ์ฑ๋, ํด๋์ค ๋ฐ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ ์์ฑ. ์ด ๋จ๊ณ์์๋ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์ ํํ ๋ถ์ํ๊ณ , ์ด๋ฅผ ํ ๋๋ก ํ๋ก์ ํธ์ ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ์ต๋๋ค. ๋ชจ๋ ํ์์ด ํ๋ก์ ํธ์ ๋ชฉํ์ ์ญํ ์ ๋ช ํํ ์ดํดํ ์ ์๋๋ก ๋ค์ํ ๋๊ตฌ๋ฅผ ํ์ฉํด ๋ฌธ์๋ฅผ ์์ฑํ์ต๋๋ค.
- ๊ฐ๋ฐ/๋ณํฉ (10/23 - 11/05): ๊ณตํต ์ปดํฌ๋ํธ ๊ตฌํ, ํ์ด์ง ํ๋ฉด ๊ตฌํ, ์ธ์ฆ, ์ธ๊ฐ, ๋ณด์ ์ฒ๋ฆฌ ๋ฐ DB ์ค์ ์ ์งํํ์ต๋๋ค. ๊ฐ ํ์์ด ๋งก์ ์ญํ ์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ์ด๋ฅผ ๋ณํฉํ์ฌ ์ ์ฒด์ ์ธ ์์คํ ์ ๋์์ ํ์ธํ์ต๋๋ค. ๋ฒ๊ทธ ์์ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ํ์ง์ ๋์์ต๋๋ค.
- ์ข ๋ฃ/๋ฐํ (11/05 - 11/06): ์ต์ข ์ฝ๋ ๋ณํฉ ๋ฐ ๋ฐํ ์ค๋น. ํ๋ก์ ํธ์ ๋ง์ง๋ง ๋จ๊ณ๋ก, ์ต์ข ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ์์ ์ฑ์ ํ๋ณดํ์ต๋๋ค. ๋ฐํ ์๋ฃ๋ฅผ ์ค๋นํ์ฌ ํ๋ก์ ํธ์ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ๊ณผ์ ์ ๊ณต์ ํ์ต๋๋ค.
- ํ๋ก ํธ์๋: ์ด๋์ธ, ๊นํ์ค
- ์์ธํ์ด์ง, ์นด๋ ์ปดํฌ๋ํธ, ๋ฉ์ธํ์ด์ง, ๊ด๋ฆฌ์ CSS ๊ตฌํ
- ์ฌ์ฉ์์ ์๊ตฌ์ ๋ง๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ , CSS๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ์์ต๋๋ค.
- ๋ฐฑ์๋: ์ ํด๋, ์ต์์ง
- ๋ณด์ ์ค์ , ํด๋ผ์ด์ธํธ API, ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
- ๋ฐ์ดํฐ์ ์์ ํ ์ ์ฅ๊ณผ ํจ์จ์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ค์ํ ๋ฐฑ์๋ ๊ธฐ์ ์ ํ์ฉํ์์ต๋๋ค.
- ๋ฉ์ธ ํ์ด์ง: ๋ค๋น๊ฒ์ด์ , ๋ธ๋ก๊ทธ ์ด๋ฆ & ์ค๋ช , ์ต์ ๊ฒ์๊ธ, ๊ฒ์๊ธ ์นด๋ ๋ชฉ๋ก, ํ์ด์ง๋ค์ด์ , ํธํฐ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ฉ์ธ ํ์ด์ง๋ ๋ธ๋ก๊ทธ์ ์ฒซ ์ธ์์ ๊ฒฐ์ ์ง๋ ์ค์ํ ์์๋ก, ์ฌ์ฉ์ ์นํ์ ์ธ ๋์์ธ๊ณผ ์ต์ ์ ๋ณด ์ ๊ณต์ ๋ชฉํ๋ก ํ์ต๋๋ค.
- ์์ธ ํ์ด์ง: ๊ฒ์๊ธ ์ ๋ชฉ, ๋ฉํ ๋ฐ์ดํฐ, ๊ฒ์๊ธ ์์ธ ๋ด์ฉ, ๋๊ธ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ์ฌ์ฉ์๊ฐ ํฌ์คํธ๋ฅผ ๊น์ด ์๊ฒ ์ดํดํ๊ณ ์ํตํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋๊ธ ๊ธฐ๋ฅ์ ํตํด ์ฌ์ฉ์๋ ์ง์ ์ ์ธ ์๊ฒฌ์ ๋จ๊ธธ ์ ์์ต๋๋ค.
- ๊ฒ์๊ธ ์์ฑ/์์ ํ์ด์ง: ์นดํ ๊ณ ๋ฆฌ, ์ ๋ชฉ, ํ๊ทธ, ์ธ๋ค์ผ ์ ๋ ฅ ๋ฐ ๋งํฌ๋ค์ด ์๋ํฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ์ฌ์ฉ์๊ฐ ์์ฝ๊ฒ ๊ฒ์๊ธ์ ์์ฑํ๊ณ ์์ ํ ์ ์๋๋ก ๋์ต๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ํตํด ์์ฑ ์ค์ธ ๊ธ์ ํํ๋ฅผ ์ฆ์ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ด๋ฆฌ ํ์ด์ง: ๋ธ๋ก๊ทธ ์ ๋ณด ๊ด๋ฆฌ, ์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ, ๋๊ธ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ, ๊ด๋ฆฌ์๋ ์ด๋ฅผ ํตํด ๋ธ๋ก๊ทธ์ ์ฝํ ์ธ ์ ์ฌ์ฉ์ ํ๋์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ ์ฅ์๋ฅผ ํด๋ก ํฉ๋๋ค.
git clone [์ ์ฅ์ URL]
- ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
cd client && npm install cd ../server && npm install
- ํ๊ฒฝ ๋ณ์ ํ์ผ์ ์ค์ ํฉ๋๋ค (
.env.local
ํ์ผ). - ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
npm run dev
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ฉด, ๋ก์ปฌ ํ๊ฒฝ์์ ํ๋ก์ ํธ๋ฅผ ํ ์คํธํ ์ ์์ต๋๋ค. ๊ฐ ๊ธฐ๋ฅ์ด ์๋ํ ๋๋ก ์๋ํ๋์ง ํ์ธํ๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋๋ฒ๊น ์ ํตํด ํด๊ฒฐํฉ๋๋ค.
MIT License๋ฅผ ๋ฐ๋ฆ ๋๋ค. ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ด ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ ํ ์ ์์ผ๋ฉฐ, ์ด์ ๋ํ ์ ์ฝ ์ฌํญ์ MIT ๋ผ์ด์ ์ค์ ๋ช ์๋์ด ์์ต๋๋ค.
๊ธฐ์ฌ๋ฅผ ์ํ์๋ ๋ถ์ ์ด์๋ฅผ ์์ฑํ๊ฑฐ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํด ์ฃผ์ธ์. ํญ์ ํ์ํฉ๋๋ค! ํ๋ก์ ํธ์ ๊ธฐ์ฌํจ์ผ๋ก์จ ๋ ๋์ ํ๋ซํผ์ ํจ๊ป ๋ง๋ค์ด ๋๊ฐ ์ ์์ต๋๋ค. ๋ฒ๊ทธ ์ ๊ณ , ๊ธฐ๋ฅ ์ ์, ์ฝ๋ ๊ฐ์ ๋ฑ ๋ค์ํ ํํ์ ๊ธฐ์ฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.