3-way 병합

1 개요[ | ]

3-way merge
3-way 병합
  • 세 가지 소스를 비교하여 최종 결과를 만드는 병합 방식
  • 소프트웨어 개발의 버전 관리 시스템(예: Git)과 쿠버네티스kubectl apply에서 사용된다.
  • 변경 충돌(conflict)을 최소화하고, 자동 병합을 가능하게 한다.

2 원리[ | ]

  • 3-way 병합은 다음 3가지 입력을 기준으로 동작한다.
    • 공통 조상 (base): 병합의 기준이 되는 최초 상태
    • 내 변경 (local): 내가 적용하려는 변경 상태
    • 최신본 (remote/live): 서버에 반영된 현재 상태
  • 세 버전의 차이를 비교하여 충돌이 없으면 자동으로 병합된다. 만약 충돌이 발생하면, 도구가 해당 부분을 표시하고 사용자가 해결하도록 안내한다.
구분 공통 조상 (base) 내 변경 (local) 최신본 (remote/live)
diff3 base local remote
GitHub PR merge-base PR main 브랜치
k8s Client-Side Apply last-applied-configuration (kubectl 기록) local (내 apply 내용) live (실제 리소스)
k8s Server-Side Apply managedFields (apiserver 기록, 필드 단) local (내 apply 내용) live (실제 리소스)

3 Kubernetes에서의 활용[ | ]

  • kubectl apply는 리소스를 적용할 때 3-way 병합을 수행한다.
  • 비교 대상:
  • 이 과정을 통해 변경된 부분만 패치되어 불필요한 리소스 삭제·재생성이 발생하지 않는다.

4 Git에서의 활용[ | ]

  • Git merge는 브랜치 병합 시 3-way 병합 알고리즘을 사용한다.
  • 공통 조상(commit)을 base, 현재 브랜치를 local, 병합 대상 브랜치를 remote로 삼는다.
  • 단순히 local/remote만 비교하는 2-way merge보다 정확하고 충돌을 줄일 수 있다.

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}