Files
gui-gitea-operation/guide-repository-naming.md

141 lines
7.2 KiB
Markdown

# 실용적 Repository 명명 규칙 가이드
본 가이드는 연구 조직의 디지털 자산을 체계적으로 관리하기 위한 Repository 명명 규칙을 정의합니다. 프로젝트 성격에 따라 **모노레포(Monorepo)**와 **독립 Repository**로 나누어 설명합니다.
---
## 1. 핵심 원칙
모든 Repository는 다음 세 가지 공통 원칙을 따릅니다.
1. **형식**: 소문자와 하이픈(`-`)만 사용합니다. (예: `my-project`)
2. **언어**: 글로벌 협업을 위해 영문으로 작성합니다.
3. **명확성**: 이름만으로 목적을 쉽게 파악할 수 있도록 명확하고 직관적으로 작성합니다.
---
## 2. 모노레포 vs. 독립 Repository
새로운 작업을 시작하기 전, 아래 표를 참고하여 프로젝트에 가장 적합한 Repository 구조를 선택하세요.
| 구분 | 모노레포 (Monorepo) | 독립 Repository |
| :--- | :--- | :--- |
| **핵심 개념** | 하나의 큰 프로젝트에 속한 모든 코드를 단일 Repository에서 관리 | 각 Repository가 명확하고 독립적인 목적을 가짐 |
| **이름 규칙**| 프로젝트명 (접두사/접미사 없음) | `xxx-핵심주제` (3글자 접두사 기반) |
| **사용 시점**| 웹, API, 문서 등 여러 컴포넌트가 긴밀하게 연결된 단일 제품/프로젝트 | 조직 공용 도구, 특정 목적의 분석, 논문, 가이드, 템플릿 등 |
| **장점** | 코드 재사용 용이, 일관된 버전 관리, 리팩토링 편리 | 명확한 소유권, 독립적인 빌드/배포, 가볍고 빠른 클론 속도 |
| **예시** | `research-portal` | `gui-git-workflow`, `anl-user-retention-2024`, `tpl-python-service` |
---
## 3. 독립 Repository 명명 규칙
독립 Repository는 `xxx-핵심주제` 구조를 따릅니다. 이 규칙은 Repository의 성격을 명확히 하고 검색을 용이하게 합니다.
### 접두사 요약
| 접두사 (Prefix) | 의미 (Meaning) | 사용 사례 (Use Case) |
| :--- | :--- | :--- |
| `tpl-` | Template | 새로운 프로젝트를 시작하기 위한 표준 구조/코드 |
| `anl-` | Analysis | 특정 시점의 데이터 분석 결과 및 코드 |
| `res-` | Research | 독립적인 연구 코드 |
| `ppr-` | Paper | 논문 재현을 위한 코드 |
| `tst-` | Test | 신기술, 라이브러리의 독립적 테스트 |
| `poc-` | Proof of Concept | 특정 기술에 대한 개념 검증 |
| `tol-` | Tool | 조직 전반에서 사용하는 공용 개발/운영 도구 |
| `inf-` | Infrastructure | 공용 인프라 관리 코드 (IaC) |
| `doc-` | Documentation | 조직 전체의 공식 기술/정책 문서 |
| `gui-` | Guide | 특정 절차나 워크플로우에 대한 가이드 |
| `lib-` | Library | 여러 프로젝트에서 공용으로 사용하는 라이브러리 |
| `dat-` | Data | 조직에서 관리하는 공용 데이터셋 |
### 접두사별 상세 가이드
#### 템플릿 (`tpl-`)
새로운 프로젝트의 보일러플레이트로 사용될 표준 구조 및 코드 템플릿입니다.
- **구조**: `tpl-{기술스택-또는-프로젝트유형}`
- **예시**:
- `tpl-python-service`: Python 기반 마이크로서비스 프로젝트 템플릿
- `tpl-react-web-app`: React 기반 웹 애플리케이션 표준 템플릿
#### 📊 데이터 분석 (`anl-`)
일회성이거나 특정 시점의 데이터 분석 결과 및 코드를 저장합니다.
- **구조**: `anl-{분석내용}-{연도/분기}`
- **예시**:
- `anl-user-retention-2024-q2`: 2024년 2분기 사용자 리텐션 분석
- `anl-market-research-gen-ai`: 생성형 AI 시장 조사 분석
#### 🔬 연구 및 논문 (`res-`, `ppr-`)
독립적인 순수 연구나 논문 재현을 위한 코드입니다.
- **구조**: `res-{연구주제}` 또는 `ppr-{논문제목-키워드}-{연도}`
- **예시**:
- `res-protein-folding-simulation`: 단백질 폴딩 시뮬레이션 연구
- `ppr-attention-is-all-you-need-2017`: "Attention Is All You Need" 논문 재현
#### 🧪 테스트 및 개념 검증 (`tst-`, `poc-`)
신기술, 라이브러리를 독립적으로 테스트하거나 아이디어의 실현 가능성을 검증합니다.
- **구조**: `tst-{테스트대상}` 또는 `poc-{검증개념}`
- **예시**:
- `tst-pytorch-vs-tensorflow`: PyTorch와 TensorFlow 성능 비교 테스트
- `poc-vector-db-search`: 벡터 DB를 활용한 시맨틱 검색 PoC
#### 🛠️ 도구 및 인프라 (`tol-`, `inf-`)
조직 전반에서 공용으로 사용되는 개발 도구나 인프라 관리 코드(IaC)입니다.
- **구조**: `tol-{도구목적}` 또는 `inf-{관리대상}`
- **예시**:
- `tol-data-anonymization`: 데이터 익명화 처리 스크립트
- `inf-kubernetes-cluster`: 공용 쿠버네티스 클러스터 설정 (Terraform)
#### 📜 문서 및 가이드 (`doc-`, `gui-`)
특정 프로젝트에 종속되지 않는 조직의 공식 문서나 프로세스 가이드입니다.
- **구조**: `doc-{문서성격}` 또는 `gui-{가이드주제}`
- **예시**:
- `doc-api-style-guide`: 조직의 API 스타일 가이드 문서
- `gui-onboarding-for-engineers`: 신규 엔지니어 온보딩 가이드
#### 📚 기타 (`lib-`, `dat-`)
- **`lib-{패키지명}`**: 여러 프로젝트에서 공용으로 사용하는 라이브러리
- 예: `lib-react-ui-kit`
- **`dat-{데이터설명}`**: 조직에서 관리하는 공용 데이터셋
- 예: `dat-korean-sentiment-corpus`
---
## 4. 모노레포 시작 가이드
모노레포 Repository 이름은 접두사 없이 프로젝트명을 그대로 사용합니다. (예: `research-portal`)
> **중요: 모노레포는 처음부터 만들지 마세요.**
>
> 일관성을 유지하고 초기 설정 시간을 줄이기 위해, 모든 모노레포 프로젝트는 반드시 사전에 정의된 **템플릿 Repository(`tpl-`)**에서 시작해야 합니다.
### 새로운 템플릿이 필요하다면?
만약 현재 프로젝트에 적합한 모노레포 템플릿이 없다면, 새로운 템플릿 생성을 제안할 수 있습니다.
1. **`gui-gitea-operation` 저장소**의 `Issues` 탭에서 새로운 이슈를 생성합니다.
2. **제목**은 `tpl-{템플릿 이름}`과 같이 제안하는 템플릿의 이름을 명시합니다.
3. **본문**에는 템플릿의 필요성, 기대 효과, 포함될 기술 스택 및 디렉토리 구조 등을 상세히 기입합니다.
4. 이슈에 **`Propose new gitea template` 레이블**을 추가하여 제안을 제출합니다.
담당자는 제안된 내용을 검토하여 템플릿 생성 여부를 결정합니다.
### 시작 절차
1. GitHub에서 승인된 `tpl-*` 템플릿 Repository로 이동합니다.
2. `Use this template` 버튼을 클릭하여 새로운 Repository를 생성합니다.
3. 새 Repository의 이름을 최종 프로젝트명으로 지정합니다. (예: `research-portal`)
#### 예시: `research-portal`
- **Repository 이름**: `research-portal`
- **내부 폴더 구조 (템플릿 제공)**:
```plaintext
research-portal/
├── .github/
├── apps/ # 애플리케이션 (웹, 문서 등)
│ ├── web/
│ └── docs-site/
├── packages/ # 공유 패키지 (UI 컴포넌트, 로거 등)
│ ├── ui-kit/
│ └── logger/
└── README.md
```