๐Ÿ› ๏ธ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ - 1 (๊ตฌ์ƒ) ๐Ÿ› ๏ธ

์˜ค์œ ์ง„ยท2023๋…„ 3์›” 22์ผ
0
post-thumbnail

๊ตฌ์„ฑ

STACK

React,TypeScript๋ฅผ ์‚ฌ์šฉํ• ๊ฒƒ์ด๋‹ค.
๋ฐฑ์—”๋“œ๋Š” Firebase์˜ Firestore Database๋ฅผ ์ด์šฉํ•  ์˜ˆ์ •์ด๋‹ค.

UI ๋””์ž์ธ์€ Chakra UI๋ฅผ ์‚ฌ์šฉํ•  ์ƒ๊ฐ์ด๋‹ค.
์ฒ˜์Œ ์จ๋ณด๋Š” ๊ฑฐ์ง€๋งŒ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด์„œ ํ•˜๋ฉด ๊ธˆ๋ฐฉ ๋Š˜๊ฒƒ์ด๋‹ค.

๋ธ”๋กœ๊ทธ์ธ๋ฐ SSR ์–ด๋”จ์Œ? ๐Ÿ˜ก๐Ÿ˜ก

๋ธ”๋กœ๊ทธ์˜ seo๋ฅผ ์ƒ๊ฐํ•œ๋‹ค๋ฉด SSR์ธ Next.js๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ๋งž์ง€๋งŒ,
๊ณ„์† ํด๋ก ๋งŒ ํ•˜๋Š”๊ฒƒ๋ณด๋‹ค๋Š” ๋‚˜๋งŒ์˜ ์ฒซ ์›น ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณด์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์—
CSR์— CRA์ผ์ง€๋ผ๋„ ์ผ๋‹จ ๋งŒ๋“ค์–ด๋ณด์ž๊ณ  ๋‹ค์งํ–ˆ๋‹ค.
SSR์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ชธ์†Œ ๋Š๋ผ๊ฒŒ ๋œ๋‹ค๋ฉด ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๋“ค๊ณผ ํ•จ๊ป˜
Next.js๋กœ ๋‹ค์‹œ ๋งŒ๋“ค ์˜ˆ์ •์ด๋‹ค.(ํ˜„์žฌ Next.js๋ฅผ ๊ณต๋ถ€์ค‘์ด๋‹ค.)

๋””์ž์ธ ์ฐธ๊ณ 


๋ฉ”ํƒ€์˜ ์—”์ง€๋‹ˆ์–ด๋กœ ์ผํ•˜์‹œ๋Š” ๋ถ„์˜ ๋ธ”๋กœ๊ทธ(์ค‘๊ตญ์–ด๋ผ ์ด๋ฆ„์„ ๋ชจ๋ฅด๊ฒ ๋‹ค..)


์ธํŒŒ๋‹˜์˜ ํ‹ฐ์Šคํ† ๋ฆฌ


๋‚˜๋ฅผ ์ œ์™ธํ•œ ์ฒœ์žฌ๋“ค๋‹˜์˜ ํ‹ฐ์Šคํ† ๋ฆฌ

๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœ์˜ ์ฒซ๊ฑธ์Œ ๐Ÿ 

Firebase

๊ธฐ๋ณธ์„ธํŒ…

//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๋กœ ์ž‘์„ฑํ•œ๋‹ค.

Authentication

์˜ค์ง ๋‚˜๋งŒ์„ ์œ„ํ•œ ๋ธ”๋กœ๊ทธ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ™ˆํŽ˜์ด์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์–ด๋“œ๋ฏผ ๊ณ„์ • ํ•˜๋‚˜๋งŒ ๋งŒ๋“ ๋‹ค.

Firestore Database

๋ธ”๋กœ๊ทธ์— ํ•„์š”ํ•œ ์ปฌ๋ ‰์…˜๊ณผ ํ•„๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

Notes

  • title(์ œ๋ชฉ)
  • md(๋ณธ๋ฌธ)
  • category(์นดํ…Œ๊ณ ๋ฆฌ,ํƒœ๊ทธ)
  • createdAt(์ž‘์„ฑ๋‚ ์งœ)
  • thumbnailURL(์ธ๋„ค์ผ URL)

Comments

์ต๋ช… ์ž‘์„ฑ์„ ์œ„ํ•ด ์ž‘์„ฑ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์Œ.
๊ธ€์˜ ์•„์ด๋””์— ๋งž๋Š” ๋Œ“๊ธ€๋“ค์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด docId ๋ฅผ ์ €์žฅ.

  • nickname(์ž‘์„ฑ์ž ์ด๋ฆ„)
  • password(์ˆ˜์ •/์‚ญ์ œ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ)
  • comment(๋Œ“๊ธ€)
  • docId(๊ธ€ id)
  • edited(์ˆ˜์ •๋จ ํ‘œ์‹œ ์—ฌ๋ถ€)
  • avatar(๋Œ“๊ธ€ ์•„๋ฐ”ํƒ€)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๊ณ  ์ถ”ํ›„์— ํ•„์š”ํ•œ๊ฒŒ ์žˆ์œผ๋ฉด ๋” ์ž‘์„ฑํ•œ๋‹ค.

Router

CRA์˜ createBrowserRouter ๋ฅผ ์‚ฌ์šฉํ• ๊ฒƒ์ด๋‹ค.
ํ•„์š”ํ•œ screen ๋“ค์„ ๋ฏธ๋ฆฌ ๊ตฌ์ƒํ•˜์ž.

  • Entry : ๋ธ”๋กœ๊ทธ์˜ ๊ธ€ ํŽ˜์ด์ง€
  • GuestBook : ๋ฐฉ๋ช…๋ก ํŽ˜์ด์ง€
  • Home : ํ™ˆํŽ˜์ด์ง€ ๋ฉ”์ธ ํŽ˜์ด์ง€
  • Notes : ๊ธ€๋“ค ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€
  • NotFound : 404
  • Write : ๋งˆํฌ๋‹ค์šด ์ž‘์„ฑ ํŽ˜์ด์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€