Skip to content

soksak-letter/soksak-Front

Repository files navigation

โœ‰๏ธ ์†์‚ญํŽธ์ง€ (Soksak Letter)

๋‚˜๋ฅผ ๋งŒ๋‚˜๋Š” ์งˆ๋ฌธ, ํƒ€์ธ๊ณผ ๋‚˜๋ˆ„๋Š” ์ต๋ช… ํŽธ์ง€ ๊ณผ๋„ํ•œ ์ž๊ทน์˜ ์‹œ๋Œ€์—, ์„ฑ์ฐฐ๊ณผ ์ง„์ •์„ฑ ์žˆ๋Š” ์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ๊บผ๋‚ด๋Š” ํŽธ์ง€ ์„œ๋น„์Šค

์‚ฌ์šฉ์ž ์„œ๋น„์Šค: https://www.soksak-letter.com

soksak_main

๐Ÿต Team ์ฒœ์ˆญ์ด

ํŒ€๋ช…: ์ฒœ์ˆญ์ด

๊ฐ€์ฒœ๋Œ€(FE: 3๋ช…, BE: 3๋ช…) + ์ˆญ์‹ค๋Œ€(PM, Designer, FE) => ์ฒœ์ˆญ์ด

R&R

๋ถ„์•ผ ์ด๋ฆ„ ํฌ์ง€์…˜
PM ์„ธ์ด/์†Œ์•„์—ฐ ํ”„๋กœ์ ํŠธ ๋งค๋‹ˆ์ง•, ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜, ์ผ์ •/๋ฆฌ์Šคํฌ ๊ด€๋ฆฌ
Design ์šฐ๋‹ˆ/์กฐ์ •์šด ๋””์ž์ธ ์‹œ์Šคํ…œ, UX/UI, ํ”„๋กœํ† ํƒ€์ž…
FE ์  /๊น€์ง€์›, ์˜ˆ๋””/์ฐจ์˜ˆ๋ฆฐ, ์—์ž‡/์–‘์ˆ˜์ง€, ์œ ๋‹ˆ/๋‚จ์ง€์œค ์‚ฌ์šฉ์ž ํ”Œ๋กœ์šฐ ๊ตฌํ˜„, API ์—ฐ๋™, ์ƒํƒœ/์บ์‹œ ๊ด€๋ฆฌ
BE ํ‘ธ๋ฏธ/๊น€์„œ์ค€, ๋‘๋ถ€/์กฐ์—ฐ์ค€, ๊ทœ์‹/๋ฐ•์Šน์ฃผ API/DB ์„ค๊ณ„, ์ธ์ฆ/๋ณด์•ˆ, ๋ฐฐํฌ/์šด์˜

๐Ÿ“ฎ ์„œ๋น„์Šค ๊ฐœ์š”

์„œ๋น„์Šค ์ •์˜

๋‚˜๋ฅผ ๋งŒ๋‚˜๋Š” ์งˆ๋ฌธ, ํƒ€์ธ๊ณผ ๋‚˜๋ˆ„๋Š” ์ต๋ช… ํŽธ์ง€ ์„œ๋น„์Šค

  • ๋งค์ผ ๋„์ฐฉํ•˜๋Š” โ€œ์˜ค๋Š˜์˜ ์งˆ๋ฌธโ€์— ๋‹ตํ•˜๋ฉฐ ์ƒ๊ฐ์„ ์ •๋ฆฌํ•˜๊ณ 
  • ๋งค์นญ๋œ ์ƒ๋Œ€์™€ ์ตœ๋Œ€ 10ํšŒ ํŽธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ
  • 3์ผ ๋’ค ๋‚˜์—๊ฒŒ ์˜ค๋Š” ํŽธ์ง€(D+3) ๋กœ ๋ฆฌํ…์…˜๊ณผ ํšŒ๋ณต ๊ฒฝํ—˜์„ ๋งŒ๋“ ๋‹ค

๐ŸŽฏ ๋ฌธ์ œ ์ •์˜

1) ๋ฌธ์ œ ์ƒํ™ฉ

ํ˜„๋Œ€์˜ AI/SNS ์‚ฌ์šฉ์ž๋Š” ์ˆํผยทSNSยทAI Slop ๋“ฑ ๋„ํŒŒ๋ฏผ์„ฑ ์ •๋ณด ๊ณผ์ž‰์— ๋…ธ์ถœ๋˜์–ด, ๊ฐ์ •์ ์œผ๋กœ ์ง€์ณค์„ ๋•Œ ์ฆ‰๊ฐ์ ์ธ ์ž๊ทน์— ์˜์กดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ โ€œ์ƒ๊ฐํ•  ์‹œ๊ฐ„โ€์ด ์ค„์–ด ์ž๊ธฐ ์„ฑ์ฐฐ์ด ์–ด๋ ค์›Œ์ง€๊ณ , ์žฅ๊ธฐ์ ์œผ๋กœ ๋ฒˆ์•„์›ƒ/๊ณ ๋ฆฝ๊ฐ์ด ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.

2) ๋ฌธ์ œ ์›์ธ

  • ๊ทผ๋ณธ ์›์ธ: ๋‚ด๋ฉด์˜ ๋ถˆ์•ˆ์ •์„ฑ + ๊ฑด๊ฐ•ํ•œ ์‚ฌ์œ ๋ฅผ ์œ„ํ•œ ์ฐฝ๊ตฌ ๋ถ€์žฌ
  • ์‰ฌ์šด ํ•ด๊ฒฐ(์ฆ‰๊ฐ ์ž๊ทน, AI ์˜์กด)๋กœ ๊ณ ํ†ต์„ ํšŒํ”ผํ•˜๋Š” ์Šต๊ด€ ๊ฐ•ํ™”
  • ๊ธฐ์กด ํ•ด๊ฒฐ์ฑ…(์ผ๊ธฐ/๋ช…์ƒ ์•ฑ)์€ ๋ถ€๋‹ดยท์ง€๋ฃจํ•จ์œผ๋กœ ์ง€์† ์‚ฌ์šฉ ์œ ๋„ ์‹คํŒจ

3) ๋ฌธ์ œ ์˜ํ–ฅ

  • ์ž๊ธฐ ๊ฐ๊ด€ํ™” ๋Šฅ๋ ฅ ์ €ํ•˜ โ†’ ๊ฐ์ • ์†Œ๋ชจ ์ฆ๊ฐ€
  • ์™ธ๋ถ€ ์ž๊ทน ์˜์กด ๊ฐ•ํ™” โ†’ ์‹ฌ๋ฆฌ์  ํ”ผ๋กœ/๊ณ ๋ฆฝ๊ฐ ์•…ํ™”
  • ์žฅ๊ธฐ์ ์œผ๋กœ ์ •์‹ ์  ๊ฑด๊ฐ•์— ๋ถ€์ •์  ์˜ํ–ฅ

๐Ÿ’ก ๋ชฉ์ (Why) & ๋ฐฐ๊ฒฝ(Background)

์„œ๋น„์Šค ๋ชฉ์ (Why)

ํŽธ์ง€์˜ ๊ฐ€์น˜๋ฅผ ํ†ตํ•ด, ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ฑ์ฐฐ๊ณผ ์†Œํ†ต์˜ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์žฅ๊ธฐ์ ์ธ ์‹ฌ๋ฆฌ์  ์•ˆ์ •๊ฐ์„ ์ค€๋‹ค.

๋ฐฐ๊ฒฝ(Background)

Fact Insight
๋””์ง€ํ„ธ ๋””ํ†ก์Šค/๋„ํŒŒ๋ฏผ ๋””ํ†ก์Šค ํŠธ๋ Œ๋“œ ํ™•์‚ฐ ์‚ฌ์šฉ์ž๋Š” ์ž๊ทน์˜ ์•…์ˆœํ™˜์— ์ง€์ณค๊ณ , ์Šต๊ด€ ๊ต์ •ํ˜• ๊ฒฝํ—˜์„ ์›ํ•œ๋‹ค
SNS ์‚ฌ์šฉ ์ฆ๊ฐ€ โ†” ๋น„๊ต ์‹ฌํ™”๋กœ ์ธํ•œ ๊ณ ๋ฆฝ๊ฐ ์™ธ๋กœ์›€์€ ์—ฐ๊ฒฐ์˜ ๋ถ€์žฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ์˜ ํ’ˆ์งˆ ๋ฌธ์ œ๋‹ค
์‹ฌ๋ฆฌ์ƒ๋‹ด ์‹œ์žฅ ์„ฑ์žฅ, ์‚ฌํšŒ์  ๊ณ ๋ฆฝ ์ด์Šˆ ํ™•๋Œ€ ํฐ ๋น„์šฉ/์‹œ๊ฐ„ ์—†์ด ์ผ์ƒ ์†์—์„œ ์˜ˆ๋ฐฉ์  ์ž๊ธฐ๊ด€๋ฆฌ ๋‹ˆ์ฆˆ๊ฐ€ ์žˆ๋‹ค

