React,TypeScript
๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
๋ฐฑ์๋๋ Firebase
์ Firestore Database๋ฅผ ์ด์ฉํ ์์ ์ด๋ค.
UI ๋์์ธ์ Chakra UI
๋ฅผ ์ฌ์ฉํ ์๊ฐ์ด๋ค.
์ฒ์ ์จ๋ณด๋ ๊ฑฐ์ง๋ง ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ํ๋ฉด ๊ธ๋ฐฉ ๋๊ฒ์ด๋ค.
๋ธ๋ก๊ทธ์ seo๋ฅผ ์๊ฐํ๋ค๋ฉด SSR์ธ Next.js
๋ก ๋ง๋๋๊ฒ ๋ง์ง๋ง,
๊ณ์ ํด๋ก ๋ง ํ๋๊ฒ๋ณด๋ค๋ ๋๋ง์ ์ฒซ ์น ํ๋ก์ ํธ๋ฅผ ํด๋ณด์ถ๋ค๋ ์๊ฐ์
CSR์ CRA์ผ์ง๋ผ๋ ์ผ๋จ ๋ง๋ค์ด๋ณด์๊ณ ๋ค์งํ๋ค.
SSR์ด ํ์ํ๋ค๊ณ ๋ชธ์ ๋๋ผ๊ฒ ๋๋ค๋ฉด ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ค๊ณผ ํจ๊ป
Next.js
๋ก ๋ค์ ๋ง๋ค ์์ ์ด๋ค.(ํ์ฌ Next.js๋ฅผ ๊ณต๋ถ์ค์ด๋ค.)
๋ฉํ์ ์์ง๋์ด๋ก ์ผํ์๋ ๋ถ์ ๋ธ๋ก๊ทธ(์ค๊ตญ์ด๋ผ ์ด๋ฆ์ ๋ชจ๋ฅด๊ฒ ๋ค..)
//firebase.ts
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
authDomain: process.env.REACT_APP_AUTH_DOMAIN,
projectId: process.env.REACT_APP_PROJECT_ID,
storageBucket: process.env.REACT_APP_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_MESSAGING_SENDER_ID,
appId: process.env.REACT_APP_APP_ID,
};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
export const authService = getAuth();
export const dbService = getFirestore();
export const storageService = getStorage();
ํ์ด์ด๋ฒ ์ด์ค ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
.gitignore
๋ฅผ ์ํด .env
๋ก ์์ฑํ๋ค.
์ค์ง ๋๋ง์ ์ํ ๋ธ๋ก๊ทธ์ด๊ธฐ ๋๋ฌธ์ ํํ์ด์ง ๊ด๋ฆฌ๋ฅผ ์ํ ์ด๋๋ฏผ ๊ณ์ ํ๋๋ง ๋ง๋ ๋ค.
๋ธ๋ก๊ทธ์ ํ์ํ ์ปฌ๋ ์ ๊ณผ ํ๋๋ฅผ ์์ฑํ๋ค.
Notes
- title(์ ๋ชฉ)
- md(๋ณธ๋ฌธ)
- category(์นดํ ๊ณ ๋ฆฌ,ํ๊ทธ)
- createdAt(์์ฑ๋ ์ง)
- thumbnailURL(์ธ๋ค์ผ URL)
Comments
์ต๋ช ์์ฑ์ ์ํด ์์ฑ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์.
๊ธ์ ์์ด๋์ ๋ง๋ ๋๊ธ๋ค์ ๋ถ๋ฌ์ค๊ธฐ ์ํด docId ๋ฅผ ์ ์ฅ.
- nickname(์์ฑ์ ์ด๋ฆ)
- password(์์ /์ญ์ ์ฉ ๋น๋ฐ๋ฒํธ)
- comment(๋๊ธ)
- docId(๊ธ id)
- edited(์์ ๋จ ํ์ ์ฌ๋ถ)
- avatar(๋๊ธ ์๋ฐํ)
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๊ธฐ๊น์งํ๊ณ ์ถํ์ ํ์ํ๊ฒ ์์ผ๋ฉด ๋ ์์ฑํ๋ค.
CRA์ createBrowserRouter ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
ํ์ํ screen ๋ค์ ๋ฏธ๋ฆฌ ๊ตฌ์ํ์.
Entry
: ๋ธ๋ก๊ทธ์ ๊ธ ํ์ด์งGuestBook
: ๋ฐฉ๋ช
๋ก ํ์ด์งHome
: ํํ์ด์ง ๋ฉ์ธ ํ์ด์งNotes
: ๊ธ๋ค ๋ณด์ฌ์ฃผ๋ ํ์ด์งNotFound
: 404Write
: ๋งํฌ๋ค์ด ์์ฑ ํ์ด์ง