한 달이 지났다.
누군가 나를 잡고 캠프가 시작하는 한 달 전으로 돌아갈 수 있으면 돌아갈 것이냐 물으면 나는 단언컨대 절대 돌아가지 않을 것이다.
그만큼 지난 한 달간 SKN 부트캠프에서의 성취는 높았고, 후회없을 노력을 했다.
한 가지 아쉬웠던 점이라면 오전 9시부터 저녁 6시까지 진행되는 수업에 개인 시간이 부족했다는 점을 뽑을 수 있겠다.
내가 특히나 수업 내용에서 파생되는 이런 저런 개념들에 많은 호기심을 가지기 때문에 더욱 시간이 부족하게 느껴졌던 것 같다.
예를 들어 UTF-8
컴퓨터는 이진수만을 읽을 수 있고 그렇기에 우리가 흔히 말하는 프로그래밍 언어, 고급어를 사용해 컴퓨터에게 명령을 내린다고만 알고 있었다.
조금은 다른 내용이지만 이번 주 수업을 통해 Pandas의 DataFrame을 사용하면서 이런 저런 확장자를 가진 파일들을 많이 접해보게 되었는데 같은 내용의 파일이더라도 확장자에 따라 컴퓨터가 다르게 읽어온다는 점이 내 호기심을 끌었던 것 같다.
여기서 그 컴퓨터의 해석 방식에 대해 조금 더 깊이 내려가 만난 것이 컴퓨터의 인코딩 방식이었다.
하나의 문자마다 7비트의 고정 공간을 할당해 128개의 문자를 표현하는 ASCII 코드
128개라는 적은 개수로 인해 여러 글로벌 언어를 표현하지 못한다는 단점이 존재한다
메모리를 아끼고자 하나의 문자당 7비트만을 할당했던 아스키 코드, 이를 보완해 나온 것이 유니코드라는 인코딩 방식이었다.
특히나 그 중 가장 효율적인 메모리 저장방식을 가진다는 UTF-8 방식이 굉장히 흥미로웠는데 그 내용은 아래와 같다.
UTF-8 방식은 다음 문자가 몇 바이트의 크기를 가지는 지 알려주는 헤더를 가진다
이를 통해 아무리 어려운 특수 문자라 하더라도 유니코드 값과 1대 1 매칭이 가능해진다
예를 들어 첫 바이트, 8개의 이진수가 0으로 시작하는 0xxx xxxx 꼴이라면 이는 이 하나의 바이트가 하나의 문자에 대응된다는 뜻을 가지며 뒤따른 7비트를 사용하여 128개의 문자를 표현한다.
110x xxxx 10xx xxxx 꼴의 2바이트 문자 개를 통해 다른 대부분의 글로벌 언어를 지원하고 3바이트와 4바이트 등을 통해 여러 특수기호나 이모지까지 표현하게 된다.
이런 숨겨진 고민의 흔적들을 찾아가는게 나에게 있어서 큰 재미가 되고 원동력이 되는 것 같다.
도저히 지나칠 수 없어....
그 끝판왕 Git
지난 프로젝트를 진행하면서 Git의 SourceTree 를 사용하며 느낀 답답함이 나를 Git으로 이끌었다.
Git은 모든 내용을 SHA-1 해시값으로 컨트롤한다.
Git은 모든 버전에 대한 기록을 스냅샷 찍듯이 기록한다고들 한다.
이게 어떻게 가능하지?
내가 수정한 모든 디렉토리와 파일에 대해 고유한 알고리즘에 따라 이른바 디지털 지문, SHA-1 해시값을 부여해 저장한 뒤, 각각의 브랜치를 만들어 이들을 참조한다.
예를 들어 이 브랜치에서는 이런 이런 변경 내용들이 반영되어 있고 저 브랜치에는 이 변경 사항은 아직 없어 ! 와 같은 느낌이다.
각각의 변경사항들을 따로따로 저장하기에 Git은 여러 브랜치를 만들어 어느 시점으로든 파일을 복원시킬 수 있고 여러 개의 코드를 만들어 시험해 볼 수도 있는 것이다.
최근에는 SourceTree나 GitLens 등을 통해 비교적 쉽게 이를 다룰 수 있지만 나의 숙련도를 위해 프롬프트 창에서 Git을 사용하는 연습중이다.
브랜치 옮기다 파일 하나 통째로 날려먹기도 했다.... 귀하지만 기분은 좋지 않았던 경험.
그래서?
정말 밀도 높은 한 달 이었다.
배우는 내용이 너무 너무 많았고 외에도 내가 하고픈 공부를 하자니 생각보다도 바쁜 한 달을 산 것 같다.
다음 한 달은 코딩 테스트를 위해 알고리즘 책 하나를 추가로 공부해 볼 생각이며 Git의 원격을 다루기가 아직 어색해서 이를 마저 연습해 볼 생각이다.
추가로 기회가 된다면 부트캠프의 프로젝트에 방해되지 않는 선에서 여러 공모전도 나가볼 생각이다.
그럼 빠이!