Article Genie - Web Article Reading Helper | Make Your Own Notes
Highlight your thoughts reading web articles, and make your own notes out of it.
์ํฐํด ์ง๋๋ ์น ๋ฌธ์๋ฅผ ์ฝ๊ณ ์์ฝํ๋ ์ ์ ์ ์์ฐ์ฑ์ ๋์ฌ์ฃผ๋ SaaS(Software as a Service) ์ ๋๋ค.
์ฌ์ฉ์๋ ์ํฐํด ์ง๋๋ฅผ ํตํด ์น ๋ฌธ์์ ๋ํ ๋ชฐ์ ๋๋ฅผ ๋์ด๊ณ , ์๋ก ๋ค๋ฅธ ์น ๋ฌธ์์์ ํ์ํ ์ ๋ณด๋ง ์ ํํด ์์ ๋ง์ ์์ฝ๋ ธํธ๋ก ๋ง๋ค์ด ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์น ๋ฌธ์์์ ํน์ ๋ฌธ๋จ์ ์ ํํ๋ฉด, ํด๋ฆญ ํ ๋ฒ์ ๋ด์ฉ์ ๋ณต์ฌํด ์์ฑํ๋ ์์ฝ๋ ธํธ์ ๋ถ์ฌ ๋ฃ์ ์ ์์ต๋๋ค. ๋ํ ๋ถ์ฌ ๋ฃ์ ํ ์คํธ๋ฅผ ํด๋ฆญํ๋ฉด ๋ค์ ์ถ์ฒ ํ์ด์ง๋ก ๊ฐํธํ๊ฒ ์ด๋ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ์์ํ๋ฉด์ ๊ตฌ๊ธ๋ง์ ํตํด ์น ๋ฌธ์๋ฅผ ํ์ํ๋ ์ผ์ด ๋ง์์ก์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์์ ์์ด ๋ง์์๋ก ์ง์คํด์ ์ฝ๊ธฐ ์ด๋ ค์ ๊ณ ๋๊ธฐ๋ค๊ณผ ์ ์ฉํ reference๋ฅผ ๊ณต์ ํ ๋์๋ ํน์ ๋ถ๋ถ์ ์ง์ ํด์ ๊ณต์ ํ ์ ์๋ค๋ ์์ฌ์์ด ์์์ต๋๋ค.
๋ํ ํ์ํ ๋ด์ฉ์ ๋๋๊ทธํ์ฌ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ด์ฉ์ ์ถ์ฒ๋ฅผ ๋งค๋ฒ ์ ์ฅํ๋ ๊ณผ์ ์์ ๋ค์ ํผ๋กํ๋ค๋ ๋๋์ ๋ฐ์ ์ ์์์ต๋๋ค.
๋ฐ๋ผ์ ์ ํฌ๋ ์น ๋ฌธ์ ํ์์ ๋ํ ๋ชฐ์ ๋์ ์์ฐ์ฑ์ ๋์ฌ์ค ์ ์๋ SaaS๋ฅผ ๊ณ ์ํ๊ฒ ๋์๊ณ ์ํฐํด ์ง๋๋ฅผ ์ ์ํ๊ฒ ๋์์ต๋๋ค.
2022.05.30 ~ 2022.06.17 โ 3 weeks
-
์น ๋ฌธ์ ์ฝ์ ๋ ๋ชฐ์ ๋๋ฅผ ๋์ฌ์ค๋๋ค.
- ์น ํ์ด์ง์ URL์ ์ ๋ ฅํ๋ฉด ํด๋น ์น ํ์ด์ง์ ์ํฐํด ์ง๋์ ๊ธฐ๋ฅ์ ์ ์ฉํ์ฌ ์ด์ฉ ๊ฐ๋ฅ
- ์ฌ์ฉ์๊ฐ ์ฝ๊ณ ์๋ ๋ถ๋ถ(๋ง์ฐ์ค ์์น)์ ์ด์ฉํ์ฌ ํด๋น ๋ฌธ๋จ์ ํ์ด๋ผ์ดํธ ๊ธฐ๋ฅ ์ ์ฉ
- ํ์ด์ง์ ๋ด๋ถ ๋งํฌ ํด๋ฆญ ์ ์๋ก ์ด๋ฆฌ๋ ํ์ด์ง๋ ์ํฐํด ์ง๋๊ฐ ์ ์ฉ๋๋ ๊ธฐ๋ฅ

-
์น ๋ฌธ์์ ํน์ ๋ฌธ๋จ์ ๊ฐ์กฐํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ํน์ ๋ฌธ๋จ์ ๋ฅ๋งํฌ๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ ๊ณต์ ๋ URL๋ก ์ ๊ทผ ์ ํด๋น ํ์ด์ง์ ํด๋น ๋ฌธ๋จ์ผ๋ก ์คํฌ๋กค ๋ฐ ํ์ด๋ผ์ดํธ ๋๋ ๊ธฐ๋ฅ
-
์น ๋ฌธ์์์ ํ์ํ ์ ๋ณด๋ง ์ ํํด ์์ ๋ง์ ์์ฝ๋ ธํธ ๋ง๋ค ์ ์์ต๋๋ค.
- ํ์ํ ๋ด์ฉ์ ์ ๋ฆฌํ ์ ์๋ ์ํฐํด์ ์์ฑํ๊ณ ๋ชฉ๋ก์ผ๋ก ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ
- ํน์ ๋ฌธ๋จ์ ์ ํํ๊ณ ๋ฉ๋ชจ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ์ด๋ ค์๋ ์ํฐํด๋ก ํด๋น ๋ฌธ๋จ์ด ๋ถ์ฌ๋ฃ๊ธฐ ๊ธฐ๋ฅ
- ๋ง์ด ์ํฐํด ํ์ด์ง์์ ํน์ ์ํฐํด์ ํด๋ฆญ ์ ๋ง์ง๋ง ๋ฐฉ๋ฌธํ ํ์ด์ง์์ ํด๋น ์ํฐํด์ ์์ฑํ ์ ์๋ ๊ธฐ๋ฅ
- ์ ์ฅ๋ ์ํฐํด์ PDF๋ก ๋ณํํ์ฌ ์ ์ฅํ๊ฑฐ๋ ์ธ์ํ ์ ์๋ ๊ธฐ๋ฅ

-
์์ฝํ ๋ ธํธ์ ํน์ ๋ฌธ๋จ์ ์ถ์ฒ๋ฅผ ์ ์ ์์ต๋๋ค.
- ํ๋ก์ ํธ๋ฅผ ๋ค์ด ๋ฐ์ ํ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์์ ๋ค์ ๋ช ๋ น์ด ์ ๋ ฅ
npm install
npm start- ํ๊ฒฝ์ค์ (.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>- ํ๋ก์ ํธ๋ฅผ ๋ค์ด ๋ฐ์ ํ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์์ ๋ค์ ๋ช ๋ น์ด ์ ๋ ฅ
npm install
npm start- ํ๊ฒฝ์ค์ (.env file)์ ์๋์ ๊ฐ์ด ์ ๋ ฅํด์ผ ํฉ๋๋ค.
MONGODB_URI=<YOUR_MONGODB_DATABASE_URL>
JWT_SECRET=<YOUR_JWT_TOKEN_SECRET>์๋ณธ ํ์ด์ง์ ์ ํฌ ๊ธฐ๋ฅ์ ์ ์ฉํ๋ ค๋ฉด ํด๋น ํ์ด์ง์ HTML ์ ์กฐ์ํ๋ ๊ณผ์ ์ด ํ์ํ์ต๋๋ค. ๋ฐ๋ผ์ ํน์ ํ์ด์ง์์ ์๋ต๋ฐ์ HTML ์ cheerio ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก parsing ํ๊ณ target tag ๋ค์ ์ ํํด ํ์ํ ์คํ์ผ์ ์
ํ ์ ์์์ต๋๋ค. ๋ํ ๊ฐ ํ๊ทธ ๋ณ๋ก id ๊ฐ์ ๋ถ์ฌํด์ ์ ํฌ๊ฐ ๊ตฌํํ ๋ก์ง์ผ๋ก ๋ฅ๋งํฌ ์์ฑ ๋ฐ ์ถ์ฒ ์ฐพ์๊ฐ๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์์ต๋๋ค.
์๋น์ค ๋ด์์ ์๋ณธ ํ์ด์ง์ ๋์ผํ ํํ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํ์ํ CSS, JS ํ์ผ์ ๋ถ๋ฌ์ค์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ธ์ ์๋ณธ ํ์ด์ง์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ๊ฒฝ๋ก๊ฐ ์ ๋๊ฒฝ๋ก๊ฐ ์๋ ์๋๊ฒฝ๋ก๋ผ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์ฐพ์๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Link ์ script ํ๊ทธ์ ์ค์ ๋ ์๋๊ฒฝ๋ก ๋์ source domain ์ผ๋ก ์์ ํด์ ์ฑ๊ณต์ ์ผ๋ก ์๋ณธ ํ์ด์ง์ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์์ต๋๋ค.
React ์์ Next.js ๋ก migration ํ๋ฉด์ ๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ์ฎ๊ฒผ์ ๋, server side ์์ ๋ง๋ HTML ๊ณผ ์ด๊ธฐ ๋ ๋๋ง ์์ React ์์ ์งํํ๋ hydration ๊ณผ์ ์์ render tree๊ฐ ์ผ์นํ์ง ์์์ hydration ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ทธ ์์ธ์ด ์ปดํฌ๋ํธ์ state ๊ฐ ์ด๊ธฐ ๋ ๋๋ง์ด ์๋ฃ๋๊ธฐ ์ ์ DOM ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํด๋น ์ปดํฌ๋ํธ์์ ์ด๊ธฐ ๋ ๋๋ง ์ดํ์ DOM ์ด ๋ณ๊ฒฝ๋ ์ ์๋๋ก useEffect ๋ฅผ ํ์ฉํ์ต๋๋ค.
- ๋ก๊ทธ์ธ ์ํ์ ๊ฐ์ข ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋๊ธฐํํ๊ธฐ ์ํด์ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ๋์ ํ์ํ์ต๋๋ค. ๊ธฐ์กด์ ์ฌ์ฉํด๋ณธ Redux ์ ๋ณด์ผ๋ฌ ํ๋ ์ดํ ๋ณด๋ค ์ข ๋ ๊ฐ๊ฒฐํ ์ฝ๋์ ํด๋ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ ๊ฐํธํ ์ฌ์ฉ์ฑ์ ๊ฐ์ง Recoil์ ๋์ ํ์ต๋๋ค. ํนํ, ์ด๋ฒ ํ๋ก์ ํธ์์๋ Recoil ๋๋ถ์ ์น ํ์ด์ง์ ๋ชจ๋ฌ์ global ์ปดํฌ๋ํธ๋ก ๊ด๋ฆฌํด์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ๋ ๋ช ์์ ์ธ ์ฝ๋๋ก ๋ชจ๋ฌ์ ํ์ฉํ ์ ์์์ต๋๋ค.
- React Query ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ธฐ์กด์ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ๋ ๋๋ง ํ๋ ๋ก๋ฉ๊ณผ ์๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ์กํธ ์ต์ ๊ธฐ๋ฅ์ธ Suspense ์ Error Boundary ๋ก ๋์ฒดํ ์ ์์์ผ๋ฉฐ ์ด๋ฅผ ํตํด ๋ก๋ฉ๊ณผ ์๋ฌ๋ฅผ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค. โ ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ Portal ์ ์ด์ฉํ์ฌ root ๋จ์์ ๋ ๋๋ง ๋๊ธฐ ๋๋ฌธ์ Suspense ์ Error Boundary ๋ฅผ ์ต์๋จ์ผ๋ก ์ฌ๋ ค์ฃผ์ด์ผ ๋ชจ๋ฌ์ ์ ์ฉ์ด ๊ฐ๋ฅํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต์๋จ์๋ง ์ ์ฉํ ๊ฒฝ์ฐ ๋ก๋ฉ ์ ํฌ๊ฒ ๊น๋นก์ด๋ ํ์์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ๋จ์ด์ง๋ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ , ์ด๋ฅผ ํตํด ์ต์๋จ์ Suspense ์ Error Boundary ์ ์ํด ํ์์ ์กด์ฌํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ํฅ์ ๋ฐ๋๋ค๋ ์ฌ์ค๋ฅผ ์ ์ ์์์ต๋๋ค. ๋๋ฌธ์ ์๋ฌ๋ ๋ก๋ฉ์ด ๋ฐ์ํ ์ ์๋ ๋ก์ง์ ๊ทผ์ ํ๊ฒ ์ ์ฉํ๋ ๊ฒ์ด ์ต์ ํ์ ์ ๋ฆฌํ๋ค๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
์๋ณธ ํ์ด์ง๋ฅผ ๊ณต์ ํ ๋์ ์ฌ์ฉ์์ ๊ฒฝํ์ ๋์ผํ๊ฒ ์ ์งํ๊ธฐ ์ํด SSR ํ์ฉ์ด ํ์ํ์
- ํ์ด์ง ๋งํฌ ๊ณต์ ์ ์๋ณธ ํ์ด์ง๋ฅผ ๊ทธ๋๋ก ๊ณต์ ํ ๋์ ๋์ผํ ์ธ๋ค์ผ๊ณผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํ์ โ CSR ๋ก ๋ ๋๋ง ํ ๊ฒฝ์ฐ ๋ถ๊ฐ๋ฅ
- SEO ์ต์ ํ๋ฅผ ์ํด SSR ์ ์ฌ์ฉํ๋ ์น ํ์ด์ง์ ํน์ฑ์ ๊ทธ๋๋ก ์ ์ง
- next/head๋ฅผ ์ด์ฉํ์ฌ meta ํ๊ทธ ๊ด๋ฆฌ์ ์ฉ์ด
๊ธฐ์กด์ Next.js ์ API Routes ๋ฅผ ํ์ฉํด Monolithic ๊ตฌ์กฐ๋ก migration ์ ํ๊ณ ์์ ์ ์งํํ์ง๋ง ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ํ ์ ์ฅ์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์์ ์งํ์ด blocking ๋๋ ์ํฉ์ด ๋ง์์ก์ต๋๋ค. ๋ํ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๋ถ๋ฆฌํ๋ Micro ๊ตฌ์กฐ๊ฐ ์๋น์ค์ Scale-out ์ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํด์ ๊ธฐ์กด์ express endpoint ๋ฅผ ๋ค์ ํ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- ๋ณ๊ฒฝ ์ : ๋ฉ์ธ๊ธฐ๋ฅ์ ๋ฐฑ์๋ ์๋ฒ์ ์์ฒญํ์ฌ ์กฐ์๋ HTML, ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ฐ์ ๊ตฌํ
- ๋ณ๊ฒฝ ํ: ๋ฉ์ธ๊ธฐ๋ฅ์ Migration ์ดํ ํ๋ก ํธ ์๋ฒ์์ ํด๋น ์์ ์ ์งํ
- ES6+
- NextJS
- React Query (Sever state)
- Recoil (Client state)
- Styled Compontents
- Jest
- Node.js
- Express
- Access Token์ ์ด์ฉํ JWT authorization
- MongoDB - Atlas
- Mongoose
- Mocha, Chai
|
|
|
|
|
|
|