์ฐธ๊ณ (์˜ˆ์‹œ): ์„œ์šธ์‹œ โ€˜์‚ฌํšŒ์  ๊ณ ๋ฆฝโ€™ ์ •์ฑ… ์ž๋ฃŒ: https://www.seoul.go.kr/policy/view.do?id=1056&lan=KO


๐Ÿ‘€ ์ฃผ์š” ์‚ฌ์šฉ์ž(Target User)

  • ๋Œ€ํ•™์ƒ
  • 20๋Œ€ ์ง์žฅ์ธ
  • 20๋Œ€ AI/SNS ํ—ค๋น„ ์œ ์ €

๐Ÿงญ User Journey Map

โ€œ์œ ์ž… โ†’ ํƒ์ƒ‰ โ†’ ๋งค์นญ/์†Œํ†ต โ†’ ์ข…๋ฃŒ/ํ”ผ๋“œ๋ฐฑ โ†’ ์žฌ๋ฐฉ๋ฌธ/ํ™•์žฅโ€์˜ ๊ฒฝํ—˜์„ ํ•œ ์žฅ์œผ๋กœ ์„ค๊ณ„

๋‹จ๊ณ„ 1. ์œ ์ž… ๋ฐ ์˜จ๋ณด๋”ฉ 2. ํƒ์ƒ‰ 3. ๋งค์นญ ๋ฐ ์†Œํ†ต 4. ์ข…๋ฃŒ ๋ฐ ํ”ผ๋“œ๋ฐฑ 5. ์žฌ๋ฐฉ๋ฌธ ๋ฐ ํ™•์žฅ
์‚ฌ์šฉ์ž ๋ชฉํ‘œ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ž…ํ•˜๊ณ  ๊ฐ€์น˜ ํ™•์ธ ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ํ™•์ธ ํ‹ฐํ‚คํƒ€์นด ๋˜๋Š” ๋Œ€ํ™” ๊น”๋”ํ•œ ๋งˆ๋ฌด๋ฆฌ/ํ‰๊ฐ€ ๊ธฐ๋ก ํ™•์ธ/์ถ”๊ฐ€ ์ž‘์„ฑ
์ฃผ์š” ํ–‰๋™ ์†Œ์…œ ๋กœ๊ทธ์ธ โ†’ ํ”„๋กœํ•„ โ†’ D+3 ํŽธ์ง€(ํ•„์ˆ˜) โ†’ ์•Œ๋ฆผ ์งˆ๋ฌธ ํ™•์ธ โ†’ ๋‹ต๋ณ€ ์ž‘์„ฑ ๋ฐœ์†กโ†’๋งค์นญโ†’๊ตํ™˜(์ตœ๋Œ€ 10ํšŒ) ์ข…๋ฃŒ(10ํšŒ/48h) โ†’ ์˜จ๋„/ํƒœ๊ทธ 3์ผ ์ „ ํŽธ์ง€ ๋„์ฐฉ โ†’ ์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ
ํ„ฐ์น˜ํฌ์ธํŠธ ๋žœ๋”ฉ/์˜จ๋ณด๋”ฉ/OS ์•Œ๋ฆผ ํ™ˆ(์˜ค๋Š˜์˜ ์งˆ๋ฌธ ์นด๋“œ) ์ฑ„ํŒ…๋ฐฉ/์นด์šดํ„ฐ ๋ฆฌ๋ทฐ ๋ชจ๋‹ฌ/์ข…๋ฃŒ ํŽ˜์ด์ง€ ๋ณด๊ด€ํ•จ/๋ฆฌํฌํŠธ/DatePicker
๊ธฐํšŒ์š”์ธ Lock-in(๋ฏธ๋ž˜ ๋ณด์ƒ) ํฌ์†Œ์„ฑ(24h) ํ’ˆ์งˆ๊ด€๋ฆฌ(๋‹ต์žฅ๋ฅ /์˜จ๋„) ๋ฐ์ดํ„ฐ ์„ ์ˆœํ™˜ ์œ ๋ฃŒํ™” ํ™•์žฅ
soksak_ia soksak_userjourneymap

