docs: finalize large-scale wiki-fication and intelligent categorization (42 files)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# [[Agile Environments]]
|
||||
|
||||
## 📌 Brief Summary
|
||||
Agile Environments(애자일 환경)는 요구사항이 지속적으로 변화하는 프로젝트나 스타트업 환경을 의미합니다 [1]. 이러한 환경에서는 미래에 필요할지도 모르는 복잡한 기능을 미리 개발하기보다는 오직 현재의 요구사항에 집중하는 것이 핵심입니다 [2]. 따라서 각 기능을 독립적으로 생성하고 구현할 수 있는 유연하고 모듈화된 접근 방식이 매우 적합합니다 [3].
|
||||
|
||||
## 📖 Core 소스에 관련 정보가 부족합니다.Content
|
||||
애자일 환경(Agile Environments)과 관련하여 제공된 소스에서 다루고 있는 구체적인 설명은 다음과 같습니다.
|
||||
|
||||
* **YAGNI 원칙의 중요성**: 애자일 환경에서는 "You Aren't Gonna Need It (YAGNI)" 원칙이 특히 필수적으로 작용합니다 [2]. 변화하는 요구사항을 가진 스타트업이나 애자일 프로젝트에서는, 미래의 사용 사례를 대비하여 복잡한 기능을 미리 구축하는 것을 피해야 합니다 [1, 2]. 개발팀은 오직 현재의 요구사항에만 집중함으로써 나중에 유지보수해야 할 복잡성과 사용되지 않는 코드(dead code)의 양을 최소화할 수 있습니다 [2].
|
||||
* **기능 기반 구조(Feature-Based Structure)의 적합성**: 프론트엔드 아키텍처 측면에서 기능 기반 폴더 구조는 애자일 개발 방법론과 매우 잘 맞습니다 [3]. 이 구조에서는 각각의 기능(feature)이 독립적으로 분리되어 생성 및 구현될 수 있기 때문에, 애자일 환경에서 요구하는 유연성과 병렬적인 개발을 효과적으로 지원합니다 [3].
|
||||
* *참고: 주어진 소스에는 개발 원칙(YAGNI) 및 폴더 구조(Feature-Based)와 애자일의 연관성만 언급되어 있으며, 스크럼이나 스프린트 등 애자일 환경 자체의 전반적인 프로세스나 이론에 대해서는 소스에 관련 정보가 부족합니다.*
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
- [[YAGNI]]
|
||||
- 연결 이유: 애자일 환경에서 미래의 불확실한 기능을 미리 만들지 않고 현재의 요구사항에 집중하도록 이끄는 가장 핵심적인 개발 원칙입니다 [1, 2].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 애자일 환경에서 불필요한 코드(Dead Code)의 생성을 방지하고 유지보수 비용을 최소화하는 구체적인 판단 기준을 이해할 수 있습니다 [2].
|
||||
- [[Feature-Based Structure]]
|
||||
- 연결 이유: 애자일 방법론과 가장 잘 어울리는 아키텍처 패턴으로, 코드 베이스를 기능 단위로 분리하여 독립적인 개발을 가능하게 합니다 [3].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 애자일 팀이 요구사항 변경에 맞춰 여러 기능을 독립적으로 확장하고 개발할 때 파일과 폴더를 어떻게 구성해야 하는지 이해할 수 있습니다 [3].
|
||||
- [[Startup Projects]]
|
||||
- 연결 이유: 애자일 환경과 마찬가지로 요구사항이 지속적으로 변화하는 특성을 공유하며, YAGNI 원칙이 강하게 적용되는 대표적인 비즈니스 환경입니다 [1].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 애자일 원칙이 실무에서 어떠한 형태의 프로젝트 규모나 상황(빠른 변화와 유연성 요구)에서 주로 채택되는지 파악할 수 있습니다 [1].
|
||||
|
||||
### Deeper Research Questions
|
||||
- 애자일 환경에서 YAGNI 원칙을 엄격하게 적용하여 당장의 기능만 개발할 때, 향후 시스템이 확장되면서 발생할 수 있는 기술 부채(Technical Debt)는 어떻게 관리해야 하는가?
|
||||
- 요구사항이 끊임없이 변화하는 애자일 프로젝트에서 Feature-Based Structure가 기존의 파일 유형 기반 구조(File-Type Based Structure)보다 팀 협업 및 유지보수에 유리한 구체적 이유는 무엇인가?
|
||||
- 스타트업 프로젝트의 초기 단계에서 애자일 원칙(YAGNI, KISS 등)을 적용할 때와, 엔터프라이즈 환경으로 확장(Scaling)될 때 아키텍처 원칙(SOLID 등)의 적용 비중은 어떻게 변화해야 하는가?
|
||||
- 기능(Feature)을 독립적으로 분리하여 개발하는 애자일 환경에서, 여러 기능 간에 공유되는 교차 의존성(Cross-cutting concerns)은 구조적으로 어떻게 해결해야 하는가?
|
||||
- 애자일 환경의 '현재 요구사항에 대한 집중'과 '장기적인 소프트웨어 아키텍처의 견고함' 사이의 균형을 맞추기 위한 개발 거버넌스는 어떻게 구축해야 하는가?
|
||||
|
||||
### Practical Application Contexts
|
||||
- **Implementation:** 주어진 스토리나 태스크의 요구사항을 충족하는 데 필요한 최소한의 코드만 우선적으로 구현합니다 (오버엔지니어링 금지) [2].
|
||||
- **System Design:** 프로젝트 폴더와 모듈을 기능(Feature)을 중심으로 설계하여, 요구사항이 변경되더라도 다른 기능에 미치는 영향을 최소화하고 독립적인 배포 및 테스트가 가능하게 합니다 [3].
|
||||
- **Operation / Maintenance:** 언젠가 쓰일 것이라 예상하고 작성한 불필요한 코드를 배제함으로써, 운영 단계에서 팀이 관리하고 파악해야 할 레거시 코드의 복잡성을 대폭 낮춥니다 [2].
|
||||
- **Learning Path:** 애자일 환경에 합류하기 위해 YAGNI 원칙의 적용법과 Feature-Sliced Design과 같은 최신 기능 단위의 모듈형 아키텍처 패턴을 학습합니다 [2, 3].
|
||||
- **My Project Relevance:** 잦은 기획 변경이 예상되는 초기 단계의 스타트업 프로젝트나 애자일 조직을 세팅할 때, 초기 개발 속도를 높이면서도 변경에 유연하게 대응하기 위한 가이드라인으로 직결됩니다 [1, 3].
|
||||
|
||||
### Adjacent Topics
|
||||
- [[SOLID Principles]]
|
||||
- 확장 방향: 애자일 환경에서 당장의 기능을 단순하게 개발(YAGNI)하면서도, 장기적으로 애플리케이션의 규모가 커졌을 때 코드를 어떻게 유지보수 가능하게 설계할지 객체 지향적/구조적 관점에서 이해를 확장할 수 있습니다 [1, 4].
|
||||
- [[Clean Code]]
|
||||
- 확장 방향: 빠른 변화와 반복 개발(Iteration)이 일어나는 애자일 환경 속에서, 여러 명의 개발자가 코드를 쉽게 읽고 협업할 수 있도록 하는 기본적인 코드 품질 유지 기법으로 확장이 가능합니다 [4, 5].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
@@ -0,0 +1,71 @@
|
||||
# [[Branching Strategies]]
|
||||
|
||||
## 📌 Brief 소Summary
|
||||
Branching Strategies(브랜칭 전략)는 소프트웨어 개발 과정에서 코드 변경 사항을 관리하고 팀원 간의 협업을 조율하기 위해 버전 관리 시스템(Git 등)에서 브랜치를 생성, 병합, 유지보수하는 규칙과 워크플로우를 의미합니다. 팀의 규모와 프로젝트 요구사항에 따라 Git Flow, GitHub Flow, Trunk-Based Development, Feature Branch Workflow 등 다양한 전략이 사용됩니다. 명확한 브랜칭 전략의 도입은 메인 코드베이스의 안정성을 보장하고 병합 충돌을 방지하며 코드 리뷰와 추적성을 강화하는 핵심 역할을 합니다 [1-3].
|
||||
|
||||
## 📖 Core Content
|
||||
* **주요 브랜칭 전략 유형**
|
||||
* **Feature Branch Workflow (기능 브랜치 워크플로우):** 2~5명 규모의 소규모 팀에 가장 초보자 친화적이고 충돌이 적은 워크플로우입니다 [4]. `main` 브랜치는 항상 안정적이고 배포 가능한 상태를 유지하며, 새로운 기능이나 버그 수정 시 `main`에서 파생된 짧은 수명의 브랜치를 생성합니다 [5]. 개발 완료 후 Pull Request(PR)를 열고 최소 1명 이상의 동료 리뷰와 테스트를 거친 후 Squash Merge 방식으로 병합합니다 [6, 7].
|
||||
* **Trunk-Based Development (트렁크 기반 개발):** 강력한 CI(지속적 통합) 환경을 갖춘 숙련된 팀에 적합한 가벼운 방식입니다 [8, 9]. 수명이 매우 짧은 기능 브랜치를 사용하거나 메인 브랜치에 작은 변경 사항을 자주 커밋합니다. 오버헤드가 최소화되고 피드백이 빠르며 대규모 병합 충돌을 피할 수 있습니다 [8, 10].
|
||||
* **Git Flow:** 정기적인 릴리스 일정을 가진 대규모 프로젝트에 유용합니다 [9]. 하지만 기능 브랜치 외에도 `develop`, `release` 등 관리해야 할 브랜치가 많아 소규모 팀에게는 무겁고 과도한 복잡성을 유발할 수 있습니다 [9, 11, 12].
|
||||
* **GitHub Flow:** `main` 브랜치로 기능 브랜치를 직접 병합하는 단순화된 구조로, Git Flow보다 빠르고 지속적인 배포 환경에 적합합니다 [11, 13].
|
||||
|
||||
* **모든 전략에 적용되는 모범 사례 (Best Practices)**
|
||||
* **티켓 ID 및 명명 규칙 사용:** 브랜치 이름과 커밋 메시지에 요구사항 추적을 위한 티켓 ID(예: `feature/PROJ-123-user-auth`)를 포함해야 합니다 [14, 15]. 브랜치 이름은 케밥 케이스(kebab-case)를 사용하고 짧고 명확하게 작성합니다 [16, 17].
|
||||
* **원자적 커밋 (Atomic Commits):** 하나의 커밋에는 하나의 논리적 변경 사항만 포함하여 코드 리뷰와 히스토리 추적을 단순화합니다 [7, 18].
|
||||
* **Conventional Commits 규칙:** 커밋 메시지는 `feat:`, `fix:`, `chore:` 등의 표준화된 접두사를 사용하여 변경의 목적을 명확히 합니다 [19-21].
|
||||
* **PR 및 병합 규칙:** 코드를 절대 `main`에 직접 푸시해서는 안 되며, 반드시 PR을 통한 리뷰를 거쳐야 합니다 [6, 22]. 병합 후에는 사용이 끝난 브랜치를 즉시 삭제하여 저장소를 정리합니다 [6, 23].
|
||||
|
||||
* **전략 간 마이그레이션 방법**
|
||||
* 프로젝트가 변화함에 따라 전략도 진화할 수 있습니다. 예를 들어 통합 속도를 높이려면 Feature Branch에서 Trunk-Based(기능 플래그 사용 및 수명 단축)로 전환하고, 더 많은 체계가 필요하다면 GitHub Flow에서 Git Flow(`develop` 브랜치 및 릴리스 브랜치 추가)로 마이그레이션할 수 있습니다 [11, 12].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
* **구조적 오버헤드 vs. 안정성:** Git Flow는 구조가 명확하고 정기적인 릴리스에 강점이 있지만, 브랜치의 수가 많아 유지보수 비용(오버헤드)이 높습니다 [9]. 반면 Feature Branch나 Trunk-Based 방식은 프로세스가 가벼운 대신 메인 브랜치의 보호(`main` 브랜치 직접 푸시 금지, 엄격한 코드 리뷰 등) 규칙이 강제되지 않으면 코드가 쉽게 깨질 위험이 있습니다 [6, 22].
|
||||
* **기능 브랜치의 수명(Long-lived branches) 문제:** 기능 브랜치나 GitHub Flow를 사용할 때, 브랜치의 수명이 몇 주 이상 길어지면 다른 작업자와의 코드 분기가 심해져 거대한 병합 충돌(Merge conflicts)이 발생할 수 있습니다 [17]. 따라서 매일 `main`의 최신 변경 사항을 Pull 하거나 Rebase하여 충돌을 예방해야 합니다 [7].
|
||||
* **Trunk-Based 개발의 의존성:** 빠른 병합을 지향하는 Trunk-Based Development는 지속적이고 자동화된 테스트 환경(CI)과 미완성 기능을 프로덕션에서 숨기기 위한 기능 플래그(Feature Flags) 구현 등 기술적 뒷받침이 필수적입니다 [9, 11].
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
|
||||
#### [관계 유형 A: 아키텍처/기반 방법론]
|
||||
- [[Feature Branch Workflow]]
|
||||
- 연결 이유: 소규모 3~5인 개발 팀에 가장 추천되는 단순하고 직관적인 브랜칭 전략의 기반 개념입니다.
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 메인 브랜치를 오염시키지 않고 새로운 기능을 격리된 환경에서 개발하고 병합하는 방법론을 이해할 수 있습니다.
|
||||
- [[Trunk-Based Development]]
|
||||
- 연결 이유: 무거운 워크플로우를 탈피하여 브랜치 생명주기를 극한으로 줄이고 빠른 통합을 중시하는 최신 트렌드 모델입니다.
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: CI/CD 환경에서의 잦은 소규모 배포 방식과 충돌 최소화 전략을 학습할 수 있습니다.
|
||||
- [[Git Flow]]
|
||||
- 연결 이유: 브랜칭 전략의 고전적이고 체계적인 형태로서, 대형 프로젝트의 정기적 버저닝 관리를 위해 설계되었습니다.
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: `develop`, `release`, `hotfix` 등 개발 파이프라인에 따른 브랜치의 역할 분리 기법을 이해할 수 있습니다.
|
||||
|
||||
#### [관계 유형 B: 구현/활용 도구 및 규칙]
|
||||
- [[Pull Request & Code Review]]
|
||||
- 연결 이유: 브랜칭 전략이 안전하게 동작하기 위해 모든 병합 전에 필수적으로 거쳐야 하는 품질 검증 관문입니다.
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 팀원 간의 비동기적 피드백 수렴, 시각적 검증, 그리고 CI 통과를 전제로 한 안전한 병합 과정을 배울 수 있습니다.
|
||||
- [[Conventional Commits]]
|
||||
- 연결 이유: 브랜치 병합 내역을 추적하고 가독성을 높이기 위해 전 세계적으로 통용되는 커밋 메시지 작성 표준입니다.
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: `feat(scope): message` 와 같은 형식의 구문을 통해 코드 히스토리 파악 및 문서 자동화를 어떻게 이룰 수 있는지 이해할 수 있습니다.
|
||||
|
||||
### Deeper Research Questions
|
||||
- Trunk-Based Development를 성공적으로 적용하기 위해 필수적인 자동화 테스트 환경(CI)과 기능 플래그(Feature flags)의 구현 전략은 무엇인가?
|
||||
- 소규모 팀이 단일 `main` 브랜치 전략을 사용할 때, 예기치 않은 버그가 배포되는 것을 막기 위한 GitHub 저장소의 브랜치 보호 규칙(Branch Protection Rules) 최적화 방법은 무엇인가?
|
||||
- 장기 체류 브랜치(Long-lived branch)에서 발생하는 거대한 병합 충돌을 피하기 위해 `main` 브랜치의 최신 내용을 가져올 때 `merge`와 `rebase` 중 어떤 방식이 이력 관리에 더 효과적인가?
|
||||
- 원자적 커밋(Atomic Commits)을 강제하는 정책이 Pull Request 리뷰 시간과 버그 추적성에 어떠한 정량적/정성적 영향을 미치는가?
|
||||
- Git Flow 방식에서 GitHub Flow 방식으로 팀의 워크플로우를 마이그레이션할 때 예상되는 혼란 요소와 이를 해결하기 위한 CI/CD 파이프라인의 재구성 방법은 무엇인가?
|
||||
|
||||
### Practical Application Contexts
|
||||
- **Implementation:** 새로운 기능 개발을 시작할 때, 최신 `main` 브랜치에서 `feature/티켓ID-간단한-설명` 이름으로 브랜치를 파생하고, 원자적 단위로 작은 커밋을 자주 기록합니다.
|
||||
- **System Design:** 프론트엔드 모듈 아키텍처 설계 시, 독립적인 피처(Feature) 폴더별로 브랜치를 나누어 개발함으로써 특정 코드 영역 밖으로 병합 충돌의 폭발 반경(Blast radius)이 퍼지지 않도록 합니다.
|
||||
- **Operation / Maintenance:** 브랜치가 `main`으로 병합되는 즉시 GitHub Action 등 CI 서버에서 자동으로 린트(ESLint), 테스트(Jest), 포맷팅을 수행하도록 방어막을 구축하여 메인 브랜치의 배포 가능한 상태를 영구적으로 유지합니다.
|
||||
- **Learning Path:** Git의 기초 명령어를 습득한 후, 소규모 팀 단위의 Feature Branch Workflow를 실습하고, 이후 CI/CD 도구를 연동한 Trunk-Based 환경으로 발전하는 순서로 학습합니다.
|
||||
- **My Project Relevance:** 3~5인 규모의 프로젝트에서 무거운 Git Flow의 도입을 지양하고, '단기 기능 브랜치 → PR 및 1인 이상 피어 리뷰 승인 → Squash Merge 및 브랜치 즉시 삭제'라는 단순화된 룰을 적용하여 개발 속도와 코드 품질을 동시에 챙깁니다.
|
||||
|
||||
### Adjacent Topics
|
||||
- [[Continuous Integration / Continuous Deployment (CI/CD)]]
|
||||
- 확장 방향: 브랜칭 전략에 의해 트리거(Trigger)되어 실행되는 빌드, 테스트, 배포 파이프라인의 자동화 프로세스를 깊이 알아봅니다.
|
||||
- [[Feature-Sliced Design (FSD)]]
|
||||
- 확장 방향: 도메인과 기능 단위로 코드를 분리하는 프론트엔드 아키텍처 방법론으로, 브랜치를 기능별로 나눌 때 충돌을 물리적으로 최소화하는 코드 구조 설계법을 탐구합니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
@@ -0,0 +1,56 @@
|
||||
# [[Code Review]]
|
||||
|
||||
## 📌 Brief Summary
|
||||
코드 리뷰(Code Review)는 개발자가 작성한 코드를 메인 브랜치에 병합하기 전에 팀원(동료)이 검토하여 승인하는 품질 관리 및 협업 프로세스입니다 [1, 2]. 주로 Pull Request(PR) 단계를 통해 이루어지며, 단독으로 잘못된 코드가 병합되는 것을 방지하고 팀 내 빠른 피드백 루프를 형성합니다 [1]. 최근 프론트엔드 환경에서는 단순한 코드 검토를 넘어 Storybook과 같은 도구를 CI 파이프라인과 결합한 '시각적 리뷰(Visual Review)'로 확장되어 의도치 않은 UI 변경을 방지하는 역할도 수행합니다 [3].
|
||||
|
||||
## 📖 Core 소스에 기반한 Core Content
|
||||
- **동료 검토(Peer Review)의 역할 및 이점**: 개발자는 기능 브랜치(feature branch)에서 작업을 마친 후 병합을 위한 Pull Request(PR)를 생성하며, 이때 최소 1명 이상의 팀원에게 검토와 승인을 받아야 합니다 [1, 4]. 리뷰어는 변경된 코드에 대해 코멘트를 남기며, 작성자가 이를 수정하고 재푸시(push)하여 최종 승인을 받으면 병합이 이루어집니다 [5]. 이는 단일 개발자의 실수로 인한 잘못된 병합을 막고, 팀원 간의 건전한 리뷰 습관과 협업을 촉진합니다 [1, 6].
|
||||
- **효율적인 PR 에티켓**: 원활한 코드 리뷰를 위해서는 PR을 작게 유지하고 단일 작업(Single task)에 집중하는 것이 모범 사례입니다 [2]. 리뷰어가 한 번에 2,000줄 이상의 방대한 코드를 검사하도록 요구해서는 안 되며, PR 규모가 작을수록 더 빠르고 철저하게 검토될 수 있습니다 [2, 7].
|
||||
- **시각적 리뷰(Visual Review)의 도입**: 프론트엔드 개발의 PR 프로세스에서는 코드의 논리 검토뿐만 아니라 시각적 회귀(Visual Regression) 검토가 필수가 되었습니다 [3]. 개발자는 Storybook을 활용해 컴포넌트를 분리하여 구축하고, Chromatic이나 Happo 등의 도구를 CI 파이프라인에 통합합니다 [3, 8].
|
||||
- **자동화된 시각적 회귀 감지**: PR이 열리면 이 도구들이 여러 브라우저 및 뷰포트 환경에서 자동으로 모든 UI 상태의 스크린샷을 캡처하고 이전 기준선(baseline)과 비교합니다 [9, 10]. 레이아웃이나 색상 등에 의도치 않은 변경 사항이 발견되면 PR에 해당 사항이 수동 검토 대상으로 표시(flagged)되어 버그가 프로덕션 환경으로 배포되는 것을 차단합니다 [3]. 더불어, 시각적 검토 도구는 시각적 변경 사항과 함께 새로운 접근성 위반(accessibility violations)까지 포착할 수 있습니다 [9, 11].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
- **리뷰 병목 현상 및 복잡도 증가**: 한 번에 수천 줄에 달하는 큰 규모의 코드(PR)를 리뷰하도록 요청할 경우, 리뷰어가 코드를 철저히 감사(audit)하기 어려워 리뷰 속도와 품질이 모두 저하되는 문제가 발생합니다 [2]. 이를 피하기 위해서는 PR을 매우 작게 나누어 지속적으로 리뷰해야 하므로, 개발자는 작업 단위를 세밀하게 쪼개야 하는 추가적인 노력이 필요합니다 [2, 7].
|
||||
- **시각적 테스트의 불안정성(Flake) 이슈**: 시각적 리뷰를 위해 스크린샷 기반 테스트를 도입할 때, 컴포넌트의 기능적 변경이 없더라도 압축 노이즈, 안티앨리어싱, 비동기 에셋(폰트 등), 애니메이션 등으로 인해 미세한 픽셀 차이가 발생하여 오류로 처리되는 거짓 양성(False positive) 문제가 생길 수 있습니다 [8, 12]. 이를 해결하기 위해 색상 오차 허용 범위(color-delta tolerance)를 설정하거나 애니메이션을 음소거하는 등의 추가적인 구성(Configuration)과 관리가 요구됩니다 [8, 12, 13].
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
|
||||
#### [협업 및 형상 관리 워크플로우]
|
||||
- [[Pull Request (PR)]]
|
||||
- 연결 이유: 코드 리뷰가 실질적으로 요청되고, 검토 피드백이 오가는 핵심 플랫폼이자 단위입니다 [1, 2].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 브랜치 병합 전 품질 관리 게이트로서의 기능과 짧고 명확한 작업 단위 분할의 중요성을 파악할 수 있습니다.
|
||||
|
||||
- [[Feature Branch Workflow]]
|
||||
- 연결 이유: 코드 리뷰 시스템을 쉽게 도입하기 위한 가장 기본적이고 충돌이 적은 브랜치 전략입니다 [14, 15].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 메인 브랜치를 항상 안정적으로 유지하면서, 각각의 태스크를 독립된 브랜치에서 작업하고 리뷰를 통해 검증하는 전체 흐름을 이해할 수 있습니다.
|
||||
|
||||
#### [자동화 및 품질 검증 도구]
|
||||
- [[Visual Regression Testing]]
|
||||
- 연결 이유: 프론트엔드 코드 리뷰 시 육안으로 확인하기 힘든 의도치 않은 레이아웃/색상 변경을 자동화 도구가 시각적으로 찾아내어 리뷰어에게 제시합니다 [3, 9].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: Chromatic이나 Happo를 CI 파이프라인과 결합하여 PR 리뷰의 정확도를 높이고 안정적인 UI를 배포하는 프로세스를 배울 수 있습니다.
|
||||
|
||||
### Deeper Research Questions
|
||||
|
||||
- PR의 크기를 작게 유지하고 단일 작업(Single task)에 집중하도록 논리적으로 작업을 분할하는 가장 효과적인 방법론과 기준은 무엇인가?
|
||||
- 대규모 팀에서 쏟아지는 수많은 PR과 코드 리뷰 요청을 병목 현상 없이 효율적으로 처리하고 배포 속도를 유지하기 위한 전략은 무엇인가?
|
||||
- 시각적 회귀 테스트(Visual Regression Testing) 시 발생하는 미세한 렌더링 차이(Flake)를 방지하고 신뢰할 수 있는 기준선(Baseline)을 유지하기 위한 구체적인 구성 최적화 방법은 무엇인가?
|
||||
- 코드 리뷰 시 시각적 회귀(Visual changes) 감지뿐만 아니라, 접근성 테스트(Accessibility tests)를 함께 자동화했을 때 얻게 되는 이점과 이를 처리하는 내부 동작 원리는 무엇인가?
|
||||
- 기능 분기(Feature branch)의 수명이 길어졌을 때 발생하는 리뷰 및 병합 충돌 문제를 해결하고, 지속적으로 짧은 주기의 리뷰를 유도하는 문화는 어떻게 정착시킬 수 있는가?
|
||||
|
||||
### Practical Application Contexts
|
||||
|
||||
- **Implementation:** 코드를 커밋하고 PR을 생성할 때, 리뷰어가 쉽게 코드를 파악할 수 있도록 200줄 미만의 작은 단위로 변경 사항을 쪼개어 올리고 무엇이 왜 변경되었는지 명확히 명시해야 합니다 [2, 7].
|
||||
- **System Design:** 프론트엔드 설계 시 Storybook을 활용하여 모든 UI 컴포넌트의 다양한 상태(loading, error 등)를 캡슐화해 두면, 코드 리뷰 시에 이 상태들을 자동으로 스크린샷으로 찍어 검증할 수 있는 기반 시스템이 만들어집니다 [16].
|
||||
- **Operation / Maintenance:** CI/CD 파이프라인 단계에 Chromatic이나 Happo 같은 도구를 연동시켜, 팀원이 PR을 생성할 때마다 시각적 변동 사항(diff)이나 접근성 위반 내역이 PR 체크 리스트에 배지로 자동 보고되도록 운영 환경을 구축합니다 [17].
|
||||
- **Learning Path:** Git의 기초적인 브랜치 사용법을 배운 후, 팀 협업의 핵심인 PR 생성 및 리뷰 요청 과정(GitHub Flow 등)을 익히고, 나아가 시각적 테스팅 도구가 PR에 어떻게 피드백을 주는지를 실습해보는 흐름으로 학습할 수 있습니다 [8, 18].
|
||||
- **My Project Relevance:** 소규모 3인 팀 프로젝트를 진행할 때 복잡한 Git-Flow 대신 기능 브랜치 워크플로우를 채택하고, 코드 병합 시 반드시 1명 이상의 피어 리뷰(Peer review)를 받도록 규칙을 정해 버그 없는 안정적 메인 브랜치를 유지할 수 있습니다 [1, 14].
|
||||
|
||||
### Adjacent Topics
|
||||
|
||||
- [[Continuous Integration (CI)]]
|
||||
- 확장 방향: PR이 올라왔을 때 코드 리뷰를 돕기 위해 사전에 테스트 통과 여부, 빌드 성공 여부 등을 자동으로 검사해주는 자동화 파이프라인의 구축에 대해 학습할 수 있습니다 [7, 19].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
@@ -0,0 +1,75 @@
|
||||
# [[Git Workflow]]
|
||||
|
||||
## 📌 Brief Summary
|
||||
Git Workflow(깃 워크플로우)는 팀 환경에서 코드 변경 사항을 관리하고 협업하기 위한 체계적이고 구조화된 접근 방식입니다 [1, 2]. 이는 기능 브랜치(Feature-branch), 트렁크 기반(Trunk-based), Git Flow 등 다양한 전략을 포괄하며, 충돌을 방지하고 `main` 브랜치의 배포 가능 상태를 보장하는 것을 목표로 합니다 [2-4]. 일관된 브랜치 명명 규칙, 커밋 메시지 규약, 풀 리퀘스트(PR)와 리뷰 절차를 도입함으로써 잠재적인 혼돈을 예측 가능한 릴리스 흐름으로 전환할 수 있습니다 [1, 5, 6].
|
||||
|
||||
## 📖 Core Content
|
||||
* **주요 브랜칭 전략 (Main Branching Strategies):**
|
||||
* **Feature-Branch Workflow (기능 브랜치 워크플로우):** 주 브랜치(`main`)를 항상 안정적이고 배포 가능한 상태로 유지하며, 새로운 작업이나 버그 수정마다 짧은 수명의 기능 브랜치(예: `feature/login`)를 생성하여 작업합니다 [3, 4, 7]. 소규모 팀에 매우 적합하며, 오버헤드 없이 코드를 안전하게 통합할 수 있습니다 [4, 8].
|
||||
* **Trunk-Based Development (트렁크 기반 개발):** 강력한 CI(지속적 통합) 환경을 갖춘 경험 많은 팀에 적합한 방식으로, 아주 짧은 수명의 브랜치를 사용해 자주 `main`에 코드를 병합하여 통합 속도를 높입니다 [8, 9].
|
||||
* **Git Flow:** `develop` 및 `release` 등 다수의 브랜치를 운영하며 스케줄된 릴리스를 관리하는 대규모 프로젝트에 적합하지만, 소규모 팀에게는 너무 복잡하고 무거울 수 있습니다 [8, 10].
|
||||
* **GitHub Flow:** 기능을 기능 브랜치에서 작업한 뒤 풀 리퀘스트를 통해 리뷰받고 병합하여, `main`에서 바로 배포하는 방식입니다 [11, 12].
|
||||
|
||||
* **명명 규칙 및 추적성 (Naming Conventions & Traceability):**
|
||||
* **브랜치 이름:** 브랜치 목적을 명확히 하기 위해 `feature/`, `bugfix/`와 같은 접두사를 사용하며, 티켓 ID를 함께 포함(예: `feature/PROJ-123-user-auth`)하여 이슈 트래커와의 추적성을 확보해야 합니다 [13-15].
|
||||
* **커밋 메시지:** `type(scope): description` 형태를 따르는 "Conventional Commits" 규약을 사용하는 것이 좋습니다 [6, 16]. 예를 들어 새로운 기능은 `feat:`, 버그 수정은 `fix:`, 문서 수정은 `docs:` 등으로 시작하여 변경의 의도를 명확히 합니다 [6, 16].
|
||||
|
||||
* **풀 리퀘스트와 병합 (Pull Requests & Merging):**
|
||||
* `main` 브랜치에 직접 푸시(Push)하는 것을 금지하고, 반드시 풀 리퀘스트(PR)를 생성하여 최소 1명 이상의 동료에게 코드 리뷰를 받아야 합니다 [13, 17].
|
||||
* 코드 리뷰 속도와 품질을 위해 PR은 작고 논리적인 단일 변경 사항(Atomic Commits) 단위로 유지해야 합니다 [16, 18].
|
||||
* 병합 시에는 스쿼시 병합(Squash merge)을 사용하여 커밋 히스토리를 깔끔하게 유지하고, 병합이 완료된 기능 브랜치는 자동으로 삭제하여 리포지토리를 정리합니다 [17-19].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
* **구조의 복잡성 vs. 팀의 규모:** Git Flow는 대규모의 복잡한 릴리스 계획을 안전하게 관리할 수 있지만, 프로세스 오버헤드가 크고 병합 지연을 초래합니다 [8, 20]. 반면, Feature-Branch 워크플로우나 Trunk-Based 방식은 소규모 팀이 빠르고 가볍게 움직일 수 있도록 돕지만, 규모가 커지거나 엄격한 릴리스 버전 관리가 필요한 경우 한계에 부딪힐 수 있어 워크플로우를 진화(Migration)시켜야 합니다 [8, 10].
|
||||
* **기능 브랜치의 수명과 충돌:** 기능 브랜치 방식의 가장 큰 부작용은 브랜치의 수명이 길어질 경우 메인 브랜치와의 차이가 커져 심각한 병합 충돌(Merge Conflict)이 발생한다는 점입니다 [20, 21]. 이를 피하기 위해 개발자는 자주 `main` 브랜치를 풀(Pull) 받거나 리베이스(Rebase)하여 최신 상태를 동기화하는 부가적인 작업을 수행해야 합니다 [19, 20].
|
||||
* **완전한 추적성의 대가:** 모든 브랜치와 커밋에 티켓 ID 부여를 강제하면 버그 추적이나 리뷰에 있어 컨텍스트 확보에는 탁월하나 [5, 22], 아주 단순하고 사소한 코드 수정 작업에도 반드시 티켓을 생성하고 절차를 밟아야 하는 속도 저하의 단점이 발생합니다 [23].
|
||||
* **Trunk-Based 전환의 전제 조건:** Trunk-Based Development로 전환하여 빠른 통합의 이점을 얻고자 한다면, 코드의 불안정성을 감추기 위한 기능 토글(Feature flags) 기법과 병합 전 결함을 잡아낼 강력한 테스트 자동화(CI)가 필수적으로 요구된다는 제약 사항이 있습니다 [12].
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
|
||||
#### [관계 유형 A (아키텍처/기반 기술)]
|
||||
- `[[Trunk-Based Development]]`
|
||||
- 연결 이유: Git Workflow를 구성하는 핵심 전략 중 하나로, 빠른 통합을 목적으로 하는 방법론입니다 [2].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 짧은 수명의 브랜치, 빈번한 병합, 기능 플래그(Feature Flags) 활용이 프로젝트 배포 속도에 어떻게 기여하는지 이해할 수 있습니다 [9, 12].
|
||||
|
||||
- `[[Git Flow]]`
|
||||
- 연결 이유: 구조가 복잡한 대규모 프로젝트의 릴리스를 관리하기 위해 만들어진 전통적 브랜칭 모델입니다 [2, 10].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: `develop`, `release`, `hotfix` 등 다중 브랜치 전략이 왜 오버헤드를 유발하면서도 엔터프라이즈 환경에서 사용되는지 파악할 수 있습니다 [8, 10].
|
||||
|
||||
#### [관계 유형 B (구현/활용 도구)]
|
||||
- `[[Conventional Commits]]`
|
||||
- 연결 이유: 팀의 일관된 코드베이스 히스토리 관리를 위해 Git 커밋 메시지 작성에 적용되는 업계 표준 규칙입니다 [6, 16].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: `feat:`, `fix:`, `chore:`와 같은 접두사가 리뷰어의 코드 이해도를 어떻게 높이고 자동화된 릴리스에 기여하는지 배울 수 있습니다 [6, 16].
|
||||
|
||||
- `[[Pull Requests (PR)]]`
|
||||
- 연결 이유: 브랜치의 코드를 `main`으로 병합하기 전, 협업 팀원들이 코드를 검토하는 핵심 관문입니다 [13, 16].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 브랜치 보호 설정, 동료 리뷰 요구(1 review required), 지속적 통합(CI) 체크가 시스템 안정성 유지에 어떻게 필수적으로 작용하는지 이해할 수 있습니다 [16, 17].
|
||||
|
||||
- `[[Ticket IDs (Traceability)]]`
|
||||
- 연결 이유: 코드의 변경 사항이 어떤 비즈니스 요구사항(예: Jira 티켓)에 의해 발생했는지를 연결하는 도구적 장치입니다 [5, 22].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: `PROJ-123` 형태의 티켓 번호를 브랜치와 커밋에 삽입함으로써 리뷰어에게 맥락을 제공하고, 문서화 및 작업 추적(Traceability)을 어떻게 달성하는지 알 수 있습니다 [5, 22].
|
||||
|
||||
### Deeper Research Questions
|
||||
- 소규모 팀이 성장하여 복잡성이 증가할 때, Feature Branch Workflow에서 Git Flow로 안전하게 마이그레이션하려면 어떤 절차와 팀 내 교육이 필요한가?
|
||||
- Trunk-Based Development를 효과적으로 도입하기 위해 CI/CD(지속적 통합/배포) 파이프라인에서 반드시 구성해야 하는 자동화 테스트 조건은 무엇인가?
|
||||
- Conventional Commits 시스템과 연동하여 자동 릴리스 노트를 작성하고 시맨틱 버저닝(Semantic Versioning)을 구현하는 기술적 원리는 어떻게 작동하는가?
|
||||
- 다수의 작업자가 겹치는 영역을 수정할 때 발생하는 Merge Conflict를 예방하기 위해, 'Atomic Commits'와 '자주 병합하기' 원칙은 실무에서 어떻게 구체적으로 적용되어야 하는가?
|
||||
- 코드 리뷰의 병목 현상을 방지하기 위해 PR의 규모를 작게(예: 200줄 이하) 유지하면서도 논리적인 기능 단위를 훼손하지 않는 코드 분할 기법은 무엇인가?
|
||||
|
||||
### Practical Application Contexts
|
||||
- **Implementation:** 새로운 작업을 시작할 때 무조건 `git checkout -b feature/티켓ID-작업명`으로 독립적인 브랜치를 파고, 완료 후 `feat:` 등의 규칙을 따른 커밋 메시지를 작성한 뒤 `main` 브랜치에 PR을 생성합니다 [6, 7, 13, 22].
|
||||
- **System Design:** GitHub와 같은 호스팅 플랫폼에서 `main` 브랜치 보호(Branch Protection) 옵션을 활성화하여 직접 푸시를 막고, CI 빌드 통과와 최소 1인의 승인이 있어야 병합되도록 시스템을 설계합니다 [17].
|
||||
- **Operation / Maintenance:** 브랜치가 병합될 때마다 스쿼시 병합(Squash and merge)을 강제하여 커밋 히스토리를 단일 항목으로 압축하고, 병합 후 남은 브랜치를 자동 삭제(Auto-delete) 설정하여 저장소를 깔끔하게 운영합니다 [17-19].
|
||||
- **Learning Path:** Git에 입문하는 소규모 프로젝트의 경우, 복잡한 `develop` 브랜치 없이 `main` 브랜치 하나와 기능 브랜치들로만 구성된 가벼운 워크플로우(Feature-Branch Workflow)를 먼저 학습하고 체화하는 것이 권장됩니다 [4, 8].
|
||||
- **My Project Relevance:** 현재 진행하는 3인 규모의 프로젝트 등에서는 Git Flow의 무거운 절차를 피하고, 항상 배포 가능한 안정적인 `main` 브랜치를 기준으로 짧은 기능 브랜치를 생성하여 빠른 리뷰와 피드백을 주고받는 방식을 즉각 도입할 수 있습니다 [4, 8].
|
||||
|
||||
### Adjacent Topics
|
||||
- `[[CI/CD (Continuous Integration/Continuous Deployment)]]`
|
||||
- 확장 방향: PR을 생성하거나 병합할 때 코드를 자동으로 테스트하고 빌드, 배포하는 인프라 파이프라인 구성 방법론으로 확장하여 조사.
|
||||
- `[[Semantic Versioning (SemVer)]]`
|
||||
- 확장 방향: Git 태그(Tag)와 Conventional Commits를 활용하여 소프트웨어의 버전을 체계적이고 일관성 있게 부여하는 방법으로 확장.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
@@ -0,0 +1,64 @@
|
||||
# [[GitHub Flow]]
|
||||
|
||||
## 📌 Brief Summary
|
||||
GitHub Flow는 복잡한 Git Flow의 대안으로 사용되는 가볍고 단순한 브랜치 기반 워크플로우입니다 [1, 2]. 이 방식은 항상 배포 가능한 상태(deployable)를 유지하는 `main` 브랜치를 중심으로 작동하며, 개발자는 새로운 작업을 위해 짧은 주기의 기능 브랜치(feature branch)를 생성합니다 [3-5]. 변경된 코드는 동료의 코드 리뷰와 CI/CD 테스트를 모두 통과한 후 오직 Pull Request(PR)를 통해서만 `main`에 병합됩니다 [1, 6].
|
||||
|
||||
## 📖 Core Content
|
||||
* **안정적인 `main` 브랜치 유지**
|
||||
GitHub Flow의 핵심은 `main` (또는 `master`) 브랜치가 항상 안정적이고 언제든 배포 가능한 상태여야 한다는 점입니다 [3-5]. 개발자는 어떠한 경우에도 `main` 브랜치에 직접 커밋(direct commit)해서는 안 됩니다 [1, 6, 7].
|
||||
* **기능 브랜치(Feature Branch) 기반 작업**
|
||||
모든 새로운 기능 개발, 버그 수정, 문서 작업 등은 `main`에서 파생된 짧은 수명(short-lived)의 전용 브랜치에서 수행되어야 합니다 [3-5]. 브랜치 이름은 `feature/user-auth` 또는 `bugfix/login-error`와 같이 설명적이어야 하며, 가능하면 티켓 ID(예: `PROJ-123`)를 포함하여 추적성을 높이는 것이 좋습니다 [8, 9].
|
||||
* **Pull Request (PR) 및 코드 리뷰**
|
||||
작업이 완료되면 `main` 브랜치로 병합하기 위해 PR을 생성합니다 [6, 10]. 병합 전에는 반드시 최소 1명 이상의 팀원에게 코드 리뷰(Peer Review)를 받아야 하며, CI/CD 환경에서의 자동화 테스트를 통과해야 합니다 [1, 6, 8]. 이는 혼자서 잘못된 코드를 병합하는 것을 방지하는 안전장치입니다 [8].
|
||||
* **병합 규칙과 정리**
|
||||
커밋 히스토리를 깔끔하게 유지하기 위해 PR을 병합할 때는 'Squash Merge' 방식을 주로 사용합니다 [6, 7, 11]. 성공적으로 병합된 이후에는 불필요한 브랜치가 쌓이지 않도록 기능 브랜치를 즉시 삭제(auto-delete)합니다 [6, 8, 11].
|
||||
* **워크플로우 마이그레이션 (Migration)**
|
||||
팀이 기존의 복잡한 Git Flow에서 GitHub Flow로 전환하여 통합 속도를 높이고 단순화하려면, 릴리스 브랜치(release branch) 생성을 중단하고, `develop` 브랜치를 `main`으로 통합한 뒤, `main` 브랜치에서 직접 배포하도록 CI/CD 파이프라인을 업데이트해야 합니다 [2]. 반대로 프로젝트의 구조가 더 복잡해지면 `develop` 브랜치 등을 추가해 Git Flow로 되돌아갈 수도 있습니다 [12].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
* **병합 코드의 즉각적인 리스크**: `main` 브랜치가 유일한 배포 기준점이 되므로, 리뷰나 테스트가 누락되어 버그가 포함된 코드가 병합될 경우 프로덕션(운영) 환경에 치명적인 영향을 미칠 수 있습니다 [13, 14]. 따라서 강력한 CI/CD 자동화 환경과 Branch Protection Rule(보호 규칙)이 필수적으로 뒷받침되어야 합니다 [1, 6].
|
||||
* **브랜치 수명 관리의 어려움**: 기능 브랜치가 너무 오래 유지(Long-lived)되면 `main` 브랜치와의 차이가 벌어져 심각한 병합 충돌(Merge Conflict)이 발생합니다 [13, 15]. 이를 방지하기 위해 개발자는 매일 작업 전 `main` 브랜치의 최신 상태를 당겨오고(pull/rebase) 변경 사항을 작게 유지하는 규율을 엄격히 지켜야 합니다 [11, 13].
|
||||
* **대규모/정기 릴리스 프로젝트에서의 한계**: 정해진 일정에 따라 버전을 묶어서 배포해야 하거나, 유지보수해야 할 과거 릴리스 버전이 여러 개인 대규모 프로젝트의 경우, 릴리스 브랜치가 없는 GitHub Flow는 구조적 한계를 가집니다. 이 경우에는 무겁더라도 Git Flow가 더 적합할 수 있습니다 [12, 16].
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
|
||||
#### [관계 유형 A: 아키텍처/기반 기술 (개발 워크플로우)]
|
||||
- [[Git Flow]]
|
||||
- 연결 이유: GitHub Flow와 자주 비교되는 분기 전략으로, 프로젝트의 복잡성에 따라 두 전략 사이를 마이그레이션하는 경우가 많습니다 [2, 12].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: `develop`, `release`, `hotfix` 브랜치를 사용하는 Git Flow를 이해함으로써, 상대적으로 GitHub Flow가 생략한 구조적 복잡성과 그에 따른 속도/단순성의 이점을 명확히 비교할 수 있습니다.
|
||||
- [[Trunk-Based Development]]
|
||||
- 연결 이유: 소규모 팀에서 빠르고 충돌 없는 병합을 위해 도입할 수 있는 또 다른 경량 워크플로우입니다 [3, 16].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 극단적으로 짧은 생명주기의 브랜치를 사용하거나 메인에 빈번히 직접 병합하는 철학을 통해 CI(지속적 통합)의 본질을 더 깊게 이해할 수 있습니다.
|
||||
|
||||
#### [관계 유형 B: 구현/활용 도구]
|
||||
- [[Pull Request]]
|
||||
- 연결 이유: GitHub Flow에서 코드 병합을 수행하고 팀원 간의 협업 및 리뷰를 진행하는 가장 핵심적인 메커니즘입니다 [8, 10].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 코드 품질 통제, 피어 리뷰(Peer Review)의 역할 및 CI/CD 훅(Hook)이 작동하는 방식을 구체적으로 이해할 수 있습니다.
|
||||
- [[CI/CD]]
|
||||
- 연결 이유: `main` 브랜치를 항상 배포 가능한 상태로 유지하기 위해 배후에서 코드를 검증하는 필수 자동화 파이프라인입니다 [1, 6].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 왜 수동 병합이 위험한지, PR 리뷰가 끝난 코드가 어떻게 안전하게 프로덕션 레벨까지 배포되는지의 전 과정을 파악할 수 있습니다.
|
||||
|
||||
### Deeper Research Questions
|
||||
- Git Flow 기반 프로젝트에서 GitHub Flow로 마이그레이션할 때, 기존의 버전 관리 체계 및 배포 자동화 파이프라인을 어떻게 재설계해야 하는가?
|
||||
- GitHub Flow 환경에서 기능이 미완성된 상태로 `main`에 병합되어야 할 때, Feature Flag(기능 토글)를 어떻게 효과적으로 활용할 수 있는가?
|
||||
- 팀 규모가 3~5인에서 20인 이상으로 급격히 성장할 때, GitHub Flow의 한계점은 구체적으로 어떻게 나타나며 어떤 시점에 워크플로우를 전환해야 하는가?
|
||||
- 커밋 히스토리를 정리하기 위해 권장되는 Squash Merge 방식이 장기적인 버그 추적성(Traceability) 관점에서는 어떤 단점을 가질 수 있는가?
|
||||
- Branch Protection을 통해 '최소 1인의 리뷰'와 'CI 통과'를 강제할 때, 코드 리뷰 병목 현상을 해결하기 위한 프로세스적 최적화 방법은 무엇인가?
|
||||
|
||||
### Practical Application Contexts
|
||||
- **Implementation:** 개발자는 JIRA 등에서 할당받은 티켓 ID를 기반으로 `feature/PROJ-123-login` 형식의 브랜치를 따고, 한 가지 논리적 변경사항만 담은 Atomic Commit을 수행한 뒤 PR을 생성합니다.
|
||||
- **System Design:** GitHub/GitLab 등의 레포지토리 설정에서 `main` 브랜치에 대해 직접 푸시(Direct Push)를 차단하고, Status Check(테스트 통과) 및 지정된 리뷰어의 Approve를 강제하는 보호 규칙(Branch Protection)을 설계합니다.
|
||||
- **Operation / Maintenance:** CI/CD 파이프라인이 `main` 브랜치의 변경을 감지하면 자동으로 프로덕션에 배포되도록 구성하고, 저장소의 깔끔한 관리를 위해 병합된 브랜치는 시스템에서 자동 삭제되도록 설정합니다.
|
||||
- **Learning Path:** Git 브랜치 기초 명령어 숙지 -> 1기능 1브랜치 원칙 실습 -> PR 작성 및 동료 리뷰 경험 -> 자동화된 CI/CD와의 연동 이해의 순서로 협업 능력을 성장시킬 수 있습니다.
|
||||
- **My Project Relevance:** 3~5명의 소규모 팀에서 충돌을 최소화하면서도 빠른 피드백과 릴리스가 필요한 현재 프로젝트 상황에, 불필요한 절차를 없애고 안정성을 보장하는 가장 이상적인 협업 모델로 적용할 수 있습니다.
|
||||
|
||||
### Adjacent Topics
|
||||
- [[Conventional Commits]]
|
||||
- 확장 방향: 커밋 메시지를 `feat:`, `fix:`, `chore:` 등의 규격으로 통일함으로써, PR 내용의 가독성을 높이고 향후 릴리스 노트를 자동화하는 방향으로 지식을 확장할 수 있습니다.
|
||||
- [[Issue Tracking System]]
|
||||
- 확장 방향: 코드 구현(GitHub)과 요구사항 정의(JIRA, Linear 등)를 연결하여 프로젝트 관리 수준을 높이고 변경 사항의 비즈니스 맥락(Traceability)을 추적하는 방법론으로 확장됩니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
@@ -0,0 +1,70 @@
|
||||
# [[Team Collaboration]]
|
||||
|
||||
## 📌 Brief Summary
|
||||
프론트엔드 개발에서 'Team Collaboration(팀 협업)'이란 다수의 개발자가 동일한 코드베이스에서 효율적으로 함께 작업할 수 있도록 지원하는 실천 방식, 아키텍처, 그리고 워크플로우를 의미한다 [1, 2]. 이는 일관된 폴더 구조, 명명 규칙, 상태 관리 패턴 및 Git 브랜칭 전략을 확립하여 개발자 간의 충돌과 소통 비용을 최소화하는 것을 목표로 한다 [2-4]. 성공적인 협업은 린팅이나 포매팅과 같은 자동화된 도구를 통한 엄격한 코드 거버넌스와 명확한 코드 리뷰 문화를 바탕으로 애플리케이션과 팀이 확장될 때 안정성을 유지하도록 돕는다 [5-7].
|
||||
|
||||
## 📖 Core Content
|
||||
* **Git 워크플로우 및 브랜칭 전략:**
|
||||
소규모 팀에서는 오버헤드가 적으면서도 충돌을 방지하는 '기능 브랜치(Feature-branch) 워크플로우'나 '트렁크 기반(Trunk-based) 개발'이 주로 권장된다 [8-10]. 모든 작업은 `main` 브랜치에 직접 커밋하지 않고 짧은 수명의 기능 브랜치에서 진행되며, Pull Request(PR)와 최소 1명 이상의 동료 리뷰(Peer review) 및 테스트 통과 후 병합되어야 한다 [7, 11, 12]. 또한, 브랜치명과 커밋 메시지에 티켓 ID(예: `PROJ-123`)를 포함하면 요구사항과 코드 변경 이력 간의 추적성(Traceability)을 확보할 수 있다 [13, 14].
|
||||
* **아키텍처 및 폴더 구조의 표준화:**
|
||||
표준화된 폴더 구조(예: 기능 기반 구조 또는 Feature-Sliced Design)는 파일의 위치를 예측 가능하게 하여 팀 협업을 크게 향상시킨다 [2]. 구조가 잘 잡혀 있으면 개발자들이 파일을 찾는 시간을 줄이고, 팀원 간 불필요한 소통을 줄일 수 있으며, 신규 개발자의 온보딩이 빨라진다 [2, 15]. 또한 각 기능이 독립된 폴더로 격리되어 있어 서로의 코드를 간섭할 확률이 낮아진다 [16].
|
||||
* **명명 규칙(Naming Conventions) 및 자동화된 거버넌스:**
|
||||
컴포넌트 이름은 파스칼 케이스(PascalCase), 파일 및 폴더 이름은 케밥 케이스(kebab-case)를 사용하는 등 일관된 명명 규칙은 OS 환경 간의 빌드 오류를 방지하고 코드 가독성을 높인다 [17-19]. 더 나아가 수동 검사에 의존하기보다 ESLint, Prettier, Husky를 활용해 커밋 이전에 린팅, 포매팅 및 타입 검사를 자동으로 강제하는 것이 고품질 코드 협업의 기반이다 [6, 20, 21].
|
||||
* **상태 관리 도구와 팀 규모의 상관관계:**
|
||||
팀의 규모가 클수록(10명 이상) 구조를 강제하는 도구가 협업에 유리하다 [5]. Zustand와 같은 도구는 유연하고 빠르지만, 규율이 부족하면 개발자마다 비동기 작업을 다르게 처리하여 코드베이스에 혼란(integration chaos)을 초래할 수 있다 [22, 23]. 반면 Redux는 보일러플레이트가 많지만, 팀 전원이 동일한 방식으로 코드를 작성하게 만드는 '단일 진실 공급원'과 구조를 제공하여 대규모 협업에서 버그를 줄인다 [5, 24, 25].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
* **유연성 vs. 구조적 강제성 (상태 관리):** Zustand 같이 가벼운 상태 관리 라이브러리는 보일러플레이트가 적어 빠른 기능 개발(스타트업 등)에 적합하지만, 유연성이 너무 커서 팀이 커질 경우 파편화된 패턴을 낳을 수 있다 [22, 23, 26, 27]. 반면 Redux는 일관성을 강제하여 디버깅과 협업을 편하게 해주지만, 초기 설정과 구조화에 드는 시간이 소규모 팀에게는 과도한 오버헤드로 작용할 수 있다 [5, 24, 28].
|
||||
* **브랜칭 워크플로우의 무게감:** Git Flow는 예정된 릴리스를 관리하는 거대 프로젝트에는 유용하지만, 소규모 팀에게는 브랜치 관리 비용이 너무 커서 개발 속도를 늦출 수 있다 [8, 29]. 가벼운 Feature-branch 워크플로우나 Trunk-based 개발이 대안이지만, 이는 개발자들이 브랜치를 짧게 유지하고 빈번히 병합(Merge)하는 규율을 스스로 지켜야만 성공할 수 있다 [30, 31].
|
||||
* **초기 학습 곡선과 오버헤드:** Feature-Sliced Design(FSD) 같은 엄격한 아키텍처는 코드의 모듈화와 독립적 작업(병렬 작업)을 가능하게 하지만, 초기 도입 시 팀원 전체가 해당 방법론(Layer, Slice 등의 개념)을 이해하고 동의해야 하는 학습 비용이 발생한다 [32, 33]. 규칙에 대한 지식 공유와 문서화가 동반되지 않으면, 개발자들이 임의로 하위 폴더나 `/shared` 등에 코드를 쏟아부어 오히려 아키텍처가 망가지는 결과를 낳을 수 있다 [33].
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
|
||||
#### [관계 유형 A (협업/코드 관리 프로세스)]
|
||||
- [[Git Branching Strategies]]
|
||||
- 연결 이유: 다수의 개발자가 동시에 코드를 작성할 때 충돌을 방지하고 통합 과정을 관리하기 위한 핵심 규약이기 때문이다 [3, 34].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: Pull Request, 코드 리뷰, 브랜치 명명 규칙, Trunk-based 워크플로우 등 실제 팀 운영 방식 [7, 35].
|
||||
- [[Commit Message Conventions]]
|
||||
- 연결 이유: 변경 사항의 의도와 작업 내역(버그 픽스, 기능 추가 등)을 다른 팀원들에게 명확히 전달하는 소통의 도구이기 때문이다 [36].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 티켓 ID 통합, `feat:`, `fix:`와 같은 접두사를 통한 변경 이력의 자동화 및 스캐닝 [14, 36, 37].
|
||||
|
||||
#### [관계 유형 B (아키텍처 및 거버넌스 도구)]
|
||||
- [[Feature-Sliced Design]]
|
||||
- 연결 이유: 코드를 기술적 계층이 아닌 비즈니스 기능(Feature) 중심으로 분리하여, 여러 팀이 서로 간섭 없이 독립적으로 작업할 수 있는 환경을 제공한다 [16, 38].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 도메인 주도 설계의 프론트엔드 적용, 명시적 퍼블릭 API를 통한 모듈 캡슐화와 결합도 낮추기 [38-40].
|
||||
- [[Automated Governance]]
|
||||
- 연결 이유: 사람의 수동 확인에 의존하지 않고 ESLint, Prettier, Husky 등으로 코드 컨벤션과 아키텍처 룰(의존성 방향 등)을 시스템적으로 강제한다 [6, 20].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: CI/CD 파이프라인에서의 코드 품질 보증 및 팀원 간의 스타일 분쟁 방지 [20].
|
||||
- [[Redux vs Zustand in Teams]]
|
||||
- 연결 이유: 팀의 규모(소규모 vs 엔터프라이즈)에 따라 상태 관리 도구의 선택이 협업의 일관성에 결정적인 영향을 미치기 때문이다 [5, 24, 27].
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 개발자의 자율성 부여와 일관성 강제(Boilerplate) 사이의 아키텍처적 트레이드오프 [22, 41].
|
||||
|
||||
### Deeper Research Questions
|
||||
|
||||
- 소규모 팀(2~5인)에서 대규모 팀(10인 이상)으로 확장할 때 Git 워크플로우와 브랜칭 전략은 어떻게 진화해야 하는가?
|
||||
- Feature-Sliced Design(FSD)을 프로젝트에 도입할 때, 팀원들이 공통 모듈을 `/shared` 폴더에 무분별하게 추가하는 것을 방지할 수 있는 구체적인 거버넌스 전략은 무엇인가?
|
||||
- ESLint와 Husky를 활용한 자동화 거버넌스 설정 시, 개발 속도를 늦추지 않으면서 모듈 간 잘못된 의존성(상위 레이어 참조 등)을 원천 차단하는 최적의 규칙 구성은 무엇인가?
|
||||
- 상태 관리 라이브러리(Redux vs Zustand)의 선택이 팀원 간의 비동기 로직 및 데이터 패칭(Fetching) 패턴의 파편화에 미치는 실제 영향은 무엇인가?
|
||||
- Pull Request 기반의 협업 환경에서, 시각적 회귀 테스트 도구(예: Storybook, Chromatic)가 코드 리뷰의 병목 현상을 어떻게 해소할 수 있는가?
|
||||
|
||||
### Practical Application Contexts
|
||||
|
||||
- **Implementation:** 코드를 커밋하고 PR을 생성할 때, 반드시 정해진 Conventional Commits 규칙을 따르고 JIRA 등의 이슈 티켓 번호를 브랜치와 커밋에 기입하여 추적성을 보장한다 [14, 37].
|
||||
- **System Design:** 프로젝트 폴더 구조 설계 시 기술적 파일 타입(컴포넌트, 훅 등)의 나열이 아닌, 인증, 대시보드 등 기능(Feature) 도메인 단위로 격리시켜 각 기능별로 전담 개발자가 병렬로 작업할 수 있도록 한다 [2, 42, 43].
|
||||
- **Operation / Maintenance:** CI/CD 파이프라인과 Git Hooks(Husky)를 세팅하여, 누군가 컨벤션을 어긴 코드를 푸시하려고 할 때 사전에 린터와 포매터가 작동해 잘못된 코드가 원격 브랜치에 올라가는 것을 차단한다 [20].
|
||||
- **Learning Path:** 신규 입사자나 팀원이 배정되었을 때, `README`에 명시된 팀의 브랜칭 전략 규칙과 폴더 디렉토리 설계 의도를 먼저 학습하게 하여 프로젝트 온보딩 시간을 단축한다 [2, 44].
|
||||
- **My Project Relevance:** 다수의 프론트엔드 개발자가 함께 참여하는 리액트 프로젝트에서, 코드 충돌과 기술 부채를 방지하고 일관된 제품 품질을 유지하기 위해 필수적으로 수립해야 하는 협업 그라운드 룰(Ground Rules)이다.
|
||||
|
||||
### Adjacent Topics
|
||||
|
||||
- [[Code Review Practices]]
|
||||
- 확장 방향: 작은 단위의 Pull Request 유지, 시각적 리뷰 도구의 도입, 효율적인 동료 피드백 제공 등 코드 리뷰 자체의 품질과 속도를 높이는 방법론 [37, 45].
|
||||
- [[CI/CD Pipelines]]
|
||||
- 확장 방향: 팀원의 코드가 `main`에 병합되기 전, 자동으로 테스트와 린팅을 수행하고 배포까지 이어지는 인프라 및 데브옵스 환경 [7].
|
||||
- [[Visual Regression Testing]]
|
||||
- 확장 방향: Storybook 및 Chromatic을 활용해 UI 변경 사항을 리뷰어가 시각적으로 직접 확인하고, 예기치 않은 레이아웃 깨짐을 방지하는 협업 기술 [45, 46].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
@@ -0,0 +1,69 @@
|
||||
# [[Version Control]]
|
||||
|
||||
## 📌 Brief Summary
|
||||
버전 관리(Version Control)는 소규모부터 대규모 팀에 이르기까지 코드의 변경 사항을 추적하고, 병합 충돌을 방지하며 안정적인 배포를 가능하게 하는 필수적인 협업 도구 및 거버넌스 프로세스입니다 [1, 2]. 개발팀은 프로젝트 규모와 팀의 숙련도에 따라 Feature-Branch 워크플로우, Trunk-based 개발, Git Flow 등 다양한 브랜칭 전략을 선택하여 사용합니다 [3, 4]. 효과적인 버전 관리는 브랜치와 커밋에 티켓 ID 연동, 의미 있는 커밋 메시지 작성, 작고 빈번한 커밋, 그리고 엄격한 풀 리퀘스트(PR) 리뷰 등의 모범 사례를 준수하여 코드베이스의 품질과 추적성을 유지하는 것을 목표로 합니다 [2, 5].
|
||||
|
||||
## 📖 Core Content
|
||||
* **주요 브랜칭 전략 (Branching Strategies)**
|
||||
* **Feature-Branch Workflow**: 2~5인 규모의 소규모 팀에게 가장 권장되는 단순하고 충돌이 적은 방식입니다 [6]. `main` 브랜치는 항상 안정적이고 배포 가능한 상태를 유지하며, 각 기능이나 버그 수정은 `main`에서 분기된 짧은 수명의 개별 브랜치에서 진행됩니다 [6, 7].
|
||||
* **Trunk-Based Development**: 짧은 기능 브랜치를 활용하여 메인 브랜치(Trunk)에 코드를 빠르고 빈번하게 병합하는 전략으로, 강력한 CI/CD 환경과 경험이 많은 팀에게 적합합니다 [8, 9].
|
||||
* **Git Flow & GitHub Flow**: Git Flow는 별도의 릴리스 브랜치 등을 두어 스케줄에 따른 대규모 프로젝트를 관리하기 좋지만, 작은 팀에게는 절차가 무겁습니다 [9]. 반면 GitHub Flow는 더 단순하며 빠른 통합을 지향합니다 [10].
|
||||
|
||||
* **명명 규칙 및 추적성 (Naming Conventions & Traceability)**
|
||||
* **브랜치 명명 (Branch Naming)**: 브랜치 이름에는 작업의 유형과 티켓 ID, 짧은 설명을 포함하는 것(예: `feature/PROJ-123-user-auth`)이 권장되며, 일관성 있게 소문자와 하이픈을 사용해야 합니다 [11, 12].
|
||||
* **커밋 메시지 (Commit Messages)**: 'Conventional Commits' 사양을 따라 `feat:`, `fix:`, `docs:`, `refactor:`, `chore:` 등의 접두사를 사용하여 변경 목적을 명확히 해야 합니다 [5, 13]. 커밋은 논리적인 단일 변경 사항만을 포함하는 '원자적 커밋(Atomic Commits)' 형태여야 합니다 [14].
|
||||
|
||||
* **병합 및 리뷰 프로세스 (Merging and Code Review)**
|
||||
* **Pull Request (PR)**: 코드를 `main`에 병합하기 전 반드시 PR을 열어 최소 1명 이상의 동료 리뷰를 거치고 CI 테스트를 통과해야 합니다 [15, 16]. 리뷰가 쉽게 진행되도록 PR은 작게 유지해야 합니다 [13].
|
||||
* **충돌 예방 및 정리**: 병합 충돌을 피하기 위해 `main` 브랜치의 최신 변경 사항을 자주 가져와 동기화(pull/rebase)해야 하며, 병합할 때는 'Squash & Merge'를 사용하여 커밋 히스토리를 깔끔하게 유지하고 병합 후에는 사용한 브랜치를 자동 삭제하는 것이 좋습니다 [15, 17, 18].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
* **오버헤드 vs. 제어력**: Git Flow와 같이 구조화되고 무거운 프로세스는 대규모 애플리케이션의 릴리스 일정을 관리하기 좋지만, 소규모 팀에게는 프로세스 오버헤드가 너무 커서 개발 속도를 저하시킬 수 있습니다 [9, 19]. 반대로 너무 단순한 전략은 엄격한 제어가 필요한 대형 프로젝트에서 문제를 일으킬 수 있으므로 팀 규모와 요구사항에 맞춘 전략 선택이 필요합니다 [20].
|
||||
* **Trunk-Based 개발의 제약사항**: 병합 충돌을 최소화하고 빠른 피드백을 제공하지만, 개발팀의 높은 숙련도와 강력한 CI 검증 파이프라인이 전제되어야 합니다 [9]. 또한, 미완성된 기능이 병합될 위험이 있으므로 기능 플래그(Feature flags)를 추가로 도입해야 하는 제약이 발생합니다 [19].
|
||||
* **장기 브랜치(Long-lived Branches)의 반대급부**: 기능 개발을 위해 브랜치를 너무 오래 유지하면 병합 시점에 엄청난 코드 충돌(merge conflicts)을 처리해야 하는 위험이 있습니다 [12, 21]. 따라서 충돌을 방지하기 위해서는 작업자가 매일 `main` 브랜치와 동기화하는 지속적인 유지보수 노력을 기울여야 합니다 [18].
|
||||
|
||||
## 🔗 Knowledge Connections
|
||||
|
||||
### Related Concepts
|
||||
|
||||
#### [워크플로우 및 방법론 (Workflow Strategies)]
|
||||
- [[Feature Branch Workflow]]
|
||||
- 연결 이유: 버그 수정이나 새 기능 개발 시 `main`과 분리된 독립적이고 짧은 수명의 브랜치를 사용하는 전략이기 때문입니다. [6, 7]
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 어떻게 `main` 브랜치의 안정성을 훼손하지 않으면서도 다수의 개발자가 코드를 작성하고 충돌을 방지할 수 있는지 이해할 수 있습니다.
|
||||
- [[Trunk-Based Development]]
|
||||
- 연결 이유: 모든 개발자가 빈번하게 짧은 주기로 메인 브랜치(Trunk)에 코드를 병합하는 방법론이기 때문입니다. [8, 9]
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 지속적 통합(CI)을 어떻게 보장하며, 장기 브랜치로 인해 발생하는 문제를 어떻게 회피하는지 파악할 수 있습니다.
|
||||
- [[Git Flow]]
|
||||
- 연결 이유: 릴리스용 브랜치와 개발용 브랜치를 명확히 나누어 복잡한 프로젝트 릴리스를 관리하는 아키텍처이기 때문입니다. [9, 19]
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 팀의 규모와 배포 스케줄에 따라 워크플로우에 어떤 구조적 레이어를 추가해야 하는지 이해할 수 있습니다.
|
||||
|
||||
#### [협업 및 품질 관리 (Quality Assurance & Collaboration)]
|
||||
- [[Pull Request (PR)]]
|
||||
- 연결 이유: 코드를 주 브랜치에 병합하기 전, 변경 사항을 동료에게 검토받는 핵심 품질 통제 절차이기 때문입니다. [13, 16]
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 코드 리뷰와 CI 테스트 자동화가 어떻게 실제 코드 품질을 유지하고 팀 내 지식 공유를 돕는지 이해할 수 있습니다.
|
||||
- [[Conventional Commits]]
|
||||
- 연결 이유: `feat:`, `fix:`와 같이 표준화된 접두사를 사용하여 커밋 메시지의 의도를 명확하게 만드는 구문 규칙이기 때문입니다. [5, 13]
|
||||
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 커밋 히스토리를 통한 변경 사항 추적성 확보와 릴리스 노트 자동화에 어떻게 기여하는지 이해할 수 있습니다.
|
||||
|
||||
### Deeper Research Questions
|
||||
- 소규모 팀(2~5명)이 성장하여 10명 이상의 대규모 조직이 될 때, Feature-Branch 워크플로우에서 Git Flow 등 더 복잡한 전략으로 마이그레이션하는 구체적이고 안전한 방법은 무엇인가? [9, 20]
|
||||
- Trunk-based 개발 환경에서 불완전한 코드를 배포하지 않기 위해 사용하는 기능 플래그(Feature Flags)는 버전 관리 및 브랜칭 전략의 복잡성에 어떤 영향을 미치는가? [19]
|
||||
- Pull Request 완료 시 'Squash & Merge' 방식과 'Merge Commit' 방식 간의 커밋 히스토리 가독성 및 롤백 용이성 차이는 어떻게 나타나는가? [15, 17, 18]
|
||||
- 브랜치 이름과 커밋 메시지에 티켓 ID를 의무적으로 포함하는 거버넌스는, 실제 이슈 트래킹 도구(예: JIRA) 및 CI/CD 파이프라인과 결합 시 어떤 자동화 혜택을 제공하는가? [2, 10]
|
||||
- 장기 기능 브랜치(Long-lived feature branches)로 인해 발생하는 거대한 병합 충돌을 피하기 위해 팀은 일일 작업에서 어떤 동기화 패턴을 습관화해야 하는가? [18, 21]
|
||||
|
||||
### Practical Application Contexts
|
||||
- **Implementation:** 브랜치 생성 시 `feature/PROJ-123-user-auth`처럼 티켓 ID를 포함하는 명명 규칙을 적용하고, `feat: add login form` 등의 Conventional Commits 형식을 사용하여 구현 이력을 체계적으로 관리합니다 [10, 11].
|
||||
- **System Design:** 코드를 하나의 논리적 단위로 분리하는 원자적 커밋(Atomic Commits) 규칙을 도입하고, CI/CD 체크가 통과되고 1인 이상이 승인해야만 `main`에 병합 가능하도록 브랜치 보호(Branch Protection) 시스템을 설계합니다 [14, 15].
|
||||
- **Operation / Maintenance:** `main` 브랜치는 항상 안정적이고 배포 가능한(deployable) 상태를 유지하도록 운영하며, 병합 완료 후 사용이 끝난 기능 브랜치를 자동 삭제 설정하여 저장소를 깔끔하게 유지합니다 [7, 15, 18].
|
||||
- **Learning Path:** 처음에는 복잡한 룰 없이 단순한 Feature-Branch 워크플로우와 명확한 네이밍 규칙을 익히고, 숙련도가 높아지면 자동화된 CI 환경 하의 Trunk-Based 개발 또는 복잡한 버전 관리를 위한 Git Flow로 학습을 확장합니다 [9, 19, 20].
|
||||
- **My Project Relevance:** 프론트엔드/React 개발 프로젝트 등의 팀 단위 협업 시, 불필요한 절차 없이 코드 충돌을 최소화하고 추적 가능한 변경 내역을 보장하는 협업 기준을 마련하는 데 즉각적으로 활용할 수 있습니다 [1, 22].
|
||||
|
||||
### Adjacent Topics
|
||||
- [[Continuous Integration / Continuous Deployment (CI/CD)]]
|
||||
- 확장 방향: PR 단계에서 자동화된 테스트 및 린팅을 실행하고, 메인 브랜치 병합 시 배포를 자동화하여 버전 관리 도구와 어떻게 시너지를 내는지 조사. [1, 19]
|
||||
- [[Issue Tracking Systems]]
|
||||
- 확장 방향: JIRA나 GitHub Issues 등의 도구가 Git의 티켓 ID 거버넌스와 결합되어 요구사항부터 코드 변경까지 어떻게 완벽한 추적성(Traceability)을 보장하는지 조사. [2, 23]
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-30*
|
||||
Reference in New Issue
Block a user