Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

126 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“Š ์›นํ”„๋ ˆ์ž„์›Œํฌ1 ํ”„๋กœ์ ํŠธ - Q+Rate

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Q+Rate๋Š” ์˜จ๋ผ์ธ ์„ค๋ฌธ์กฐ์‚ฌ ํ”Œ๋žซํผ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์†์‰ฝ๊ฒŒ ์„ค๋ฌธ์„ ์ž‘์„ฑํ•˜๊ณ  ๊ณต์œ ํ•˜๋ฉฐ ์‘๋‹ต์„ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. 70๊ฐœ ์ด์ƒ์˜ ํ…œํ”Œ๋ฆฟ๊ณผ ๊ณ ๊ธ‰ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋ˆ„๊ตฌ๋‚˜ ์ „๋ฌธ์ ์ธ ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“ ์„ค๋ฌธ ์ƒ์„ฑ

  • ๋‹ค์–‘ํ•œ ์งˆ๋ฌธ ์œ ํ˜•: ๋ผ๋””์˜ค, ์ฒดํฌ๋ฐ•์Šค, ํ…์ŠคํŠธ ์งˆ๋ฌธ ์ง€์›
  • ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ: ํŠน์ • ์„ ํƒ์ง€์— ๋”ฐ๋ผ ์งˆ๋ฌธ์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ์Šคํ‚ต ๊ทœ์น™ ์„ค์ •
  • ํ•„์ˆ˜/์„ ํƒ ์„ค์ •: ์งˆ๋ฌธ๋ณ„๋กœ ํ•„์ˆ˜ ์—ฌ๋ถ€ ์ง€์ •
  • ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: ํŽธ์ง‘๊ณผ ๋™์‹œ์— ์„ค๋ฌธ ํ™”๋ฉด ํ™•์ธ
  • 70+ ํ…œํ”Œ๋ฆฟ: 13๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ „๋ฌธ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต

๐Ÿ“Š ๊ฒฐ๊ณผ ๋ถ„์„

  • ์ฐจํŠธ ์‹œ๊ฐํ™”: ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„, ์›ํ˜• ๊ทธ๋ž˜ํ”„, ํ†ต๊ณ„ ํ…Œ์ด๋ธ”
  • ํ…์ŠคํŠธ ๋ถ„์„: ์›Œ๋“œํด๋ผ์šฐ๋“œ, ๊ฐ์ • ๋ถ„์„(๊ธ์ •/๋ถ€์ •/์ค‘๋ฆฝ)
  • ์‘๋‹ต ๊ฐœ์š”: ์ด ์‘๋‹ต ์ˆ˜, ์งˆ๋ฌธ๋ณ„ ์ƒ์„ธ ํ†ต๊ณ„

๐Ÿ‘ค ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

  • ๋งˆ์ดํŽ˜์ด์ง€: ํ”„๋กœํ•„ ์ •๋ณด, ํ™œ๋™ ํ†ต๊ณ„
  • ๋‚ด๊ฐ€ ๋งŒ๋“  ์„ค๋ฌธ: ์„ค๋ฌธ ๋ชฉ๋ก, ์‘๋‹ต ํ˜„ํ™ฉ, ๊ฒฐ๊ณผ ๋ณด๊ธฐ
  • ๋‚ด ์‘๋‹ต ๋‚ด์—ญ: ์‘๋‹ตํ•œ ์„ค๋ฌธ ๋ชฉ๋ก ๋ฐ ์ƒ์„ธ ๋ณด๊ธฐ

๐Ÿ”— ์„ค๋ฌธ ๊ณต์œ 

  • ๋งํฌ ๋ณต์‚ฌ: ํด๋ฆฝ๋ณด๋“œ ๊ณต์œ 
  • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ, ๋ฐ์Šคํฌํ†ฑ ์™„๋ฒฝ ๋Œ€์‘

ย 

๐Ÿš€ ์‹คํ–‰ ํ™˜๊ฒฝ

์š”๊ตฌ์‚ฌํ•ญ

  • Node.js: v18 ์ด์ƒ
  • npm: v9 ์ด์ƒ

์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ์˜์กด์„ฑ ์„ค์น˜

npm install

