Skip to content

Latest commit

ย 

History

History
361 lines (272 loc) ยท 14.7 KB

File metadata and controls

361 lines (272 loc) ยท 14.7 KB

๐ŸŠHOLO๐ŸŠ

1์ธ๊ฐ€๊ตฌ๋ฅผ ์œ„ํ•œ ์ •๋ณด ์ œ๊ณต ์„œ๋น„์Šค, ๋‚˜ HOLO ์‚ฐ๋‹ค!

๋ฐฐํฌ ๋งํฌ: https://holo-psi.vercel.app/


Group 1000006482


๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Our Team

์šฐ์ง€์˜ ๊น€๋ฏผ์ง€ ์ตœ๊ฐ•๊ฑด ์‹ ์ƒ์šฉ ์ •์€ํ˜œ
@zi0w @minji7901 @Choi-kanggun @tkddyd0817 @gracejelly125


๐Ÿ•น๏ธ ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ

1๏ธโƒฃ ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๋งˆ์ดํŽ˜์ด์ง€
  • ๐Ÿ“ ํผ ๊ด€๋ฆฌ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

    • react-hook-form๊ณผ zod๋ฅผ ํ™œ์šฉํ•œ ํผ ๊ด€๋ฆฌ
    • ์‹ค์‹œ๊ฐ„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ธฐ๋ฐ˜ ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต
    • ์ปค์Šคํ…€ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์ œ๊ณต์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์นœํ™”์  UI ๊ตฌํ˜„
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ทœ์น™, ์ด๋ฉ”์ผ ํ˜•์‹, ๋‹‰๋„ค์ž„ ์ œํ•œ ๋“ฑ ์ƒ์„ธ ๊ฒ€์ฆ
  • ๐Ÿ‘ฅ ์†Œ์…œ ๋กœ๊ทธ์ธ (Google, Kakao, Github)

    • OAuth 2.0 ์ธ์ฆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ œ๊ณต
    • ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ œ๊ณตํ•˜๋Š” OAuth Provider๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์ง€์›
  • ๐Ÿ’ป ์‚ฌ์šฉ์ž ์ƒํƒœ ๊ด€๋ฆฌ (Zustand)

    • Zustand๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ ์ƒํƒœ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ ์ธ์ฆ ์ƒํƒœ ๊ด€๋ฆฌ
    • ๋กœ๊ทธ์ธ ์ƒํƒœ( isLogin )์™€ ์‚ฌ์šฉ์ž ์ •๋ณด( user )๋ฅผ ์ „์—ญ์œผ๋กœ ์œ ์ง€
  • ๐Ÿ” ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ

    • ์„œ๋ฒ„ ์•ก์…˜์„ ํ†ตํ•œ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ
    • supabase.auth.signOut()์„ ํ†ตํ•ด ์ธ์ฆ ์„ธ์…˜์„ ํ•ด์ œํ•˜๊ณ , ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ์ œ๊ณต
  • โœ‰๏ธ ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ

    • Supabase์˜ Admin API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ์ž ๊ณ„์ • ์‚ญ์ œ
    • SERVICE_ROLE_KEY ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •
  • โ—๏ธ ์ ‘๊ทผ ์ œ์–ด (Next.js Middleware)

    • ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ํŽ˜์ด์ง€ ์ ‘๊ทผ ์ œ์–ด
  • ๐Ÿ‘ค ๋งˆ์ดํŽ˜์ด์ง€ (React Query)

    • React Query๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ๊ด€๋ฆฌ์™€ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ตœ์ ํ™”
    • ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ ์šฉ์œผ๋กœ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง ๊ตฌํ˜„
    • ๋ชจ๋‹ฌ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ•„ ์ˆ˜์ • ์‹œ์Šคํ…œ (์ด๋ฏธ์ง€, ๋‹‰๋„ค์ž„, ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐœ๋ณ„ ์ˆ˜์ • ๊ฐ€๋Šฅ)
    • ์ž…๋ ฅ๊ฐ’ ์—†์„ ์‹œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ํ–ฅ์ƒ
    • ์ข‹์•„์š”, ๋Œ“๊ธ€, ์ž‘์„ฑ๊ธ€ ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ๋™๊ธฐํ™” ๋ฐ ๋ฆฌ์ŠคํŠธ ์—…๋ฐ์ดํŠธ ๊ตฌํ˜„
  • ๐ŸŽจ ์Šค์ผˆ๋ ˆํ†ค UI

    • ์Šค์ผˆ๋ ˆํ†ค UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ UX ํŽธ์˜์„ฑ ํ–ฅ์ƒ ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ตœ์ ํ™”
2๏ธโƒฃ ์˜ค๋Š˜์˜ ๋ฉ”๋‰ด ์ถ”์ฒœ, ์˜ค๋Š˜์˜ ์šด์„ธ ํŽ˜์ด์ง€
  • ๐Ÿœ ์˜ค๋Š˜์˜ ๋ฉ”๋‰ด ์ถ”์ฒœ

    • Funnel ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ 4๊ฐœ์˜ ์งˆ๋ฌธ์— ์‘๋‹ตํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„
      • ์ด์ „ ๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ€๋„ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๋„๋ก ์ฒ˜๋ฆฌ
    • OpneAI API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์‘๋‹ต ๊ธฐ๋ฐ˜ ์˜ค๋Š˜์˜ ์ถ”์ฒœ ๋ฉ”๋‰ด ์ œ๊ณต
    • ํ”„๋กœ๊ทธ๋ ˆ์Šค๋ฐ”๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ง„ํ–‰ ๋‹จ๊ณ„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œ
  • ๐Ÿ€ ์˜ค๋Š˜์˜ ์šด์„ธ

    • OpenAI API๋ฅผ ํ†ตํ•ด ์˜ค๋Š˜์˜ ์šด์„ธ ์ œ๊ณต
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌ์ถ˜์ฟ ํ‚ค UI ์ œ๊ณต
    • framer-motion ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ํฌ์ถ˜์ฟ ํ‚ค ํด๋ฆญ ์‹œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ์ œ๊ณต
  • ๐Ÿ“ฅ ์ถ”์ฒœ ๊ฒฐ๊ณผ ์ €์žฅ

    • toPng, file-saver ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋ฅผ PNG ํ˜•์‹์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ
  • ๐Ÿ”— ์ถ”์ฒœ ๊ฒฐ๊ณผ ๊ณต์œ 

    • Route Handler๋ฅผ ํ†ตํ•ด ์ถ”์ฒœ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ Map ๊ฐ์ฒด(์ž„์‹œ ์ €์žฅ์†Œ)์— ์ €์žฅ ํ›„, UUID๋ฅผ ๋ฐ˜ํ™˜ํ•ด ๋งํฌ๋ฅผ ๋‹จ์ถ•
    • ๋ฐ˜ํ™˜๋œ UUID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณต์œ  ํŽ˜์ด์ง€์˜ URL ์ƒ์„ฑ(+ ์˜ค๋Š˜์˜ ๋ฉ”๋‰ด ์ถ”์ฒœ์€ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฉ”๋‰ด ํƒ€์ž… ํฌํ•จ)
      • navigator.clipboard๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ URL์ด ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜๋„๋ก ๊ตฌํ˜„
    • ํ•ด๋‹น URL์— ์ ‘์†ํ•˜๋ฉด GET ์š”์ฒญ์„ ํ†ตํ•ด ์ถ”์ฒœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์™€ ํŽ˜์ด์ง€์— ํ‘œ์‹œ
    • Kakao SDK for JavaScript๋ฅผ ํ™œ์šฉํ•œ feed ํ˜•์‹์˜ ์นด์นด์˜คํ†ก ๊ณต์œ  ๊ธฐ๋Šฅ ์ œ๊ณต
