Skip to content

jaywai-lee/OpenMind

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

130 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Image

✏️ FE 21κΈ° 기초 ν”„λ‘œμ νŠΈ : OpenMind

  • 일정 : 2025. 12. 16 ~ 2026. 1. 3
    12μ›” 31일~1μ›” 2일(λ²„κ·Έμˆ˜μ •, λ¦¬νŒ©ν† λ§, README정리, μ‹œμ—°μ˜μƒ λ§Œλ“€κΈ°, 배포)
  • νŒ€λͺ… : FE 21κΈ° Part2 1νŒ€
  • 배포 URL : vercel -

πŸ’» ν”„λ‘œμ νŠΈ μ†Œκ°œ

  • ν”„λ‘œμ νŠΈλͺ… : OpenMind
  • ν”„λ‘œμ νŠΈ μ†Œκ°œ : 질문과 닡변을 톡해 λ§ˆμŒμ„ μ—΄κ³  λŒ€ν™” λ‚˜λˆ„λŠ” μ†Œν†΅ ν”Œλž«νΌμΈ 'μ˜€ν”ˆλ§ˆμΈλ“œ'
    자유둭게 μ§ˆλ¬Έμ„ μƒμ„±ν•˜κ³  λ‹΅λ³€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.β€‚λ˜ν•œ 링크λ₯Ό ν†΅ν•΄μ„œ 질문과 닡변을 κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œμ νŠΈ 기획 μš”κ΅¬μ‚¬ν•­
    λ””μžμΈ μ‹œμ•ˆ: μ˜€ν”ˆλ§ˆμΈλ“œ ν”Όκ·Έλ§ˆ
    Swagger λ¬Έμ„œ : https://openmind-api.vercel.app/docs/
    API λͺ…μ„Έμ„œ : μ˜€ν”ˆλ§ˆμΈλ“œ API λͺ…μ„Έ

🎯 ν”„λ‘œμ νŠΈ λͺ©ν‘œ

이번 기초 ν”„λ‘œμ νŠΈλŠ” νŒ€μ› λͺ¨λ‘κ°€ 처음으둜 μ§„ν–‰ν•˜λŠ” ν”„λ‘œμ νŠΈμΈ 만큼, μ™„λ²½ν•œ κ²°κ³Όλ¬Όλ³΄λ‹€λŠ” ν”„λ‘œμ νŠΈλ₯Ό λκΉŒμ§€ μ™„μ£Όν•˜λ©° 개발의 전체적인 흐름을 μ΄ν•΄ν•˜λŠ” κ²½ν—˜μ„ 1차적인 λͺ©ν‘œλ‘œ μ‚Όμ•˜μŠ΅λ‹ˆλ‹€.

저희 νŒ€μ€ μ œν•œλœ 일정 μ•ˆμ—μ„œ 각자의 μ—­λŸ‰μ„ κ³ λ €ν•΄ 역할을 λΆ„λ‹΄ν•˜κ³ , 각자 맑은 뢀뢄에 μ±…μž„κ°μ„ κ°€μ§€κ³  λκΉŒμ§€ μ™„μ„±ν•˜λŠ” 과정을 μ€‘μš”ν•˜κ²Œ μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. λ‹¨μˆœνžˆ κΈ°λŠ₯ κ΅¬ν˜„μ— κ·ΈμΉ˜μ§€ μ•Šκ³ , 본인이 λ‹΄λ‹Ήν•œ μž‘μ—…μ— λŒ€ν•΄ μ™œ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆλŠ”μ§€ 슀슀둜 μ„€λͺ…ν•  수 μžˆμ„ μ •λ„μ˜ 이해λ₯Ό λͺ©ν‘œλ‘œ μ°¨κ·Όμ°¨κ·Ό ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜κ³ μž ν•©λ‹ˆλ‹€.

이λ₯Ό 톡해 ν˜‘μ—… κ³Όμ •, 개발 흐름, 그리고 결과물에 λŒ€ν•œ μ±…μž„κ°μ„ ν•¨κ»˜ κ²½ν—˜ν•˜λŠ” 것을 λ³Έ ν”„λ‘œμ νŠΈμ˜ 핡심 κ°€μΉ˜λ‘œ μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.