2๏ธโƒฃ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

npm run dev
  • ๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ http://localhost:3000์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ•ซ ๋ฆฌ๋กœ๋“œ ๊ธฐ๋Šฅ์œผ๋กœ ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ

npm run build
  • ์ตœ์ ํ™”๋œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๊ฐ€ out/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์†Œ์Šค๋งต์ด ํฌํ•จ๋˜์–ด ๋””๋ฒ„๊น…์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

npm run preview
  • ๋กœ์ปฌ์—์„œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋œ ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย 

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

src/
โ”œโ”€โ”€ assets/                     # ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค
โ”‚   โ”œโ”€โ”€ default_profile.png     # ๊ธฐ๋ณธ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
โ”‚   โ”œโ”€โ”€ logo.png                # ๋กœ๊ณ 
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ components/                 # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ ScrollToTop.tsx         # ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์Šคํฌ๋กค ์ดˆ๊ธฐํ™”
โ”‚   โ”œโ”€โ”€ feature/                # ๊ณตํ†ต ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ Header.tsx          # ์ „์—ญ ํ—ค๋” (๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ)
โ”‚   โ”‚   โ””โ”€โ”€ PageHeader.tsx      # ํŽ˜์ด์ง€๋ณ„ ํ—ค๋”
โ”‚   โ”œโ”€โ”€ home/                   # ํ™ˆ ํŽ˜์ด์ง€ ์„น์…˜
โ”‚   โ”‚   โ”œโ”€โ”€ HeroSection.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ FeaturesSection.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ TemplateSection.tsx
โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”œโ”€โ”€ mypage/                 # ๋งˆ์ดํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ProfileCard.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ UserInfoForm.tsx
โ”‚   โ”‚   โ””โ”€โ”€ RespondedSurveyList.tsx
โ”‚   โ”œโ”€โ”€ mysurveys/
โ”‚   โ”‚   โ””โ”€โ”€ DeleteConfirmModal.tsx
โ”‚   โ”œโ”€โ”€ results/                # ๊ฒฐ๊ณผ ๋ถ„์„ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ Charts.tsx          # ๋ง‰๋Œ€/์›ํ˜• ์ฐจํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ TextAnalysis.tsx    # ์›Œ๋“œํด๋ผ์šฐ๋“œ, ๊ฐ์ •๋ถ„์„
โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ””โ”€โ”€ survey/                 # ์„ค๋ฌธ ์ž‘์„ฑ/์‘๋‹ต ์ปดํฌ๋„ŒํŠธ
โ”‚       โ”œโ”€โ”€ QuestionEditor.tsx
โ”‚       โ”œโ”€โ”€ SurveyPreview.tsx
โ”‚       โ”œโ”€โ”€ RadioQuestion.tsx
โ”‚       โ”œโ”€โ”€ CheckboxQuestion.tsx
โ”‚       โ”œโ”€โ”€ TextQuestion.tsx
โ”‚       โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ pages/                      # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ NotFound.tsx            # 404 ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ home/page.tsx           # ํ™ˆ (๋žœ๋”ฉ)
โ”‚   โ”œโ”€โ”€ login/page.tsx          # ๋กœ๊ทธ์ธ
โ”‚   โ”œโ”€โ”€ signup/page.tsx         # ํšŒ์›๊ฐ€์ž…
โ”‚   โ”œโ”€โ”€ create/page.tsx         # ์„ค๋ฌธ ์ƒ์„ฑ/ํŽธ์ง‘
โ”‚   โ”œโ”€โ”€ templates/page.tsx      # ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก
โ”‚   โ”œโ”€โ”€ survey/page.tsx         # ์„ค๋ฌธ ์‘๋‹ต
โ”‚   โ”œโ”€โ”€ results/page.tsx        # ์„ค๋ฌธ ๊ฒฐ๊ณผ ๋ถ„์„
โ”‚   โ”œโ”€โ”€ mypage/page.tsx         # ๋งˆ์ดํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ mysurveys/page.tsx      # ๋‚ด๊ฐ€ ๋งŒ๋“  ์„ค๋ฌธ
โ”‚   โ””โ”€โ”€ myresponse/page.tsx     # ๋‚ด ์‘๋‹ต ๋‚ด์—ญ
โ”‚
โ”œโ”€โ”€ router/                     # ๋ผ์šฐํŒ… ์„ค์ •
โ”‚   โ”œโ”€โ”€ config.tsx              # ๋ผ์šฐํŠธ ์ •์˜
โ”‚   โ””โ”€โ”€ index.ts
โ”‚
โ”œโ”€โ”€ types/                      # TypeScript ํƒ€์ž… ์ •์˜
โ”‚   โ””โ”€โ”€ survey.ts               # Survey, Question, Response ํƒ€์ž…
โ”‚
โ”œโ”€โ”€ utils/                      # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”‚   โ”œโ”€โ”€ calculateChartData.ts   # ์ฐจํŠธ ๋ฐ์ดํ„ฐ ๊ณ„์‚ฐ
โ”‚   โ”œโ”€โ”€ calculateSentiment.ts   # ๊ฐ์ • ๋ถ„์„ ๋กœ์ง
โ”‚   โ””โ”€โ”€ generateWordCloud.ts    # ์›Œ๋“œํด๋ผ์šฐ๋“œ ์ƒ์„ฑ
โ”‚
โ”œโ”€โ”€ data/                       # ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ sampleSurveys.ts        # ์ƒ˜ํ”Œ ์„ค๋ฌธ
โ”‚   โ””โ”€โ”€ templateData.ts         # 70+ ํ…œํ”Œ๋ฆฟ (13๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ)
โ”‚
โ”œโ”€โ”€ i18n/                       # ๊ตญ์ œํ™” ์„ค์ • (๋‹ค๊ตญ์–ด ์ง€์› ์ค€๋น„)
โ”‚
โ”œโ”€โ”€ App.tsx                     # ๋ฉ”์ธ ์•ฑ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ main.tsx                    # ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ
โ””โ”€โ”€ index.css                   # ์ „์—ญ ์Šคํƒ€์ผ

