다른 사람은 모르겠지만 저는 예전부터 궁금했습니다. SNS에 사진이나 글을 올렸을 때 도대체 누가 볼까, 몇명이나 읽을까라고 말이죠. 저는 지금도 궁급합니다. 도대체 누가 이런 글을 읽으러 오는 것일까 하고 말이죠. 그래서 Google Analytics를 준비했습니다. 이걸 블로그에 도입하면 누가 얼마나 이 블로그에 오는 것인지, 어떤 포스트에 가장 많은 관심을 갖는지 알 수 있겠죠.
Prologue
일단 블로그에 매달아 놓으려면 이게 무엇에 쓰는 것인지는 알아야 매달지 말지를 결정할 수 있습니다. 쓸모없는거 매달아놓고 나중에 치우것은 정말 귀찮습니다. 그런고로 잘 알아보고 적절한 것을 갔다 쓰면 훗날 있을 귀찮음을 하나 줄일 수 있습니다.
그래서 Google Analytics(이하 GA)가 무엇인가? 하면 사용자들의 나이, 성별, 페이지에 머물던 시간, 행동 패턴들을 이용하고 조합해 유의미한 통계들을 출력해주는 서비스입니다. 신규 방문의 비율이 많은지, 재방문이 많은지, 접속자는 모바일이 많은지, 데스크탑이 많은지 등등 꽤 유의미한 정보를 얻을 수 있습니다.(과연 그 정보가 블로그를 하는데 꼭 필요한가? 기술블로그라 잘 안볼텐데?)
사실 작은 기술 블로그를 운영하는 저는 그다지 필요 없는 서비스입니다. 어차피 검색해서 들어올 사람들은 한정적이고 요즘 사람들은 긴 글을 잘 읽지 않기 때문입니다. 그렇지만 사용하려는 이유는 안해보는 것 보단 낫기 때문입니다. GA는 웹 뿐만 아니라 모바일 앱에도 적용을 할 수 있습니다. 모바일 앱이나 다른 애플리케이션에 적용하기 전에 한번 사용해본다는 생각으로 작업했습니다.
Google Analytics Setting
가입
서론이 길었으니 바로 시작하겠습니다. 가입은 이곳(Google Analytics)에서 진행합니다. 새로운 계정을 만드는 것은 언제나 설레는 일입니다. 특히 게임 계정을 만들땐 특히나 더욱 설레곤 합니다.
계정 설정
게임으로 치면 닉네임에 해당하는 부분입니다. 닉네임을 잘 정해두면 두고두고 이름으로 고민하지 안하도 됩니다. 여러분들도 이름짓기가 얼마나 힘든 일인지 알고 있습니다 변수명, 함수명 짓기가 얼마나 힘든지.
속성 설정
어디에 사용할 지 라벨을 붙이는 과정입니다. 여기서도 이름을 붙어야 합니다. 꼭 필요한 과정이긴 하지만 도대체 이름을 얼마나 붙여야 하는지… 이름은 기술 블로그에 적용하기 위해 만들었으니 Blog라는 이름을 사용했습니다. 통화는 $가 멋저 보여서 변경하지 않았습니다.
비즈니스 정보
비즈니스를 하진 않지만 항목은 성실하게 작성했습니다. 비즈니스를 하지 않아도 수익은 얻고싶은 그런 마음
약관
약관은 매우 중요하니 꼭 읽어보라는 말을 듣곤합니다. 하지만 이걸 다 읽는 사람이 과연 몇이나 될까? 라는 의문을 줄곧 가지고 있습니다. 용어 정리와 사용료, 서비스, 계정 보안, 라이선스 등에 대한 정보를 가지고 있다. 그리고 가장 중요한 면책과 배상에 대한항목이 있습니다. 면책과 배상은 약관에 빠질 수 없는 감초 같은 것이라고 들었습니다.
데이터 스트림 설정
데이터 스트림 설정은 ①설정 > ②데이터 스트림 > ③웹 을 선택합니다. 블로그(웹)에 연동할 것이니 웹을 선택합니다.
스트림 설정
측정 ID 값은 블로그 설정파일(_config.yml)에 등록해야합니다. 그러니 복사해 둡시다. 중요한 정보는 너굴맨이 처리했으니 안심하라구!
블로그에 적용하기
설정파일 변경
./themes/aria/_config.yml
1 2
# Google Analytics Tracking ID google_analytics: [TrackingID]
**라이벌(Rival)**은 동등 혹은 그 이상의 실력은 가진 경쟁자를 의미한다 적수라고도 한다.
위키백과
라이벌이라는 존재는 존재 자체만으로 동기부여가 됩니다. 이번 포스트에서는 블로그를 시작하면서 생긴 라이벌 code block을 다뤄보도록 하겠습니다.
Prologue
Code Block
Before Patch
aria 테마를 설치하고 처음 code block을 보고 이야 이거 물건이다라는 생각이 들었습니다. 뭐랄까 감성을 자극했다고 해야되나요? 쨌든 잘 다듬어서 써야겠다 라고 생각했습니다. 하지만 포스트 몇개를 올리게 되고, 블로그의 세팅을 변경하다보니 깨닫게 된 사실이 있었습니다.
초기 code block은 왼쪽 상단의 복사 버튼, 동작은 하지 않지만 우측 상단의 최소화, 최대화, 닫기 버튼이 있고, 작업 표시줄 부분엔 code라는 문자열이 고정되어 있습니다.
Another dead pixel
그렇다면 무엇이 문제일까요. 눈치가 빠르신 분이라면 아시겠지만 code block의 제목 부분이 code로 고정되어있습니다. 한가지 더 문제점이 있는데 이는 Mark Down 파일 작성 시 code block에 파일명을 넣어서 작성하는 경우 입니다.
오늘 수고해주실 코드블럭입니다.
A wasted of Time
First step
사태 파악
변경을 위해선 먼저 저 제목 부분이 어떤 tag를 달고 있는지 확인해야 합니다. chorme 개발자 도구를 활용해 봅시다.
확인해 보니 file name 부분은 figcaption tag를 사용하고 있고, title bar 부분은 div.code-titlebar tag를 사용하고 있습니다.
modify
첫 삽질은 title bar에 code를 지우는 것이였습니다. 먼저 원본 코드를 보도록 하겠습니다.
16번째 줄을 보면 “code”문자열을 지우면 제목 표시줄의 code를 지울 수 있습니다.
제목 표시줄이 깔끔해졌습니다.
하지만 file name을 사용한다면 디자인이 구려집니다. 그렇다고 제목을 포기할 수는 없습니다. 저는 code block에 제목을 다는 법을 알게 되버렸으니까요.
Second step
사태파악
두번째로 생각한 내용은 제목 표시줄에 표시할 수 없다면 file name css의 디자인을 code block에 맞추는 것이었습니다. 그리고 제목 표시줄 왼쪽에 copy 기능이 file name을 적으면 copy 기능이 제대로 동작하지 않는 버그도 발견했습니다. 아쉽게도 이번 step에서는 해당 버그를 고치진 못했고 버그가 있다는 것만 확인했습니다.
modify
변경해야될 figcaption tag의 css파일을 찾을 수 없었기에 index.styl 파일에 추가했습니다.
한동안 figcaption에 css를 적용해 code block을 사용했습니다. 아무래도 front end 부분은 깊게 다뤄본 적이 없어서 지금 수준으론 문제를 해결할 수 없다고 판단해 공부를 더 했습니다.
The end
시간이 날때마다 aria의 코드를 보고 나름 구조를 파악하다 보니 DOM의 사용법과 JS의 사용법 등을 실험하다보니 copy버그와 titebar를 수정 할 수 있었습니다.
Copy
code block에 file name을 사용한다면 copy 기능이 왜 동작하지 않는지 알아야 했습니다. 수정 전의 원본 코드를 확인해보겠습니다.
./themes/aria/layout/_layout.njk
1 2 3 4 5 6
cb = newClipboardJS("button.copy", { "target": function (trigger) { // Get target element by DOM API. return trigger.parentNode.parentNode.nextElementSibling.firstChild.firstChild.firstChild.lastChild.firstChild.firstChild; } });
해당 코드는 _layout.njk 파일의 일부입니다. copy button을 click하면 return에 해당하는 object를 clip board에 copy하는 기능을 가지고 있습니다. 해당 코드가 실행되면 file name이 없는 경우에는 정상적으로 copy하지만 file name이 있는 경우에는 아무런 동작을 하지 않습니다.
file name이 있어도 code를 return 할 수 있도록 return 부분을 수정해 보도록 하겠습니다.
./themes/aria/layout/_layout.njk
1 2 3 4 5 6 7
cb = newClipboardJS("button.copy", { "target": function (trigger) { // Get target element by DOM cd API. return trigger.parentNode.parentNode.nextElementSibling.lastChild.lastChild.lastChild.lastChild; //return trigger.parentNode.parentNode.nextElementSibling.firstChild.firstChild.firstChild.lastChild.firstChild.firstChild; } });
file name을 사용하더라도 code만 clip board에 복사 해 올 수 있습니다.
Title bar
titlebar를 수정하면서 했던 삽질 중에 가장 기억에 남는 것은 code block의 모든 text를 읽어와서 조건문을 사용해 file name만 추출하는 방법이었습니다. 물론 code block 마다 조건문이 동작했기 때문에 포스팅에 code block이 많거나 code block의 text가 많다면 페이지 로딩 시간이 3~5초 길게는 10초 이상도 걸렸던 적이 있습니다. copy 기능의 버그를 수정하면서 했던 몇가지 실험을 성공해 title bar에도 적용할 수 있었습니다. 아래는 원본 코드의 일부분입니다.
모니터를 샀을 때 가장 신경쓰이는 것은 불량화소 입니다. 불량화소가 10개가 넘어가면 아 불량품 받았네 하고 별 생각 없이 교환을 받거나 반품 받겠지만 불량화소가 1개, 2개 있다면 정말 난감해집니다. 괜히 신경쓰이고 그렇다고 이거 하나 때문에 바꿔야되나 싶고 내 뽑기운이 이정도 밖에 안되는건가? 하며 자괴감 들고 괴롭기도 합니다. 하지만 블로그는 다릅니다. 마음에 안드는 게 있다면 바꿀 수 있기 때문입니다. 이번 포스트에서는 불량화소 같은 것들을 바꿔보도록 하겠습니다.
Prologue
뭐가 그렇게 마음에 들지 않는걸까
???: 언니 저 맘에 안들죠? !!!: 눈을 왜 그렇게 떠?
튜닝을 할꺼면 어중간하게 해서는 안됩니다. 마음에 들 때 까지 해야 꽤 오랜시간 신경 안쓰고 사용할 수 있기 때문입니다. 조금 쓰다가 이거 맘에 안든다고 바꿔버리고, 저거 맘에 안든다고 바꿔버리면 정작 본 작업에 집중 할 수 없게 되니까요.
이번에 바꿀 것들은 다음과 같습니다.
Archive, Catetories, Tags 페이지의 문구
줄간격
Scroll 두께
aria theme의 구조
분해는 조립의 역순이라는 말의 뜻은 분해를 해봐야 다시 조립을 할 수 있다는 의미입니다. 그렇다고 하나하나 코드를 들여다 보기엔 시간도 별로 없고 귀찮기도 하고 그래서 간단하게 훑고 지나가겠습니다.
structure
1 2 3 4 5 6 7 8 9 10
. # ./theme/aria/ ├── languages # blog 언어 파일 ├── layout # Nunjucks 파일 ├── scripts # tag에 사용할 정규 표현식 js 파일 ├── source # blog 디자인의 대부분을 담당하는 폴더 | ├── css # css 파일 | └── fonts # font 파일 | └── images # logo, background, avatar 이미지파일 | └── js # javascript 파일 ├── some files
.njk 파일도 있으면서 css파일도 있고, scripts 폴더도 있으면서 js 폴더도 있는 신기한 구조지만 뭐 어쩌겠습니까. 제가 만든것이 아니기 때문에 이것만으로도 감지덕지 하면서 고쳐 써야죠.
손댄 부분은 languages, layout, ./source/css이 세가지 부분 입니다. 간단한 부분부터 시작하겠으나 이번 경우엔 특히나 삽질을 많이 했던 부분입니다. 했던 삽질을 같이 첨부하고 싶지만 포스트가 너무 길어질것 같으니 다음 포스트로 작성하겠습니다.
Change
Archive, Categories, Tags 문구 변경
Whats the matter?
저는 깔끔한게 좋으니 치워버리겠습니다.
modify
./themes/aria/languages/en.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14
postcount: none:''#You have no post, write now! one:''#You have %d post, keep on! more:''#You have %d posts!
tagcount: none:''#You have no tag, create now! one:''#You have %d tag, keep on! more:''#You have %d tags!
categorycount: none:''#You have no category, create now! one:''#You have %d category, keep on! more:''#You have %d categories!
# Select all your webfont in a CDN like Google Fonts, and then copy `href` property in the `<link>` tag, like `link: //fonts.googleapis.com/css?family=Lato|Roboto+Condensed|Skranji|Ubuntu|Ubuntu+Mono`. # Then set different fonts to different parts here. custom_font: enable:true link: -//cdn.jsdelivr.net/gh/moonspam/NanumSquare@1.0/nanumsquare.css -//cdn.rawgit.com/innks/NanumSquareRound/master/nanumsquareround.css -//cdn.jsdelivr.net/gh/joungkyun/font-d2coding/d2coding.css all:'NanumSquare' title:'NanumSquare' subtitle:'NanumSquare' main:'NanumSquareRound' code:'D2Coding'
개인적으로 naver의 폰트를 정말 좋아합니다. 가독성도 좋고 둥글 둥글 하니 귀엽기도 한 것같고 그렇습니다.
Change Code Highlighting
저는 code highlignting은 무조건 atom-one-dark theme을 사용합니다. vscode도 그렇고 theme를 변경할 수 있다면 대부분 atom-one-dark를 사용합니다.
theme를 변경하면서 기본적인 설정도 변경했습니다. 언어는 설정하지 않으면 default language인 중국어로 표시될 것이고, highlighting 설정을 하지않으면 이 theme을 쓰는 이유가 없어지게 되니 설정하도록 합시다. 그 밖에 다른 설정을 변경하시는 분들은 hexo documenation을 참조하시기 바랍니다.
blog를 꾸미기 위해서는 먼저 post를 작성하는 방법을 알아야 합니다. 작성보다 더 중요한 것은 삭제와 변경입니다. 나름 공부를 하고 post를 썼지만 해당 글이 잘못된 정보를 전파하는 똥글이 되버린다면 아 내가 이런 똥글을 썼다고? 인 상황이 발생할 수 있으니까요.
Posting
Writing
1
hexo new [layout] <title>
post, draft, page를 생성하기 위한 명령어입니다. 저는 post를 쓸 때 한번에 쓰는 법이 없기 때문에 draft로 작성 후 post로 publish합니다. draft에 대한 설명은 아래를 참고해 주세요.
Modify the Post
1 2
# source/_posts에서 .md파일 변경 후 hexo g -d
post의 내용을 변경하는 방법은 매우 간단합니다. 기존에 작성한 post파일을 수정하기만 하면 됩니다. 변경 후 다시 랜더링이 필요합니다.
Delete
1 2
# source/_posts에서 .md파일 삭제 후 hexo g -d
post를 삭제하는 방법은 변경 방법과 동일합니다. source/_posts 폴더에 삭제하고자 하는 post 파일(.md)을 삭제한 후 deploy 하면 됩니다.
layout
Hexo에는 Layout이라는 개념이 존재합니다. 각 Layout의 이름과 저장되는 위치는 다음과 같습니다.
post(게시글) : source/_posts
page(페이지) : source/
draft(초안) : source/_draft
저는 주로 post와 draft를 사용해 글을 작성합니다. page는 제가 post를 만들면서 한번도 사용해 보진 않았습니다. 앞으로도 사용할 일은 없을 것 같습니다.
draft는 post를 작성할 때 임시 저장의 개념으로 사용할 수 있습니다. Draft로 작성 한 파일은 랜더링 되지 않습니다. 제가 블로그에 post를 작성할 때 맨 처음 생성하는 파일입니다.
1
hexo g -d --draft
draft도 랜더링 하고자 할 땐 랜더링 시 --draft옵션을 추가 해주면 됩니다.
1
render_drafts = true
_config.yml의 render_drafts 옵션을 true로 설정하면, --draft 옵션 없이 랜더링 해도 draft가 같이 랜더링 됩니다.
1
hexo publish post <title>
작성이 완료된 draft를 post로 변경하는 방법입니다. 이 명령어를 칠 때가 가장 뿌듯합니다.
파일명
post의 제목과 동일하게 작성됩니다. _config.yml파일의 new_post_name 옵션을 변경 해 기본 파일명을 변경할 수 있습니다.
사용할 수 있는 placeholder는 다음과 같습니다
:title - post 제목(소문자, 공백은 ‘-‘ 하이픈으로 변경)
:year - 연도 생성
:month - 월 생성(ex. 04)
:i_month - 월 생성(ex. 4)
:day - 일 생성(ex. 07)
:i_day - 일 생성(ex. 7)
Asset Folder
전역 Asset 폴더
1
![](/images/image.jpg)
source 폴더에 위치해 있으며 image, CSS, JavaScript가 저장되는 폴더입니다. 포스트에서 이미지를 사용하고싶을 땐 /source/image 폴더에 이미지를 넣고 다음과 같이 호출하면 이미지를 사용할 수 있습니다.
Post Asset 폴더
1
post_asset_folder = true
post 단위로 멀티미디어 파일을 관리하고자 할 땐 _config.yml 파일의 post_asset_folder를 true로 설정하면 포스트 생성 시 동일한 이름의 폴더가 생성됩니다. 해당 폴더는 각 포스트의 Asset 폴더로 사용됩니다. 저는 늘어가는 post와 함께 증식해가는 image의 이름을 구분해 저장하는 것은 매우 귀찮을 것 같아 Post Asset 폴더를 사용했습니다.
blog를 꾸미기 위해서는 먼저 post를 작성하는 방법을 알아야 합니다. 작성보다 더 중요한 것은 삭제와 변경입니다. 나름 공부를 하고 post를 썼지만 해당 글이 잘못된 정보를 전파하는 똥글이 되버린다면 아 내가 이런 똥글을 썼다고? 인 상황이 발생할 수 있으니까요.
Posting
Writing
1
hexo new [layout] <title>
post, draft, page를 생성하기 위한 명령어입니다. 저는 post를 쓸 때 한번에 쓰는 법이 없기 때문에 draft로 작성 후 post로 publish합니다. draft에 대한 설명은 아래를 참고해 주세요.
Modify the Post
1 2
# source/_posts에서 .md파일 변경 후 hexo g -d
post의 내용을 변경하는 방법은 매우 간단합니다. 기존에 작성한 post파일을 수정하기만 하면 됩니다. 변경 후 다시 랜더링이 필요합니다.
Delete
1 2
# source/_posts에서 .md파일 삭제 후 hexo g -d
post를 삭제하는 방법은 변경 방법과 동일합니다. source/_posts 폴더에 삭제하고자 하는 post 파일(.md)을 삭제한 후 deploy 하면 됩니다.
layout
overview
Hexo에는 Layout이라는 개념이 존재합니다. 각 Layout의 이름과 저장되는 위치는 다음과 같습니다.
post(게시글) : source/_posts
page(페이지) : source/
draft(초안) : source/_draft
저는 주로 post와 draft를 사용해 글을 작성합니다. page는 제가 post를 만들면서 한번도 사용해 보진 않았습니다. 앞으로도 사용할 일은 없을 것 같습니다.
draft는 post를 작성할 때 임시 저장의 개념으로 사용할 수 있습니다. Draft로 작성 한 파일은 랜더링 되지 않습니다. 제가 블로그에 post를 작성할 때 맨 처음 생성하는 파일입니다.
1
hexo g -d --draft
draft도 랜더링 하고자 할 땐 랜더링 시 --draft옵션을 추가 해주면 됩니다.
_config.yml
1
render_drafts=true
_config.yml의 render_drafts 옵션을 true로 설정하면, --draft 옵션 없이 랜더링 해도 draft가 같이 랜더링 됩니다.
1
hexo publish post <title>
작성이 완료된 draft를 post로 변경하는 방법입니다. 이 명령어를 칠 때가 가장 뿌듯합니다.
파일명
post의 제목과 동일하게 작성됩니다. _config.yml파일의 new_post_name 옵션을 변경 해 기본 파일명을 변경할 수 있습니다.
사용할 수 있는 placeholder는 다음과 같습니다
:title - post 제목(소문자, 공백은 ‘-‘ 하이픈으로 변경)
:year - 연도 생성
:month - 월 생성(ex. 04)
:i_month - 월 생성(ex. 4)
:day - 일 생성(ex. 07)
:i_day - 일 생성(ex. 7)
Asset Folder
전역 Asset 폴더
1
![](/images/image.jpg)
source 폴더에 위치해 있으며 image, CSS, JavaScript가 저장되는 폴더입니다. 포스트에서 이미지를 사용하고싶을 땐 /source/image 폴더에 이미지를 넣고 다음과 같이 호출하면 이미지를 사용할 수 있습니다.
Post Asset 폴더
1
post_asset_folder = true
post 단위로 멀티미디어 파일을 관리하고자 할 땐 _config.yml 파일의 post_asset_folder를 true로 설정하면 포스트 생성 시 동일한 이름의 폴더가 생성됩니다. 해당 폴더는 각 포스트의 Asset 폴더로 사용됩니다. 저는 늘어가는 post와 함께 증식해가는 image의 이름을 구분해 저장하는 것은 매우 귀찮을 것 같아 Post Asset 폴더를 사용했습니다.