본문 바로가기

반응형

기타/Git

(7)
[Web] JWT (JSON Web Token) 1. JWT (JSON Web Token) JWT 는 서로 다른 컴포넌트 간에 데이터를 전달하기 위해서 사용되는 토큰이다. JSON 형식의 객체를 암호화한 값들을 특정한 형식으로 구성한 문자열 형태를 띄고 있으며, 주로 웹서비스의 인증, 인가에서 세션과 쿠키의 대체제로 사용된다. JWT 의 JSON 객체는 name-value 쌍으로 구성되어 값을 저장한다. 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장된다. 이때문에 서버에서 메모리나 스토리지 등을 위해 세션을 관리했던 서버의 부담을 덜 수 있다. 그렇기 때문에 분산 시스템과 같이 여러 request / reply 가 발생하는 구조의 시스템에서 많이 사용한다. 2. JWT 구조 JWT 는 세가지 부분으로 구성되는데, header, payload 그리..
[git] git hooks / pre-commit 기존에 github-actions 를 사용하여 github 서버에서 테스트 코드가 실행되고 도커 이미지가 빌드 및 배포가 되는 ci/cd 를 구성해 본 경험이 있다. 그런데 개발을 진행하다 보니 로컬에서부터 ci 를 적용하여 자동으로 테스트 코드가 실행되고 코딩 컨벤션을 자동으로 적용할 수 있도록 하면 좋을 거 같다는 생각이 들었다. 로컬에서 작업을 하면서 자동으로 ci 를 적용해볼 수 있을 만한 도구들을 찾으면서 많이 사용하는 git hooks 와 pre-commit 모듈 등에 대해서 알아보았다. 1. git hooks Git hooks 는 특정 이벤트가 발생했을 때 자동으로 정해진 스크립트를 실행할 수 있도록 해주는 git 의 기능이다. Git hooks 는 이벤트에 따라서 client hook 과 ..
[git] git 브랜치 병합 전략 (merge, rebase) git 을 사용하여 작업을 할 때 기능별로 작업별로 브랜치를 새로 생성하여 작업을 하게된다. 각각의 브랜치는 작업이 끝나면 병합을 진행해주어야 하는데 git 에서는 크게 merge 와 rebase 두가지 방법을 사용한다. 병합 전략이 여러가지인 이유는 병합을 진행한 후에 두 브랜치 간의 commit history 를 어떻게 남길지 선택해야 하기 때문이다. 어떤 전략을 선택하느냐에 따라서 각각의 브랜치에서 작업을 수행한 기록인 commit history 를 하나의 브랜치로 합쳤을 때 어떤 형식과 순서로 기록이 남겨질지 달라진다. 그렇기 때문에 개발자는 자신의 상황과 함께 개발하는 조직에 알맞은 방식을 사용하여서 commit history 가 관리되도록 해야한다. 1. merge merge 는 일반적으로 알..
[git] git stash git 을 사용하여 작업을 하던 중 branch 를 바꾸기 위해서 git check 을 시도하면 때로 변경사항이 있어서 브랜치를 변경할 수 없다며 commit 또는 stash 를 통해서 변경 사항을 저장하라고 한다. commit 은 변경사항을 local repository 에 저장하는 명령어인데 stash 는 어떤 명령어인지 몰라서 이번에 알아보려 한다. 1. git stash git stash 란 워킹 디렉토리에서 수정한 파일들을 저장하는 명령어이다. stash 는 modified 이면서 tracked 상태인 파일과 staging area 에 있는 파일들을 스택에 잠시 저장했다가 나중에 다시 저장할 수 있도록 해준다. 이를 통해서 아직 마무리 되지 않은 작업을 잠시 저장해두었다가 다른 브랜치에서 작업을..
[git] squash로 commit 합치기 1. squash 때로는 하나의 기능을 구현하는데 있어서 프론트, 서버 또는 여러번의 수정으로 인해 커밋의 개수가 여러개가 될 때가 있다. 이럴 때 커밋 이력 등을 정리하기 위해서 git squash 를 사용하여 커밋 이력을 합치면 된다. git의 squash 기능은 여러개의 커밋 이력을 하나의 커밋 이력으로 만들 때 사용한다. 정확히 말하면 git rebase 를 통해서 이전 commit log 등을 되돌릴 수 있는데, 이 때 squash 옵션을 사용하여 되돌리는 커밋들을 하나의 커밋으로 만들 수 있다. # git commit log 를 확인한다. git log # log를 통해서 확인하여 rebase 명령어를 통해 해당 commit 으로 원복을 수행한다. # 이때 -i 옵션(interactive)을 ..
[git] git submodule / subtree git 저장소 안에 또 다른 저장소가 필요한 경우 submodule 또는 subtree를 사용한다. 실제로는 여러 개의 개별 저장소이지만 개발자의 로컬에서는 하나의 저장소로 관리할 수 있도록 한다. 이 둘을 비교해보고 자신의 프로젝트에 맞는 방식으로 프로젝트를 관리하면 된다. 1. submodule git 저장소 안에 다른 저장소가 들어가 있는 개념이다. 상위 저장소에서 서브 모듈을 SHA 값, 하나의 바이너리처럼 취급하기 때문에 병합에 있어 복잡하다. 저장소가 병합되는 것이 아닌 최신 커밋의 내용으로 교체된다. 직접 서브모듈을 업데이트한 뒤 병합 후 푸쉬해야한다. .gitmodules를 통해 메인 프로젝트에서 sub 프로젝트를 관리할 수 있다. .gitmodules에는 submodule로 사용할 프로젝..
[git] git add, commit, push 취소하는 방법 git을 통해서 프로젝트 버전 관리를 하는 도중에 실수로 push를 진행해서 remote repository (github)에 업데이트 되었다. 이를 취소하기 위해서 git push 등을 통해 repository에 업데이트 된 내용들을 취소하는 방법을 찾아보았다. 1. git add 취소하기 git add [file name] 명령어를 사용하는 경우 파일의 변경사항이 local의 index에 staging 상태로 올라가게 된다. 이때 reset 명령어를 사용해서 unstaging 상태로 원복할 수 있다. $ git reset HEAD [file name] 입력된 file name에 대해서 staging 되어있는 변경사항이 unstaging 된다. file name을 따로 입력하지 않는 경우에는 현재 st..

반응형