ย 

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

ํ•ต์‹ฌ ๊ธฐ์ˆ 

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ๋ฒ„์ „
ํ”„๋ ˆ์ž„์›Œํฌ React 18.3.1
์–ธ์–ด TypeScript 5.8.3
๋นŒ๋“œ ๋„๊ตฌ Vite 7.0.3
๋ผ์šฐํŒ… React Router DOM 7.6.3

UI/์Šคํƒ€์ผ๋ง

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ๋ฒ„์ „
์Šคํƒ€์ผ๋ง Tailwind CSS 3.4.17
์• ๋‹ˆ๋ฉ”์ด์…˜ Framer Motion 12.23.25
์•„์ด์ฝ˜ Lucide React 0.469.0
๋””์ž์ธ ํŒจํ„ด Glassmorphism, Neumorphism -

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ๋ฒ„์ „
์ฐจํŠธ Recharts 3.2.0
์›Œ๋“œํด๋ผ์šฐ๋“œ React D3 Cloud 1.0.6
PDF ๋‚ด๋ณด๋‚ด๊ธฐ jsPDF 3.0.4
ํ™”๋ฉด ์บก์ฒ˜ html2canvas 1.4.1

๊ตญ์ œํ™” & ๊ฐœ๋ฐœ ๋„๊ตฌ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ๋ฒ„์ „
๋‹ค๊ตญ์–ด ์ง€์› i18next, react-i18next 25.3.2 / 15.6.0
์ž๋™ ์ž„ํฌํŠธ unplugin-auto-import 19.3.0
๋ฆฐํŒ… ESLint 9.30.1

์ƒํƒœ ๊ด€๋ฆฌ & ์ €์žฅ์†Œ

  • React Hooks (useState, useEffect, useMemo, useCallback)
  • LocalStorage (์‚ฌ์šฉ์ž ์ •๋ณด, ์„ค๋ฌธ ๋ฐ์ดํ„ฐ, ์‘๋‹ต ๋ฐ์ดํ„ฐ)

ย 

๐Ÿ“š ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1. React & TypeScript

ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

npm install react react-dom
npm install --save-dev @types/react @types/react-dom typescript

2. Vite (๋นŒ๋“œ ๋„๊ตฌ)

๋น ๋ฅธ ๊ฐœ๋ฐœ ์„œ๋ฒ„์™€ ์ตœ์ ํ™”๋œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

npm install --save-dev vite @vitejs/plugin-react-swc

์‚ฌ์šฉ ๋ฐฉ๋ฒ•:

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

# ๋นŒ๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run preview

3. React Router DOM (๋ผ์šฐํŒ…)

ํŽ˜์ด์ง€ ๊ฐ„ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

npm install react-router-dom

4. Tailwind CSS (์Šคํƒ€์ผ๋ง)

์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  CSS ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

npm install --save-dev tailwindcss postcss autoprefixer
npx tailwindcss init -p

5. Framer Motion (์• ๋‹ˆ๋ฉ”์ด์…˜)

๊ณ ๊ธ‰ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

npm install framer-motion

6. Recharts (์ฐจํŠธ)

์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

npm install recharts

7. React D3 Cloud (์›Œ๋“œํด๋ผ์šฐ๋“œ)

ํ…์ŠคํŠธ ์‘๋‹ต์„ ์›Œ๋“œํด๋ผ์šฐ๋“œ๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

npm install react-d3-cloud d3-cloud

8. jsPDF & html2canvas (PDF ๋‚ด๋ณด๋‚ด๊ธฐ)

์„ค๋ฌธ ๊ฒฐ๊ณผ๋ฅผ PDF๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

npm install jspdf html2canvas

9. Lucide React (์•„์ด์ฝ˜)

๋ชจ๋˜ํ•œ ์•„์ด์ฝ˜ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

npm install lucide-react

10. i18next (๋‹ค๊ตญ์–ด ์ง€์›)

๋‹ค๊ตญ์–ด ์ง€์› ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

npm install i18next react-i18next i18next-browser-languagedetector

11. ESLint (์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ)

์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

npm install --save-dev eslint @eslint/js eslint-plugin-react-hooks eslint-plugin-react-refresh typescript-eslint

โ€ป ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•œ ๋ฒˆ์— ์„ค์น˜

ํ”„๋กœ์ ํŠธ ์ตœ์ดˆ ์„ค์ • ์‹œ package.json์ด ์žˆ๋Š” ๊ฒฝ์šฐ:

npm install

์ด ๋ช…๋ น์–ด๋Š” package.json์— ์ •์˜๋œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ย 

๐Ÿ“ ์ฃผ์š” ๊ธฐ๋Šฅ ์„ค๋ช…

1. ์„ค๋ฌธ ์ž‘์„ฑ (/create)

  • ์„ค๋ฌธ ์ œ๋ชฉ ๋ฐ ์„ค๋ช… ์ž…๋ ฅ
  • ์งˆ๋ฌธ ์ถ”๊ฐ€/์‚ญ์ œ/์ˆ˜์ •
    • ๋ผ๋””์˜ค ๋ฒ„ํŠผ (๋‹จ์ผ ์„ ํƒ)
    • ์ฒดํฌ๋ฐ•์Šค (๋‹ค์ค‘ ์„ ํƒ)
    • ํ…์ŠคํŠธ (์ฃผ๊ด€์‹)
  • ํ•„์ˆ˜/์„ ํƒ ์ง€์ •: ์งˆ๋ฌธ๋ณ„ required ํ”Œ๋ž˜๊ทธ
  • ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ (Skip Rules)
    • ํŠน์ • ์„ ํƒ์ง€ ์„ ํƒ ์‹œ ๋‹ค์Œ ์งˆ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
    • ์˜ˆ: "๋งŒ์กฑํ•˜์‹ญ๋‹ˆ๊นŒ?" โ†’ "์•„๋‹ˆ์˜ค" ์„ ํƒ โ†’ ๋ถˆ๋งŒ์กฑ ์ด์œ  ์งˆ๋ฌธ์œผ๋กœ ์ด๋™
  • ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: ํŽธ์ง‘๊ณผ ๋™์‹œ์— ์„ค๋ฌธ ํ™”๋ฉด ํ™•์ธ
  • ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ: 70+ ํ…œํ”Œ๋ฆฟ ์ค‘ ์„ ํƒํ•˜์—ฌ ๋น ๋ฅธ ์‹œ์ž‘

2. ํ…œํ”Œ๋ฆฟ (/templates)

  • 70๊ฐœ ์ด์ƒ์˜ ์ „๋ฌธ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต
  • 13๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ: ๋น„์ฆˆ๋‹ˆ์Šค, ์ด๋ฒคํŠธ, ๋ฆฌ์„œ์น˜, HR, ๊ต์œก, ํ—ฌ์Šค์ผ€์–ด, ์†Œ๋งค/์œ ํ†ต, ์™ธ์‹/์„œ๋น„์Šค, ๊ธฐ์ˆ /IT, ์ปค๋ฎค๋‹ˆํ‹ฐ, ์ •๋ถ€/๊ณต๊ณต, ๊ธˆ์œต/๋ณดํ—˜, ์—ฌํ–‰/์ˆ™๋ฐ•, ESG/์‚ฌํšŒ๊ณตํ—Œ, ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ
  • ์›ํด๋ฆญ ์‚ฌ์šฉ: ํ…œํ”Œ๋ฆฟ ํด๋ฆญ ์‹œ ์„ค๋ฌธ ์ƒ์„ฑ ํŽ˜์ด์ง€๋กœ ์ž๋™ ๋กœ๋“œ

3. ์„ค๋ฌธ ๊ณต์œ  (SurveyShareModal)

  • ๋งํฌ ๋ณต์‚ฌ: ํด๋ฆฝ๋ณด๋“œ์— ์„ค๋ฌธ URL ๋ณต์‚ฌ
  • ์„ค๋ฌธ ์ฝ”๋“œ: ๊ณ ์œ  ID๋กœ ์„ค๋ฌธ ์‹๋ณ„

4. ์„ค๋ฌธ ์‘๋‹ต (/survey/:id)

  • ๋™์  ์งˆ๋ฌธ ์ด๋™: Skip Rules์— ๋”ฐ๋ฅธ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ
  • ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ: ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œ
  • ํ•„์ˆ˜ ์งˆ๋ฌธ ๊ฒ€์ฆ: ํ•„์ˆ˜ ์งˆ๋ฌธ ๋ฏธ์‘๋‹ต ์‹œ ๋‹ค์Œ์œผ๋กœ ์ด๋™ ๋ถˆ๊ฐ€
  • ์ด์ „ ๋ฒ„ํŠผ: ๊ฑด๋„ˆ๋›ด ์งˆ๋ฌธ ํฌํ•จ ์ •ํ™•ํ•œ ์—ญ์ถ”์ 
  • ์‘๋‹ต ์ €์žฅ: LocalStorage์— ์‹ค์‹œ๊ฐ„ ์ €์žฅ
  • ์™„๋ฃŒ ํ™”๋ฉด: ์ œ์ถœ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ๋ฐ ๊ฒฐ๊ณผ ๋ณด๊ธฐ ๋งํฌ

5. ๊ฒฐ๊ณผ ๋ถ„์„ (/results/:id)

๊ฐ๊ด€์‹ ์งˆ๋ฌธ (๋ผ๋””์˜ค, ์ฒดํฌ๋ฐ•์Šค)

  • ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ (BarChart)
  • ์›ํ˜• ๊ทธ๋ž˜ํ”„ (PieChart)
  • ์ƒ์„ธ ํ†ต๊ณ„ (Statistics)
    • ์„ ํƒ์ง€๋ณ„ ์‘๋‹ต ์ˆ˜, ๋น„์œจ, ํผ์„ผํŠธ

์ฃผ๊ด€์‹ ์งˆ๋ฌธ (ํ…์ŠคํŠธ)

  • ์›Œ๋“œํด๋ผ์šฐ๋“œ (generateWordCloud)
    • ๋‹จ์–ด ๋นˆ๋„ ์‹œ๊ฐํ™”
  • ๊ฐ์ • ๋ถ„์„ (calculateSentiment)
    • ๊ธ์ •/๋ถ€์ •/์ค‘๋ฆฝ ๋น„์œจ ๋ถ„์„
    • ํ•œ๊ตญ์–ด ๊ฐ์ • ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜
  • ์ตœ๊ทผ ์‘๋‹ต: ์ตœ์‹  ์‘๋‹ต 5๊ฐœ ํ‘œ์‹œ

์‘๋‹ต ๊ฐœ์š”

  • ์ด ์‘๋‹ต ์ˆ˜
  • ์งˆ๋ฌธ๋ณ„ ์ƒ์„ธ ํ†ต๊ณ„
  • ์‘๋‹ต ์‹œ๊ฐ„ ์ •๋ณด

6. ๋งˆ์ดํŽ˜์ด์ง€ (/mypage)

  • ํ”„๋กœํ•„ ์ •๋ณด: ์ด๋ฆ„, ์ด๋ฉ”์ผ, ๊ฐ€์ž…์ผ
  • ํ™œ๋™ ํ†ต๊ณ„: ์‘๋‹ตํ•œ ์„ค๋ฌธ ์ˆ˜, ์ƒ์„ฑํ•œ ์„ค๋ฌธ ์ˆ˜
  • ์ •๋ณด ์ˆ˜์ •: ์ด๋ฆ„, ์„ฑ๋ณ„, ์—ฐ๋ น๋Œ€ ์ˆ˜์ •
  • ์‘๋‹ต ๋‚ด์—ญ: ๋‚ด๊ฐ€ ์‘๋‹ตํ•œ ์„ค๋ฌธ ๋ชฉ๋ก ๋ฐ ์ƒ์„ธ๋ณด๊ธฐ

7. ๋‚ด๊ฐ€ ๋งŒ๋“  ์„ค๋ฌธ (/mysurveys)

  • ์„ค๋ฌธ ๋ชฉ๋ก: ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ์„ค๋ฌธ๋งŒ ํ‘œ์‹œ
  • ์‘๋‹ต ํ˜„ํ™ฉ: ๊ฐ ์„ค๋ฌธ์˜ ์‘๋‹ต ์ˆ˜
  • ์„ค๋ฌธ ๊ด€๋ฆฌ
    • ์„ค๋ฌธ ์—ด๊ธฐ: ์„ค๋ฌธ ์‘๋‹ต ํŽ˜์ด์ง€๋กœ ์ด๋™
    • ๊ฒฐ๊ณผ ๋ณด๊ธฐ: ์„ค๋ฌธ ๊ฒฐ๊ณผ ๋ถ„์„ ํŽ˜์ด์ง€๋กœ ์ด๋™
    • ์„ค๋ฌธ ์‚ญ์ œ: ํ™•์ธ ๋ชจ๋‹ฌ ํ›„ ์‚ญ์ œ

8. ๋‚ด ์‘๋‹ต ๋‚ด์—ญ (/myresponse/:id)

  • ์‘๋‹ต ์ƒ์„ธ ๋ณด๊ธฐ: ๋‚ด๊ฐ€ ์‘๋‹ตํ•œ ์„ค๋ฌธ์˜ ์ƒ์„ธ ๋‚ด์šฉ
  • ์งˆ๋ฌธ๋ณ„ ๋‹ต๋ณ€: ๊ฐ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‚˜์˜ ์‘๋‹ต ํ™•์ธ

ย 

๐Ÿš€ ๋ฐฐํฌ

Netlify ๋ฐฐํฌ ์„ค์ •

์ด ํ”„๋กœ์ ํŠธ๋Š” Netlify์— ์ž๋™ ๋ฐฐํฌ๋˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ์„ค์ •

  • ๋นŒ๋“œ ๋ช…๋ น: npm run build
  • ๋ฐฐํฌ ๋””๋ ‰ํ† ๋ฆฌ: out/
  • Node ๋ฒ„์ „: 18 ์ด์ƒ
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜: BASE_PATH (์„œ๋ธŒ ๊ฒฝ๋กœ ๋ฐฐํฌ ์‹œ)

๋กœ์ปฌ์—์„œ ๋ฐฐํฌ ํ…Œ์ŠคํŠธ

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

# ๋นŒ๋“œ ๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run preview

ย 

๐Ÿ“Š ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

LocalStorage ํ‚ค

ํ”„๋กœ์ ํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ LocalStorage๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค ์„ค๋ช… ํ˜•์‹
userInfo ์‚ฌ์šฉ์ž ์ •๋ณด Array<User>
accessToken ๋กœ๊ทธ์ธ ํ† ํฐ string
surveys ์ „์ฒด ์„ค๋ฌธ ๋ชฉ๋ก Array<Survey>
survey_{id} ๊ฐœ๋ณ„ ์„ค๋ฌธ ๋ฐ์ดํ„ฐ Survey
responses_{id} ์„ค๋ฌธ๋ณ„ ์‘๋‹ต ๋ฐ์ดํ„ฐ Array<Response>
myResponses ๋‚ด ์‘๋‹ต ๋ชฉ๋ก Array<MyResponse>

์ฃผ์š” ํƒ€์ž… ์ •์˜ (types/survey.ts)

interface Survey {
  id: string
  title: string
  description?: string
  questions: Question[]
  creatorId: string
  createdAt: string
}

interface Question {
  id: string
  type: 'radio' | 'checkbox' | 'text'
  question: string
  options?: string[]
  required: boolean
  skipRules?: SkipRule[]
}

interface SkipRule {
  optionIndex: number
  skipToQuestionId: string
}

ย 

๐ŸŽจ ๋””์ž์ธ ์‹œ์Šคํ…œ

์ƒ‰์ƒ ํŒ”๋ ˆํŠธ

  • Primary: Violet-Purple-Fuchsia Gradient
  • Background: White with Glassmorphism effect
  • Text: Gray scale (900, 700, 600, 500)
  • Accent: Blue, Green, Red for status

ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ

  • ํ•œ๊ธ€: Pretendard
  • ์˜๋ฌธ: Poppins
  • ๋กœ๊ณ : Pacifico

๋ฐ˜์‘ํ˜• ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ

  • Mobile: < 640px
  • Tablet: 640px - 1024px
  • Desktop: โ‰ฅ 1024px

ย 

๐Ÿ”„ ๋ผ์šฐํŒ…

๊ฒฝ๋กœ ์ปดํฌ๋„ŒํŠธ ์„ค๋ช…
/ HomePage ๋žœ๋”ฉ ํŽ˜์ด์ง€
/login LoginPage ๋กœ๊ทธ์ธ
/signup SignupPage ํšŒ์›๊ฐ€์ž…
/create CreatePage ์„ค๋ฌธ ์ƒ์„ฑ/ํŽธ์ง‘
/templates TemplatesPage ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก
/survey/:id SurveyPage ์„ค๋ฌธ ์‘๋‹ต
/results/:id ResultsPage ์„ค๋ฌธ ๊ฒฐ๊ณผ
/mypage MyPage ๋งˆ์ดํŽ˜์ด์ง€
/mysurveys MySurveysPage ๋‚ด๊ฐ€ ๋งŒ๋“  ์„ค๋ฌธ
/myresponse/:id MyResponsePage ๋‚ด ์‘๋‹ต ์ƒ์„ธ
* NotFound 404 ํŽ˜์ด์ง€

ย 

๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ

npm start๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  1. ์บ์‹œ ์ดˆ๊ธฐํ™”

    npm cache clean --force
    rm -rf node_modules package-lock.json
    npm install
    npm start
  2. ํฌํŠธ ์ถฉ๋Œ ํ™•์ธ

    • ๊ธฐ๋ณธ ํฌํŠธ 5173์ด ์‚ฌ์šฉ ์ค‘์ด๋ฉด Vite๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ์ฝ˜์†” ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ์‹ค์ œ ์‹คํ–‰ ์ค‘์ธ ํฌํŠธ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ชจ๋“ˆ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ

npm install
  • ์ตœ์‹  ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ

npm run build
  • ๋นŒ๋“œ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ์ดˆ๊ธฐํ™”

  • ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ (F12) โ†’ Application โ†’ Local Storage โ†’ Clear All
  • ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์ „์ฒด ์‚ญ์ œ ย 

๐Ÿ“ง ๋ฌธ์˜

ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ๋ฌธ์˜์‚ฌํ•ญ์€ ์ด์Šˆ๋ฅผ ํ†ตํ•ด ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages