[Daily Post] 221030
[Daily Post]는 매일매일 탐구한 내용을 간략하게 기록하는 포스트입니다.
따라서 정리되지 않은 내용과 추측을 포함하고 있을 수 있습니다.
더 체계적인 형식을 갖춘 글은 해당 카테고리의 포스트를 확인해주세요 :)
Daily Study
index.html은 yyyy-mm-dd-title.md 포맷의 포스트 제목에 접근하는가?
Github blog의 포스트는 “yyyy-mm-dd-title.md” 을 제목 포맷으로 갖는다.
어제 포스팅을 하다가 로컬 서버에서 다음과 같은 메세지가 출력됐다.

md 파일의 제목은 각각 26일, 27일로 다르기 때문에 구분이 가능하다고 생각했지만, [root]-[_site]-[Daily]-index.html에서는 이 둘이 같은 제목 인덱스를 갖는다고 보는 것이었다.
그래서 Index.html을 포함한 site generator 요소들이 포스트 제목에 어떻게 접근하는지 확인하고 싶었다. 이를 위해 Jekyll 공식문서와 Minimal Mistake 공식문서를 참조했다.
아직 원하는 수준으로 이해가 되는 것은 아니지만, 알아낸 내용은 다음과 같다.
- .md의 제목이 포스트 포맷 (yyyy-mm-dd-title.md)을 만족하면 포스트의 파일명, url 등이 [root]-[_site]-[url이름]-index.html에 property로 각각 저장된다. 여기서 url은 포스팅 제목 마지막에 붙는 title이 그대로 따라간다.
- 어제의 경우 두 포스트의 타이틀이 Daily로 같았다. 따라서 서로 다른 두 property가 ‘Daily’라는 이름의 동일한 content를 참조하기 때문에, site generator는 ‘Daily’라는 index를 형성할 때 26일의 문서를 빌드할지, 27일의 문서를 빌드할지 결정할 수 없기 때문에 conflict 에러 메세지를 반환한 것으로 추측된다.
정확한 이해를 위해서는 문서를 더 참조해야겠지만, 우선 저장된 md 파일을 읽고 title, url, date 등을 추출해 해당 포스트를 위한 폴더를 [_site]에 만들고, index.html을 만드는 기능이 존재한다는 사실을 알아냈다. 이제 누가 이 기능을 수행하는 지를 알아가면 된다!
Ruby를 C와 비교하며 이해하기
Gem, Gemspec, Gemfile 등 처음 보는 형식의 파일들이 많아 파일 빌드 구조를 이해하기가 어렵다. 따라서 Ruby의 구조를 처음부터 이해하는 것이 필요하다고 느꼈고, 탐구한 내용을 C와 비교하여 정리하기로 했다.
Gem, 패키지 매니저
해당 언어로 작성된 파일을 빌드하고 실행시키기 위해서는 패키지들이 필요하다. 이 패키지들을 설치/삭제하고 의존성을 관리하는 것이 패키지 매니저이다. 패키지 매니저는 OS별로 존재하는데, 대표적인 예시로는 apt-get(Debian), pkg(FreeBSD) 를 들 수 있다.
- Debian’s apt-get
- contents
- FreeBSD’s pkg
- contents
오늘의 시행착오
DB
어제 tpcc benchmark 돌려놓고 잠시 다른걸 하러 갔었는데, 20분 걸렸던 벤치마크 결과가 모두 제로로 나왔다. 실험 한 번 진행할 때 마다 4~5번씩은 진행했던 벤치마킹이라 별 생각 없었는데, 원인을 찾아내느라 DB를 삭제하고 다시 설치했다. 원인은 생각보다 간단했는데, tpcc-mysql data를 로드하지 않고 벤치마킹을 진행했다. 요약하자면 DB 없는 DB 실험을 진행한 셈이다. 빈 깡통을 두고 벤치마킹을 하니까 tpmc도 0이 나오고, trx도 0이 나오지. 그래도 문제를 찾아내고 해결하기까지 많은 시간이 걸릴까봐 오전에 여기에 집중하려고 했었는데 생각보다 문제를 빨리 해결해서 다행이다.

다시 정신차리고 데이터를 로딩하고 있는 모습이다.
SP skeleton
SCP remote connecting
scp filename.txt snp@255.255.255.255:/path-to-dst-dir/
DB 과제 수행하다가 분량이 긴 파일을 다운로드 할 일이 생겼다. 분량이 작으면 터미널 텍스트를 그대로 복사해서 가져오면 그만이지만, 행이 6000개를 넘어가는 txt 파일이었기 때문에 다운받아야 했고, scp 명령어를 사용했다.
scp [전달하는 파일명] [hostid]@[ip주소]:[받을 경로]를입력하면 된다.
가령, 네트워크를 사용하는 snp의 /home/ubuntu/ 폴더로 example.txt를 전송하려고 하고, snp의 ip주소가 10.0.0.1 임을 알고 있다면 example.txt가 있는 폴더로 이동해 터미널에 다음과 같이 명령어를 입력하면 된다.
scp example.txt snp@10.0.0.1:/home/ubuntu/
처음 터미널 사용하고 ssh, scp 명령어로 파일 다운로드 받는 것을 어려워했던 경험이 있기 때문에, 이해하기 쉽게 차근차근 설명하는 포스트를 작성해봐야겠다.