๐Ÿงฉ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ์˜ค๋Š˜์˜ ์งˆ๋ฌธ(24์‹œ๊ฐ„)
    ๋งค์ผ ์งˆ๋ฌธ ๊ฐฑ์‹  / ์นด์šดํŠธ๋‹ค์šด / ๋‹ต๋ณ€ ์ง„์ž…

  • ์ต๋ช… ๋งค์นญ & ํŽธ์ง€ ๊ตํ™˜(์ตœ๋Œ€ 10ํšŒ, 48์‹œ๊ฐ„)
    ๋Œ€ํ™” ํšŸ์ˆ˜ ์นด์šดํŠธ, ๋งŒ๋ฃŒ ์ฒ˜๋ฆฌ

  • D+3 ๋‚˜์—๊ฒŒ ์“ฐ๋Š” ํŽธ์ง€(์˜จ๋ณด๋”ฉ ํ•„์ˆ˜) โ€œ๋ฏธ๋ž˜์˜ ๋‚˜โ€์—๊ฒŒ ๋ณด๋‚ด๋Š” ์˜ˆ์•ฝ ํŽธ์ง€, ์•Œ๋ฆผ์œผ๋กœ ํšŒ์ˆ˜

  • ์ข…๋ฃŒ ๋ฆฌ๋ทฐ(์˜จ๋„ ์Šฌ๋ผ์ด๋” + ํ›„๊ธฐ ํƒœ๊ทธ)
    ๊ฒฝํ—˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ โ†’ ๋‹ค์Œ ๋งค์นญ ํ’ˆ์งˆ ๊ฐœ์„ 

  • ์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ
    ์ผ์ฃผ์ผ ๊ธฐ๋ก ์š”์•ฝ/๊ฐ์ • ๋ถ„ํฌ/ํ‚ค์›Œ๋“œ ์ธ์‚ฌ์ดํŠธ ์ œ๊ณต

  • ์นœ๊ตฌ ๊ธฐ๋Šฅ / ํ…Œ๋งˆ ๋ฐฐ๊ฒฝ / ํฐํŠธ ์˜ต์…˜ / ์˜ˆ์•ฝ ํŽธ์ง€ ํ™•์žฅ


๐Ÿ” System Architecture

soksak_infrastructure

๐Ÿ—ƒ๏ธ ERD

soksak_erd

๐Ÿ’ป Technology

Web

  • ReactTypeScript TanStack Query Zustand Tailwind CSS Framer Motion

Server

  • IntelliJ IDEA Node.js JWT
  • MySQL
  • GitHub Actions Docker Nginx

Co-working Tool

  • GitHub Notion

๐Ÿพ ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ • ์ด์œ 