πŸ—“οΈ 개발 일정

  • 25λ…„ 12μ›” 16일: R&R λΆ„λ°° ν›„ μž‘μ—…μ‹œμž‘
  • 25λ…„ 12μ›” 19일: 1μ°¨ 쀑간 점검
  • 25λ…„ 12μ›” 24일: 2μ°¨ 쀑간 점검
  • ~12μ›” 30일: μ΅œμ’… ν…ŒμŠ€νŠΈ, λ¦¬νŽ™ν† λ§, λ²„κ·Έμˆ˜μ •, README정리, μ‹œμ—°μ˜μƒμ œμž‘, 배포
  • 1μ›” 2일: λ°œν‘œ
  • ν”„λ‘œμ νŠΈμ’…λ£Œ: 1μ›” 3일 μžμ •κΉŒμ§€

πŸ›  μ‚¬μš©λœ 기술 μŠ€νƒ 및 도ꡬ

  • ν”„λ ˆμž„μ›Œν¬: React (Vite)
  • μƒνƒœ 관리: useState, Context API
  • μŠ€νƒ€μΌλ§: CSS Module (module.css)
  • 데이터 톡신: Axios (μ™ΈλΆ€ 라이브러리 1개 μ‚¬μš©)
  • λΌμš°νŒ…: React Router
  • 개발 및 버전 관리: VS Code, Git / GitHub
  • λΉŒλ“œ 및 배포: NPM, Vercel
  • ν˜‘μ—…: Git / GitHub, Discord, Google Docs
  • 기술 μŠ€νƒ 선택 이유: λ³Έ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‹€μ–‘ν•œ μ™ΈλΆ€ 라이브러리λ₯Ό 적극적으둜 ν™œμš©ν•˜κΈ°λ³΄λ‹€λŠ”, 라이브러리λ₯Ό
    μ‚¬μš©ν•˜κΈ° 이전에 기본적인 κ°œλ…κ³Ό λ™μž‘ 원리λ₯Ό 직접 μ΄ν•΄ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ 기술 μŠ€νƒμ„ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
    특히 μƒνƒœ 관리와 λΌμš°νŒ…κ³Ό 같은 핡심 κΈ°λŠ₯에 λŒ€ν•΄ λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–€ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ  수 μžˆλŠ”μ§€λ₯Ό μ΄ν•΄ν•˜κ³ 
    μ„€λͺ…ν•  수 μžˆλŠ” μˆ˜μ€€μ— λ„λ‹¬ν•˜λŠ” 것을 μ€‘μš”ν•˜κ²Œ μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.
    이λ₯Ό 톡해 각 기술이 ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ μ–΄λ–€ 역할을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ „λ°˜μ μΈ ꡬ쑰와 흐름을 νŒŒμ•…ν•˜λŠ” κ²½ν—˜μ„
    λͺ©ν‘œλ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ‘₯ νŒ€μ› μ†Œκ°œ 및 μ—­ν• 

κΉ€μš©ν˜„

@mukiiru

⭐ 파일 ꡬ쑰 및 μŠ€νƒ€μΌ μ„ΈνŒ…
⭐ 메인 νŽ˜μ΄μ§€
⭐ μ§ˆλ¬Έν•˜κΈ° λͺ¨λ‹¬
⭐ 곡톡 μ»΄ν¬λ„ŒνŠΈ λ§Œλ“€κΈ°

μ΄μ •μš©

@jaywai-lee

⭐ κΉƒ 초기 μ„ΈνŒ…
⭐ PRκΆŒν•œ
⭐ λ””μŠ€μ½”λ“œ μ—°κ²°
⭐ κ°œλ³„ ν”Όλ“œ νŽ˜μ΄μ§€

μœ μ§€νš¨

@jihyoyoo

⭐ λ¬Έμ„œμž‘μ—…
⭐ λ‹΅λ³€ν•˜κΈ° νŽ˜μ΄μ§€

이해인

@leehi9558

⭐ README μž‘μ—…
⭐ 질문 λͺ©λ‘ νŽ˜μ΄μ§€

