SEUNGKYU CHO

SEUNGKYU CHO

Developer. Achitector

© 2019

[SCM] Git에 대해 두서없이 이야기해보기.

` 우리가 아는 그 어떤것도 홀로 이루어낸 것은 극히 드물것입니다. `

 function youAndMeTogether(){
  return ':)';
 }

먼 옛날 수렵으로 생을 영위하던 시기에 남자는 사냥을 하여 식량을 가져왔고 여자는 어린 아이들을 보살폈습니다. 군 시절 제가 먹던 밥(짬?)은 밥 담당취사병이, 반찬은 반찬담당 취사병이 조리하였습니다. 세계 8대 불가사의라 불리우고 있는 인도의 타지마할을 석공할 당시엔 돌과 목재를 조달하던 조달꾼들이 있었고 조달된 돌들을 깎는 석조가들이 있었습니다. 현재 제가 몸담고 있는 프로젝트 내에서 저의 역할은 계약관련 프로세스를 별 탈없이 정상적으로 운영하는 것이고 그 외의 것들은 담당자들이 따로 존재합니다.

이밖에 우리가 별 생각없이 사용하는 그 어떤것들 조차 오직 한 개인이 만들어낸 것일 경우는 극히 찾아보기 힘들 것입니다. 우리는 우리가 의식하고 있든 의식하지 않고 있든간에 각자의 역할을 수행하고 그로 인해 무언가가 만들어 집니다. 이렇게 하나의 결과물을 생산하기 위해서 행하는 것이 협업입니다. 개인이 협동하여 각자의 맡은 역할을 수행하고, 그 결과물들이 모여 만들어지는 것은 상호간 협업의 결과물일 것입니다. 사회가 현대화되고 더욱 더 고도화됨에 따라 협업이라는 행위 자체도 고도로 복잡해져 왔습니다. 밥과 반찬, 사냥과 아이돌봄과 같은 지극히 단순한 협동만 생각하면 되는 시기는 이미 흘러가 버렸습니다. 각자의 역할은 더욱 세분화 되었고 전문성은 더욱 짙어지고 있습니다. 이렇게 난해해진 생산활동을 함에 있어 우리는 어떻게 하면 조금 더 나은 협업을 주도할 수 있을지 생각하게 됩니다. 엄청난 규모의 복잡한 제품이 필요해짐에 따라 어떻게 하면 최소한의 비용으로 최대한의 효율을 끌어낼 수 있을지 고민을 거듭해 오면서 우리는 협업에 대한 하나의 시스템을 만들게 됩니다. 더 크고 더 좋은 제품이 필요할수록 협업 시스템은 더욱 고도화되고 견고해집니다. 이러한 시기에 오늘은 협업 시스템에 대한 이야기를 GIT이라는 프로그램을 통해 이야기해보려 합니다.

깃(GIT)의 역사

GIT은 현존하는 가장 인기있는 분산버전 관리시스템입니다. 리누스 토르발스라는 유명 개발자에 의해 개발되었습니다. 비트키퍼라는 버전관리 프로그램이 있었음에도 자신의 필요성을 충족시켜주지 못해 직접 비트키퍼의 기능에 확장된 프로그램을 개발한 것이 GIT의 시초입니다. 2005년 초기버전 출시부터 현재 2019년까지 GIT의 업데이트는 지속적으로 이루어지고 있습니다. 리누스 토르발스라는 원 개발자가 아직도 직접 모든것을 리뉴얼하지는 않지만 세계적으로 인기가 많은 오픈소스이니 만큼 다양한 아이디어를 받고 있고 버그픽스와 메이저, 마이너 할것 없이 끊임없이 프로그램적으로 논의되어지고 있습니다.

GIT의 효용

현재 GIT이라는 버전관리 시스템은 전 세계적으로 인기가 많은 프로그램이자 시스템이라고도 할수 있을것 같습니다. 하나의 혁신적인 상품이 세상에 출현하게 되면 그로인해 여러 파급효과가 나타납니다. 아이폰이 출몰함으로써 아이폰 리패어니스트라는 새로운 직업이 생겨났습니다. 중국의 신전 지역에서는 아이폰의 부품을 판매하는 판매상들이 즐비합니다. 어느 한 유튜버는 중국의 신전에서 아이폰의 부품만 사들여서 아이폰을 조립하기도 합니다. GIT이라는 프로그램도 이러한 새로운 Playground를 만들었습니다. 제 글을 읽고있는 여러분은 GITHUB과 GITLAB에 대해서 어느정도는 알고 있을거라 생각합니다. GITHUB이라는 플랫폼은 누구나 자신의 소스를 올리고 평가받고, 의견을 주고받고, 프로그램을 함께 향상시키는 장을 마련해 주고 있습니다. 만약 우리가 RESTFUL API 를 만들고 싶은데 기본 토대를 어떻게 효율적으로 구성할 수 있는지, 여러 사람들이 만들어 놓은 결과물들을 참고삼아 보고싶다고 한다면 GITHUB, GITLAB이 그 답이 될 수 있습니다. 그저 검색창에 RESTFUL API 를 타이핑하고 검색버튼을 눌러보면 됩니다. PYTHON, JAVA, JAVASCRIPT 등 많은 랭귀지들로 이루어진 각 개발자들의 철학이 담긴 소스들을 확인할수 수도 없이 확인할 수 있을 것입니다. 만약 맘에드는 소스들을 보았고 자신이 그에 더해 조금 더 향상된 결과물을 만드는데 기여하고 싶다면 그저 제안할수 있습니다. 우리가 제안한 소스는 심사자를 통해 컨펌을 받게 될것이고 그럼 우리는 기여자로서 프로그램의 향상에 도움을 주는 것입니다. 그저 소스를 다운받아 사용하는 것 이외에도 우리는 FORK, STAR, REPOSITORY 활용 등 다방면으로 효율적인 개발 활동을 영위할 수 있는 플랫폼이 바로 GITHUB, GITLAB(..CLI 등 많은 개발 플랫폼들이 존재합니다. 가장 대표적인 두가지 플랫폼을 예로 들었습니다) 입니다.

우리는 우리의 더 나은 삶을 항상 목표로 하고 있습니다. 이를 위해 협업을 불가피한 사회 구조가 형성되어 있다고 봐도 무방할 것이라 생각합니다. 끊임 없는 커뮤니케이션과 협동은 세상을 더 나은 세상으로 만드는데 있어 좋은 윤활유 역할을 하고 있습니다. 자기 자신의 분야는 사람들에게 알려주고 자신이 모르는 분야는 그 분야의 전문가의 도움을 받거나 그 전문가의 결과물을 참고하면 아주 좋은 시너지를 가질 수 있습니다. 여러분이 만약 개발자라면 혼자 무언가를 개발해야겠다는 생각은 접어두는 것이 좋을거라 생각합니다. 인간 개개인이 할수 있는 일에는 한계가 존재합니다. 모두 각자의 역할을 수행하고 그 결과물이 모여 위대한 업적을 이루어지게 되는 것입니다. 그러기 위해선 당신이 만약 개발자라면 GITHUB과 같은 코드 쉐어링 플랫폼의 사용은 필수적이라 보여집니다. 세상 모든 위대한 결과물에는 사회적인 상호작용을 토대로 이루어져 왔습니다. 그리 거창한 무언가가 아니라도 좋습니다. 만약 당신이 무언가를 만드려 한다면 혼자만의 아이디어를 가지고 만드는 것보단 누군가의 것을 참고하거나 조언을 듣는다면 그보다 더 나은 무언가가 창조될 것이라 확신합니다. 그렇기 때문에 우리는 GIT을 사용합니다.

GUI

다음은 제가 사용해 보았던 여러 Git GUI 툴들중 추천해 드릴만한 프로그램들입니다. 크게 다르지 않기때문에 부담없이 선택하여 사용해도 무방할 것이라 생각합니다.

GITHUB DESKTOP

` GITHUB에서 제작한 운영체제 프로그램입니다. GITHUB이 제작사인 만큼 GITHUB과 가장 연동이 자유롭습니다. 협업을 통해 브랜치나 마스터를 관리한다는데 중점을 둔다기 보다는 GITHUB의 수많은 오픈소스들을 탐험할 수 있는 환경이라는 느낌입니다. `

SOURCETREE

` 소스트리라고 불리어지는 이 프로그램은 GITHUB과는 무관하게 GIT 그 자체에 중점을 둔 프로그램이라고 볼 수 있습니다. 협업자들간의 브랜치, 마스터, 소스 병합, 코멘트 등 협업 위주의 VIEW를 제공하고 오랜 기간 무료 소프트웨어로서 서비스 되어진 만큼 자잘한 문제는 극히 드뭅니다. 만약 당신이 개발자임과 동시에 소, 중규모로 프로젝트를 진행하고 소스관리 위주의 화면을 주로 관리하고싶다고 한다면 소스트리가 추천되어지는 것이 나쁘지는 않을 것입니다. `