- μΌμ : 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 ν΅μ λ°©μ: REST API
- μμ:
- GET /list : 리μ€νΈ λͺ©λ‘ μ‘°ν
- POST /list : 리μ€νΈ μμ±
| μμ΄μ½ | νμ | μ€λͺ | λͺ©μ |
|---|---|---|---|
| β¨ | 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 νμΌ μμ
mainfeature/*,
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/κΈ°λ₯_μ΄λ¦
- λ€μ΄λ° κ·μΉ
- κΈ°λ³Έ λ€μ΄λ°: camelCase
- μ»΄ν¬λνΈλͺ : PascalCase, λ¨μν λͺ μ¬ μ¬μ© (Search, Header, Login λ±)
- ν¨μ/λ³μλͺ
: μμ λμ, λ€λ κΈ°λ₯ (μ:
selectSort,fetchQuestionList) - μ΄λ²€νΈ νΈλ€λ¬λͺ : handleSubmit νν
- λ€μ΄λ° κΈΈμ΄: μ΅λ 25μ λ΄μμ μλ―Έλ₯Ό νμ΄μ μμ±
- νμΌλͺ
: λμ + κΈ°λ₯ ννλ‘ μμ± (μ:
questionList.jsx)
- μλ³μ κ·μΉ
- λ¨μν λ°μ΄ν°: (μ:
item) - λ°°μ΄: 볡μν (μ:
items) - κ°μ²΄: λͺ
μ¬ν μ¬μ© (μ:
selectedItem) - Boolean κ°: is~, has~ μ¬μ© (μ:
isLoading,hasError)
- μ½λ μμ± κ·μΉ
- λΆνμν 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,
]);1. feature λ§λ€κΈ°
-
보λλ λͺ©λ‘μμ λ§λ€κΈ°λ₯Ό μ ννκ³ , μ νμ feature λ‘ νκ³ , μμνλͺ©μ μν½(μ€νλ§μΈλ μ± μΆμ)λ₯Ό μ ννλ€.
-
λ΄λΉμμ λ³ΈμΈμ΄λ¦μ μ κ³ , λ΄μ©μ ν μΌμ μ λλ€(μ΄λ μ΅μνμ κΈ°λ₯λ¨μλ‘ λ§λ€μ΄μΌνλ€)
-
μμ±λ featureμμ featureλ²νΈλ₯Ό λΆμ¬λ°λλ€ .
μμΈλ³΄κΈ°λ₯Ό ν΄λ¦νλ©΄ μ’μΈ‘ μλ¨μ ECS-13 κ°μ ν€κ°μ΄ featureλ²νΈμ΄λ€.
2. μμ±λ feature λ²νΈλ‘ git λΈλμΉ μ΄λ¦ μμ± κ·μΉ μ μ©νκΈ° (μμ)
μΌλ°μ μΌλ‘ Git λΈλμΉ μ΄λ¦μ 곡백 λμ νμ΄ν(-)μ΄λ μΈλμ€μ½μ΄(_)λ₯Ό μ¬μ©νκ³ , λͺ¨λ μλ¬Έμλ‘ μμ±νλ κ²μ΄ κ΄λ‘
μμ A: νμ΄ν(-)μ ꡬλΆμλ‘ μ¬μ© (κΆμ₯)
κ°μ₯ νν μ¬μ©λλ λ°©μμ λλ€.
feature/ECS-13-μ¬μ©μ-νμκ°μ
-κΈ°λ₯-ꡬν
feature/: λΈλμΉ μ ν (κ΄λ‘μ μΌλ‘ μ¬μ©)ECS-13: Jira μ΄μ ν€ (κ³ μ λ²νΈ)μ¬μ©μ-νμκ°μ -κΈ°λ₯-ꡬν: μ΄μ μμ½ λ΄μ©μ μλ¬Έμμ νμ΄νμΌλ‘ μ°κ²°