๐Ÿ“˜ย Web ์Šคํƒ ์„ ์ • ์ด์œ 

  • React + Vite
    ์†์‚ญํŽธ์ง€๋Š” ๋ชจ๋ฐ”์ผ 375px ๊ณ ์ • UI ๊ธฐ๋ฐ˜์˜ SPA ์„œ๋น„์Šค๋กœ, SSR์ด ํ•„์ˆ˜์ ์ธ ๊ตฌ์กฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„์™€ ๊ฐ€๋ฒผ์šด ๋ฒˆ๋“ค ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” Vite ๊ธฐ๋ฐ˜ React ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ๋นŒ๋“œ ์†๋„๋ฅผ ๋™์‹œ์— ํ™•๋ณดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • TypeScript
    ํŽธ์ง€, ๋งค์นญ, ๋ฆฌํฌํŠธ ๋“ฑ ๋„๋ฉ”์ธ์ด ๋ช…ํ™•ํ•˜๊ณ  API ์‘๋‹ต ๊ตฌ์กฐ๊ฐ€ ์ค‘์š”ํ•œ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ํƒ€์ž… ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. TypeScript๋ฅผ ํ†ตํ•ด ํ˜‘์—… ์‹œ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ , ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ณ ์ž ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • TanStack Query
    ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์™€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด TanStack Query๋ฅผ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์บ์‹ฑ, ์ž๋™ refetch, ๋กœ๋”ฉ/์—๋Ÿฌ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ API ์ค‘์‹ฌ ๊ตฌ์กฐ์—์„œ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Zustand
    ์ „์—ญ ์ƒํƒœ๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Zustand๋ฅผ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์—†์ด ์ง๊ด€์ ์ธ store ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ธ์ฆ ์ƒํƒœ๋‚˜ ๋ชจ๋‹ฌ ๊ด€๋ฆฌ ๋“ฑ UI ์ค‘์‹ฌ ์ „์—ญ ์ƒํƒœ์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Tailwind CSS
    Figma ๊ธฐ๋ฐ˜ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Tailwind CSS๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง์„ ํ†ตํ•ด ์ผ๊ด€๋œ ๋””์ž์ธ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์–ด ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Framer Motion
    ํŽธ์ง€ ์ „ํ™˜, ๋ชจ๋‹ฌ ๋“ฑ์žฅ ๋“ฑ ๊ฐ์„ฑ์ ์ธ ์ธํ„ฐ๋ž™์…˜์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ Framer Motion์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ API์™€ ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“— Server ์Šคํƒ ์„ ์ • ์ด์œ 

  • Node.js + Express
    ์†์‚ญํŽธ์ง€๋Š” REST ๊ธฐ๋ฐ˜ API ์„œ๋ฒ„ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ์œ ์—ฐํ•œ ๋ผ์šฐํŒ… ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•œ Node.js์™€ Express๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ํ˜‘์—… ํšจ์œจ์„ ๋†’์ด๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • MySQL
    ํŽธ์ง€, ์œ ์ €, ๋งค์นญ, ๋ฆฌ๋ทฐ ๋“ฑ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•œ ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” RDBMS์ธ MySQL์„ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

  • Redis
    ๋งค์นญ ๋Œ€๊ธฐ์—ด ์ฒ˜๋ฆฌ ๋ฐ ์บ์‹ฑ๊ณผ ๊ฐ™์ด ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์˜์—ญ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Redis๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์‘๋‹ต ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • JWT
    ๋ฌด์ƒํƒœ ์ธ์ฆ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ™•์žฅ์„ฑ๊ณผ ์ธ์ฆ ์ฒ˜๋ฆฌ์˜ ๋‹จ์ˆœํ™”๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ•ด๋‹น ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ”– Naming Rules (Front ๊ธฐ์ค€)

ํด๋” ๊ทœ์น™

  • ๋ชจ๋“  ํด๋”๋Š” ์†Œ๋ฌธ์ž ๋˜๋Š” kebab-case

    • ์˜ˆ: weekly-report, bottom-sheet
  • ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ (feed, letters, friend ๋“ฑ)

  • ๊ณตํ†ต UI๋Š” common/

  • ์ „์—ญ ๋™์ž‘ ์ปดํฌ๋„ŒํŠธ๋Š” system/

์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ

  • React ์ปดํฌ๋„ŒํŠธ: PascalCase.tsx
  • Page ์ปดํฌ๋„ŒํŠธ: PascalCasePage.tsx
  • Tab/Section/Modal ๋“ฑ ์—ญํ• ์ด ๋“œ๋Ÿฌ๋‚˜๋Š” ์ด๋ฆ„ ์‚ฌ์šฉ
    • ์˜ˆ: FriendTopTabs, LetterCard, ModalFrame

Hook

  • ๋ฐ˜๋“œ์‹œ use๋กœ ์‹œ์ž‘
  • camelCase
  • ๋„๋ฉ”์ธ๋ณ„ ํ•˜์œ„ ํด๋” ์œ ์ง€

Store (Zustand)

  • camelCaseStore.ts
    • ์˜ˆ: activityStore.ts

API

  • ๋„๋ฉ”์ธ ๋‹จ์œ„ ํŒŒ์ผ
    • friend.ts
    • weeklyReport.ts

๐Ÿ—‚๏ธ Commit Convention

์ปค๋ฐ‹ ์œ ํ˜• (Commit Type)

