Skip to content

๐Ÿ’™ RamBlog | ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ๋ธ”๋กœ๊ทธ

Notifications You must be signed in to change notification settings

boram2445/RamBlog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ’™ RamBlog | ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ๋ธ”๋กœ๊ทธ

๐Ÿงกย RamBlog๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ๊ฐ„ํŽธ ๋ธ”๋กœ๊ทธ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

โญ๏ธ ๋งค์ผ ๊ณต๋ถ€ ์ผ์ง€๋ฅผ ๋ธ”๋กœ๊ทธ์— ๋‹ด์•„ ๋ธ”๋กœ๊ทธ๋ฅผ ์ผ๊ธฐ์žฅ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœจย ์˜ค๋ž˜ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๊ณต๋ถ€ ๋‚ด์šฉ์„ ๋ธ”๋กœ๊ทธ์— ํฌ์ŠคํŒ…ํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ€ย ๋ธ”๋กœ๊ทธ์— ํฌํ† ํด๋ฆฌ์˜ค ๊ธฐ๋Šฅ์„ ๋‹ด์•„, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๊ธฐ์ˆ , ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค”๊ธฐํš ๋ฐฐ๊ฒฝ

  • ๊ฒŒ์œผ๋ฅธ ์™„๋ฒฝ์ฃผ์˜์ž์ธ ์ €๋Š” ๋ธ”๋กœ๊ทธ์—๋Š” ์™„๋ฒฝํ•œ ๋‚ด์šฉ์„ ๋‹ด์€ ๊ธ€์„ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์— ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ํ•ญ์ƒ ์ฃผ์ €ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์–ด๋”˜๊ฐ€์—๋Š” ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ž๋ž‘ํ•˜๊ณ  ์‹ถ์—ˆ๊ณ , ๋˜ ์˜ค๋Š˜ ํ•˜๋ฃจ ์–ผ๋งˆ๋‚˜ ์—ด์‹ฌํžˆ ์‚ด์•˜๋Š”์ง€ ๊ธฐ๋กํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋˜ ๋งŽ์€ ๋ถ„๋“ค์ด ์ง์ ‘ ๊ฐœ๋ฐœํ•œ ๋ธ”๋กœ๊ทธ์—๋Š” ์ž์‹ ์˜ ํฌํ† ํด๋ฆฌ์˜ค๋ฅผ ํ•จ๊ป˜ ์˜ฌ๋ฆฌ๋Š”๋ฐ, velog๋‚˜ tistory ๊ฐ™์€ ๋ธ”๋กœ๊ทธ์—๋Š” ํ•ด๋‹น ํƒญ์ด ์—†๋‹ค๋Š” ์ ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ์ €๋งŒ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž! ํ•ด์„œ ์‹œ์ž‘ํ–ˆ๋‹ค๊ฐ€, ์ €์™€ ์ƒ๊ฐ์ด ๋น„์Šทํ•œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค ๋˜ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ฒŒ ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ RamBlog ์ž…๋‹ˆ๋‹ค.๐Ÿคฉ

๐Ÿ› ๏ธ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

[๊ธฐ์ˆ ]

  • Deployment: : Vercel
  • FrontEnd : Next.js 13, Typescript, TailwindCSS, SWR
  • BackEnd : Sanity
  • Authentication : Next-auth

[์•„ํ‚คํ…์ฒ˜]

NextJS 13์„ ์ด์šฉํ•œ ํ’€์Šคํƒ ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‘ ๋ฐ๋ชจ

๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์€ โœจ์„ ๋ถ™์˜€์Šต๋‹ˆ๋‹ค

๊พธ์ค€ํžˆ ๊ธฐ๋Šฅ๊ณผ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค.


์ธ์ฆ / ์‚ฌ์šฉ์ž

1. ๋กœ๊ทธ์ธ - ๊ตฌ๊ธ€ OAUTH / ๋กœ๊ทธ์ธ - Credentials

  • ๊ตฌ๊ธ€ OAUTH
    • Next-auth์˜ ๊ตฌ๊ธ€ Provider๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ๊ธ€ OAUTH ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ์ œ๊ณต
  • ์ด๋ฉ”์ผ Credentials
    • ๊ตฌ๊ธ€ ์™ธ ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ ์‹œ email, password ์ผ์น˜ ์—ฌ๋ถ€ Sanity DB์—์„œ ํ™•์ธ, ๋ถˆ์ผ์น˜์‹œ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ
    • ์ผ์น˜ํ•  ๊ฒฝ์šฐ Next-auth์˜ Credential ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด Session๋ฐ JWT ํ† ํฐ ์ƒ์„ฑ
๋กœ๊ทธ์ธ - ๊ตฌ๊ธ€ OAUTH ๋กœ๊ทธ์ธ - Credentials

2. ๋กœ๊ทธ์•„์›ƒ / ํšŒ์›๊ฐ€์ž…โœจ

  • ํšŒ์›๊ฐ€์ž… - ์ด๋ฉ”์ผ Credentials
    • ๊ตฌ๊ธ€์™ธ ์ด๋ฉ”์ผ๋กœ ํšŒ์›๊ฐ€์ž…์‹œ name, email, password, username ์ž…๋ ฅ
    • validate๊ฒ€์ฆ ํ›„ username, email์„ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•ด ์ค‘๋ณต ํ™•์ธํ›„ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ
    • ๋ชจ๋“  ๊ฒ€์ฆ ์™„๋ฃŒ์‹œ password๋ฅผ bycrpt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ํ›„ Sanity DB์— ์ €์žฅ
๋กœ๊ทธ์•„์›ƒ ํšŒ์›๊ฐ€์ž… - Credentials

3. ํ”„๋กœํ•„ ์„ค์ • / ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ

  • ํ”„๋กœํ•„
    • ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์ผ ๊ฒฝ์šฐ ๊ตฌ๊ธ€ Session์— ์ €์žฅ๋œ ๊ธฐ๋ณธ ์ •๋ณด ์‚ฌ์šฉ, ๊ตฌ๊ธ€์™ธ ๋กœ๊ทธ์ธ์‹œ ๊ฐ€์ž…์‹œ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ํ”„๋กœํ•„ ์ดˆ๊ธฐ ์„ค์ •
    • ๊ธฐ๋ณธ ์ •๋ณด๋Š” ๋กœ๊ทธ์ธ ํ›„ ์ˆ˜์ • ๊ฐ€๋Šฅ
  • ํŒ”๋กœ์šฐ
    • ํƒ€ ์œ ์ € ํŒ”๋กœ์šฐ์‹œ ๋‚ด ํŒ”๋กœ์šฐ ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹น user์˜ reference๋ฅผ ์ถ”๊ฐ€, ๋™์‹œ์— ํ•ด๋‹น user์˜ ํŒ”๋กœ์ž‰ ๋ฆฌ์ŠคํŠธ์— ํŒ”๋กœ์ž‰ํ•œ user์˜ reference๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„
ํ”„๋กœํ•„ ์„ค์ • ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ

ํฌ์ŠคํŒ…

1. ํฌ์ŠคํŒ…โœจ / ํฌ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

  • Toast UI Editor๋ฅผ ํ†ตํ•œ WYSIWYG ๊ธฐ๋Šฅ ์ œ๊ณต
    • ์ด๋ฏธ์ง€ ์„ ํƒ์‹œ ์ด๋ฏธ์ง€ Sanity์— ์—…๋กœ๋“œ ํ›„ url๋ฐ›์•„์™€ ํ‘œ์‹œ
    • Content๋‚ด์šฉ์ค‘ ์ฒซ๋ฒˆ์งธ ์ด๋ฏธ์ง€ ๋ถ€๋ถ„์˜ url์„ parsingํ•˜์—ฌ ๋Œ€ํ‘œ ์ด๋ฏธ์ง€๋กœ ์ž๋™ ์„ ์ •ํ›„ ์ €์žฅ
ํฌ์ŠคํŒ… ํฌ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

2. ํฌ์ŠคํŠธ ์ƒ์„ธ ๋ณด๊ธฐโœจ - TOC, ๋งํฌ ๋ณต์‚ฌ, ์ข‹์•„์š” ๊ธฐ๋Šฅ

  • react-markdown ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ปจํ…์ธ ๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜์—ฌ SSR ์ง€์›
  • TOC (๋ชฉ์ฐจ)
    • Intersection Observer๋ฅผ ์ด์šฉํ•œ ์ž๋™ ํ•˜์ด๋ผ์ดํŠธ, ์Šคํฌ๋กค ๊ธฐ๋Šฅ ๋ชฉ์ฐจ ๊ตฌํ˜„
  • ์ข‹์•„์š” ๊ธฐ๋Šฅ
    • useSWR์˜ mutate ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด Optimistic update๋ฅผ ํ•˜์—ฌ UI ์„ฑ๋Šฅ ์ตœ์ ํ™”
ํฌ์ŠคํŠธ ์ƒ์„ธ ๋ณด๊ธฐ

3. ํšŒ์› - ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ์ž‘์„ฑ ๋ฐ ์‚ญ์ œโœจ / ๊ฒŒ์ŠคํŠธ - ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ์ž‘์„ฑ ๋ฐ ์‚ญ์ œโœจ

  • ๋ถ€๋ชจ - ์ž์‹ ์Šคํ‚ค๋งˆ ๊ตฌ์„ฑ์„ ํ†ตํ•œ ๋Œ€๋Œ“๊ธ€ ์ง€์›
  • ๊ฒŒ์ŠคํŠธ ๋Œ“๊ธ€
    • ์„ธ์…˜ ์œ ๋ฌด๋กœ ํšŒ์› ๋ฐ ๊ฒŒ์ŠคํŠธ ํŒ๋ณ„
    • ๊ฒŒ์ŠคํŠธ์ผ ๊ฒฝ์šฐ username, password ์ž…๋ ฅํ›„ ๋Œ“๊ธ€ ์ถ”๊ฐ€, password๋Š” bycrpt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”ํ›„ ์ €์žฅ
    • ์‚ญ์ œ์‹œ password ์ผ์น˜ ํ™•์ธ ํ›„ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ํ˜น์€ ์‚ญ์ œ
ํšŒ์› - ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ๋ฐ ์‚ญ์ œ ๊ฒŒ์ŠคํŠธ - ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ๋ฐ ์‚ญ์ œ

4. ์‚ฌ์šฉ์ž ํƒœ๊ทธ๋ณ„ ํฌ์ŠคํŠธโœจ / ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

  • ํƒœ๊ทธ ๊ธฐ๋Šฅ

    • ์‚ฌ์šฉ์ž ํƒœ๊ทธ๋ณ„ ํฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ, ํƒœ๊ทธ ํด๋ฆญ์‹œ ๋ชจ๋“  ์‚ฌ์šฉ์ž ํฌ์ŠคํŠธ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต
    • ํฌ์ŠคํŠธ ์ƒ์„ฑ์‹œ tag ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, tag reference๋ฅผ ํฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์—ฌ ํƒœ๊ทธ์™€ ์—ฐ๊ฒฐ๋˜๋„๋ก ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ตฌํ˜„
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

    • ์ „์ฒด ํฌ์ŠคํŠธ ๊ฒ€์ƒ‰, ํŠน์ • ์‚ฌ์šฉ์ž ํฌ์ŠคํŠธ์—์„œ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
    • Debounce ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ ์ตœ์†Œํ™”
ํƒœ๊ทธ ๊ธฐ๋Šฅ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

5. ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ

  • ํฌ์ŠคํŠธ ๋ถ๋งˆํฌ ํ›„ ๊ฐœ์ธ ๋ถ๋งˆํฌ ๋ชจ์Œ ํŽ˜์ด์ง€์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ
๋ถ๋งˆํฌ ๊ธฐ๋Šฅ

๋กœ๊ทธ

1. ์ผ๊ธฐ ์ž‘์„ฑ / ์ƒ์„ธ ์ผ๊ธฐ ๋ณด๊ธฐ ๋ฐ ํ•„ํ„ฐ๋ง

  • ์ผ๊ธฐ ์ž‘์„ฑ
    • ๋‚ ์งœ, ์ œ๋ชฉ, ์‚ฌ์ง„, ์งง์€ ๊ธ€, ๊ฐ์ • ์ด๋ชจ์ง€ ์„ ํƒ์„ ํ†ตํ•ด ํ•˜๋ฃจ ์ผ๊ธฐ ์ž‘์„ฑ ๊ฐ€๋Šฅ
  • ์ƒ์„ธ ๋ณด๊ธฐ
    • ๊ฐ์ • ์ด๋ชจ์ง€ ์„ ํƒ์„ ํ†ตํ•ด ์ผ์น˜ํ•˜๋Š” ์ผ๊ธฐ๋งŒ ํ•„ํ„ฐ๋งํ•ด ๋ณด๊ธฐ ๊ฐ€๋Šฅ
    • ์ƒ์„ธ ๋ณด๊ธฐ ๋ชจ๋‹ฌ ์„ ํƒ์‹œ ์ด์ „, ๋‹ค์Œ ์ผ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๋ฐ›์•„์™€ ํ™”์‚ดํ‘œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋„˜์–ด๊ฐ€๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต
์ผ๊ธฐ ์ž‘์„ฑ ์ƒ์„ธ ์ผ๊ธฐ ๋ณด๊ธฐ ๋ฐ ํ•„ํ„ฐ๋ง

ํฌํ† ํด๋ฆฌ์˜ค

1. ํฌํ† ํด๋ฆฌ์˜ค ์ž‘์„ฑโœจ / ํฌํ† ํด๋ฆฌ์˜ค ๊ตฌ๊ฒฝ

  • ์†Œ๊ฐœ, ๊ธฐ์ˆ  ์Šคํƒ, ํ•™์—…, ๊ฒฝ๋ ฅ, ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํ† ํด๋ฆฌ์˜ค์— ์ž‘์„ฑ๊ฐ€๋Šฅ
    • ํ•™์—…, ๊ฒฝ๋ ฅ, ํ”„๋กœ์ ํŠธ๋Š” +์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ Form ์—ด์–ด ์ž‘์„ฑ ๊ฐ€๋Šฅ
  • ํ”„๋กœ์ ํŠธ๋Š” ํด๋ฆญํ•˜์—ฌ ๋ชจ๋‹ฌ ํ˜•์‹์œผ๋กœ ์ƒ์„ธ ๋ณด๊ธฐ ๊ฐ€๋Šฅ
ํฌํ† ํด๋ฆฌ์˜ค ์ž‘์„ฑ ํฌํ† ํด๋ฆฌ์˜ค ๊ตฌ๊ฒฝ

UI

1. ๋‹คํฌ๋ชจ๋“œ / ๋ฐ˜์‘ํ˜•

  • ๋‹คํฌ๋ชจ๋“œ
    • tailwindCSS์™€ next-themes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋‹คํฌ๋ชจ๋“œ ๊ฐ„ํŽธ ๊ตฌํ˜„
  • ๋ฐ˜์‘ํ˜• (๊ฐœ์„ ์ค‘)
    • tailwindCSS๋ฅผ ํ†ตํ•ด phone, tablet, desktop, laptop ์‚ฌ์ด์ฆˆ ๊ตฌ๋ณ„ํ•˜์—ฌ ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„
๋‹คํฌ๋ชจ๋“œ ๋ฐ˜์‘ํ˜•

About

๐Ÿ’™ RamBlog | ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ๋ธ”๋กœ๊ทธ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published