λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/ops

SVN 을 μ΄μš©ν•œ ν˜•μƒκ΄€λ¦¬ PART.2 - SVN 브랜치 μ „λž΅ μ„Έμš°κΈ°

by HandHand 2022. 3. 1.

SVN 브랜치 μ „λž΅ μ„Έμš°κΈ°

 

πŸ“Œ SVN으둜 μ–΄λ–»κ²Œ 버전 관리λ₯Ό ν•˜λŠ” 것이 μ’‹μ„κΉŒ?

SVN을 μ΄μš©ν•œ 버전 관리 μ‹œμŠ€ν…œμ˜ 두 번째 ν¬μŠ€νŒ…μž…λ‹ˆλ‹€.

이번 ν¬μŠ€νŠΈμ—μ„œλŠ” SVN 을 ν™œμš©ν•œ 브랜치 μ „λž΅μ— μ΄ˆμ μ„ λ§žμΆ°λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

πŸ“Œ Git Flow?

버전 관리 μ‹œμŠ€ν…œμ— λŒ€ν•΄μ„œ κ³΅λΆ€ν•˜λ‹€ 보면 (특히 git) git-flow 에 λŒ€ν•΄μ„œ ν•œ λ²ˆμ―€μ€ 보게 λ©λ‹ˆλ‹€.

이걸 처음 봀을 λ•ŒλŠ” 이보닀 μ™„λ²½ν•œ 버전 관리 방법은 없을 것 κ°™λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

 

1

λŒ€λž΅μ μœΌλ‘œ μ΄λŸ¬ν•œ 흐름을 가지고 μžˆμ–΄μš”

SVN 을 버전 관리 μ‹œμŠ€ν…œμœΌλ‘œμ„œ 보닀 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ

μ—„κ²©ν•œ git-flow 방식을 μ°¨μš©ν•˜λŠ” 것은 μ–΄λ–¨κΉŒ κ³ λ―Όν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

κ³§λ°”λ‘œ 같이 μΌν•˜λŠ” κ°œλ°œμžλΆ„μ—κ²Œ ν”Όλ“œλ°±μ„ μš”μ²­ν•˜λ‹ˆ μ €μ—κ²Œ μ΄λ ‡κ²Œ λ°˜λ¬Έν•˜μ…¨μŠ΅λ‹ˆλ‹€.

 

λ§Œμ•½ νŠΉμ • κΈ°λŠ₯을 νŠΉμ • ν˜•μƒμ— λ°˜μ˜ν•΄λ‹¬λΌκ³  ν•˜λŠ” μš”μ²­μ— λŒ€ν•΄μ„œλŠ” μ–΄λ–»κ²Œ λ‹€λ£° 수 μžˆμ„κΉŒμš”?

 

μ €λŠ” 닡변을 μ œλŒ€λ‘œ ν•  수 μ—†μ—ˆκ³  git-flow λŠ” ν˜„μž¬ 우리 ν”„λ‘œμ νŠΈμ˜ 성격과

잘 λ§žμ§€ μ•Šμ•„ λ‹€λ₯Έ 방법을 μ°Ύμ•„μ•Ό ν•œλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ μš°λ¦¬κ°€ Git Flowλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ 이유

ν˜„μž¬ μ œκ°€ νšŒμ‚¬μ—μ„œ μ§„ν–‰ν•˜κ³  μžˆλŠ” ν”„λ‘œμ νŠΈλŠ” λΉ λ₯Έ 주기둜 μƒˆλ‘œμš΄ κΈ°λŠ₯듀이 μΆ”κ°€λ˜κ³ 

검증과정을 거쳐 운영 베타(μ‹€μ œ 운영 λ°”λ‘œ μ§μ „μ˜ 버전)에 배포되고 μžˆμŠ΅λ‹ˆλ‹€.

λ„μ‹ν™”ν•˜λ©΄ λ‹€μŒκ³Ό 같은 νλ¦„μœΌλ‘œ 앱이 배포되고 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

개발 -> 검증 -> μš΄μ˜λ² νƒ€ -> 운영

개발 μ—μ„œ μš”κ΅¬μ‚¬ν•­μ„ κ΅¬ν˜„ν•˜κ³ ,

검증 μ—μ„œ QA λΆ„λ“€κ³Ό ν•¨κ»˜ κ²€μˆ˜λ₯Ό μ§„ν–‰ν•˜λ©°

운영 에 올리기 μ „ 운영 베타 μ—μ„œ μ΅œμ’… 확인을 μ§„ν–‰ν•˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

 

이 κ³Όμ •μ—μ„œ 사업적인 μš”κ±΄, λ˜λŠ” 기타 μ—¬λŸ¬ 가지 문제둜

가끔씩은 νŠΉμ • κΈ°λŠ₯의 λ°˜μ˜μ„ λ¨Όμ € ν•΄λ‹¬λΌλŠ” μš”μ²­μ΄ λ“€μ–΄μ˜€κ±°λ‚˜

이번 λ°°ν¬μ—μ„œλŠ” μ œμ™Έν•΄λ‹¬λΌλŠ” 뢀탁을 받을 λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€ πŸ˜….

 

λ§Œμ•½ μ—¬κΈ°μ„œ 정석적인 Git-Flow λ₯Ό μ‚¬μš©ν•˜κ²Œ 되면

이전에 dev λΈŒλžœμΉ˜μ—μ„œ νŒŒμƒλ˜μ–΄ μ½”λ“œ 반영이 λλ‚œ feature 브랜치의 λ‚΄μš©μ΄

κ·ΈλŒ€λ‘œ 검증 ν™˜κ²½μœΌλ‘œ λ„˜μ–΄κ°€λŠ” λ¬Έμ œκ°€ 생길 수 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

κΈ°λŠ₯ λ‹¨μœ„λ‘œ μ œμ–΄ν•˜κΈ°λ₯Ό μ›ν•˜λŠ” 저희 ν”„λ‘œμ νŠΈ μ„±κ²©μ—λŠ” λ§žμ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

 

πŸ“Œ 더 효율적인 방법은 λ¬΄μ—‡μΌκΉŒ?

브랜치 μ „λž΅μœΌλ‘œ ν•΄κ²°ν•˜κ³  싢은 λ¬Έμ œλ“€

λ”°λΌμ„œ μ €ν¬λŠ” λ‹€μŒκ³Ό 같은 쑰건듀을 λ§Œμ‘±ν•˜λŠ” 브랜치 μ „λž΅μ— λŒ€ν•΄μ„œ κ³ λ―Όν–ˆμŠ΅λ‹ˆλ‹€.

  • μ„œλ‘œμ˜ 개발 μ˜μ—­μ˜ 영ν–₯도λ₯Ό μ΅œμ†Œν™”ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • κΈ΄κΈ‰ λ°˜μ˜μ΄λ‚˜ νŠΉμ • κΈ°λŠ₯에 λŒ€ν•œ μˆ˜μ • 및 반영 건도 μ²˜λ¦¬ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • λ‹€μˆ˜μ˜ κ°œλ°œμžκ°€ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 직관적이며 λ³΅μž‘ν•˜μ§€ μ•Šμ€ μ „λž΅μ΄μ–΄μ•Ό ν•œλ‹€.

 

κ·Έλž˜μ„œ λ‹€μŒκ³Ό 같이 λ‚˜λˆ„μ—ˆμŠ΅λ‹ˆλ‹€

λ”°λΌμ„œ μ €ν¬λŠ” λ‹€μŒκ³Ό 같이 브랜치λ₯Ό λ‚˜λˆ„μ–΄ ν˜•μƒμ„ κ΄€λ¦¬ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

app, feature, develop, stage, beta, trunk

각각의 λΈŒλžœμΉ˜μ— λŒ€ν•œ μš©λ„λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

app 브랜치

app λΈŒλžœμΉ˜λŠ” μ™Έμ£Ό κ°œλ°œμžκ°€ 주둜 μž‘μ—…ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ 상황 상 λͺ¨λ“  μ™Έμ£Ό 개발자 λΆ„λ“€μ—κ²Œ μƒˆλ‘œμš΄ 브랜치 μ „λž΅μ„ μ„€λͺ…ν•˜κ³  이λ₯Ό 적용 μ‹œλŠ” λΉ„μš©μ΄ 크닀고 νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ 배포에 λŒ€ν•œ κΆŒν•œμ€ λͺ¨λ‘ λ‚΄λΆ€ κ°œλ°œμžλ“€μ—κ²Œ μžˆμ–΄μ„œ, μ½”λ“œ merge μ‹œ μˆ˜μ •μ΄ ν•„μš”ν•œ 뢀뢄은 νŒŒμ•…μ΄ κ°€λŠ₯ν•œ κ΅¬μ‘°μ˜€μŠ΅λ‹ˆλ‹€.

κ°„λ‹¨ν•œ UI μˆ˜μ •μ΄λ‚˜ κΈ°λŠ₯에 영ν–₯을 주지 μ•ŠλŠ” μž‘μ€ μˆ˜μ •λ“€μ€ λ‚΄λΆ€ κ°œλ°œμžλ„ λ³„λ„μ˜ feature 브랜치λ₯Ό trunk μ—μ„œ μƒμ„±ν•˜μ§€ μ•Šκ³  app 브랜치λ₯Ό 톡해 ν•΄κ²°ν•˜λŠ” κ²ƒμœΌλ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

 

feature 브랜치

JIRA ν‹°μΌ“ μ΄μŠˆλ‚˜ μ†ŒμŠ€ μ „λ°˜μ μœΌλ‘œ 영ν–₯도가 큰 μž‘μ—…λ“€μ€ feature 브랜치λ₯Ό μƒμ„±ν•΄μ„œ μž‘μ—…ν•©λ‹ˆλ‹€.

μ΄λ•Œ λ°˜λ“œμ‹œ feature λΈŒλžœμΉ˜λŠ” trunk λ‘œλΆ€ν„° μƒμ„±ν•©λ‹ˆλ‹€.

 

develop 브랜치

κ°œλ°œκ³„ μ„œλ²„μ— λ°°ν¬λ˜λŠ” μ†ŒμŠ€ 버전을 μœ„ν•œ λΈŒλžœμΉ˜μž…λ‹ˆλ‹€.

 

stage 브랜치

검증계 μ„œλ²„μ— λ°°ν¬λ˜λŠ” μ†ŒμŠ€ 버전을 μœ„ν•œ λΈŒλžœμΉ˜μž…λ‹ˆλ‹€.

 

beta 브랜치

운영 베타에 λ°°ν¬λ˜λŠ” μ†ŒμŠ€ 버전을 μœ„ν•œ λΈŒλžœμΉ˜μž…λ‹ˆλ‹€.

λ§ˆμΌ“ 배포 μΌλ³„λ‘œ beta 브랜치의 μ΅œμ’… 버전은 μš΄μ˜κ³„ μ„œλ²„λ‘œ 배포가 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

 

trunk

μ‹€μ œ μš΄μ˜κ³„μ— λ°°ν¬λ˜μ–΄μžˆλŠ” μ†ŒμŠ€ λ²„μ „μž…λ‹ˆλ‹€.

각각의 trunk 버전은 ν•΄λ‹Ή 버전과 같은 beta 브랜치 μ†ŒμŠ€ μ½”λ“œμ™€ λ™μΌν•œ ν˜•μƒμ„ κ°€μ§‘λ‹ˆλ‹€.

 

브랜치λ₯Ό μ‚¬μš©ν•  λ•Œ μ§€μΌœμ•Ό ν•  κ·œμΉ™λ“€

이제 μœ„ λΈŒλžœμΉ˜λ“€λ‘œ μž‘μ—…μ„ 진행할 λ•Œ κΌ­ μ§€μΌœμ•Ό ν•  λͺ‡ 가지 κ·œμΉ™λ“€μ„ μ •ν–ˆμŠ΅λ‹ˆλ‹€.

 

1️⃣ featureλŠ” trunk λ‘œλΆ€ν„° μƒμ„±ν•œλ‹€.

운영 λ²„μ „κ³Όμ˜ 싱크와 영ν–₯도λ₯Ό 쀄이기 μœ„ν•΄ 각각의 feature λŠ” 메인 trunk λ‘œλΆ€ν„° μƒμ„±ν•©λ‹ˆλ‹€.

이λ₯Ό 톡해 운영 배포의 영ν–₯도λ₯Ό 쀄일 수 있고 ν•„μš”ν•œ κΈ°λŠ₯만 검증 ν›„ μš΄μ˜μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

개발이 μ™„λ£Œλœ feature λŠ” λ°°ν¬λ˜μ–΄μ•Ό ν•  브랜치둜 각각 λ³‘ν•©ν•©λ‹ˆλ‹€.

 

2️⃣ κΈ°λŠ₯ 개발 ν›„ 각각의 λΉŒλ“œ 브랜치둜 μ΄λ™ν•΄μ„œ merge ν•œ λ’€ λΉŒλ“œν•œλ‹€.

μš΄μ˜λ˜λŠ” μ„œλ²„κ³„μ— λ”°λΌμ„œ λ°˜μ˜λ˜μ–΄μ•Ό ν•˜λŠ” μ½”λ“œ ν˜•μƒμ΄ λ‹¬λΌμ§€λŠ” μš”κ΅¬ 쑰건이 λ°œμƒν•  수 있기 λ•Œλ¬Έμ—

develop -> stage ν˜Ήμ€ stage -> beta 와 같은 단방ν–₯ merge λŠ” λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 각각의 λΉŒλ“œλŠ” ν•΄λ‹Ή 브랜치둜 이동 ν›„ ν•„μš”ν•œ κΈ°λŠ₯을 merge ν•œ λ’€ μ§„ν–‰ν•©λ‹ˆλ‹€.

 

3️⃣ 운영 λ°°ν¬λŠ” κ°€μž₯ μ΅œμ‹ μ˜ beta λΈŒλžœμΉ˜μ™€ 싱크λ₯Ό λ§žμΆ˜λ‹€.

μ‚¬μš©μžκ°€ μ‚¬μš©ν•˜κ²Œ λ˜λŠ” μ‹€μ œ 운영 버전은 beta 브랜치의 ν˜•μƒ 쀑 κ°€μž₯ μ΅œμ‹ κ³Ό λ™κΈ°ν™”μ‹œν‚΅λ‹ˆλ‹€.

beta λΈŒλžœμΉ˜λŠ” 이미 검증이 μ™„λ£Œλœ μƒνƒœμ΄κ³  더 μ΄μƒμ˜ κΈ°λŠ₯ μΆ”κ°€κ°€ λ°œμƒν•˜μ§€ μ•Šμ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—

ν•΄λ‹Ή 버전을 λ°”λ‘œ 운영 배포에 μ‚¬μš©ν•˜λ„λ‘ μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€.

 

4️⃣ λΉŒλ“œ(개발, 검증, 운영) λ²„μ „μ—λŠ” Tagλ₯Ό ν†΅ν•΄μ„œ 버전 정보λ₯Ό λͺ…μ‹œν•©λ‹ˆλ‹€.

각각의 λΉŒλ“œ λ²„μ „μ—μ„œ Tag λ₯Ό λΆ™μ΄λŠ” μž‘μ—… λ˜ν•œ μ€‘μš”ν•©λ‹ˆλ‹€.

이λ₯Ό ν†΅ν•΄μ„œ λΉŒλ“œ λ²„μ „λ§ˆλ‹€ μ†ŒμŠ€μ½”λ“œ 백업본을 κ°€μ§ˆ 수 있기 λ•Œλ¬Έμ—, λ§Œμ•½ νŠΉμ • λ²„μ „μ—μ„œ λ¬Έμ œκ°€ λ°œν–‰ν•œλ‹€λ©΄

ν•΄λ‹Ή λ²„μ „μ˜ μ†ŒμŠ€ μ½”λ“œμ—μ„œ λ¬Έμ œμ μ„ μ°Ύμ•„ μˆ˜μ •ν•œ λ’€ 배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ κ·Έ μ™Έ λ‚΄λΆ€μ μœΌλ‘œ μ •ν•œ 것듀

이 외에도 효율적인 ν˜‘μ—…μ„ μœ„ν•΄ λ‚΄λΆ€μ μœΌλ‘œ λ‹€μŒκ³Ό 같은 rule set 을 λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  1. SVN 은 Gitκ³Ό 같이 ν˜„μž¬ 브랜치 μœ„μΉ˜κ°€ 어디인지 λ‚˜νƒ€λ‚˜μ§€ μ•Šμ•„
  2. commit μ‹œ μ‹€μˆ˜λ₯Ό μœ λ°œν•  수 μžˆμœΌλ―€λ‘œ μ€‘μš”ν•œ λͺ…령듀은 μ‰˜ 슀크립트둜 κ°•μ œν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.
  3. 브랜치λͺ…은 이슈λͺ… ν˜Ήμ€ μΆ”κ°€λ˜λŠ” κΈ°λŠ₯λͺ…μœΌλ‘œ μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€. ν‹°μΌ“λ²ˆν˜Έκ°€ 브랜치λͺ…μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
  4. λ§Œμ•½ 티켓이 아직 ν• λ‹Ήλ˜μ§€ μ•Šμ•˜κ³ , κΈ‰ν•˜κ²Œ μž‘μ—…μ΄ ν•„μš”ν•œ 사항이라면 κΈ°λŠ₯λͺ…μœΌλ‘œ μ •μ˜ν•©λ‹ˆλ‹€.
  5. ν˜„μž¬ λ‹€λ‹ˆκ³  μžˆλŠ” νšŒμ‚¬μ—μ„œλŠ” JIRA λ₯Ό μ΄μš©ν•΄μ„œ 이슈λ₯Ό ν‹°μΌ“ ν˜•νƒœλ‘œ κ΄€λ¦¬ν•˜κ³  있기 λ•Œλ¬Έμ—
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€