상세 컨텐츠

본문 제목

나를 구원해줄 그 분은 바로 git. 그리고 github

프로그래밍/팁관련

by jin* 2017. 4. 9. 19:12

본문


이 전에 작성했던 포스팅 중 의외로 반응이 좋았던 javascript에 이어 이번에는 git에 관하여 떠들어볼까 합니다.git도 마찬가지로 개발자/개발전공자라면 한번쯤 들어볼법한데 실제로 잘 활용하고 사용하고 있지는 않은 것 같습니다.git은 업무에 적용해서 사용하면 정말 유용하게 사용할 수 있게 해주며, 내가 저지르는 실수들을 보완해 주기 좋은 시스템입니다. 하지만 이 것 이외에도 많은 것들을 도와주기도 하며, 더 나아가 취업자리까지 도와주기도 합니다. 어떻게 하면 나에게 많은 도움을 주며, 나를 구원해줄 수 있는지 이야기보따리를 풀어보겠습니다.

아! 혹시 Github 계정이 없으신가요? 아래 내용을 읽기 전에 일단 가입하세요! 분명 도움이 될 것입니다 !




Git

깃(Git /ɡɪt/[1])은 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다. 기하학적 불변 이론을 바탕으로 설계됐고, 빠른 수행 속도에 중점을 두고 있는 것이 특징이다. 최초에는 리누스 토르발스가 리눅스 커널 개발에 이용하려고 개발하였으며, 현재는 다른 곳에도 널리 사용되고 있다.

깃의 작업 폴더는 모두, 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 있으며, 완전한 형태의 저장소이다. 네트워크에 접근하거나 중앙 서버에 의존하지 않는다.

현재 주니오 하마노(Junio Hamano)가 소프트웨어 관리를 감독하고 있다. 깃은 GNU 일반 공중 사용 허가서 v2 하에 배포되는 자유 소프트웨어이다.

위키피아(링크)) Git의 설명입니다.
뭔가 복잡하죠? 간단하게 다시 한번 정리해서 말씀드리면, 소스코드 관리를 위해 나온 시스템이며 모든 코드작업의 대해 기록, 추적이 가능한 정보들을 가지고 있습니다. Git을 이용하기 위해서 꼭 인터넷이 되는 환경이 아니여도 상관 없으며 로컬PC에서 쉽게 시작할 수 있습니다. 개발직종 직장인의 경우 대부분 Git을 적용해서 쓰고 있는 것 같으며, 몇몇은Git과 유사한 시스템인 SVN을 사용하기도 합니다.
그렇기 때문에 직장인들은 Git을 사용함에 있어서는 불편함은 없겠지만 현재 대학생이거나 신입으로 취업해야하는 분들은 Git이라는 것을 사용해본적도, 본적도, 사용하라고 가르침 받은 적도 없기 때문에 참 어색하게 들릴 수도 있을 것 같습니다.
Git의 대해 이미 어느정도 숙지하고 계신 분들은 이번 섹션은 대충 훑어보셔도 괜찮을 것 같습니다.

이 것은 알고가자 Git 용어/명령어

Git을 정말 잘 사용하면 지금까지 개발해왔던 코드들을 타임머신 타고 돌아다니듯이 자유자재로 컨트롤할 수 있습니다. 하지만 그게 쉬운 일은 아니죠. 그리고 현업에서 그정도까지도 바라지도 않습니다.
내가 작성한 코드 잘 올리고, 남이 개발한 코드 잘 받고, 혹시 같은 곳에 두명이 접근하여 코드작성하면서 중복되면 그 거 풀어주고. 이정도면 충분하지 않을까요? 이 이상 Git을 사용해야하면 주변에 잘하시는 분들이 와서 샤샤샥! 해결해주실 거예요 : ) 만약 주변에 도와줄 사람이 없다면? 주변에 도와줄 사람이 없을 경우 그렇게 큰 규모의 회사가 아닐 수도 있고, 한 코드에 많은 사람들이 동시에 작업할 가능성도 적어보이기 때문에 역시 문제가 없을 것이라 개인적으로 생각해봅니다. (만약 발생하면 하나하나 풀어가면서 경험해보면 되죠 하하하하)

위에서 잠깐 설명했던 기본적인 명령어를 하나씩 설명하겠습니다. 용어와 간단한 사용법들을 잘 숙지해놓으면 언젠가는 유용하게 사용할 수 있을거예요 : )

아래 명령어들을 숙지하기 전에 PC에 Git은 반드시 설치되어 있어야 합니다. (맥OS 같은 경우는 이미 서치되어 있는 것으로 알고 있습니다)
Git 설치하러 이동하기

자! 이제 시작이야 / init

내 PC에서 새로운 프로젝트를 처음 시작한다고 하면 무조건 이 명령어부터 시작해야 합니다. (github으로 프로젝트를 만들고 시작한다면 아래 clone부터 봐주세요)
프로젝트 폴더를 만들고 프로젝트 폴더로 이동한다음 (모든 명령어는 콘솔에서 진행합니다.)

$ git init

네. 끝났습니다.
만약 사용자의 정보를 넣으라고 출력되면 출력된 메시지에 따라 진행해주시면 됩니다.

프로젝트 코드를 받아보자 / clone

이미 Git서버에 있는 프로젝트를 내 PC에 받아서 새로 진행할 때 이 명령어를 사용합니다.

$ git clone {git_url}

위 명령어를 실행하면 명령어를 실행한 폴더에 프로젝트가 자동으로 받아지게 됩니다.

남이 작성한 코드가 있다면 업데이트해서 가져오자 / pull

나는 아무 것도 하지 않았는데, 주변에 있는 사람이 개발을 진행하여 서버쪽 코드가 갱신되었을 때 이 명령어를 통해 갱신된 코드들을 자동으로 내려받을 수 있습니다.

$ git pull

로컬PC에 있는 코드들이 수정되어 있다면 git pull이 안될 수 있습니다. 수정 중인 코드들이 있다면 아래 commit을 진행하거나 checkout을 통해 코드를 reset해야 합니다.

내 코드를 기록하자 / commit

개발을 열심히 진행하고 코드들을 한번 묶음단위로 저장/기록 하면서 진행해야 합니다. 이 것은 하나의 히스토리에 포함되게 되며 언제든 다시 돌아올 수 있는 장점이 있습니다.

$ git add {file_name}
$ git commit -m “여기에 이 코드들의 내용을 간략하게 적어주세요”

기록된 코드를 네트워크에 있는 서버에 올려보자 / push

위에 commit을 하면 로컬에만 저장되기 때문에 주변동료가 전혀 받아볼 수가 없습니다. push명령어를 통해 다같이 사용하는 git서버에 등록해줍시다!

$ git push

commit되어 있던 것들을 한꺼번에 git remote 서버에 올려줍니다. 완료 후에는 주변동료들이 내 코드들을 pull 로 받아서 갱신할 수 있습니다.

나는 master와 다른 길을 가겠어! / branch

간단하게 코드들을 수정할 정도면 바로바로 진행하면되지만 개발기간 자체가 3일정도가 걸려서 개발하는 기간동안 프로젝트 자체가 정상적으로 운영이 안될 수도 있을꺼예요 T_T
이럴경우는 branch라는 것을 이용해서 기존 master브런치에는 영향없도록 진행하고, 최종 개발완료한 뒤에master로 합칠 수 있답니다!

$ git checkout -b hello

기존 hello라는 브런치가 있으면 hello브런치로 변경되고, 만약 그런 브런치가 없을 경우는 hello라는 브런치를 새로 생성하고 그 브런치로 변경하게 됩니다.
만약 다시 master 브런치로 돌아오고 싶다면 git checkout -b master 로 돌아올 수 있습니다.

충돌(Conflicts)은 고통의 연속 / merge

브런치에서 열심히 작업하고 3일 뒤에 master에 넣으려니깐 내가 작업했던 파일에 다른사람들도 같이 작업했다고 합니다. 만약 내 코드들이 들어가게 되면 여러 코드들과 중복이 발생하면서 충돌이 나겠죠?
hello 브런치에 있는 코드들을 master로 가져올 때를 기준으로 설명드리겠습니다 : )

# 먼저 master 브런치로 변경
$ git checkout -b master

# hello → master 로 코드들 밀어넣기
$ git merge hello

큰 문제가 없다면 여기서 잘 마무리가 될텐데, 만약 일부라도 문제가 있게 되면 오류아닌 오류같은 메시지들이 주르륵 출력됩니다. 어떤 코드를 넣고 처리할지 처리해줘야 정상적으로 master 브런치에 합쳐지게 됩니다.

$ git status

위 status 명령어를 통해 어떤 파일들이 충돌났는지 확인하고 직접 코드를 수정하여 원하는 것만 남겨두면 됩니다 : )
코드를 수정하러 들어가게 되면

<<<<<<< HEAD
블라블라코드
=======
블라블라코드
>>>>>>> hello

이런식으로 일부 코드들이 망가져 있을거예요!
HEAD부터 ======= 여기까지가 master에 있는 코드이며, ======= 부터 hello 까지는 hello브런치의 코드들이니 위 아래 비교하여 적절하게 수정한다음 commit/push 진행하시면 성공적으로 merge를 완료할 수 있습니다 : )

원하는 코드기록만 가져오자 / cherrypick

브런치를 막 나눠서 작업하다가 브런치는 다 필요없고 하나의 commit 뭉치만 가져오고 싶을 때가 있을 수도 있습니다. 이럴때 사용하는 것이 cherrypick 이며, 음.. 개인적으로는 사용안하는 편이 안전하게 진행할 수 있지 않을까라고 생각됩니다. 그래도 정 급할 때 사용할 수도 있으니 명령어만 간단히 나열하겠습니다.

먼저 최종적으로 가져오고 싶은 브런치로 이동후에 작업하면 됩니다.

$ git cherry-pick 20c58af

명령어 뒤에 이상한 문자는 commit의 hash이며 앞의 7자리만 넣어도 충분합니다 (전체 다 넣으셔도 됩니다)
위 명령어를 실행하며 해당 커밋만 원하는 브런치에 포함되는 것을 확인하실 수 있습니다.

터미널에서 git 명령어를 사용할 수 있다면 당연히 좋겠지만 어려운 점이 많이 있을거예요. 저 역시도 마찬가지구요. 그렇기 때문에 좋은 툴을 이용하면 편리하게 위 명령어들을 클릭만으로 이용할 수 있습니다 : )
Atlassian 에서 만든 서비스인 SourceTree라는 툴을 이용해보세요 :D

SourceTree(소스트리): https://www.sourcetreeapp.com/

github은 나의 포트폴리오

아까 위에서 Github 가입하고 오라고 했는데 가입은 하셨나요?

헐.. 아직도 가입을 안하셨다니, Github을 관리하지 않으면 분명 언젠가 후회하는 일이 있을 겁니다. 네 그렇고 말구요.

github은 git서버를 제공해주는 하나의 서비스 입니다. github말고도 bitbucket, gitlab, yona(구 yobi)라는 서비스들이 있기는 합니다. 하지만 제가 여기서 왜 github만을 말할까요?
개발을 진행하면서 오픈소스나 외부라이브러리들을 사용해보신 경험들이 있을 겁니다. 이러한 프로젝트들이 대부분github을 통해 공개되어 있고, 그 외 프로젝트들도 github으로 운영되고 있는 것들을 조금만 둘러보셔도 확인하실 수 있습니다. 그렇기 때문에 내가 개발하는 것들을 자랑하고 싶다거나 취업을 목표로 한다거나 했을 때, 가장확실한 것은GitHub을 공개하는 일입니다.
그런데 무작정 공개하면 오히려 말 안해준 것 보다는 못하겠죠? Github을 어떻게 관리하고 유지해야하는지 몇가지 나눠서 설명해드리려고 합니다. 이대로만 정말 잘 하신다면 정말 멋진 개발자가 될 것이라고 생각합니다! (아.. 왜 저는 아직 멋진개발자가 되지 못했을까요.. T_T.. 틀린방법인가..)

나의 모든 것을 기록하고 공개하라

집에서 장난삼아 혹은 테스트를 해보기 위해 프로젝트를 만들어보고 버리는 경우가 있으실 겁니다. 이런 것들을 github에 public으로 모두 공개하세요 (password 등 개인정보관련된 내용들은 수정합니다)
이런 부끄러운 코드를 어떻게 공개하냐고 생각하실 수도 있는데, 그 코드가 다른사람에게는 정말 소중한 코드가 될 수 있다는 점을 생각해주셨으면 좋겠습니다 : )
저도 정말 생각없이 올렸던 코드들이 다른사람들이 사용하고 Star를 찍는 것을 볼 때, 신기하기도 하고 잘올렸다는 생각을 하기도 합니다.
만약에 아무리 생각해도 부족한 코드라면 프로젝트를 공개하여 다른사람들에게 조언을 구할 수도 있다고 생각합니다.


관심있는 프로젝트 쇼핑하기

내 코드만 바라만 보고 있지말고, 다른 사람들은 어떻게 개발하고 코드를 어떻게 운영하고 있는지 항상 돌아다니세요. 그리고 관심있는 코드들은 Star를 찍어놓거나 Fork를 클릭하여 공부자료로도 사용될 수 있습니다 : )
그리고 Star를 서로서로 많이 찍어주는게 좋은 문화라 생각됩니다. (외국사람들은 Star를 찍어두는게 흔한 것 같은데, 한국은 뭔가 짠 느낌이 있는 것 같더라구요 @_@)

사람들과 친해지기

github에도 팔로우/팔로워 시스템이 있습니다. 내가 관심있는 사람들의 소식을 받아볼 수 있고, 다른사람들도 나의 소식을 받아볼 수 있도록 말이죠.
관심있는 사람들을 팔로우 해놓으면 그 사람이 최근 어떤 프로젝트에 관심이 있고, 어떤 프로젝트들을 진행하고 있는지 받아볼 수 있습니다. 그에 따라 본인도 공부하는 방향을 정해볼 수 있겠죠?


오픈소스에 숟가락 얹어보기

장기적으로 봤을 때, 이 부분이 가장 중요하지 않을까 생각됩니다. 큰 프로젝트나 다른 곳에서 진행되고 있는 프로젝트에 같이 참여하는 것!?
이 것이 잘 진행되면 자연스럽게 여러사람들과 의견을 나눌 수 있고, 다양한 인맥도 생기지 않을까라고 생각됩니다 (영어를 조금 할 줄 알아야… 뭐 번역기라는 좋은게 있기는 하지만…)
저같은 경우는 nodejs-koelectron.atom.io에서 작지만 일부 뉴스, API번역들을 해보려고 수저를 얹어놓았습니다. 영어라는 장벽때문에 고생을 하고 있기는 하지만 뭔가 내가 commit된 내용들이 PR리뷰를 통해 master로merge될 때마다 즐거움을 느끼게 되네요.
재미있거나 관심있던 프로젝트가 있다면 해당 저장소로 이동하여 코드들을 뒤적뒤적 해보시는 것을 추천드립니다 :D


꾸준한 코드 commit/push

github을 하는 가장 중요한 내용이지 않을까 싶습니다. GitHub 사용자의 프로필페이지를 접속하게 되면 첫화면에 1년동안의 코드 커밋 그래프가 노출됩니다. 1 push도 안할 경우 회색, 조금 하면 연두색, 정말 많이 하면 진한 녹색으로 1년 그래프를 보여줍니다. 저는 이 부분을 그 사람의 성실성으로 판단될 수도 있다고 생각됩니다. (github을 정말 자주 이용하는 사람에 한해서)
1년동안 평일, 주말 꾸준히 commit/push를 진행했다면 정말 개발하는 것 자체를 즐기는구나 라고 생각하지 않을까요? (단순 기록용이 아닌 진짜 코드 커밋 기준입니다 ㅎ_ㅎ)
특히 경력있는 신입을 뽑는 대한민국에서는 이 부분이 가장 강하게 작용되지 않을까요?
대학교 혹은 학원에서 마무리 프로젝트로 진행했던 것 밖에 보여줄 수 없는, 그리고 다른 여러가지 일로 인해 대외할동을 못했던 취준생과 신입분들은 github이 하나의 구세주처럼 작용될 수 있을 것이라 생각됩니다. 개발자 신입이라면 대부분 어떤 것으로 기준을 내기가 애매하다고 생각됩니다. 평소에 개발을 잘하던 학생도 면접 때는 갑자기 머리 속이 하얗게 되면서 알던 문제도 못푸는 그런 사람들도 있을 수도 있기 때문에, 평소에 얼마나 개발을 하고 있고, 어느 분야에 관심이 있는지 github계정 하나면 마무리될 수도 있지 않을까 생각됩니다.


이력서/포트폴리오 홈페이지는 GitHub gh-pages로!

대기업, 중소기업에서는 어떤지 잘 모르겠지만 그래도 스타트업에서는 이 부분을 높게 평가하지 않을까 생각됩니다. 틀에 박힌 이력서보다는 자유형식. 나를 정말 잘표현한 방식의 페이지를 보여주는 것이 좋다고 생각됩니다. 거기에 github을 통해서 이력서가 배포된다면 일석이조!
github에는 저장소를 기준으로 하나의 호스팅 서비스를 해주고 있습니다. 관련 자료로는 gh-pages 를 검색하시면 많은 내용을 찾아보실 수 있습니다.
나의 소개를 깃헙 저장소에 html, css, javascript로 이쁘게 꾸미고 gh-pages를 적용하며 github에서 제공해주는 URL로 이쁜 이력서 홈페이지를 얻으실 수 있습니다 : )

예제 페이지로 제 프로필페이지입니다. (아직 만드는 중입니다)
홈페이지: https://devjin0617.github.io/
저장소: https://github.com/devjin0617/devjin0617.github.com

Tip. Hexo라는 것을 이용하면 쉽고 빠르고 이쁘게 나만의 홈페이지를 만들 수 있답니다.

마치며

포스팅을 작성하고 나니, 제가 잘 지키지 못한 것들도 있어서 많은 부끄러움을 느껴지기도 합니다.
저 스스로 조금 더 잘해보기 위해 다짐해보자라는 뜻에서 작성한 점도 있습니다.
스타트업에 IT직군으로 종사하고 있기도 하고, 가끔 면접관으로도 참석할 때도 있었는데 경력이 있으신 분들은 위 내용들을 정말 잘 활용하고 관리하시는데, 신입으로 지원하시는 분들을 보면 저런 부분들이 많이 아쉽기도 하고, 저런 부분들은 꼭 알려드려서 취업하실 때 도움이 되었으면 하는 마음에서 이 글을 작성했습니다. 현재 대학생, 아니면 졸업을 앞두거나 혹은 취업준비생. 그리고 개발자를 선택한 분들이 보고 꼭 도움이 되었으면 좋겠습니다 : )
긴 글 읽어주셔서 감사드립니다.

혹시나 위 내용 이외에도 궁금한 점 있으시면 언제든 댓글을 달아주셔도 되고, 개인적으로 이메일 보내주셔도 시간 날 때마다 친절히 답변드리도록 하겠습니다 :D (이미 몇 명과는 개발관련으로 재미있는 내용들을 이메일로 주고 받고 있습니다 : - )



관련글 더보기

댓글 영역