# [[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*