티스토리

조세영의 Kotlin World
검색하기
블로그 홈

블로그 홈

조세영의 Kotlin World

kotlinworld.com/m
신고

'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.

구독자
12
방명록 방문하기
공지 코틀린 코루틴 완전 정복 강의 in ⋯ 모두보기

주요 글 목록

  • [git] local, global config 파일의 구성과 조작 git config 파일의 위치 global config 파일의 위치 git의 global config 파일은 ~/.gitconfig 에 있다. git의 local config 파일의 위치 git의 local config 파일은 .git/config 에 있다. git config 파일의 구성 git config 파일은 두가지 계층으로 이루어져 있다. [ ] 으로 감싸진 카테고리와 = 왼쪽에 있는 파라미터와 오른쪽에 있는 파라미터에 대응되는 값이다. 예를 들어 아래에는 core 카테고리 안에 repositoryformatversion, filemode, bare, logallrefupdates, ignorecase, precomposeunicode 파라미터가 있다. git은 조작 명령이 들어올 때 이 co.. 공감수 7 댓글수 2 2022. 1. 14.
  • [Git] reflog를 활용한 삭제된 브랜치 복구 방법 reflog란? reflog란 git에서 가리키는 referenced commit이 변경된 내역이다. reflog를 기록하는 것은 대표적으로 HEAD와 branch 두가지이다. HEAD의 reflog HEAD의 reflog 경우 새로운 커밋이 생기거나, branch가 switch 될 때마다 해당 브랜치의 가장 최신 커밋으로 reference가 바뀌게 된다. 예를 들어 master 브랜치에 test, test2란 커밋을 만들고, feature-branch 브랜치를 새로 만든다음 feature-branch에서 new commit 커밋을 새로 만들면 다음과 같이 reflog가 쌓이게 된다. $ git reflog show HEAD d42e22f (HEAD -> feature-branch) HEAD@{0}: c.. 공감수 7 댓글수 0 2022. 1. 13.
  • [Git] Git의 저장 단위인 commit의 동작 원리에 대해 알아보자 Git의 기본 저장 단위 Commit Commit은 Git의 기본 저장 단위이다. 우리는 Commit을 파일들에 대한 스냅샷이라고도 부르며, Commit은 Commit을 찍은 시간의 파일들의 상태에 대해 저장한다. Commit은은 tree, parent, author, commiter,message 5가지 구성요소로 이루어져 있다. tree : tree와 blob를 포인팅하는 구성요소이다. parent : 해당 커밋 직전에 어떤 커밋이 있었는지 포인팅한다. author : 작성자. commiter : 커밋을 만든 사람. message : 커밋을 설명하는 메세지. 예를 들어 commit이 두 개 찍힌 다음과 같은 로그를 가진 Git 폴더가 있다고 해보자 $ git log --oneline 6e3a608 .. 공감수 3 댓글수 0 2022. 1. 13.
  • [Git] Git은 어떻게 파일을 저장하고 복구하는가? git의 기본 파일 단위인 blob와 Hashing의 관계에 대해 알아보자 변경사항을 압축해 저장하는 objects 폴더 objects 폴더 내부를 보면 두 글자 이름을 가진 폴더들이 있다. objects 폴더는 git의 모든 변경사항을 압축해서 파일들을 각 폴더 내부에 저장한다. 이 내부에는 commit, tree, blob, annotated tag들이 저장되며, git을 통해 히스토리를 확인할 수 있는 것은 바로 이 폴더 내부에 모든 스냅샷들이 저장되기 때문이다. 저장되는 방식은 hash에 해당하는 압축된 변경사항으로 저장된다. 예를 들어 위 폴더 중 02에는 7f7aa 로 시작하는 파일명인 파일이 있다. 이 파일은 Git의 저장의 기본 단위인 blob로, blob 파일 내부에는 027f7aa 해시값에 대한 변경사항이 압축되어 있다. 깃에서는 blob 파일의 압축을 풀어 .. 공감수 2 댓글수 1 2022. 1. 12.
  • [Git] .git 폴더 내부의 refs 폴더에 대해 알아보자 HEAD, tag들의 커밋 해시값을 저장하는 refs 폴더 앞서 git의 HEAD와 tag에 대해 보았다. 이 값들은 특정 커밋들을 가리키는 포인터들로 특정 커밋의 해시 값을 가리킨다. 이 해시 값들을 저장하는 위치가 바로 refs폴더이다. 따라서 refs 폴더 내부를 보면 다음과 같이 출력된다. $ ls .git/refs heads stash tags refs 폴더 내부에는 heads 폴더와 tags 폴더가 있다. 이 중 heads 폴더 내부에는 브랜치별로 파일이 존재한다. 이 파일들 각각 내부에는 해시값이 저장되어 있다. $ ls .git/refs/heads feature-layout feature-view main 실제로 뜯어보면 다음과 같이 나오며 이 값은 main 브랜치의 HEAD 커밋 해시값.. 공감수 2 댓글수 0 2022. 1. 11.
  • [Git] git config 는 어떻게 동작하는가? .git 폴더의 config 파일 .git 폴더의 config 파일은 git repository에 대한 설정값을 저장해놓는 파일이다. git은 config 파일을 읽어 설정값들을 사용하며, 유저들의 조회 요청이 있을 경우 출력해준다. config 파일의 역할은 다양한데 user name, email 을 설정하는 것에서부터 remote repository에 대한 정보 또한 저장한다. 추가적으로 color scheme 을 적용해 git 명령어에 대한 가독성을 높일 수도 있다. 이 글에서는 간단히 이해하기 위해 git을 사용하는 모든 사람들이 익숙한 user name과 email을 설정하고 .git/config 파일을 통해 조회하는 방법과 remote 정보를 추가하고 확인하는 방법에 대해 다룬다. User n.. 공감수 2 댓글수 0 2022. 1. 10.
  • [Git] Tag를 활용한 Git Version 만들기 : git tag 추가, 삭제, 검색, 푸시 한 번에 정리하기 Git Tag란? Git Tag란 버저닝을 위해 사용하는 포인터이다. HEAD가 특정 커밋 해시를 가리키는 것 같이 Git Tag 또한 특정 커밋 해시를 가리킨다. *만약 HEAD에 대해 익숙하지 않으면 아래 글을 살펴보자. [Git] .git 내부에서 HEAD를 인식하는 방법 .git 내부에서 HEAD를 인식하는 방법 .git 내부에는 HEAD파일이 있다. 이 파일은 HEAD를 인식하기 위한 메타 데이터를 저장하는 파일이다. 작업 중인 브랜치에 따라 변하는 HEAD파일 HEAD 파일은 현재 kotlinworld.com 이번 글에서는 다음의 순서로 Git Tag에 대해 다룰 것이다. Git Tag 만들기 Git Tag 목록 조회하기 Git Tag 필터링하기 Git Tag간 차이 확인하기 Git Tag로 .. 공감수 3 댓글수 0 2022. 1. 10.
  • [Git] interactive rebase 사용해 이전에 생성된 커밋 조작하기 : commit 메세지 수정, commit 삭제, commit 합치기 interactive rebase 사용해 이전 커밋 조작하기 앞선글에서 git rebase를 이용해 rebase 대상 브랜치의 commit history를 새로 만드는 것을 살펴보았다. commit history를 새로 만들 수 있다는 것은 현재 시점 이전에 생긴 커밋들을 조작할 수 있다는 것이다. git rebase는 interaction 모드인 -i 옵션을 이용해 커밋 히스토리를 합칠 수 있는 기능을 제공한다. git을 사용하다 보면 이전 커밋들을 합치고 싶은 경우가 생기는데, 그 때 이 기능을 사용하면 된다. git rebase -i 를 사용해 커밋 메세지를 수정하기 위해서는 다음 명령어를 사용하면 된다. HEAD~n 은 HEAD 커밋으로부터 n 번째 까지의 커밋을 수정한다는 뜻이다. git reb.. 공감수 2 댓글수 0 2022. 1. 10.
  • [Git] git rebase 사용해 git commit history 다시 작성하기. 언제 git merge 또는 git rebase를 사용해야 하는가? Git Merge와 Git Rebase의 차이 git merge와 rebase는 모두 두 브랜치를 합치기 위한 명령어이다. 우리는 이곳에서 이 두 브랜치를 기준 브랜치와 대상 브랜치로 나눈다. 기준 브랜치는 master과 같이 기준이 되는 브랜치이고, 대상 브랜치는 feature 브랜치들과 같이 master에 합쳐져야 하는 브랜치이다. git merge와 git rebase가 다른 점은 두 브랜치의 커밋들을 합치기 위해 어떤 전략을 취하는지이다. 만약 기준 브랜치를 대상 브랜치에 merge한다고 하면(feature 브랜치에 master 브랜치를 merge), git merge는 기본적으로 merge를 하기 위해 대상 브랜치를 그대로 두고 기준 브랜치의 변경 사항(커밋)을 대상 브랜치에 얹으면서 합친다. .. 공감수 3 댓글수 0 2022. 1. 10.
  • [Git] git reset, revert 사용해 전체 파일 커밋 단위로 제어하기 git reset이란? 앞서 다룬 git restore이 파일 단위을 커밋 단위로 제어 했다면, git reset은 전체 파일을 커밋 단위로 제어하기 위한 명령어이다. git reset을 사용하면 전체 파일들이 특정 커밋으로 돌아간다. 이때 돌아가기 위한 전략에는 두가지가 있다. 하나는 Plain Reset이라 불리는 전략이다. Plain Reset은 커밋을 제거한 다음 해당 커밋들에서의 변경 사항을 Working Directory로 Unstaged 되게 해서 복구한다. 두번째는 Hard Reset으로 커밋을 제거한 다음 변경 사항 또한 모두 제거해버리는 방식이다. git reset [commit hash] 사용해 특정 commit 되돌리기 git reset을 사용하면 대상 커밋 해시와 현재 커밋 사이의.. 공감수 2 댓글수 0 2022. 1. 8.
  • [Git] git restore 사용해 파일 단위 제어하기(git add 취소, 특정 커밋으로 되돌리기 등) git restore이란? git checkout은 하나의 키워드에 많은 기능이 들어있다. 때문에 checkout의 브랜치와 관련된 기능이 git switch 명령어로 새로 나오게 됐다. git restore 또한 새로 나온 키워드로 git의 파일 조작(특정 커밋으로 되돌리기, Unstaging 시키기 등) 만을 위한 기능을 지원하는 명령어이다. git restore [file name]을 사용해 특정 파일 HEAD Commit으로 복구하기 git restore --source [commit hash] [file name] 사용해 특정 파일 특정 Commit으로 복구하기 git restore --staged [file name] 사용해 Staging Area에 올라간 파일 다시 Unstaging 시키기 .. 공감수 5 댓글수 0 2022. 1. 8.
  • [Git] git checkout 이용해 commit 단위로 파일 제어하기 git checkout이용해 특정 commit으로 되돌리기 git checkout [commit hash] 를 통해 특정 commit으로 되돌릴 수 있다. 이때 [commit hash]는 모든 해시값을 써도 되고 앞 7자리 해시 값을 써도 된다. git checkout [commit hash] git checkout 예시 예를 들어 git log가 다음과 같은 경우 log의 커밋들 중 fourth commit으로 되돌리고 싶다고 해보자. commit f0cdce562bef70fed30f392a18c82543aa2f126b (HEAD -> main) Merge: 027f7aa 1709310 Author: Seyoung Cho Date: Wed Jan 5 23:51:57 2022 +0900 merge com.. 공감수 3 댓글수 0 2022. 1. 7.
  • [Git] git stash 사용해 변경 사항 저장하고 꺼내기 git stash가 필요한 이유 Git 폴더 내부에서 작업을 했을 때 작업물은 Unstaged Area나 Staged Area 둘 중 하나에 저장된다. 이때 만약 작업물을 커밋하지 않고 다른 브랜치로 변경할 경우 변경 사항이 같이 따라가거나 conflict가 일어나게 된다. 따라서 이러한 작업물들을 저장할 임시 공간이 필요한데, 그 공간으로 작업물을 보내주는 명령어가 바로 git stash이다. git stash란? git stash는 Working Directory(단 git add 자체가 안된 것은 제외, modified 것은 stash됨)와 Staging Area의 작업물을 임시 저장공간에 저장하는 명령어이다. git stash를 이용한 저장은 두가지 명령어로 할 수 있다. git stash git.. 공감수 6 댓글수 0 2022. 1. 7.
  • [Git] git diff 한 번에 정리하기 git diff 란? git의 diff란 commit 이나 branch 사이에 다른점 혹은 파일이나 Repository와 Working Directory 사이의 다른점을 보여주는 명령어이다. 이에 따라 git diff에는 다양한 옵션이 있다. 이 글에서는 다음의 순서로 진행한다. git diff와 git diff HEAD 를 이용한 변경 사항 확인 git diff [option] [file name] 사용해 특정한 파일에 대한 변경 사항 확인하기 git diff [branch1]..[branch2] 명령어 사용해 브랜치 간 변경사항 확인하기 git diff와 git diff HEAD 를 이용한 변경 사항 확인 먼저 git diff와 git diff HEAD에 대해 알아보자. git diff는 Workin.. 공감수 13 댓글수 0 2022. 1. 7.
  • [Git] git merge 한 번에 정리하기 : Fast Forward Merge, Commit Merge, Conflict Merge Git merge란? git branch를 다른 branch로 합치는 과정을 merge라 한다. merge의 기본 단위는 브랜치이며, git merge 명령어로는 커밋 단위로 합치기가 불가능하다. Fast Forward Merge 가장 기본적인 merge는 바로 Fast Forward Merge이다. Fast Forward Merge는 현재 브랜치의 HEAD가 대상 브랜치의 HEAD까지로 옮기는 merge이다. Fast Forward Merge는 다음 명령어를 통해 가능하다. git switch [현재 브랜치] git merge [대상 브랜치] 예를 들어 아래와 같은 git log가 있다고 해보자. feature-view branch의 HEAD는 third commit이며, main 브랜치의 HEAD는 .. 공감수 8 댓글수 0 2022. 1. 6.
  • [Git] .git 내부에서 HEAD를 인식하는 방법 .git 내부에서 HEAD를 인식하는 방법 .git 내부에는 HEAD파일이 있다. 이 파일은 HEAD를 인식하기 위한 메타 데이터를 저장하는 파일이다. 작업 중인 브랜치에 따라 변하는 HEAD파일 HEAD 파일은 현재 HEAD가 가리키는 해시 값을 저장하는 파일을 가리키는 reference 값을 저장한다. 따라서 HEAD 파일은 현재 작업중인 브랜치에 따라 값이 바뀌게 된다. 예를 들어 main 브랜치에서 .git/HEAD를 확인할 때는 이 값은 "ref: refs/heads/main" 이 된다 하지만 feature-view 브랜치에서 .git/HEAD를 확인하면 이 값은 "ref: refs/heads/feature-view" 가 된다. 이 텍스트 값은 바로 현재 브랜치의 HEAD의 해시 값을 저장하는 .. 공감수 3 댓글수 0 2022. 1. 5.
  • [Git] branch 이름 변경하는 방법 정리 : 현재 브랜치, 다른 브랜치 이름 변경하기 git branch -m 을 이용해 현재 브랜치의 이름 변경 git branch -m은 git branch --move의 약자로 Move/Rename 을 위한 명령어이다. *개인적으로는 modify라고 외우고 있다. 현재 브랜치의 이름을 변경하기 위해서는 다음의 명령어를 사용하면 된다. git branch -m [rename branch] 사용 방법 1. 원하는 브랜치로 전환(혹은 생성)한다.(git switch -c) 2. git branch -m을 이용해 현재 브랜치의 이름을 바꾼다. 예시 예를 들어 "feature-layout" 브랜치를 만든다음 해당 브랜치 이름을 "feature-view"로 바꾸고 싶다고 해보자. 다음과 같이 작성하면 변경된다. git switch -c "feature-layou.. 공감수 3 댓글수 0 2022. 1. 5.
  • [Git] git branch 삭제하는 방법 알아보기 : -d와 -D 옵션을 이용한 브랜치 삭제 git branch -d 를 이용한 삭제 git branch -d 는 git branch --delete 과 같은 명령어이다. 이 명령어를 사용해 브랜치를 삭제하려면 다음과 같이 작성하면 된다. git branch -d [branch name] git branch --delete [branch name] 하지만 git branch -d는 branch가 원 브랜치에 비해 변경사항이 없을 때만 가능하다. 즉, 브랜치에 변경 사항이 있는 경우 다음과 같은 오류가 생긴다. error: The branch 'feature-layout' is not fully merged. If you are sure you want to delete it, run 'git branch -D feature-layout'. 예를 들.. 공감수 3 댓글수 0 2022. 1. 5.
  • [Git] branch 생성과 전환 방법 알아보기 : 브랜치 조작을 위해서는 어떤 명령어를 사용해야 하는가? branch란 무엇인가? branch란 개발 저장소를 어지럽히지 않고 병렬적으로 개발을 수행할 수 있도록 도와주는 작업공간이다. branch는 Git의 가장 기본적인 작업공간 단위이다. 따라서 branch라 부르는 작업공간을 전환하고 생성하는 방법은 매우 중요하며, 작업 공간의 목록을 확인하는 것도 매우 중요하다. git branch 이용해 브랜치 목록과 현재 브랜치 확인하기 git branch를 사용하면 브랜치 목록이 뜬다. 이 중 왼쪽에 *표시가 되어 있는 것이 현재 작업중인 브랜치이다. branch 생성하기 이번에는 브랜치를 생성하는 방법을 알아보자. branch를 생성하는 방법은 다음 두가지 방법으로 가능하다. git branch를 이용한 생성 git checkout -b 를 이용한 생성과 전환.. 공감수 6 댓글수 0 2022. 1. 4.
  • [Git] HEAD란 무엇인가? HEAD란 무엇인가? Git을 다루다보면 git log를 찍었을 때 HEAD가 특정 커밋에 찍혀있는 것을 볼 수 있다. 모든 브랜치에는 HEAD 값이 존재하는데 HEAD란 해당 브랜치의 마지막 커밋을 뜻한다. 따라서 아래와 같이 HEAD가 특정 커밋에 찍혀 있을 경우 해당 브랜치의 마지막 커밋이 해당 부분이라는 것을 알 수 있게 된다. 즉, HEAD는 특정 브랜치의 마지막 커밋에 대한 포인터이다. HEAD -> [branch name] 다른 브랜치의 HEAD확인하기 위의 master branch에서 다음 명령어를 이용해 feature-layout이라는 새로운 브랜치를 만들었다고 해보자. git checkout -b "feature-layout" 브랜치를 새로 만들게 되면 이전 master의 commit들.. 공감수 8 댓글수 0 2022. 1. 4.
  • [Git] .gitignore 사용해 git에 추가되지 말아야 할 파일 정의하기 .gitignore 파일이란? .gitignore 파일은 Git의 root 디렉토리에 저장되어, Git Repository나 Staging Area에 추가되지 말아야 하는(무시되어야 하는) 폴더나 파일을 정의하는 파일이다. .gitignore에 정의된 파일은 Staging Area에 올라가지 않기 때문에 tracking 되지 않는다. 따라서 git status 를 이용했을 때 보이지 않는다. .gitignore 이용해 git에 추가되지 말아야 할 파일 정의하기 .gitignore 이용해 폴더 전체 무시하기 다음 줄을 추가함으로써 특정 폴더에 있는 전체 파일을 무시할 수 있다. [folder name]/ 예를 들어 Kotlin이라는 폴더가 있다고 했을 때 이 내부에 있는 파일을 모두 무시하기 위해서는 아래.. 공감수 9 댓글수 2 2022. 1. 3.
  • [Git] git init, add, commit 이 동작하는 방식 : Git 내부 살펴보기 Git의 세가지 영역 : Working Directroy, Staging Area, Repository Git은 Working Directroy, Staging Area, Repository 세가지 영역으로 이루어져 있다. Working Directory는 작업 공간으로 아직 Git에 기록될 준비가 되지 않은 파일들이 위치하는 공간이다. Staging Area는 대기 공간으로 Git에 기록될 준비가 된 파일들이 위치하는 공간이다. 마지막으로 Repository는 Git에 기록된 파일들이 위치하는 공간이다. 위 세가지 영역은 긴밀히 협력하면서 Git을 구성한다. git init가 동작하는 방식 git init은 Git의 세가지 영역과 Git을 구성하기 위한 파일과 메타데이터를 만들어낸다. 아무것도 없는 폴.. 공감수 5 댓글수 0 2022. 1. 3.
  • [Git] Git에 user name과 user email을 설정하고 설정된 값을 확인하는 방법 Git에 user name과 user email을 설정하는 방법 Git에 user name과 user email은 config에 설정한다. config에 설정된 user name과 user email값은 파일을 관리할 때 코드를 작성한 주체가 누구인지 이메일이 무엇인지에 대해 알기 위해 사용된다. config는 global 모드와 local 모드로 설정이 가능하다. global 모드로 설정하면 컴퓨터 내의 모든 git의 관리를 받는 폴더에 대해 값이 설정되는 것이며, local 설정은 현재 디렉터리에만 값을 설정하는 것이다. user name 설정 방법 글로벌 설정 git config --global user.name "[user name]" 로컬 설정 config의 default 옵션이 --local이.. 공감수 8 댓글수 0 2022. 1. 2.
  • [Git] Git 과 Github은 무엇이 다른가? Git과 Github의 차이점 많은 사람들이 Git과 Github이 같은 것이라고 생각한다. 하지만 Git은 Github과 동일하면서 다르다. Git은 개인 컴퓨터에서 돌아가는 Version Control System이다. Git을 사용하기 위해서는 개인 계정을 등록할 필요도 없으며 인터넷을 연결할 필요도 없다. 반대로 Github은 Github라 불리는 회사에서 서비스하고 있는 서버에 올라간 Git 이기 때문에 사용하기 위해 개인 계정을 등록해야 하며, 인터넷에 연결되어야 사용할 수 있다. 즉, Github는 Git 소프트웨어를 지원하는 일종의 클라우드 서비스이다. 우리가 휴대폰이나 컴퓨터에서 클라우드를 사용할 때 우리의 기기에 파일을 저장해놓으면 우리의 기기에서 사용하기 위해서는 계정이나 인터넷이 필.. 공감수 5 댓글수 0 2022. 1. 2.
  • VCS(Version Control System)이란 무엇인가? VCS(Version Control System) 이란 무엇인가? VCS는 Version Control System의 약자로, 파일의 변화를 추적하고 관리하는 시스템이다. 소프트웨어 엔지니어링에서 VCS는 코드의 변화를 추적하고 관리는데 사용된다. 대표적으로는 Git과 Subversion이 있으며, 2018년 기준 Git의 점유율이 88.4%에 달하며(*1), 2022년 기준 90% 이상의 회사에서 Git을 사용할 것이라 추정된다. *1 : Stack Overflow 2018 Survey VCS가 중요한 이유 소프트웨어 엔지니어링에서 가장 중요하게 생각하는 것은 바로 유지보수성이다. 코드를 깔끔하게 짜는 것, 변수명을 깔끔하게 짓는 것, OCP 원칙을 지키는 것 모두 유지보수성을 위해 만들어진 원칙들이.. 공감수 4 댓글수 0 2022. 1. 2.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.