์ปค๋ฐ‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค.

  • feat : ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
  • fix : ๋ฒ„๊ทธ ์ˆ˜์ •
  • style : CSS ์Šคํƒ€์ผ ์ˆ˜์ •
  • docs : ๋ฌธ์„œ ์ž‘์—… (์ฃผ๋กœ README ์ž‘์„ฑ ๋“ฑ)
  • refactor : ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์ด ๊ตฌ์กฐ/๋กœ์ง ๊ฐœ์„ 
  • chore : ํŒŒ์ผ ์ด๋™, ์ด๋ฆ„ ๋ณ€๊ฒฝ, ์ฃผ์„ ์ถ”๊ฐ€ ๋“ฑ ๋‹จ์ˆœ ์ž‘์—…

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๊ทœ์น™

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ ํ˜•์‹์„ ๋”ฐ๋ฅธ๋‹ค.

[#์ด์Šˆ๋ฒˆํ˜ธ] <์ปค๋ฐ‹์œ ํ˜•> : <์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€>

์ž‘์„ฑ ์›์น™

  1. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ๋ฐ˜๋“œ์‹œ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  2. ์ปค๋ฐ‹ ์œ ํ˜•์€ ์˜๋ฌธ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  3. ํ•„์š” ์‹œ ๋ฉ”์‹œ์ง€ ์•ž์— [#์ด์Šˆ๋ฒˆํ˜ธ]๋ฅผ ํฌํ•จํ•œ๋‹ค.
  4. ์ปค๋ฐ‹์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋…๋ฆฝ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ ์ž‘์„ฑํ•œ๋‹ค.
    • ๋…๋ฆฝ์ ์œผ๋กœ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
    • ๋กค๋ฐฑ ์‹œ ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋‹จ์œ„์—ฌ์•ผ ํ•œ๋‹ค.

๐Ÿฌ Branch Strategy

main

  • ์‹ค์ œ ์„œ๋น„์Šค์— ๋ฐฐํฌ๋˜๋Š” ๋ธŒ๋žœ์น˜
  • ์ง์ ‘ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์œผ๋ฉฐ, dev ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ๋ณ‘ํ•ฉ

dev

  • main์—์„œ ๋ถ„๊ธฐ๋˜๋Š” ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜
  • feature ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๊ธฐ๋Šฅ์„ ๋ณ‘ํ•ฉ
  • ์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ ํ›„ main์œผ๋กœ ๋ฐฐํฌ

feature/#์ด์Šˆ๋ฒˆํ˜ธ-๊ธฐ๋Šฅ๋ช…

  • ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜
  • dev ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐ
  • ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„ dev๋กœ ๋ณ‘ํ•ฉ
  • ๋ธŒ๋žœ์น˜๋ช…์€ kebab-case ์‚ฌ์šฉ ์˜ˆ: feature/#1-get-user

fix/#์ด์Šˆ๋ฒˆํ˜ธ-๊ธฐ๋Šฅ๋ช…

  • ๋ฒ„๊ทธ ์ˆ˜์ • ๋ธŒ๋žœ์น˜
  • dev์—์„œ ๋ถ„๊ธฐํ•˜์—ฌ ์ˆ˜์ • ํ›„ dev๋กœ ๋ณ‘ํ•ฉ
  • ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ธŒ๋žœ์น˜๊ฐ€ dev์— ๋ณ‘ํ•ฉ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์ž‘์—…

๐Ÿš€ Getting Started

# FE
npm i
npm run dev

# BE
npm i
npm run start

๐Ÿ“Œ Demo

  • ์˜ค๋Š˜์˜ ์งˆ๋ฌธ โ†’ ๋‹ต๋ณ€ ์ž‘์„ฑ โ†’ ๋งค์นญ โ†’ 10ํšŒ ๊ตํ™˜ โ†’ ์ข…๋ฃŒ ๋ฆฌ๋ทฐ
  • D+3 ํŽธ์ง€ ์ˆ˜์‹  ์•Œ๋ฆผ โ†’ ๋ณด๊ด€ํ•จ ํ™•์ธ โ†’ ์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ

๐Ÿงฉ ํ”„๋ก ํŠธ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋…ธ์…˜์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

https://carnelian-television-6c9.notion.site/soksak-letter-Front-304da4061b5e80c1928ec5aa2d3960f4?source=copy_link

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages