Node.js λ°±μ—”λ“œμ™€ React ν”„λ‘ νŠΈμ—”λ“œλ‘œ μž‘μ„±λœ λΈ”λ‘œκΉ… μ„œλΉ„μŠ€ μ•±μž…λ‹ˆλ‹€.

기술 μŠ€νƒ Technology stack

Node.js

Express

ExpressλŠ” Node.jsμ—μ„œ μ‚¬μš©λ˜λŠ” μ›Ή μ‘μš©ν”„λ‘œκ·Έλž¨ μž‘μ„±μ„ μœ„ν•œ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ 데이터λ₯Ό μš”μ²­ν•  APIλ₯Ό μ œκ³΅ν•˜λŠ” 웹앱이 μž‘μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Passport

PassportλŠ” Node.jsμ—μ„œ μ‚¬μš©λ˜λŠ” 인증 ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ •μ˜λœ λͺ¨λΈμ„ μ‚¬μš©ν•˜λŠ” 둜컬 인증을 μ‚¬μš©ν•©λ‹ˆλ‹€.

Sequelize

SequelizeλŠ” ν”„λ‘œλ―ΈμŠ€ 기반의 Node.js ORM Object-relational mapping μž…λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈμ˜ λ°μ΄ν„°λ² μ΄μŠ€κ΄€λ¦¬μ‹œμŠ€ν…œ DBMS은 MariaDBλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

React

ReactλŠ” νŽ˜μ΄μŠ€λΆμ—μ„œ μ˜€ν”ˆμ†ŒμŠ€λ‘œ κ°œλ°œμ„ 진행쀑인 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ UI, User Interface μž‘μ„±μ„ μœ„ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” κ°€λŠ₯ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό 클래슀λ₯Ό μ„ μ–Έν•˜μ§€ μ•Šκ³  ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλ§ŒμœΌλ‘œ μž‘μ„±ν•˜κ³ , ν›… Hook으둜 μƒνƒœ State관리 및 React κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.

Next.js

Next.jsλŠ” React λ₯Ό μ‚¬μš©ν•΄μ„œ μ‹±κΈ€ νŽ˜μ΄μ§€ μ‘μš©ν”„λ‘œκ·Έλž¨ SPA Single Page Application 을 μž‘μ„±ν•˜κ³ , κ²€μƒ‰μ—”μ§„μ΅œμ ν™” SEO Search Engine Optimaizaion을 μœ„ν•΄ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ SSR Server Side Renderingκ³Ό 파일 μ‹œμŠ€ν…œ 기반 λΌμš°νŒ…, μžλ™ μ½”λ“œ μŠ€ν”Œλ¦ΏνŒ… λ“± λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•΄μ£ΌλŠ” ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.

React Redux

React ReduxλŠ” Redux μ €μž₯μ†Œμ˜ 데이터λ₯Ό 읽고, μ €μž₯μ†Œμ˜ μž‘μ—…μ„ 보내 데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” ν˜•μ‹μœΌλ‘œ μƒνƒœλ₯Ό 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

React Hook을 μ§€μ›ν•΄μ„œ (useSelector, useDispatch) ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ λ¬Έμ œμ—†μ΄ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Redux-Saga

Redux-Saga둜 Redux μž‘μ—…μ„ λΉ„λ™κΈ°λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

μ œλ„ˆλ ˆμ΄ν„° Generator둜 비동기 처리λ₯Ό κ΅¬ν˜„ν•œ 것이 맀우 ν₯λ―Έλ‘­μŠ΅λ‹ˆλ‹€.

styled components

styled-componentsλŠ” μ»΄ν¬λ„ŒνŠΈ μž‘μ„± λ•Œ 인라인 μŠ€νƒ€μΌλ‘œ μ μš©ν•˜λ©΄ μ½”λ“œ 가독성이 λ‚˜λΉ μ§€κ³ , μ†μ„±μ˜ 이름을 css와 λ‹€λ₯΄κ²Œ μž‘μ„±ν•΄μ•Όν•˜λŠ” 점을 ν•΄κ²°ν•΄ μ€λ‹ˆλ‹€.

μ»΄ν¬λ„ŒνŠΈ μ½”λ“œ νŒŒμΌμ— 인라인 μŠ€νƒ€μΌμ„ μ μš©ν•  수 밖에 없을 λ•Œμ— μ‚¬μš©ν•©λ‹ˆλ‹€.

Ant Design

React 둜 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•œ μ»΄ν¬λ„ŒνŠΈ μž‘μ„±μ‹œ μ–΄λ–»κ²Œ 보여쀄 것인가λ₯Ό μƒκ°ν•˜λŠ” 것은 생각보닀 μ‹œκ°„μ΄ 많이 κ±Έλ¦½λ‹ˆλ‹€.

μž‘μ€ ν”„λ‘œμ νŠΈλ₯Ό 혼자 진행할 λ•Œμ—λŠ” λ”μš± μ‹œκ°„μ΄ 많이 κ±Έλ¦½λ‹ˆλ‹€. 이럴 λ•Œ μ „λ¬Έκ°€μ˜ 도움을 λ°›μœΌλ©΄ μ‹œκ°„μ„ 많이 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ „λ°˜μ μœΌλ‘œ Ant Design νŒ€μ˜ λ””μžμΈ κ°€μ΄λ“œ 라인을 λ”°λ₯΄λ©° μ»΄ν¬λ„ŒνŠΈ λ””μžμΈμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

Docker

μ‘μš©ν”„λ‘œκ·Έλž¨μ„ κ²Œμ‹œν•˜κΈ° μœ„ν•΄μ„œ 도컀 이미지λ₯Ό μž‘μ„±ν•˜κ³ , 개인적으둜 μ‚¬μš©μ€‘μΈ μ‹œλ†€λ‘œμ§€ λ””μŠ€ν¬ μŠ€ν…Œμ΄μ…˜μ—μ„œ 도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

데λͺ¨ μ‚¬μ΄νŠΈμ—μ„œ λ™μž‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

001

회고

μ•½ ν•œλ‹¬κ°„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° React에 재미λ₯Ό λΆ™μ˜€μŠ΅λ‹ˆλ‹€.

μ˜μ‘΄μ„±μœΌλ‘œ μΆ”κ°€λ˜μ–΄ μ‚¬μš©μ€‘μΈ νŒ¨ν‚€μ§€λŠ” λŒ€λΆ€λΆ„ μ‚¬μš© 방법에 λŒ€ν•œ λ¬Έμ„œκ°€ 잘 μ œκ³΅λ˜μ–΄ 큰 λ¬Έμ œμ—†μ΄ μ§„ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ·Έ 쀑 κ°€μž₯ μ‹œκ°„μ΄ 많이 걸렸던 뢀뢄은 Next.js ꡬ성에 ν¬ν•¨λœ Webpack 에 λŒ€ν•œ λΆ€λΆ„μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ‹œκ°„μ΄ 많이 걸리며 ꡬ성을 λ³€κ²½ν•˜κ³ , 확인을 μ§„ν–‰ν•˜λ‹€ λ³΄λ‹ˆ λŒ€λΆ€λΆ„ Next.js μ—μ„œ κΈ°λ³Έκ°’μœΌλ‘œ ꡬ성해 놓은 κ²ƒλ“€μ΄μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ, 거의 ꡬ성 μ½”λ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

ORM 으둜 μ‚¬μš©λœ SequelizeλŠ” κΈ°λŠ₯을 λ„ˆλ¬΄ 많이 μ œκ³΅ν•΄μ„œ μ–΄λ ΅κ²Œ λŠκ»΄μ§€λŠ” 뢀뢄이 λ§Žμ•˜μŠ΅λ‹ˆλ‹€.

next.jsλŠ” μ•„μ£Ό νŽΈλ¦¬ν•œ ν”„λ ˆμž„μ›Œν¬λ‘œ μƒκ°λ©λ‹ˆλ‹€. 그리고, 정적 파일 생성 κΈ°λŠ₯을 제곡(next export)ν•΄μ„œ κ°„λ‹¨ν•œ νŽ˜μ΄μ§€ μž‘μ„±μ‹œ 자주 μ‚¬μš©ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

μ½”λ“œλŠ” GitHubμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.