CLI? GUI? 그게 뭐죠? 먹는건가요...?

 

사실상 컴퓨터 일반 카테고리에 '컴퓨터 일반'에 대한 내용보다 각종 팁과 짜잘한 스니펫들이 돌아다니니, 어떻게보면 정말 '컴퓨터 일반'에 대한 내용은 이것이 처음이 아닌가 싶습니다...

 

컴퓨터를 조금만 공부하다보면 어느순간 쉽게 나와버리는 CLI와 GUI라는 용어. 하지만 그냥 슥슥 넘어가서 나중에 찾아볼 생각도 못하고 뭐지? 라고 하셨다면... 사실 정말 별거 없습니다.

 

CLI는 Command Line Interface의 약자로, 보통 컴퓨터 잘하는 사람 하면 떠오르는 까만화면에 흰 글씨 쓰는 Interface를 생각하시면 됩니다.

명령을 전부 Command Line이라 불리는 그 줄에 입력하여 사용하니, 나름 어느정도 명령어를 알고 있어야 하죠.

 

반대로 GUI는 Graphic User Interface의 약자입니다. 윈도우즈와 같이 화면에 보이는 직관적인 이미지들과 그래픽들로 명령들을 실행하는 것이죠.

어떻게 보자면 GUI환경에서 이루어지는 모든 상호작용이 내부적으로는 CLI 명령어화 되어 작동한다고 생각하셔도 괜찮을 것 같습니다.

 

현실세계에서의 CLI vs GUI하면, 대표적으로 Unix, Linux로 대표되던 CLI환경과, 이것에 반발을 하고 GUI환경을 만든 마이크로 소프트의 윈도우즈가 있겠네요. 물론 현재는 Unix, Linux 모두 Xwindow라는 것으로 GUI 환경을 제공합니다.

'Study > Computer' 카테고리의 다른 글

[Git/Github] Git? 깃?  (0) 2019.07.08
파일 인코딩 확인법(How to find out file encoding)  (2) 2019.06.26

[Git/Github] Git? 깃? 옷깃?

 

프로그래밍을 쪼끔이라도 하게되면 요새는 무조건 알게되는 Git 이란 녀석.

근데 일반적으로 코딩을 하다보면 저 존재 없이도 잘만 코딩하는데, 왜 꼭 어디선가 나타나서 더 배울것을 던져주는 것만 같은 기분이 들게 하는가.

사실 그냥 나홀로 코딩할때는 로컬에만 잘 분류해서 저장해주면 끝 아닌가?

 

그런게 아니니까 깃이 나왔겠죠?

 

오늘은 Git이라는 녀석이 무엇이고 왜 써야 하는지 그리고 기본적으로 어떤 흐름으로 작동하는지 알아보도록 하겠습니다.

 

Git이란?

Git(깃)이란 나무위키 曰 "깃은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다."라고 합니다.

분명 한글을 읽고 있기는 한데, 도대체 이해가 어려운 것 같습니다.

특히 '분산 버전 관리 시스템'이 압박이죠.

이걸 한마디로 정리해보자면, 내 코드의 변경사항을 기록해주고, 다른 사람들의 변경사항도 기록해주는데, 백업도 해주는 것입니다. 말그대로 열심히 기록해주는 시스템입니다. 말 그대로 게임에서의 세이브/로드 기능+'실행취소'와 같은 백업기능이죠.

 

막간으로 Git이랑 Github는 무엇이 다를까요?
git은 버전관리 툴이지만, github는 클라우드 서비스입니다.
git으로 버전관리를 한 것을 누구나 볼 수 있게, 혹은 쉽게 접근이 가능하게 하여 이 버전관리를 활용할 수 있게 해주는 것이지요.

 

그러면 깃을 왜 사용해야 하나?

왜 사용해야 하냐면! 그것은! 팀이나 조별과제시에 발표자료 혹은 교수님 제출자료의 제목을 한번 생각해보시면 한방에 이해가 됩니다.

발표자료_초안.ppt
발표자료_초안(수정).ppt
발표자료_초안(수정)(2차수정).ppt
.
.
.
발표자료_초안(수정)(2차수정)_최종본.ppt
발표자료_최종본_진짜 최종수정.ppt
발표자료_최종본_final.ppt
발표자료_교수님 첨부용.ppt
[1조]발표자료 ppt의 제목 변천에 관하여.ppt

네. 비단 제목 뿐만이 아니라, 중간에 누락되고, 나중에 오프라인으로 만나서 조장이 최종본을 열면 '어? 이거 제가 수정했는데 못보셨어요?'가 반드시 나오죠.

몬가.. 몬가 멋있고 엘레강스하며 팬시한 관리 방법이 있어야 할 것 같은 의무감 같은 것이 생기지 않습니까?

 

왜 저렇게 파일 길이가 계속 늘어나면서 뭔가가 덕지덕지 붙는걸까요?

바로 여러명이서 동시에 작업하기 때문입니다.

여러명이서 작업하며 내 파일도 내 컴퓨터에 백업으로 저장하면서 이메일로 주고받고 한명이 합치면 다음 사람에게 합친걸 넘겨주고... 그러면서 당연히 누락도 생기고 파일명도 다른 파일들과 구분하기 위해 저렇게 길어지는 것이죠.

그렇다면

만약에 팀 안에서 알아서 기록해주고 알아서 백업을 챙겨주는 사람이 있다면 팀원간에 이메일로 왔다갔다 하며 누락시키거나 파일명이 저렇게 길어질 필요가 있을까요?

한명이 전담해서(서기) 모든 자료를 받고, 취합하고, 수정사항이 있으면 그것만 보내면 알아서 백업 이후에 새 파일로 만들어서 누구나 볼 수 있게 해준다면?

그 한사람이 바로 깃(Git)입니다.

단순한 파일 하나만 왔다갔다 하는 것도 이런데, 그 수많은 라인의 코드파일들이 이리저리 왔다갔다한다면...?

꼭 써야 합니다 여러분.

 

깃은 그럼 어떻게 쓰는거야?

단순합니다.

0) [git config]

    git config --global user.email "---@--.--"
    git config --global user.name "---"

1) [git init]
    처음에 깃한테 어떤 폴더를 보라고 시킵니다. '야 여기 좀 보고 앞으로 이 폴더에서 일어나는거 싹다 기록해놔.'
    서기를 정하고 서기한테 '이제 우리가 너한테 모든 파일을 다 보낼거야'라고 합니다.

2) 열심히 그 폴더 안에서 지지고 볶습니다. 새 폴더도 만들고 코딩한 파일도 만들고 하면서요.
    서기한테 보내기 전 내 컴퓨터에서 열심히 작업을 하는 것과 같습니다.

3) [git status]
    그리고 깃한테 한번 쓱 물어봅니다. '잘 기록했니?' (물론 굳이 안물어봐도 됩니다. 알아서 잘 하니까요? 그치만... 궁금하잖아요?) 그러면 컴퓨터인 깃은 싹다 기록을 해놨다고 얘기를 하죠.
    서기도 마찬가지 일 겁니다.

4) [git add]
    그렇다면 그 변경사항 중 변경이 저장되길 원하는 것만 선택합니다. 이 순간부터 단순히 컴퓨터에 저장된 것이 아닌 내부적으로 '스테이지'라고 불리는 곳에 따로 입력해둡니다.
    서기의 컴퓨터에게 보내기위해 메일에 따로 업로드를 합니다.

5) [git commit [파일명] -m "뭐라뭐라"]
    그리고 현재 서기한테 던져준 파일들을 한 뭉텅이로 만들고 이 뭉텡이가 뭔지 설명을 적어줍니다. 서기 컴퓨터에 저장할 내용입니다. 여기까지 하면 서기가 서기 컴퓨터에 파일을 영구히 저장했습니다. 이것을 '레포'라고 부릅니다.

6) 깃헙이라는 클라우드 서비스에 프로젝트 저장소를 만듭니다. 가령 서기가 단톡방 혹은 옵톡을 파는 것과 같습니다.

7) [git remote add]
    컴퓨터에게 깃헙 주소를 알려줍니다. 사람들에게 옵톡 주소를 알려주는 것과 같습니다. 딱 한번만 알려주면, 다른 사람들이 방에 주소 없이 들어올 수 있듯 깃헙에도 한번만 해주면 따로 이 과정없이 바로 올릴 수 있습니다.

8) [git push]
    그리고 마지막으로 깃헙에 올리면 끝납니다.
    서기도 단톡방에 파일을 올려서 모든 팀원들이 볼 수 있게 하였습니다.

GNU 시스템 하에서는 해당 폴더로 이동한 후에

file *

혹은

file --mime-encoding *

을 명령줄에 쳐주면 인코딩 방식이 나온다.

 

윈도우에서는 git bash를 깔면 gnu시스템을 이용할 수 있으므로 위와같이 해주면 되고, 완전 naive한 윈도우즈라면, 사실 파일을 윈도우 내장 메모장으로 열어서 재저장할때 인코딩 방식을 볼 수 있다.

'Study > Computer' 카테고리의 다른 글

CLI? GUI? 그게 뭐죠? 먹는건가요...?  (0) 2019.07.10
[Git/Github] Git? 깃?  (0) 2019.07.08

+ Recent posts