πŸ“’ νŒ€ κ·œμΉ™

  • 4μ‹œκ°„ λ™μ•ˆ ν•΄κ²°λ˜μ§€ μ•Šμ€ λ¬Έμ œλŠ” κ³΅μœ ν•˜κΈ°
  • νŒ€νšŒμ˜ μ‹œκ°„μ— ν•©μ˜λœκ²ƒλ§Œ μž‘μ—…ν•˜κΈ° (ν•„μš”ν•˜λ‹€λ©΄ νŒ€νšŒμ˜ μš”μ²­)
  • μ½”μ–΄μ‹œκ°„(ν•„μˆ˜ μƒμ£Όμ‹œκ°„) : 1μ‹œ~5μ‹œ
  • μ½”μ–΄μ‹œκ°„ 외에 ν•„μš”ν•œ κ²½μš°μ—λŠ” κΈ΄κΈ‰ 회의 μ—΄κΈ°
  • ν•©μ˜λ˜μ—ˆμ„ κ²½μš°μ—λ§Œ κΈ°μˆ μŠ€νƒ λ³€κ²½ κ°€λŠ₯
  • 맀일 mergeν•˜κΈ°

πŸ’‘ κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­

νŽ˜μ΄μ§€ ꡬ성

  • 메인 νŽ˜μ΄μ§€ (/)
  • 질문 λͺ©λ‘ νŽ˜μ΄μ§€ (/list)
  • κ°œλ³„ ν”Όλ“œ νŽ˜μ΄μ§€ (/post/{id})
  • λ‹΅λ³€ν•˜κΈ° νŽ˜μ΄μ§€ (/post/{id}/answer)

핡심 κΈ°λŠ₯

  • 질문 λͺ©λ‘ 쑰회
  • κ°œλ³„ 질문 상세 쑰회
  • 질문 μž‘μ„±
  • λ‹΅λ³€ μž‘μ„±
  • μΉ΄μΉ΄μ˜€ν†‘ / 페이슀뢁 곡유 API 연동


πŸ“ 폴더 ꡬ쑰

21-1/OpenMind
  β”œβ”€β”€ src
  β”‚    β”œβ”€β”€ api
  β”‚    β”œβ”€β”€ components
  β”‚    β”‚     └── common
  β”‚    β”œβ”€β”€ contents # νŠΉμ • νŽ˜μ΄μ§€ μ „μš©
  β”‚    β”œβ”€β”€ contexts
  β”‚    β”œβ”€β”€ hooks
  β”‚    β”œβ”€β”€ pages
  β”‚    β”œβ”€β”€ styles # 컬러 / 폰트 / κ³΅ν†΅μŠ€νƒ€μΌ λ“±
  β”‚    β”œβ”€β”€ utils
  β”œβ”€β”€ public
  β”‚    └── assets
  β”‚          β”œβ”€β”€ icons # νŒŒλΉ„μ½˜ λ“±
  β”‚          └── images # 이미지
  └── README.md

API 섀계

  • API 톡신 방식: REST API
  • μ˜ˆμ‹œ:
    • GET /list : 리슀트 λͺ©λ‘ 쑰회
    • POST /list : 리슀트 생성

✨ κΉƒ 컀밋 μ»¨λ²€μ…˜ & Branch μ „λž΅

컀밋 μ»¨λ²€μ…˜ (Gitmoji 기반)

μ•„μ΄μ½˜ νƒ€μž… μ„€λͺ… λͺ©μ 
✨ Feature μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€ Introduce new features
πŸ› Fix 버그 μˆ˜μ • Fix a bug
πŸ“ Docs λ¬Έμ„œ μΆ”κ°€ / μ—…λ°μ΄νŠΈ Add or update documentation
♻️ Refactor λ¦¬νŽ™ν† λ§ Refactor code
πŸš‘οΈ Hotfix κΈ΄κΈ‰μˆ˜μ • Critical hotfix
// 컀밋 λ©”μ„Έμ§€ μ˜ˆμ‹œ
// [κΉƒλͺ¨μ§€][νƒ€μž…]: [μ„€λͺ…]
// νƒ€μž…μ€ μ†Œλ¬Έμžλ‘œ μ‹œμž‘,
// νƒ€μž…: μž‘μ„± ν›„ ν•œμΉΈ λ„μš°κ³  μ„€λͺ… μž‘μ„±ν•˜κΈ°

