함수 분리하기
어떤 기준으로 함수를 분리해야 할까?
나는 프로그래밍을 할 때 다음 순서대로 한다.
- 문제를 추상적으로 분석하여, 큼직한 기능 별로 함수를 정의한다.
- 큼직한 기능 별로 나눈 함수를 구현한다.
- 구현한 함수에서 더 작은 단위로 로직을 나누어 함수를 분리한다.
- 복잡한 부분을 함수로 분리해 추상적으로 기능을 호출한다.
- 반복되는 부분을 함수로 분리해 추후 수정할 때 일괄적으로 수정할 수 있게끔 한다.
- +) 상황에 따라서 다른 일을 할 경우, 공통된 일들은 최대한 모아서 같이 한다. -> 가끔 이 과정에서 if문이 사라져버리기도 한다.
-> 이 부분은 주말에 도서관에서 좋은 코드, 나쁜 코드를 빌리고 함수형 프로그래밍에 대해 한번 알아봐서 따로 정리해보아야 겠다.
git
의미있는 커밋 로그 작성하기
작년에 우아한 테크코스 프리코스를 하면서 정리했던 걸 다시 되새겨봤다.
feat : 새로운 기능에 대한 커밋
fix : 버그 수정에 대한 커밋
build : 빌드 관련 파일 수정에 대한 커밋
chore : 그 외 자잘한 수정에 대한 커밋
ci : CI관련 설정 수정에 대한 커밋
docs : 문서 수정에 대한 커밋
style : 코드 스타일 혹은 포맷 등에 관한 커밋
refactor : 코드 리팩토링에 대한 커밋
test : 테스트 코드 수정에 대한 커밋
[참고] Commit Message Conventions
git의 내부 동작
이미지 출처) [Git] 내부 동작 원리에 대한 이해
용어 정리
- 로컬(Local) = Working Directory = Working Copy
- 실제 위치: 프로젝트 폴더
- 현재 프로젝트 폴더에 있는 파일들을 의미한다.
- 인덱스(Index) = Staging Area = Cache
- 실제 위치: .git/index
- 개념적으로는 커밋이 이뤄질 준비가 된 파일의 내용들이 위치하는 영역을 의미함.
git add 명령어를 수행하면 변동 사항을 이 인덱스 영역에 반영시킬 수 있음.
- .git/index 파일에는 커밋이 이뤄질 준비가 된 파일들의 파일 명과 내용을 담고 있는 Blob 파일의 주소가 기록됨.
- 저장소(Repository)
- 실제 위치: .git/objects/ 아래
- 깃이 버전 관리를 하기 위해 필요한 데이터들을 저장하는 곳이다.
- 여러 버전들에 해당하는 파일들의 내용이 Blob 파일로서 이곳에 저장되어 있음.
- 이 곳에 저장된 파일들을 특별히 오브젝트 파일이라고 부름.
(Blob 파일도 오브젝트 파일의 한 종류)
- 오브젝트 파일
- Blob 파일
- 버전 관리하는 파일들 각각의 내용은 깃의 저장소에서 Blob 파일의 형태로 저장됨.
- 파일의 내용에 SHA1이라는 해싱 기법을 적용하여 Blob 파일의 이름을 얻어내서 내용이 같은 파일들은 하나의 Blob 파일로서 저장됨.
- Commit 파일
- 하나의 버전을 생성한다는 것은 하나의 commit 파일을 만드는 것.
- commit 파일은 하나의 tree 파일을 가리키고, 이 가리키고 있는 tree 파일의 주소와 직전 버전에 해당하는 commit 파일의 주소가 기록됨.
- Tree 파일
- 커밋 시점의 파일들 각각에 대해 그 파일 명과 해당 파일의 내용을 담고 있는 Blob 파일의 주소가 기록됨.
- 인덱스 파일(.git/index)과 성격이 유사함.
git 명령어의 작동 원리
- git add <파일명>
- 인덱스의 내용과 비교했을 때 로컬에서 변동된 사항을 인덱스에 반영시키는 명령어
- 새로 생성된 파일, 수정/삭제된 기존 파일이 add 명령의 대상이 됨.
- git commit -m <메세지>
- 인덱스의 내용을 바탕으로 새로운 버전(commit 파일)을 생성하는 명령어
- 특정 시점의 프로젝트를 하나의 버전으로서 저장해준다는 의미
visual studio code
vscode vs 터미널
공통점
- 둘 다 파일을 생성하고, 파일 내용을 편집할 수 있다.
- git 등의 다양한 확장 프로그램을 연동해서 사용 가능하다.
차이점
- vscode는 IDE로 내부 인터페이스를 통해 코드 편집과 확장 기능을 이용할 수 있다.
(버튼 클릭으로 git commit이 가능하다)
- 터미널은 명령줄 인터페이스로 명령어 입력을 통해 모든 기능을 사용한다.
+) vscode 내부에서도 ctrl+` 단축키로 터미널을 사용할 수 있다.
(나는 git이나 npm의 기능을 사용할 때 거의 터미널을 이용한다.)
- ※ vscode 내부 터미널에서는 어쩔 때는 권한 관련 오류가 뜰 때가 있다. 그럴때는 터미널 창을 따로 띄워서 진행한다.
-> 그런 경우 방지법