Spring & Java
git & github 셋팅하는 법 본문
학습 키워드
● Git과 Github에 대한 기본 개념
● Github 외의 코드 저장소 툴들의 특징과 사용 목적
● 리눅스 기본 커맨드
● Git 고급 활용
● 브랜치 전략
git = 로컬 ( 내컴퓨터) 에서 관리 되는 개념
github = 원격 ( 외부 저장소 ) 장소 에서 공개 적으로 공유 하고 작업 할 수 있는 개념

https://git-scm.com/book/ko/v2 Git 안내 페이지
https://docs.github.com/ko Github 안내 페이지
https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F Git 버전 관리 국문 페이지
https://about.gitlab.com/ Gitlab
https://www.gerritcodereview.com/index.html Gerrit
https://bitbucket.org/product/ BitBucket
여정의 시작 - 깃 설치와 기본환경 설정하기
목표
● 환경 세팅하기
○ gib, git bash, IntelliJ
● git을 유용하게 사용하는 도구 IntelliJ 내 git GUI 둘러보기
● 깃 용어 설명하기 ( working tree, staging area, commit, snapshot, head, branch, merge)
개발 환경 설정 하기
working Tree

working Directory : 실제로 소스코드를 작성하고 편집하는 영역으로, 아직 Git으로 변경 사항을 기록하기 전 단계

Stage Area : 임시로 코드가 머무르는 공간

Local Directory :

현업에서 git 명령어를 사용하면서 자주 언급되는 커맨드
● commit
● snapshot
● head
● branch
● merge

● git commit : 우리가 stage area에서 원격 저장소로 들어가기 전 저장한 결과 값을 commit이라는 작업으로 이루어진다.

● snapshot : 원격 저장소로 업로드 전 마지막 저장 결과

● head : Git을 기준으로 현재 작업을 하고 있는 "위치"로, commit이 변경될 때마다 가장 최신의 커밋 값을 가리킨다.

● Branch : 3명의 개발자가 동시에 하나의 프로젝트에 대해 개발을 수행한다고 가정한다면 코드를 효율적으로 나눠서 관리하고 기능 분담 작업을 수행하게 될 것이다. 업무 영역 분리 / 배포 단계 분리/ 버그 수정 코드 작업/ 개발단계 구분 등으로 사용 되는 기능

● Merge : Brunch에서 서로 다른 브랜치 기능을 구현해서, 이제 하나의 애플리케이션으로 배포 하도록 코드를 합치는 과정

● git --help : git 관련 명령어를 조회하고 싶을때 사용하는 명령

내 컴퓨터와 대화하기 위한 언어 - 리눅스 명령어 (실습 시간)
학습 목표
● 파일과 디렉토리 관리하기 위해 필요한 명령어 학습하기 (ls, cd, pwd, mkdir, touch, rm, my, cp 등)
● 파일 내용 확인 명령어 학습하기 ( cat, less, head, tail, nano, vim )
● 기타 유용한 명령어 ( clear, history, echo, df, du, whoami )
● 깃과 자주 사용되는 조합의 명령어 ( git rm, grep )
리눅스 ( Linux )
리눅스는 컴퓨터를 움직이게 하는 기본 소프트웨어로, 우리가 계속해서 Git을 설치하면서 봤던 Git Bash (윈도우), 터미널 (MacOS)가 이러한 리눅스 기반 작업들을 지원할 수 있게 도와주고 있습니다.
기술에 대한 소개
개발할 때 왜 리눅스를 사용 할까요?
윈도우나 맥북만 사용해서 개발하는건 불가능한 건 아니다. 다만, 매우 한정적인 특수한 환경에서 윈도우나 맥 OS를 활용한 배포하는 작업이 물론 가능하지만 이건 보편적인 케이스는 아니고 상업용 환경에서의 거의 대부분의 배포는 리눅스 기반으로 배풔가 이뤄집니다.
그렇기 때문에 많은 개발자들이 개발하는 환경을 리눅스 기반으로 맞춰놓는 것이 서로 소통하기 편하고, 현대의 개발 및 배포 환경이 전부라고 해도 무방할 정도로 리눅스를 사용하기 때문에 빠른 배포 환경 통합을 위해 개발자들은 리눅스를 필수로 학습해야 합니다.
Linux는 어떻게 작동 하나요?
OS를 자동차 엔진이라고 생각해 봅시다. 엔진은 자체적으로도 작동하지만 변속기와 차축 및 바퀴에 연결 되면 차를 움직일 수 있습니다. 엔진이 제대로 작동하지 않으면 자동차는 움직이지 않게 됩니다.
Linux는 UNIX와 유사하게 설계 되었으나 발전을 거듭하며 전화기에 슈퍼컴퓨터에 이르는 다양한 하드웨어에서 실행되고 있습니다. 모든 Linux 기반 OS에는 하드웨어 리소스를 관리하는 Linux 커널과 OS의 나머지를 구성하는 일련의 소프트웨어 패키지가 포함 되어 있습니다. 조직에서는 Linux OS를 리눅스 서버에서 실행하도록 선택할 수 있습니다.
※ 서문을 더 이해하기 쉽게 전달하면
우리가 배포하고 관리하려는 소프트웨어 서비스를 정상적으로 구동할 수 있도록 도와주는 엔진 역할을 하는 것이 바로 리눅스라는 운영체제라고 이해하면 된다.
자동차에 비유했을 때, 차에도 여러 종류와 모델의 엔진이 있는 것처럼 리눅스도 다양한 타입의 모델이 있다는 걸로 이해하면 왜 리눅스를 사용 하는지 이해 될 것이다.
유닉스 ( Unix ) 과거 개발 원칙을 유지 하게 되면서 리눅스가 승계 받음
커널 ( Kernerl ) 커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어를 연결하는 역할을 하며, 우리가 컴퓨터 부품을 살 때 찾는 CPU, 메모리, 디스크 등의 자원을 관리 합니다.
리눅스 사용이유 , 종류, 명령어, 자격증까지 한번에 볼 수 있음
https://spartacodingclub.kr/blog/linux
리눅스란? 리눅스 사용 이유, 종류, 명령어, 자격증까지 한번에 살펴보기
리눅스는 오픈소스 운영 체제입니다. 리눅스의 가장 중요한 특징은 오픈 소스라는 것입니다.
spartaclub.kr
파일과 디렉토리 관리하기 위해 필요한 명령어 학습하기 ( ls, cd, pwd, mkdur, touch, rm, mv, cp등)
천리길도 한 걸음부터! 여러분이 현재 리눅스 운영체제의 동작 방식에 대해서는 잘 이해할 필요는 없지만, 여러분이 리눅스를 잘 사용하려면 리눅스에 어떤 명령어가 있는지 파악하는 것이 매우 중요합니다. 그래서 우리가 윈도우, 맥에서 디스플레이 화면으로 파일을 더블 클릭하거나 폴더를 관리하기 위해 사용했던 작업들을 떠올리며 이와 관련된 리눅스 명령어를 사용해보고자해요. 리눅스에서는 우리가 사용하는 디스플레이 화면 없이 터미널만 켜진 상태로 활용되는 상황이 매우 많습니다. 때문에 우리는 적재적소에 사용할 리눅스 명령어에 대해 잘 이해하고 있어야합니다.
[1] ls - list segmnet의 준말로, 현재 폴더에 있는 파일과 폴더 목록을 보여 줍니다.
정말 많이 사용하는 커맨드로, 여기에 몇 가지 옵션을 추가하면 각 파일/디렉토리에 존재하는 권한 등을 함께 파악할 수 있습니다.
저의 경우, 보통 -alt 라는 옵션을 함께 줘서 실행하는데요.
그 이유는 아래와 같습니다.
-a 옵션: 숨김 처리된 파일이나 디렉토리까지 출력
-l 옵션: 파일이나 디렉토리의 이름과 속성정보까지 같이 출력
-t 옵션: 수정 또는 생성된 시간 순으로 정렬하여 출력
이건 매우 즁요한 게, 앞으로 개발하면서 수 많은 파일들을 생성하고, 편집하는 파일 작업들이 분명히 존재하는데 최소 이 옵션들을 활용해야만 어떤 파일들이 언제 생성 되었고, 누가 생성했는지 등을 리눅스에서 파악할 수 있습니다.
ls -alt
[2] cd - change directory의 약자로 우리가 작업할 디렉토리 (폴더)로 이동할 때 사용하는 명령어 입니다.
이 때 우리가 이동할 경로 없이 cd만 입력하면, 컴퓨터에 기본 값으로 설정해 둔 home 경로로 이동하게 되며,
그 외에는 사용자가 지정한 경로들로 이동하는 것이 가능합니다.
cd <사용자가 이동할 경로>
[3] pwd - print working directory의 준말로 현재 내가 위치한 폴더 (디렉토리) 를 보여줍니다.
주로 현재 터미널 상에 위치한 디렉토리의 절대 경로를 파악할 때 사용합니다.
pwd
[4] mkdir - make directory의 약자로, 우리가 특정 프로젝트 경로를 새롭게 만들거나 새 카테고리로 파일이나 데이터를 저장할 폴더를 구성할 수 있습니다.
mkdir <생성할 디렉토리 이름>

[5] touch - 파일을 생성할 때 사용하는 리눅스 명령어로 보통 touch 커맨드 뒤에 파일 이름을 작성해서 생성할 수 있습니다.
touch <생성할 파일 이름>

[6] rm - remove의 약자로 파일 또는 디렉토리를 삭제하는 명령어로 쉽게 말해 화면상에서 삭제하기와 동일한 기능이다.
다만, 주의해야할 것이 화면상 삭제는 휴지통으로 이동하지만 rm으로 삭제된 것은 복구되지 않습니다.
그래서 매우 조심해야하고, 삭제할 때도 파일 단위로 하나만 삭제를 해야한답니다!
rm dummy.txt
[7] mv - move의 약자로 파일이나 디렉토리를 다른 환경으로 이전시킬 때 사용하는 커맨드입니다.
기본적으로 mv와 바로 다음에 배울 cp를 사용할 때 실행한 결과가 거의 비슷해 보입니다.
우리가 컴퓨터 화면상에서 파일을 디렉토리로 이동하는 작업과 동일해요.
참고로 이미지 상에서 cd .. 을 수행한 것은 생성한 sparta-git 의 상위
디렉토리로 이동하겠다는 리눅스 약어 입니다.
mv <이동할 파일 이름> <이동할 파일 경로>
[8] cp - copy의 약자로 파일이나 디렉토리를 다른 곳으로 복제할 때 사용하는 커맨드 입니다.
종종 사용하는 예시로는 production 파일의 환경을 다른 개발 환경으로 복제해서 사용할 때
사용하기도 하고, 개발 작업을 다른 곳에서 수행하다가 production 등 환경으로 그대로 옮겨 줄 때 쓰기도 합니다.
cp <복사할 파일 이름> <복사할 파일 위치>

파일 내용 확인 명령어 학습하기 ( cat, less, head, tail, nano, vim )
그런데 가만보니 파일 생성이나 삭제는 잘 되는데, 파일 내용을 읽어보거나 편집하는 기능들이 없어요. 리눅스에서는 이런 기능들도 함께 명령어로 지원하고 있기 때문에 편집하고 내용을 읽는 부분을 이해하기 위해 리눅스 커맨드 학습을 해보겠습니다.
[1] cat - concatenate라는 단어의 약자 입니다. 특정 파일에 대해 기록된 테스트를 확인할 목적으로 사용하는 리눅스 명령어 입니다.
파일에 쓰여진 내용을 편집 없이 읽고만 싶을 때 유용하게 사용할 수 있어요.
그리고 뒤 부분에서 설명하겠지만 grep 이라는 커맨드를 cat 과 함께 사용하면
무척 유용하게 찾고 싶은 키워드 검색이 가능하답니다!
평상 시에 리눅스 명령어를 사용할 때 매우 유용하게 쓰이니 꼭 자주 사용해보면서 이해하시길 바랍니다.
cat <텍스트가 입력되어 있는 파일 이름>
[2] less - 리눅스에서 파일 내용을 확인하는 명령어들 중에 하나로, 파일을 읽어 화면에 출력하는 명령어이다.
한 번에 보여지는 만큼만 읽어서 출력하기 때문에 대용량의 파일을 열어 볼 때 빠르게 읽을 수 있다는 장점을 갖고 있습니다.
less <텍스트가 입력되어 있는 파일 이름>
[3] head - 텍스트로 된 파일의 앞부분을 지정한 만큼 출력하는 명령어로 읽고자 하는 파일의 텍스트가 너무 많거나 앞부분만 빠르게 읽어서 어떤 내용이 있는지 확인할 때 사용한다.
head <텍스트가 입력되어 있는 파일 이름>
이 때 head로 읽을 수 있는 줄 수를 지정할 수 있으며, 그 때는 아래와 같은 포맷을 이용해줍니다.
head -n 2 <텍스트가 입력되어 있는 파일 이름>

[4] tail - head와는 반대로 텍스트 파일의 끝 내용을 읽을 때 사용 한다.
tail도 head처럼 읽을 수 있는 줄 수를 지정할 수 있으며, 방법은 동일합니다.
tail <텍스트가 입력되어 있는 파일 이름>
tail -n 2 <텍스트가 입력되어 있는 파일 이름>

[5] nano - 리눅스에서 가장 많이 사용하고 있는 텍스트 편집기 중 하나로, 리눅스를 사용하게 되면 꼭 마주치게 되는 편집기 입니다.
git bash를 사용하면 기본적으로 nano, vim이 설치되어 함께 사용 가능 합니다 ( 윈도우의 경우에만 )
nano <텍스트가 입력되어 있는 파일 이름>
파일을 열면 아래와 같이 입력한 텍스트 값들과 함께 여기서 조작할 수 있는 커맨드들이 표기됩니다.
해당 편집기 화면을 빠져 나오려면 ctrl + x (window), control + x (mac) 을 입력해서 종료시킵니다.
[6] vim - nano 보다 조금 더 개선된 사용성으로 인해, 최근에 올라오는 리눅스와 관련한 게시글들을 찾아보면 vim을 사용해서 텍스트 편집기를 조작하는 글들을 좀 더 쉽게 찾아볼 수 있다.
vim <텍스트가 입력되어 있는 파일 이름>
명령어를 입력해서 엔터키를 입력하면, 비어 있는 텍스트 에디터가 출력될텐데
여기서 영문 i를 입력하면 하단에 같은 화면이 출력됩니다.

입력한 값을 저장 후, 종료하려면 nano 때와는 다르게 아래 값을 입력해서
vim 편집기를 종료시킬 수 있습니다.
# esc 입력
# :wq 입력 후 엔터
아마 처음 nano, vim 등의 텍스트 편집기를 사용하면 많이 낯설어서 종료도 잘 못하고,
편집기 화면에서 빠져 나오지 못해서 전전긍긍할 수 있습니다 (저도 그랬거든요!)
그래서 편집기를 한 번 켜보고 여기서 수정은 하지 말고 바로 종료해서 빠져나오는 방법으로 먼저 사용해
보세요.
어차피 천천히 텍스트 편집기를 사용하게 될 것이고, vim은 보편적으로 많이 사용하기 때문에 저희
강의에서도 vim을 기반으로 문서 편집 후, commit을 기록하는 작업들을 수행하게 될 것입니다.
기타 유용한 명령어 ( clearm history, echo, df, du, whoami )
리눅스를 사용하는 환경에서는 일반적인 윈도우, 맥처럼 디스플레이를 보면서 마우스를
이동해 편집하는 과정도 있지만 거의 대다수의 환경에서는 이러한 마우스 커서를 이동하면서
편집하는 환경이 제공되지 않습니다.
그래서 키보드만으로 수정해야하는 작업들이 많아서 조금 더 기타 요소적인
커맨드를 알려드리도록 할게요.
[1] clear - 터미널에서 뭔가 작업을 수행하다 보면 작업 환경이 조금 지저분하다는 생각이 들 때가 있습니다.
그 때 터미널 입력 화면을 한번 정리할때 사용하는 게 clear라는 명령어 입니다.
clear

[2] history - 터미널 환경에서 입력한 모든 커맨드들의 이력을 한번에 조회할 수 있도록 보여주는 커맨드 입니다.
최대 1000개의 커맨드를 조회할 수 있으며, 예전에 사용했는데
기억이 안나는 커맨드를 찾을 때 사용할 수 있습니다.
history

[3] echo - 메아리라는 의미로 터미널에 입력한 텍스트를 한번에 출력하거나, 변수를 표시할 때 사용합니다.
텍스트는 알겠는데 변수는 뭔가요?
변수는 리눅스에 설정한 환경 변수를 의미하는 것으로 대표적으로 PATH 라고해서 터미널 내에
기본으로 코드 실행 등을 위해 지원하는 것들이 있습니다.
echo $PATH
[4] df - disk free의 약자로 현재 컴퓨터에 사용하고 있는 디스크들의 경로와 경로별 사용하고 있는 용량에 대해 조회하는 커맨드 입니다.
보통 df만 입력하면 바이트 단위로 용량이 표기되어서 읽기 매우 어렵습니다.
그래서 사람이 이해할 수 있도록 GB 단위로 읽을 수 있게 하나의 옵션을 추가해서 아래와 같이 사용할 수 있습니다.
df -h
주로 디스크 용량이 꽉찼다는 에러 등이 보일 때 확인하는 용도로 사용하는 명령어입니다.

[5] du - disk usage의 약자로 위에서 봤던 df 커맨드가 최상위 디렉토리에서 전체 용량을 볼 수 있다면, du는 개별 경로에서 사용중인 용량에 대해 조회할 때 사용하는 커맨드 입니다.
마찬가지로 du만 사용하면 사람이 직관적으로 이해하기 힘든 바이트 단위로 표기되기 때문에
아래와 같이 하나의 옵션을 추가해서 용량을 표기합니다.
du -sh

[6] whoami - 현재 터미널을 사용하고 있는 유저 정보를 보여주는 명령어로, 사용 중인 노트북 또는 데스크탑에서 사용자가 많을 경우 누구의 계정 정보로 접속하고 있는지 등을 확인하는 용도로 쓰입니다.
whoami

많은 경우, 개발자로 근무하거나 사이드 프로젝트 등을 하게 된다면
윈도우보다는 맥북 환경에서 개발하는 것이 훨씬 더 친숙하고 편하다는 생각을 하게 될 거에요.
윈도우 환경에서는 git bash 등을 사용해 개발해야 하지만, 맥에서는 기본 터미널에서 리눅스
개발 환경을 지원할 뿐더러 기타 필요한 개발 도구들을 많이 지원하기 때문이에요.
그래서 현재는 윈도우를 사용해서 git 학습을 수행하지만, 추후에는 맥북을 종종 더 이용하게 될거랍니다.
리눅스 커맨드와 git 커맨드를 서로 별개의 것으로 보는 게 아니라, 두 개를 섞어서 사용할 일이
종종 있겠구나 ~ 라고 생각해주시면 학습하는데 훨씬 더 속도가 날 거에요.
이번 강의에서 언급하지 않았지만, git log를 조회할 때 grep을 사용해서 필요한 로그들만 따로 뽑아 봐야하는 경우도 종종 있고,
git에서 사용하는 커맨드들 중에서 rm 말고도 리눅스 명령어와 겹치는 것들이 종종 있기 때문에 그렇습니다.
리눅스는 여러분이 어떤 개발을 하더라도 공통적으로 사용하게되는 운영체제이기 때문에, 한 번 배워두면 계속해서 밥벌이에 써먹을 수 있는 고마운 친구입니다.
'깃허브 & 깃허브 셋팅' 카테고리의 다른 글
| git & github (3) (0) | 2025.12.01 |
|---|---|
| git & github (2) (0) | 2025.12.01 |