병합 충돌

조별 과제 보고서의 같은 문장을 두 사람이 동시에 서로 다르게 고쳐서, 누구 글을 남길지 몰라 멈춰 선 순간이에요.

정의 버전 관리 시스템(파일의 변경 이력을 기록하는 도구)에서 여러 사람이 같은 파일의 같은 줄을 동시에 서로 다르게 수정했을 때, 컴퓨터가 어느 쪽을 채택해야 할지 스스로 결정하지 못해 작업을 멈추고 사람에게 선택을 넘기는 상태예요.

왜 두 사람의 작업이 부딪힐까요?

조별 과제를 할 때 친구와 역할을 나누어 한 보고서를 함께 작성한다고 상상해 보세요. 친구는 3페이지 둘째 줄의 결론을 '이번 계획에 찬성한다'로 수정했고, 나는 내 컴퓨터에서 같은 자리를 '이번 계획에 반대한다'로 수정했어요. 이제 두 사람이 각자 수정한 파일을 하나로 합쳐 최종본을 만들려고 해요.

컴퓨터는 주어진 명령을 빠르고 정확하게 수행하지만 사람의 속마음까지는 읽을 수 없어요. '찬성'과 '반대' 중에서 어떤 문장이 조원들이 진짜 합의한 내용인지 컴퓨터가 독단적으로 판단할 수는 없기 때문이에요.

만약 컴퓨터가 자기 마음대로 한 사람의 글을 골라 다른 사람의 글을 덮어써 버린다면 소중한 작업 내용이 순식간에 사라질 수도 있어요. 그래서 컴퓨터는 어느 쪽도 버리지 않고 작업을 즉시 중단해요. 이것이 바로 동일한 위치를 다르게 고쳐서 생기는 충돌이에요.

동일한 위치를 다르게 수정하여 발생하는 병합 충돌 다이어그램 팀원 A: 찬성 팀원 B: 반대 같은 위치 수정 충돌 발생! 어느 문장을 남길까요?

조금 더 정확히 말하면 (깃이 줄을 비교하는 법)

깃(Git, 코드나 문서의 변경 기록을 관리하는 대표적인 도구)은 파일의 수정 내역을 한 줄씩 비교하면서 자동으로 합치는 능력을 가지고 있어요. 예를 들어 한 친구는 1번 줄을 고치고 다른 친구는 50번 줄을 고쳤다면, 깃은 아무런 문제 없이 두 사람의 수정을 깔끔하게 합쳐줘요.

조금 더 정확히 말하면, 완전히 같은 파일의 동일한 줄을 서로 다르게 고쳤을 때만 충돌이 발생해요. 한 사람은 문장의 단어를 바꾸고 있는데, 다른 사람은 그 문장이 있던 줄 자체를 아예 지워버렸을 때도 마찬가지예요.

이때 깃은 파일 본문 안에 꺾쇠와 등호 기호(<<<<<<<, =======, >>>>>>>)를 남겨두고 어느 쪽이 누구의 작업인지 명확하게 보여줘요. 프로그램이 오류를 일으킨 것이 아니라, 사용자의 데이터가 손실되지 않도록 막아주는 든든한 안전장치가 작동한 것이에요.

충돌을 해결하고 예방하는 방법

화면에 충돌 안내가 나타났다고 해서 겁먹거나 작성하던 파일을 처음부터 다시 만들 필요는 전혀 없어요. 깃이 남겨둔 충돌 표시 기호를 문서 편집기로 열어보면 나와 동료가 수정한 내용이 한눈에 보기 쉽게 구분되어 있어요.

두 내용을 차분하게 비교한 뒤 둘 중 더 좋은 문장을 하나 고르거나, 두 사람의 의견을 조화롭게 합쳐서 새로운 문장으로 다듬으면 돼요. 정리가 끝난 뒤 깃이 남긴 특수 기호들만 깨끗하게 지우고 다시 저장하면 충돌 해결 작업이 깔끔하게 완료돼요.

충돌을 사전에 줄이는 가장 훌륭한 방법은 잦은 소통과 업데이트예요. 작업을 시작하기 전에 내가 오늘 어느 부분을 다룰 것인지 동료들과 미리 이야기를 나누고, 동료가 새로 올린 최신 결과물을 수시로 내 컴퓨터로 가져와 합쳐두는 습관을 들이면 충돌을 크게 줄일 수 있어요.

🤔 흔한 오해

✕ 오해

병합 충돌은 코드를 잘못 작성해서 일어나는 치명적인 에러(버그)다.

✓ 사실

충돌은 프로그램 결함이 아니라, 컴퓨터가 데이터를 함부로 지우지 않도록 막아주는 정상적이고 안전한 보호 장치예요.

🧺 일상에서 만나요

1 공동 기획서에서 한 팀원은 마감일을 '금요일'로, 다른 팀원은 '다음 주 월요일'로 동시에 고쳤을 때 나타나요.
2 웹사이트의 버튼 색상을 디자이너는 '파란색'으로 바꾸고 개발자는 '보라색'으로 바꾼 뒤 코드를 합칠 때 발생해요.
💡 그러니까 한마디로

같은 줄을 서로 다르게 고쳤을 때 컴퓨터가 멈추고 사람에게 선택을 요청하는 안전장치예요.