3๏ธโƒฃ ์šฐ๋ฆฌ๋™๋„ค ์“ฐ๋ ˆ๊ธฐ ์ •๋ณด, ์ฒญ๋…„ ์ •์ฑ… ํŽ˜์ด์ง€
  • ๐Ÿ“… ์ง€์—ญ๋ณ„ ์“ฐ๋ ˆ๊ธฐ ๋ฐฐ์ถœ ์š”์ผ ์กฐํšŒ

    • OpenAI API๋ฅผ ํ™œ์šฉํ•œ ์ง€์—ญ๋ณ„ ์“ฐ๋ ˆ๊ธฐ ๋ฐฐ์ถœ ์ผ์ • ์ •๋ณด ์ œ๊ณต
    • ๋‚ด ์œ„์น˜ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊ธฐ๋Šฅ์„ ํ†ตํ•œ ํ˜„์žฌ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ •๋ณด ์กฐํšŒ
    • ์‹œ/๊ตฐ/๊ตฌ/๋™ ๋‹จ์œ„์˜ ์ฃผ์†Œ ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ ๊ตฌํ˜„
    • ์žฌํ™œ์šฉ, ์ผ๋ฐ˜, ๋Œ€ํ˜•, ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ ๋“ฑ ์ข…๋ฅ˜๋ณ„ ๋ฐฐ์ถœ ์š”์ผ ์•ˆ๋‚ด
  • ๐Ÿฅ— ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ ๋ถ„๋ฅ˜ ํ™•์ธ

    • OpenAI API๋ฅผ ํ™œ์šฉํ•œ ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ ํŒ๋ณ„ ์‹œ์Šคํ…œ ๊ตฌํ˜„
    • ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ์‹ค์‹œ๊ฐ„ AI ๊ธฐ๋ฐ˜ ๋ถ„๋ฅ˜ ์ฒ˜๋ฆฌ
    • ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•œ ์ง๊ด€์ ์ธ ๊ฒฐ๊ณผ ํ‘œ์‹œ (FoodYesIcon/FoodNoIcon)
  • ๐Ÿ” ์ •์ฑ… ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ

    • ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ ์ฒญ๋…„์ •์ฑ… API ์—ฐ๋™์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ •์ฑ… ์ •๋ณด ์ œ๊ณต
    • xml2js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ XML ๋ฐ์ดํ„ฐ๋ฅผ JSON์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ตฌํ˜„
    • ์ง€์—ญ๋ณ„, ๋ถ„์•ผ๋ณ„ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์œผ๋กœ ๋งž์ถคํ˜• ์ •์ฑ… ๊ฒ€์ƒ‰ ์ง€์›
  • ๐Ÿ“‹ ์ •์ฑ… ๋ชฉ๋ก ๋ฐ ํŽ˜์ด์ง€๋„ค์ด์…˜

    • React Query๋ฅผ ํ™œ์šฉํ•œ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์บ์‹ฑ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ
    • ์ปค์Šคํ…€ ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ›…์„ ํ†ตํ•œ ๋Œ€๋Ÿ‰์˜ ์ •์ฑ… ๋ฐ์ดํ„ฐ ํšจ์œจ์  ํ‘œ์‹œ
    • ๋™์  ๋ผ์šฐํŒ…์„ ํ†ตํ•œ ์ •์ฑ… ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • ๐Ÿ“ ์ •์ฑ… ์ƒ์„ธ ์ •๋ณด ํ‘œ์‹œ

    • Next.js ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๊ตฌํ˜„
    • ์ •์ฑ…๋ณ„ ์ƒ์„ธ ์ •๋ณด ํฌ๋งทํŒ… ๋ฐ ๋ ˆ์ด์•„์›ƒ ์ตœ์ ํ™”
    • ์‹ ์ฒญ ์‚ฌ์ดํŠธ ๋ฐ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ ๋งํฌ ์ œ๊ณต
4๏ธโƒฃ ๊ฟ€ํŒ ๊ฒŒ์‹œํŒ ํŽ˜์ด์ง€
  • ๐Ÿ“ ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ฆฌ

    • Supabase๋ฅผ ํ™œ์šฉํ•œ ๊ฒŒ์‹œ๊ธ€ CRUD ๊ธฐ๋Šฅ ์ œ๊ณต
    • Day.js๋กœ ์ž‘์„ฑ ์ผ์ž๋ฅผ ์ง๊ด€์ ์œผ๋กœ ํ‘œ์‹œ
    • ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต
    • ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•˜์—ฌ ์›ํ•˜๋Š” ์ฃผ์ œ์˜ ๊ฒŒ์‹œ๊ธ€๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ
    • ์ตœ์‹ ์ˆœ/์ธ๊ธฐ์ˆœ ์ •๋ ฌ ๊ธฐ๋Šฅ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒŒ์‹œ๊ธ€ ์ •๋ ฌ
    • ์„œ๋ฒ„์•ก์…˜์„ ํ™œ์šฉํ•˜์—ฌ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์‹œ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ์ ์šฉ
    • ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ ์šฉ์œผ๋กœ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ํ–ฅ์ƒ
  • ๐Ÿงก ์ข‹์•„์š”/๋Œ“๊ธ€ ๊ธฐ๋Šฅ

    • Supabase๋ฅผ ํ™œ์šฉํ•œ ์ข‹์•„์š”/๋Œ“๊ธ€ CRUD ๊ธฐ๋Šฅ ์ œ๊ณต
    • TanStack Query๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ „์—ญ ์ƒํƒœ๋กœ ์ข‹์•„์š” ๋ฐ ๋Œ“๊ธ€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
    • ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ ์ ์šฉ์œผ๋กœ ์‚ฌ์šฉ์ž ์•ก์…˜์— ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต
    • ๊ฒŒ์‹œ๊ธ€๋ณ„ ์ข‹์•„์š” ๋ฐ ๋Œ“๊ธ€ ์ˆ˜ ํ‘œ์‹œ๋กœ ์‚ฌ์šฉ์ž ์ฐธ์—ฌ๋„ ํ™•์ธ ๊ฐ€๋Šฅ
    • ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ๋ฑƒ์ง€ ์ถ”๊ฐ€๋กœ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ž๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„
5๏ธโƒฃ ์šฐ๋ฆฌ๋™๋„ค ํ•ซํ”Œ ํŽ˜์ด์ง€
  • ๐Ÿ—บ๏ธ ์ง€๋„ ํ‘œ์‹œ

    • Kakao Map API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€๋„๋ฅผ ์ œ๊ณต
  • ๐Ÿ“Œ ๋‚ด ์œ„์น˜ ํ‘œ์‹œ

    • Geolocation API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ง€๋„์— ํ‘œ์‹œ
  • ๐Ÿ” ์ง€๋„ ์กฐ์ž‘ ๊ธฐ๋Šฅ

    • ์ง€๋„ ํ™•๋Œ€/์ถ•์†Œ ๋ฐ ํ˜„์žฌ ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํŠธ๋กค ๋ฒ„ํŠผ ์ œ๊ณต
  • ๐Ÿข ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์žฅ์†Œ ๊ฒ€์ƒ‰

    • ์Œ์‹์ , ํŽธ์˜์ , ์•ฝ๊ตญ ๋“ฑ ๋‹ค์–‘ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ ๋ฒ„ํŠผ ์ œ๊ณต
    • ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ ์‹œ, ์ฃผ๋ณ€ ํ•ด๋‹น ์‹œ์„ค ๊ฒ€์ƒ‰ ํ›„ ์ง€๋„์— ๋งˆ์ปค์™€ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œ์‹œ
  • ๐Ÿ“ ๋งˆ์ปค ๋ฐ ์žฅ์†Œ ์ •๋ณด

    • ๊ฒ€์ƒ‰๋œ ์žฅ์†Œ๋ฅผ ์ง€๋„ ๋งˆ์ปค๋กœ ํ‘œ์‹œ
    • ๋งˆ์ปค ํด๋ฆญ ์‹œ, ํ•ด๋‹น ์žฅ์†Œ์˜ ์ƒ์„ธ ์ •๋ณด ์ œ๊ณต

๐ŸŽฅ ์‹œ์—ฐ ์˜์ƒ

แ„Œแ…ฅแ†ซแ„Žแ…ฆ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„‹แ…ฐแ†ธแ„€แ…ช แ„‡แ…กแ†ซแ„‹แ…ณแ†ผแ„’แ…งแ†ผ แ„‰แ…ตแ„‹แ…งแ†ซ

แ„Œแ…ฅแ†ซแ„Žแ…ฆ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„‹แ…ฐแ†ธแ„€แ…ช แ„‡แ…กแ†ซแ„‹แ…ณแ†ผแ„’แ…งแ†ผ แ„‰แ…ตแ„‹แ…งแ†ซ

๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž…

๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€

๋งˆ์ดํŽ˜์ด์ง€ ํ”„๋กœํ•„ ์ •๋ณด ์ˆ˜์ •, ํšŒ์›ํƒˆํ‡ด, ๋กœ๊ทธ์•„์›ƒ

แ„†แ…กแ„‹แ…ตแ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„‘แ…ณแ„…แ…ฉแ„‘แ…ตแ†ฏ แ„Œแ…ฅแ†ผแ„‡แ…ฉ แ„‰แ…ฎแ„Œแ…ฅแ†ผ, แ„’แ…ฌแ„‹แ…ฏแ†ซแ„แ…กแ†ฏแ„แ…ฌ, แ„…แ…ฉแ„€แ…ณแ„‹แ…กแ„‹แ…ฎแ†บ

แ„†แ…กแ„‹แ…ตแ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„Œแ…ฉแ‡‚แ„‹แ…กแ„‹แ…ญ, แ„ƒแ…ขแ†บแ„€แ…ณแ†ฏ, แ„‚แ…ขแ„€แ…ก แ„Šแ…ณแ†ซ แ„€แ…ณแ†ฏ แ„†แ…ฉแ†จแ„…แ…ฉแ†จ แ„†แ…ตแ†พ แ„‰แ…กแ†จแ„Œแ…ฆ

แ„†แ…กแ„‹แ…ตแ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„Œแ…ฉแ‡‚แ„‹แ…กแ„‹แ…ญ, แ„ƒแ…ขแ†บแ„€แ…ณแ†ฏ, แ„‚แ…ขแ„€แ…ก แ„Šแ…ณแ†ซ แ„€แ…ณแ†ฏ แ„†แ…ฉแ†จแ„…แ…ฉแ†จ แ„†แ…ตแ†พ แ„‰แ…กแ†จแ„Œแ…ฆ

์˜ค๋Š˜์˜ ๋ฉ”๋‰ด ์ถ”์ฒœ

แ„‹แ…ณแ†ทแ„‰แ…ตแ†จ แ„Žแ…ฎแ„Žแ…ฅแ†ซ

์˜ค๋Š˜์˜ ์šด์„ธ

แ„‘แ…ฉแ„Žแ…ฎแ†ซ แ„แ…ฎแ„แ…ต

์ง€์—ญ๋ณ„ ์“ฐ๋ ˆ๊ธฐ ๋ฐฐ์ถœ ์ •๋ณด ํ™•์ธ

แ„Šแ…ณแ„…แ…ฆแ„€แ…ต แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต

์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ ์—ฌ๋ถ€ ํ™•์ธ

แ„‹แ…ณแ†ทแ„‰แ…ตแ†จแ„†แ…ฎแ†ฏ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต

์ฒญ๋…„ ์ •์ฑ…

แ„Žแ…ฅแ†ผแ„‚แ…งแ†ซ แ„Œแ…ฅแ†ผแ„Žแ…ขแ†จ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต

๊ฟ€ํŒ ๊ฒŒ์‹œํŒ ์†Œ๊ฐœ

แ„แ…ฎแ†ฏแ„แ…ตแ†ธ แ„€แ…ฆแ„‰แ…ตแ„‘แ…กแ†ซ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„‰แ…ฉแ„€แ…ข

๊ฟ€ํŒ ๊ฒŒ์‹œํŒ ๋Œ“๊ธ€, ์ข‹์•„์š”, ๊ธ€์ž‘์„ฑ CRUD

แ„แ…ฎแ†ฏแ„แ…ตแ†ธ แ„€แ…ฆแ„‰แ…ตแ„‘แ…กแ†ซ แ„ƒแ…ขแ†บแ„€แ…ณแ†ฏ, แ„Œแ…ฉแ‡‚แ„‹แ…กแ„‹แ…ญ, แ„€แ…ณแ†ฏแ„Œแ…กแ†จแ„‰แ…ฅแ†ผ CRUD

๋™๋„ค ํ•ซํ”Œ

แ„†แ…ขแ†ธ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต


๐Ÿ“… Development Period

2024.12.31 ~ 2025.02.04


โš™๏ธ Tech Stack & Tools โš™๏ธ

โœ”๏ธ Language

โœ”๏ธ Framework & Libraries

โœ”๏ธ Hosting & Deployment

โœ”๏ธ Version Control

โœ”๏ธ API


๐ŸŒณ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๐Ÿ“ฆsrc
 โ”ฃ ๐Ÿ“‚app
 โ”ƒ โ”ฃ ๐Ÿ“‚api                     # API ์š”์ฒญ ๊ด€๋ จ ๋กœ์ง
 โ”ƒ โ”ฃ ๐Ÿ“‚recommend               # ์˜ค๋Š˜์˜ ๋ฉ”๋‰ด ์ถ”์ฒœ ํŽ˜์ด์ง€ (๋‚˜๋จธ์ง€ ํŽ˜์ด์ง€๋“ค๋„ ํด๋” ๊ตฌ์กฐ ๋™์ผ)
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_actions              # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ฒ„ ์•ก์…˜
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components           # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_constants            # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์ˆ˜
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_hooks                # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ›…
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_layout               # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_types                # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž…
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_utils                # recommend์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œerror.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚fortune                 # ์˜ค๋Š˜์˜ ์šด์„ธ ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚honeytips               # ๊ฟ€ํŒ ๊ฒŒ์‹œํŒ ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚map                     # ๋™๋„ค ํ•ซํ”Œ ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚mypage                  # ๋งˆ์ดํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚policy                  # ์ฒญ๋…„ ์ •์ฑ… ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚trash-guide             # ์“ฐ๋ ˆ๊ธฐ ๊ฐ€์ด๋“œ ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚sign-in                 # ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“‚sign-up                 # ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€
 โ”ƒ โ”ฃ ๐Ÿ“œglobal-error.tsx        
 โ”ƒ โ”ฃ ๐Ÿ“œglobals.css 
 โ”ƒ โ”ฃ ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œnot-found.tsx
 โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ฃ ๐Ÿ“‚assets
 โ”ƒ โ”ฃ ๐Ÿ“‚fonts
 โ”ƒ โ”— ๐Ÿ“‚images
 โ”ฃ ๐Ÿ“‚components                # ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
 โ”ฃ ๐Ÿ“‚lib                       # ๊ณตํ†ต type, util ํ•จ์ˆ˜
 โ”ฃ ๐Ÿ“‚store                     # zustand ์Šคํ† ์–ด
 โ”ฃ ๐Ÿ“œ.eslintrc.json            # ESLint ์„ค์ • ํŒŒ์ผ
 โ”ฃ ๐Ÿ“œ.prettierrc               # Prettier ์ฝ”๋“œ ํฌ๋งทํŒ… ์„ค์ •
 โ”ฃ ๐Ÿ“œnext.config.mjs           # Next.js ์„ค์ • ํŒŒ์ผ
 โ”ฃ ๐Ÿ“œpull_request_template     # Pull request ํ…œํ”Œ๋ฆฟ
 โ”— ๐Ÿ“œtailwind.config.ts        # TailwindCSS ์„ค์ • ํŒŒ์ผ