Git과 SVN의 차이

김해나·2024년 11월 12일

오늘 내배캠 튜터님이 Git과 PR(Pull Request)을 주제로 1시간 가량 특강을 해주셨다. 서론에 Git 개념을 설명해주시면서 짧게 SVN을 언급하셨는데, 레거시가 많이 남아있는 회사에서는 SVN도 많이 사용한다고 했다.

회사에서 고객사 마이그레이션이나 신규 프로젝트를 진행하면서, 특히 금융권에 계신 개발자들이 Git 사용을 안 해본 경우를 정말 많이 보았다. 브랜치 전략을 달라, conflict 나면 어떻게 하느냐, 이클립스 플러그인을 따로 만들어 달라 등 요청사항도 많았다.

나도 옛날에 SVN을 사용했었고 Git을 접하게 되었을 때 복잡하고 어렵게 느껴졌었기 때문에 이해가 된다. 익숙한 것이 편한 이유도 있겠지만, SVN 사용시 개발자는 update 받고 commit 하는 동작 위주로만 사용하면 됐어서 오히려 단순했던 것 같다.

반면에 Git은 push, pull이란 용어부터 어색하고 공부해야할 개념이 많아서 처음에 거부감이 드는 게 사실이다. 하지만 나는 트민녀(..)까진 아니지만 대세라고 하면 좋은건가보다! 하고 따르는 스타일이라 무작정 사용해보려고 했던 것 같다.

튜터님이 설명해주신 Git과 SVN의 차이는 아래와 같다.

  • Git : 개발자들이 각자 로컬에 전체 레파지토리를 갖고 있음.(분산형) 전체 히스토리 복사본을 갖고 있어서 로컬에서 작업이 편리.
  • SVN : 레파지토리가 중앙서버에만 있고 개발자들이 네트워크로 연결해야만 함.

이게 가장 주요한 차이점인 것 같다. 하지만 구체적으로는 어떤 차이가 있는지 궁금해져서 구글링을 통해 정리해본다.

구조: 중앙집중식 vs. 분산식

  • SVN: 중앙 서버에서 전체 코드와 변경 이력을 관리하는 중앙집중식 구조를 사용한다. 개발자들은 중앙 서버와 연결하여 작업하며, 변경 사항을 서버에 커밋하고 최신 코드를 받아온다.
  • Git: 각 개발자의 로컬 저장소에 전체 코드와 변경 이력이 복제되는 분산식 구조를 사용한다. 개발자들은 로컬에서 작업하고, 필요 시 원격 저장소와 동기화한다. 이를 통해 오프라인 작업이 가능하다.
    Git vs Subversion 동작 방식

워크플로우

  • SVN: 작업 시작 전에 중앙 서버에서 최신 코드를 업데이트하고, 작업 후 변경 사항을 서버에 커밋한다. 변경 사항이 겹칠 경우 충돌이 발생하며, 이를 해결한 후에만 커밋이 가능하다.
  • Git: 로컬 저장소에서 독립적으로 작업하고, 로컬에 커밋한 후 원격 저장소와 동기화할 때만 인터넷 연결이 필요하다. 충돌이 발생하면 로컬에서 해결한 후 원격 저장소에 푸시한다.

브랜치 관리

  • SVN: 브랜치를 생성할 때 전체 파일을 복사하여 새로운 디렉토리를 만든다. 이로 인해 저장소 용량이 증가할 수 있다.
  • Git: 브랜치는 특정 커밋에 대한 참조로, 다른 커밋에 영향을 주지 않고 언제든지 생성, 삭제, 변경할 수 있다. 브랜치 생성이 빠르고 효율적이며, 병렬 개발이 용이하다.

저장소 크기와 성능

  • SVN: 파일의 변화를 추적하는 방식으로 저장소 크기가 커질 수 있다. 대용량 바이너리 파일을 처리할 수 있는 용량이 있다.
  • Git: 파일의 스냅샷을 저장하는 방식으로 저장소 크기가 작아질 수 있다. 그러나 대용량 바이너리 파일 처리에 제한이 있을 수 있다.

보안 및 접근 제어

  • SVN: 파일 수준 및 디렉토리 수준별로 읽기, 쓰기 및 접근 제어를 통해 세분화된 권한을 적용할 수 있다.
  • Git: 모든 기여자가 전체 코드베이스에 대해 동일한 권한을 가지고 있다고 가정한다. 세밀한 접근 제어가 필요할 경우 추가적인 설정이 필요하다.

SVN의 장점

  1. 효율적인 중앙집중형 아키텍처: 네트워크 트래픽을 줄이고, 서버와 로컬의 차이만 동기화해 작업 속도가 빠르며, 느린 네트워크 환경에서도 유리하다.
  2. 바이너리 파일 처리: Lock-Modify-Unlock 모델을 지원해 바이너리 파일 관리가 용이하다. 여러 비병합 파일을 포함한 대규모 프로젝트에서 유리하다.
  3. 사용 용이성: 간단한 명령과 구조로 배우기 쉽고, 빠르게 사용할 수 있어 개발자들이 쉽게 접근 가능하다.
  4. 세분화된 접근 제어: 파일과 디렉토리 수준에서 접근 권한을 설정할 수 있어 보안이 필요한 프로젝트에서 유리하다.

Git의 장점

  1. 분산형 구조: 로컬에서도 저장소 전체를 관리할 수 있어 오프라인 작업이 가능하며, 협업 및 독립적인 작업에 유리하다.
  2. 강력한 브랜치 관리: 빠르고 가벼운 브랜치 생성과 전환이 가능해 기능별 브랜치 작업과 병렬 개발이 효과적이다.
  3. 보안성: 변경 이력에 대한 암호화 해싱을 제공해 데이터 무결성과 보안을 높인다.
  4. 유연한 협업: 로컬 커밋 후 원격 저장소와 동기화하는 방식으로 충돌 관리와 협업이 유연하다.

결론

재미(?)로 알아 본 차이점. 그러나 Git이 대세다.

참고

0개의 댓글