// μ˜ˆμ‹œ
✨ feat: 헀더 λ„€λΉ„κ²Œμ΄μ…˜ UI κ΅¬ν˜„
πŸ› fix: 타이머 μ’…λ£Œ μ‹œ alertκ°€ 두 번 λœ¨λŠ” 문제 μˆ˜μ •
πŸ”₯ remove: .DS_Store 파일 μ‚­μ œ

Branch μ „λž΅ - GitHub Flow

  • main
    • feature/*,
  • mainβ€‚λΈŒλžœμΉ˜ 1개 μœ μ§€
  • κΈ°λŠ₯ λ‹¨μœ„ featureβ€‚λΈŒλžœμΉ˜ 생성 ν›„ PR 병합
  • λ°˜λ“œμ‹œ conflictκ°€ λ‚˜λ©΄ νŒ€μ›λ“€κ³Ό 곡유 ν›„ ν•΄κ²°(κ°„λ‹¨ν•œ 건 혼자 ν•΄κ²°)
  • PR merge: merge and squash 방식, 1인 이상 approveλ˜μ–΄μ•Ό merge κ°€λŠ₯
> μƒˆλ‘œμš΄ μž‘μ—… μ‹œμž‘ν•  λ•Œ
git checkout main
git pull origin main
git checkout -b feature/κΈ°λŠ₯_이름

> 파일 컀밋할 λ•Œ
git add .
git commit -m "κΈ°λŠ₯ μΆ”κ°€: μ„€λͺ…"

> μž‘μ—… 도쀑 main λΈŒλŸ°μΉ˜μ— λ‹€λ₯Έ νŒ€μ›μ˜ 변경사항이 λ³‘ν•©λ˜μ—ˆλ‹€λ©΄
git checkout main
git pull origin main
git checkout feature/κΈ°λŠ₯_이름
git merge main

> μž‘μ—… λλ‚˜κ³  λ ˆν¬μ§€ν† λ¦¬μ— 올릴 λ•Œ
git checkout main
git pull origin main
git checkout feature/κΈ°λŠ₯_이름
git merge main
git push origin feature/κΈ°λŠ₯_이름

μ»¨λ²€μ…˜ 및 도ꡬ μ„€μ •

✨ μ½”λ“œ μ»¨λ²€μ…˜

μ•žμ€ νŠΉμ •λŒ€μƒ, λ’€λŠ” κΈ°λŠ₯으둜 넀이밍

  1. 넀이밍 κ·œμΉ™
  • κΈ°λ³Έ 넀이밍: camelCase
  • μ»΄ν¬λ„ŒνŠΈλͺ…: PascalCase, λ‹¨μˆœν•œ λͺ…사 μ‚¬μš© (Search, Header, Login λ“±)
  • ν•¨μˆ˜/λ³€μˆ˜λͺ…: μ•žμ€ λŒ€μƒ, λ’€λŠ” κΈ°λŠ₯ (예: selectSort, fetchQuestionList)
  • 이벀트 ν•Έλ“€λŸ¬λͺ…: handleSubmit ν˜•νƒœ
  • 넀이밍 길이: μ΅œλŒ€ 25자 λ‚΄μ—μ„œ 의미λ₯Ό ν’€μ–΄μ„œ μž‘μ„±
  • 파일λͺ…: λŒ€μƒ + κΈ°λŠ₯ ν˜•νƒœλ‘œ μž‘μ„± (예: questionList.jsx )
  1. μ‹λ³„μž κ·œμΉ™
  • λ‹¨μˆ˜ν˜• 데이터: (예: item )
  • λ°°μ—΄: λ³΅μˆ˜ν˜• (예: items )
  • 객체: λͺ…μ‚¬ν˜• μ‚¬μš© (예: selectedItem)
  • Boolean κ°’: is~, has~ μ‚¬μš© (예: isLoading, hasError)
  1. μ½”λ“œ μž‘μ„± κ·œμΉ™
  • λΆˆν•„μš”ν•œ Fragment μ‚¬μš© μ§€μ–‘
  • 주석은 ν•„μš”ν•œ κ²½μš°μ—λ§Œ μž‘μ„±

ν¬λ§€νŒ… / 린트

  • Prettier + ESLint μ‚¬μš©
  • λ“€μ—¬μ“°κΈ°: 곡백 2μΉΈ


Prettier μ„€μ •

{
  "singleQuote": true,
  "semi": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 80
}


EsLint μ„€μ •

import js from '@eslint/js';
import globals from 'globals';
import reactHooks from 'eslint-plugin-react-hooks';
import reactRefresh from 'eslint-plugin-react-refresh';
import { defineConfig, globalIgnores } from 'eslint/config';
import prettierConfig from 'eslint-config-prettier';
import prettierPlugin from 'eslint-plugin-prettier';

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{js,jsx}'],
    extends: [
      js.configs.recommended,
      reactHooks.configs.flat.recommended,
      reactRefresh.configs.vite,
    ],
    plugins: { prettier: prettierPlugin },
    languageOptions: {
      ecmaVersion: 2020,
      globals: globals.browser,
      parserOptions: {
        ecmaVersion: 'latest',
        ecmaFeatures: { jsx: true },
        sourceType: 'module',
      },
    },
    rules: {
      'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
      'prettier/prettier': 'error',
    },
  },
  prettierConfig,
]);

πŸ’‘ Jira κ°€μ΄λ“œ

1. feature λ§Œλ“€κΈ°

  • λ³΄λ“œλ‚˜ λͺ©λ‘μ—μ„œ λ§Œλ“€κΈ°λ₯Ό μ„ νƒν•˜κ³ , μœ ν˜•μ„ feature 둜 ν•˜κ³ , μƒμœ„ν•­λͺ©μ„ 에픽(μ˜€ν”ˆλ§ˆμΈλ“œ μ•± μΆœμ‹œ)λ₯Ό μ„ νƒν•œλ‹€.

  • λ‹΄λ‹Ήμžμ— 본인이름을 적고, λ‚΄μš©μ— 할일을 μ λŠ”λ‹€(μ΄λ•Œ μ΅œμ†Œν•œμ˜ κΈ°λŠ₯λ‹¨μœ„λ‘œ λ§Œλ“€μ–΄μ•Όν•œλ‹€)

  • μƒμ„±λœ featureμ—μ„œ feature번호λ₯Ό λΆ€μ—¬λ°›λŠ”λ‹€ .
    상세보기λ₯Ό ν΄λ¦­ν•˜λ©΄ 쒌츑 상단에 ECS-13 같은 킀값이 featureλ²ˆν˜Έμ΄λ‹€.

2. μƒμ„±λœ feature 번호둜 git 브랜치 이름 μž‘μ„± κ·œμΉ™ μ μš©ν•˜κΈ° (μ˜ˆμ‹œ)

일반적으둜 Git 브랜치 이름은 곡백 λŒ€μ‹  ν•˜μ΄ν”ˆ(-)μ΄λ‚˜ μ–Έλ”μŠ€μ½”μ–΄(_)λ₯Ό μ‚¬μš©ν•˜κ³ , λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 κ΄€λ‘€

μ˜ˆμ‹œ A: ν•˜μ΄ν”ˆ(-)을 κ΅¬λΆ„μžλ‘œ μ‚¬μš© (ꢌμž₯)

κ°€μž₯ ν”νžˆ μ‚¬μš©λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

feature/ECS-13-μ‚¬μš©μž-νšŒμ›κ°€μž…-κΈ°λŠ₯-κ΅¬ν˜„

  • feature/: 브랜치 μœ ν˜• (κ΄€λ‘€μ μœΌλ‘œ μ‚¬μš©)
  • ECS-13: Jira 이슈 ν‚€ (고유 번호)
  • μ‚¬μš©μž-νšŒμ›κ°€μž…-κΈ°λŠ₯-κ΅¬ν˜„: 이슈 μš”μ•½ λ‚΄μš©μ„ μ†Œλ¬Έμžμ™€ ν•˜μ΄ν”ˆμœΌλ‘œ μ—°κ²°

About

Codeit sprint 21 Part 2 Team 1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors