Skip to content

VACO-RYNO/article-genie-nextjs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

90 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Article Genie

image

Article Genie - Web Article Reading Helper | Make Your Own Notes

๐Ÿ™‡โ€โ™‚๏ธย Introduction

Highlight your thoughts reading web articles, and make your own notes out of it.

์•„ํ‹ฐํด ์ง€๋‹ˆ๋Š” ์›น ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์š”์•ฝํ•˜๋Š” ์œ ์ €์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” SaaS(Software as a Service) ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์•„ํ‹ฐํด ์ง€๋‹ˆ๋ฅผ ํ†ตํ•ด ์›น ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชฐ์ž…๋„๋ฅผ ๋†’์ด๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ์›น ๋ฌธ์„œ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์„ ํƒํ•ด ์ž์‹ ๋งŒ์˜ ์š”์•ฝ๋…ธํŠธ๋กœ ๋งŒ๋“ค์–ด ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ๋ฌธ์„œ์—์„œ ํŠน์ • ๋ฌธ๋‹จ์„ ์„ ํƒํ•˜๋ฉด, ํด๋ฆญ ํ•œ ๋ฒˆ์— ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•ด ์ž‘์„ฑํ•˜๋˜ ์š”์•ฝ๋…ธํŠธ์— ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ถ™์—ฌ ๋„ฃ์€ ํ…์ŠคํŠธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‹ค์‹œ ์ถœ์ฒ˜ ํŽ˜์ด์ง€๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’กย Motivation

๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์›น ๋ฌธ์„œ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ผ์ด ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์„œ์˜ ์–‘์ด ๋งŽ์„์ˆ˜๋ก ์ง‘์ค‘ํ•ด์„œ ์ฝ๊ธฐ ์–ด๋ ค์› ๊ณ  ๋™๊ธฐ๋“ค๊ณผ ์œ ์šฉํ•œ reference๋ฅผ ๊ณต์œ ํ•  ๋•Œ์—๋„ ํŠน์ • ๋ถ€๋ถ„์„ ์ง€์ •ํ•ด์„œ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์•„์‰ฌ์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋Š” ๊ณผ์ •, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‚ด์šฉ์˜ ์ถœ์ฒ˜๋ฅผ ๋งค๋ฒˆ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‹ค์†Œ ํ”ผ๋กœํ•˜๋‹ค๋Š” ๋А๋‚Œ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ €ํฌ๋Š” ์›น ๋ฌธ์„œ ํƒ์ƒ‰์— ๋Œ€ํ•œ ๋ชฐ์ž…๋„์™€ ์ƒ์‚ฐ์„ฑ์„ ๋†’์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” SaaS๋ฅผ ๊ณ ์•ˆํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์•„ํ‹ฐํด ์ง€๋‹ˆ๋ฅผ ์ œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—“ย Schedule

2022.05.30 ~ 2022.06.17 โ€“ 3 weeks

๐Ÿ’ฟย Feature

  • ์›น ๋ฌธ์„œ ์ฝ์„ ๋•Œ ๋ชฐ์ž…๋„๋ฅผ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

    • ์›น ํŽ˜์ด์ง€์˜ URL์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์›น ํŽ˜์ด์ง€์— ์•„ํ‹ฐํด ์ง€๋‹ˆ์˜ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜์—ฌ ์ด์šฉ ๊ฐ€๋Šฅ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„(๋งˆ์šฐ์Šค ์œ„์น˜)์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ๋‹จ์— ํ•˜์ด๋ผ์ดํŠธ ๊ธฐ๋Šฅ ์ ์šฉ
    • ํŽ˜์ด์ง€์˜ ๋‚ด๋ถ€ ๋งํฌ ํด๋ฆญ ์‹œ ์ƒˆ๋กœ ์—ด๋ฆฌ๋Š” ํŽ˜์ด์ง€๋„ ์•„ํ‹ฐํด ์ง€๋‹ˆ๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ 01-show-highlight
  • ์›น ๋ฌธ์„œ์˜ ํŠน์ • ๋ฌธ๋‹จ์„ ๊ฐ•์กฐํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํŠน์ • ๋ฌธ๋‹จ์— ๋”ฅ๋งํฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณต์œ ๋œ URL๋กœ ์ ‘๊ทผ ์‹œ ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ํ•ด๋‹น ๋ฌธ๋‹จ์œผ๋กœ ์Šคํฌ๋กค ๋ฐ ํ•˜์ด๋ผ์ดํŠธ ๋˜๋Š” ๊ธฐ๋Šฅ
  • ์›น ๋ฌธ์„œ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์„ ํƒํ•ด ์ž์‹ ๋งŒ์˜ ์š”์•ฝ๋…ธํŠธ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‹ฐํด์„ ์ƒ์„ฑํ•˜๊ณ  ๋ชฉ๋ก์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ
    • ํŠน์ • ๋ฌธ๋‹จ์„ ์„ ํƒํ•˜๊ณ  ๋ฉ”๋ชจ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ์—ด๋ ค์žˆ๋Š” ์•„ํ‹ฐํด๋กœ ํ•ด๋‹น ๋ฌธ๋‹จ์ด ๋ถ™์—ฌ๋„ฃ๊ธฐ ๊ธฐ๋Šฅ
    • ๋งˆ์ด ์•„ํ‹ฐํด ํŽ˜์ด์ง€์—์„œ ํŠน์ • ์•„ํ‹ฐํด์„ ํด๋ฆญ ์‹œ ๋งˆ์ง€๋ง‰ ๋ฐฉ๋ฌธํ•œ ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ์•„ํ‹ฐํด์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
    • ์ €์žฅ๋œ ์•„ํ‹ฐํด์„ PDF๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ธ์‡„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ 02-create-my-notes
  • ์š”์•ฝํ•œ ๋…ธํŠธ์˜ ํŠน์ • ๋ฌธ๋‹จ์˜ ์ถœ์ฒ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์•„ํ‹ฐํด์—์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐํ•œ ๋ฌธ๋‹จ์„ ํด๋ฆญํ•˜๋ฉด, ์ถœ์ฒ˜ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๋ฐ ํ•ด๋‹น ๋ฌธ๋‹จ์œผ๋กœ ์Šคํฌ๋กค ๋ฐ ํ•˜์ด๋ผ์ดํŠธ ๋˜๋Š” ๊ธฐ๋Šฅ 03-hostname-preview-1 03-hostname-preview-2

๐ŸŒย Service Architecture

image image

๐Ÿ“ย Installation

Frontend (NextJS)

  1. ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์šด ๋ฐ›์€ ํ›„ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด ์ž…๋ ฅ
npm install

npm start
  1. ํ™˜๊ฒฝ์„ค์ • (.env file)์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
NEXT_PUBLIC_GOOGLE_CLIENT_ID=<YOUR_GOOGLE_CLIENT_ID>
NEXT_PUBLIC_SERVER_URL=<YOUR_SERVER_URL>
NEXT_PUBLIC_HOST_URL=<YOUR_CLIENT_URL>

Backend (Express)

  1. ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์šด ๋ฐ›์€ ํ›„ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด ์ž…๋ ฅ
npm install

npm start
  1. ํ™˜๊ฒฝ์„ค์ • (.env file)์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
MONGODB_URI=<YOUR_MONGODB_DATABASE_URL>
JWT_SECRET=<YOUR_JWT_TOKEN_SECRET>

๐Ÿ”ย Challenge

์›๋ณธ ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์ ์šฉ์„ ์œ„ํ•œ DOM ์กฐ์ž‘

์›๋ณธ ํŽ˜์ด์ง€์— ์ €ํฌ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๋ ค๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€์˜ HTML ์„ ์กฐ์ž‘ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ํŽ˜์ด์ง€์—์„œ ์‘๋‹ต๋ฐ›์€ HTML ์„ cheerio ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ parsing ํ•˜๊ณ  target tag ๋“ค์„ ์„ ํƒํ•ด ํ•„์š”ํ•œ ์Šคํƒ€์ผ์„ ์ž…ํž ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ํƒœ๊ทธ ๋ณ„๋กœ id ๊ฐ’์„ ๋ถ€์—ฌํ•ด์„œ ์ €ํฌ๊ฐ€ ๊ตฌํ˜„ํ•œ ๋กœ์ง์œผ๋กœ ๋”ฅ๋งํฌ ์ƒ์„ฑ ๋ฐ ์ถœ์ฒ˜ ์ฐพ์•„๊ฐ€๊ธฐ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ ํŽ˜์ด์ง€ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ์ด์Šˆ

์„œ๋น„์Šค ๋‚ด์—์„œ ์›๋ณธ ํŽ˜์ด์ง€์™€ ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ CSS, JS ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์›์ธ์€ ์›๋ณธ ํŽ˜์ด์ง€์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ๊ฒฝ๋กœ๊ฐ€ ์ ˆ๋Œ€๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์ƒ๋Œ€๊ฒฝ๋กœ๋ผ์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์ฐพ์•˜๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Link ์™€ script ํƒœ๊ทธ์— ์„ค์ •๋œ ์ƒ๋Œ€๊ฒฝ๋กœ ๋Œ€์‹  source domain ์œผ๋กœ ์ˆ˜์ •ํ•ด์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์›๋ณธ ํŽ˜์ด์ง€์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

hydration ์ด์Šˆ

React ์—์„œ Next.js ๋กœ migration ํ•˜๋ฉด์„œ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜ฎ๊ฒผ์„ ๋•Œ, server side ์—์„œ ๋งŒ๋“  HTML ๊ณผ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ์— React ์—์„œ ์ง„ํ–‰ํ•˜๋Š” hydration ๊ณผ์ •์—์„œ render tree๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„์„œ hydration ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์›์ธ์ด ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ€ ์ดˆ๊ธฐ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— DOM ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์ดํ›„์— DOM ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋„๋ก useEffect ๋ฅผ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด stack ๋„์ž…

  • ๋กœ๊ทธ์ธ ์ƒํƒœ์™€ ๊ฐ์ข… ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์— ์‚ฌ์šฉํ•ด๋ณธ Redux ์˜ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŒ…๋ณด๋‹ค ์ข€ ๋” ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ์™€ ํด๋” ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ„ํŽธํ•œ ์‚ฌ์šฉ์„ฑ์„ ๊ฐ€์ง„ Recoil์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Recoil ๋•๋ถ„์— ์›น ํŽ˜์ด์ง€์˜ ๋ชจ๋‹ฌ์„ global ์ปดํฌ๋„ŒํŠธ๋กœ ๊ด€๋ฆฌํ•ด์„œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ๋” ๋ช…์‹œ์ ์ธ ์ฝ”๋“œ๋กœ ๋ชจ๋‹ฌ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • React Query ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ธฐ์กด์— ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ํ–ˆ๋˜ ๋กœ๋”ฉ๊ณผ ์—๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ์•กํŠธ ์ตœ์‹  ๊ธฐ๋Šฅ์ธ Suspense ์™€ Error Boundary ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ๋กœ๋”ฉ๊ณผ ์—๋Ÿฌ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. โ†’ ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ๋Š” Portal ์„ ์ด์šฉํ•˜์—ฌ root ๋‹จ์—์„œ ๋ Œ๋”๋ง ๋˜๊ธฐ ๋•Œ๋ฌธ์— Suspense ์™€ Error Boundary ๋ฅผ ์ตœ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ ค์ฃผ์–ด์•ผ ๋ชจ๋‹ฌ์— ์ ์šฉ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์ƒ๋‹จ์—๋งŒ ์ ์šฉํ•  ๊ฒฝ์šฐ ๋กœ๋”ฉ ์‹œ ํฌ๊ฒŒ ๊นœ๋นก์ด๋Š” ํ˜„์ƒ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ตœ์ƒ๋‹จ์˜ Suspense ์™€ Error Boundary ์— ์˜ํ•ด ํ•˜์œ„์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๋Š” ์‚ฌ์‹ค๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋‚˜ ๋กœ๋”ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์— ๊ทผ์ ‘ํ•˜๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ ํ™”์— ์œ ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ–ย Migration

Migration ์ด์œ 

์›๋ณธ ํŽ˜์ด์ง€๋ฅผ ๊ณต์œ ํ•  ๋•Œ์˜ ์‚ฌ์šฉ์ž์˜ ๊ฒฝํ—˜์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด SSR ํ™œ์šฉ์ด ํ•„์š”ํ–ˆ์Œ

  • ํŽ˜์ด์ง€ ๋งํฌ ๊ณต์œ  ์‹œ ์›๋ณธ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณต์œ ํ•  ๋•Œ์™€ ๋™์ผํ•œ ์ธ๋„ค์ผ๊ณผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œ โ†’ CSR ๋กœ ๋ Œ๋”๋ง ํ•  ๊ฒฝ์šฐ ๋ถˆ๊ฐ€๋Šฅ
  • SEO ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด SSR ์„ ์‚ฌ์šฉํ•˜๋Š” ์›น ํŽ˜์ด์ง€์˜ ํŠน์„ฑ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€
  • next/head๋ฅผ ์ด์šฉํ•˜์—ฌ meta ํƒœ๊ทธ ๊ด€๋ฆฌ์— ์šฉ์ด

Monolithic Architecture vs Micro Architecture

๊ธฐ์กด์— Next.js ์˜ API Routes ๋ฅผ ํ™œ์šฉํ•ด Monolithic ๊ตฌ์กฐ๋กœ migration ์„ ํ•˜๊ณ  ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ํ•œ ์ €์žฅ์†Œ์— ์กด์žฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—… ์ง„ํ–‰์ด blocking ๋˜๋Š” ์ƒํ™ฉ์ด ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” Micro ๊ตฌ์กฐ๊ฐ€ ์„œ๋น„์Šค์˜ Scale-out ์— ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ๊ธฐ์กด์˜ express endpoint ๋ฅผ ๋‹ค์‹œ ํ™œ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ ์„œ๋ฒ„์˜ ์—ญํ•  ํ™•๋Œ€

  • ๋ณ€๊ฒฝ ์ „: ๋ฉ”์ธ๊ธฐ๋Šฅ์„ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ ์กฐ์ž‘๋œ HTML, ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ฐ›์•„ ๊ตฌํ˜„
  • ๋ณ€๊ฒฝ ํ›„: ๋ฉ”์ธ๊ธฐ๋Šฅ์„ Migration ์ดํ›„ ํ”„๋ก ํŠธ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ์ž‘์—…์„ ์ง„ํ–‰

๐Ÿ“šย Stack

Frontend

  • ES6+
  • NextJS
  • React Query (Sever state)
  • Recoil (Client state)
  • Styled Compontents
  • Jest

Backend

  • Node.js
  • Express
  • Access Token์„ ์ด์šฉํ•œ JWT authorization
  • MongoDB - Atlas
  • Mongoose
  • Mocha, Chai

๐Ÿ˜ƒย ๊ฐœ๋ฐœ์ž ์†Œ๊ฐœ

์ž„ํƒœ์™„ ํ”„๋กœํ•„ ๊น€์ค€ํ˜• ํ”„๋กœํ•„ ๊ณ ์ฐฝ์œค ํ”„๋กœํ•„

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •