기본 콘텐츠로 건너뛰기

4월, 2017의 게시물 표시

Hexo Plusin Series -- hexo-related-popular-posts 설정하기

Hexo Plugin Series - hexo-related-popular-posts 이 시리즈는 Hexo 블로그를 Gitlab 페이지로 운영하면서 다양한 플러그인들을 테스트해 보고, 나름대로 설정하는 방법을 정리하는 것이다. Overview 태그를 기반으로 관련 포스트들에 대한 링크 목록을 만들고, Google Analytics 의 페이지 뷰를 기준으로 인기 있는 (많은 페이지 뷰를 기록하는) 포스트들을 정렬된 링크 목록을 만드는 기능을 제공하는 플러그인이다. 또한 포스트의 내용에 따라서 관련된 포스트들에 대한 링크 목록을 생성할 수 있고, 다양한 Styles, Thumbnails 등을 지원하고, 다양한 부분에 사용자 정의가 가능하며, 성능과 관련해서 캐싱 기능도 포함하고 있다. Notes 이 글에서는 _config.yml 파일에 설정을 다양하게 지정한다. 따라서 설정을 추가/변경하는 경우는 기존에 실행 중이던 Hexo Server를 재 실행해 줘야 하며 다음과 같이 처리하는 것을 권장한다. hexo clean # 기존 캐시 및 Static content 삭제 (db.json) hexo g # 신규 Static content 생성 (/public) hexo server --draft # Draft 버전도 동일하게 서비스 Features 이 플러그인은 다음과 같은 기능을 제공한다. 연관된 포스트에 대한 링크 리스트 생성 (태그 연관성과 내용 연관성) 인기 있는 포스트에 대한 링크 리스트 생성 (페이지 뷰 수 기준 정렬) 포스트에 대한 방문자 수 (페이지 뷰) 표시 Notes 이 플러그인의 인기있는 게시글 및 페이지 뷰 처리는 Google Analytics 연계를 통해서 처리되며, 설정이 쉽지않고(?) 관련된 구글 계정이 구성되어 있어야 하므로 아래의 설정 부분을 검토하고 이 플러그인을 사용할지 여부를 결정하는 것이 좋다. Settings 설치는 아래의 명령을 통해서 Hexo 블러...

node-gyp 빌드 오류가 발생하는 경우 대처법

NPM Install 도중에 node-gyp 빌드 오류가 발생하는 경우 Node 기반의 프로그램을 작성하면서 필요한 패키지들을 설정하고 npm install 명령으로 설치를 하다보면 패키지 설정에 의해서 설치 후 빌드 작업이 진행되는 경우가 있다. 이런 경우에 빌드 환경이 제대로 구성되지 않아서 오류가 발생하는 경우가 있어서 정리해 본다. Warning 이 문서에서 모든 환경을 다루는 것이 아니고 msbuild 처리 환경에 대해서만 검토 한 내용이므로 다른 환경인 경우는 적용되지 않는다. 오류 상황 Node 기반에서 돌아가는 어플리케이션을 Github에서 다운로드 받아서 테스트를 위해서 npm install 명령을 했을 때 뜬금없이 msbuild 관련한 환경설정이 부족해서 오류가 발생했다. Python 2.5 이상 3.0 이하 설치 해야 한다는 오류 설치 했더니 .NET Framework 2.0 이상을 설치 해야 한다는 오류 설치 했더니 VCBuil.exe 가 존재하지 않으니 .NET Framework 2.0 SDK 나 Visual Studio 2005를 설치 해야 한다는 오류 기타 등등... 상기의 상태에서 더 이상 진행 불가!!! 물론 전부를 설치하면 되겠지만 그렇다고 쓰지도 않는 툴들을 설치하는 것은 문제가 있어 보인다. 오류 원인 오류의 원인은 간단하다. 해당 어플리케이션 패키지에 정의된 의존성 패키지들 중에 설치과정에서 빌드를 거쳐야 하는 것이 존재하며 Python 으로 구현된 것들과 VC 로 구현된 것을 MSBuild를 이용해서 처리하기 때문이다. 일반적으로 Node 기반의 개발에서는 VSCode 나 Atom 등의 도구와 NodeJS, Git 등의 툴들만 사용하기 때문에 관련된 다른 언어나 IDE 환경이 존재하지 않기 때문이다. 오류 해결 방법 가장 쉬운 방법은 모든 언어와 IDE 개발 환경을 맞춰주면 전혀 문제가 없겠지만, 쓰지도 않는 환경을 단지 설치 상의 빌드 때문에 설치하고 지우는 것도 웃기다. 역시 구글링을 하다보니 이런...

[Kubernetes] 설치 시점에 특정 버전 지정하기

Notes 이 문서는 Ubuntu 에 Kubernetes 를 설치할 때 특정 버전의 바이너리를 지정해서 처리하는 방법을 설명하는 것이기 때문에 전체 설치 과정을 다루고 있지 않습니다. 설치에 관련된 문서는 iamartin 님 블로그에 kubeadm을 이용해서 아주 쉽게 Kubernetes 설치하기 에 상세하게 기술되어 있으므로 이 부분을 참고하시면 됩니다. (향후 변경된 사항이나 요청이 있다면 정리된 버전을 추가로 올릴 수도 있습니다) 참고로 Kubernetes 를 설치하는 도구들은 상당히 많이 존재하며 향후 kubeadm 으로 통합될 것으로 개인적인 예상을 하고 있기 때문에 다른 설치 도구에 대한 부분은 따로 정리하지 않고 있습니다. Kubernetes 특정 버전으로 구성하기 이 문서를 정리한 이유는 Kubernetes가 버전 향상 작업을 수시로 진행하고 있고, 각 종 설치 도구는 latest 버전 을 대상으로 운영되고 있기 때문에 솔루션 개발 중이거나 또는 다른 이유로 버전을 고정해야 할 경우가 있을 수 있기 때문입니다. 기본 설치 관련 정보 ubuntu 에서 설치는 초기에 아래와 같이 4 단계의 작업을 거치게 됩니다. 물론 kubeadm 을 사용하는 경우는 다른 환경에서도 거의 유사하게 사용됩니다. Apt Key 생성 $ curl http://packages .cloud .google .com /apt/doc/apt-key .gpg | apt-key add - Kubernetes Source Repository 생성 (데비안 패키지) cat <<EOF > /etc/apt/sources .list .d /kubernetes .list deb http://apt .kubernetes .io / kubernetes-xenial main EOF Apt Repository 갱신 apt- get update 필수 프로그램 설치 apt -get install -y docker . io apt -get install -y k...

[VHD] 부트 시점에 VHD 자동 마운트 하기 2 - 스크립트 버전

스크립트 방식으로 마운트 및 해제 조정하기 [이전 게시글] 에서 diskpart 를 이용한 작업 스케줄러 처리로 부트 시점에 자동 마운트 처리를 정리 했었다. 막상 실제 사용하는데 몇 가지 불만 사항이 생겨서 스크립트를 사용하는 방식으로 변경해 본다. 여러 개의 VHD 를 마운트 시킬 경우에 Task 를 여러 개 등록하는 문제 (한번에 여러 개 처리하는 방법을 못 찾음. ㅠㅠ) 특정 사용자인 경우만 처리하는 경우 (작업 스케줄러로도 처리는 가능하지만 두가지 방식 혼용이 싫음) 쉽게 추가/변경해서 재 시작 없이도 처리하고 싶음. 그냥 작업 스케줄러가 귀찮음. 위의 같은 이유로 아래와 같이 스크립트 처리를 추가했다. 기본은 diskpart를 이용하는 방식이다. 윈도우에서 스크립트를 처리할 때는 항상 관리자 권한 여부가 상당히 껄끄럽다. 이런 저런 방법들도 많다. 대략적으로는 아마 아래와 같은 형식들이 될 듯 하다. 레지스트리를 조정해서 항상 Cmd.exe 가 관리자 권한으로 실행되도록 한다. UAC 조정 또는 로그인 사용자를 관리자인 것으로 처리한다. 사용자를 Administrator 로만 사용한다. … 그런데 이런 저런 시스템 설정을 하기는 싫고 순수하게 스크립트에서만 이를 해결할 수는 없을까? 실행되는 스크립트를 관리자 모드인 것으로 처리하기 이런 저런 자료를 검토하고 나름대로 관리자 모드로 실행 부분을 생각해 보니 의외로 쉽게 할 수 있는 방법이 있다. 그것도 시스템을 건들이지 않고 스크립트 만으로 조정해서 가능하다. @echo 관리자 권한 검증 > %windir %\ admin.confirm 위의 명령은 %windir% (보통 C:\Windows) 경로에 “관리자 권한 검증” 이란 문자열을 출력해서 admin.confirm 이라는 파일을 생성하는 것이다. 당연히 관리자 권한이 없으면 액세스가 거부되었습니다. 라는 오류 메시지를 보게 된다. 이를 이용해서 아래와 같이 관리자 권한을 탈취(?)하는 코드를...

[VHD] 부트 시점에 VHD 자동 마운트 하기 1 - Task Scheduler 버전

How to Auto-mount a VHD at startup in Windows 8 and 10 데이터 백업과 관리는 항상 중요하다. 프로젝트의 경우는 더욱 더 중요하다. 소스관리는 Git 등을 이용해서 관리를 하면 되지만, Open source 검토나 개인적인 문서 등의 자료는 딱히 편한 방법을 찾지 못해서 Sync 툴들을 사용하던 방법을 VHD 파일 단위로 구별해서 관리하고 주기적으로 VHD 파일을 백업하는 방법을 적용해 보려하니 매 부팅마다 마운트해 주는 것이 또 답답하다. 이런 저런 관런 자료를 찾다보니 괜찮은 (쉬운?) 방법이 있어서 정리해 놓도록 한다. General Steps Project 등의 구별로 VHD(x) 파일을 생성한다. 마운트 처리할 Diskpart 스크립트 파일 을 생성한다. 작업 스케줄러에 부트 타임 스케줄 을 구성한다. 3.1. 보안 옵션에서 로그인과 상관없이 실행 선택 3.2. 트리거 생성 후 동작 옵션을 프로그램 시작 으로 설정 3.3. 작업 지연 시간 1분 으로 설정 3.4. 동작 새로 만들기 후 프로그램/스크립트에 diskaprt 설정 3.5. 인수 추가 옵션에 2.번에서 만든 /s 스크립트 파일 지정 3.6. 전원옵션에 AC 전원이 켜져있는 경우만 작업 시작 옵션 해제 3.7. 사용자 보안 정보 입력 PC 재 부팅으로 정상 동작 여부를 검증한다. Detail View diskpart에 옵션으로 지정할 스크립트 파일이므로 확장자는 상관없이 지정해도 된다. select vdisk file="C:\test.vhd" attach vdisk assign letter=D select vdisk : 실제 마운트할 VHD 파일 경로를 문자열로 지정한다. assign : 연결할 드라이브 레터를 지정한다. 위의 스크립트를 저장한다. 이 샘플에서는 S:\VMs\Scripts\AutoMount.txt 이름으로 저장했다. 윈도우키 + R 을 눌러...

[Node] Node 관련 패키지들 간략 정리. (갱신 중)

다른 작업을 진행하다가 정말로 오랜만에 다시 Node.js 관련 오픈 소스 분석 작업을 하는데 참조하고 있는 패키지들이 많기도 하다. 아는 것보다는 모르는 것이 더 많아서 뭐가 뭔지 하나도 모르겠다. 앞으로 작업을 하면서 좀 더 다양한 패키지들을 자세하게 알아야 하지만, 당장은 제목과 기능이라도 알아야 이해를 할 수 있을 듯 하다. ㅠㅠ Packages for NodeJS bluebird Full featured promise library with unmatched performance Examples 설치 npm install bluebird 활용법 var Promise = require("bluebird"); References http://bluebirdjs.com/docs/getting-started.html https://github.com/petkaantonov/bluebird bunyan Simple and fast JSON Logging Module for node.js services Examples 설치 $ npm install bunyan 활용법 var bunyan = require('bunyan'); var log = bunyan.createLogger({name: "myapp"}); log.info("hi"); References https://github.com/trentm/node-bunyan camelcase Convert a dash/dot/underscore/space separated string to camelCase: foo-bar -> fooBar Examples 설치 $ npm install --save camelcase 활용법 const camelCase = require('camelcase'); camelCase('foo-bar'); //=> 'fooBar'...

Console 인코딩 변경하기

Console/Cmd 에서 인코딩 변경하기 Markdown 문서를 HTML 문서로 변경을 하는데 Universal Document Converter 인 Pandoc 을 사용해서 작업 중인데 Command Console 에서 뜬금없이 모든 한글이 깨져서 나오는 증상이 발생했다. 발생 원인 문제의 발생은 모든 Markdown 문서와 코드들을 UTF-8 기준으로 작업을 했지만 Command Console 은 Windows 기본 인코딩인 949 를 사용하기 때문에 변환했을 때 문자열이 깨진다. 해결 방법 문제의 해결은 은근 간단하다. # 영문 모드로 변경 > chcp 437 # 한글 모드로 변경 > chcp 949 # UTF-8 모드로 변경 > chcp 65001 예외 사항 만일 위의 명령을 실행했을 때 잘못된 코드 페이지 라는 메시지가 출력될 경우는 윈도우 10 버전일 경우는 제어판 > 국가 또는 지역 > 관리자 옵션 탭 에서 유니코드를 지원하지 않는 프로그램용 언어 부분에서 시스템 로캘 변경 버튼을 눌러 언어를 선택하면 된다. 만일 다른 윈도우 버전이라면 위와 유사한 메뉴가 있을 것이므로 찾아보고 처리하면 될 듯 하다. 참고 사항 Console 창의 타이틀 메뉴에서 속성을 통해서 폰트와 여러 가지 속성을 설정할 수 있다. 폰트는 다른 방식으로 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont 에서 코드 페이지 값에 맞는 키 (ex. 949, REG_SZ, 돋움)를 생성해서 사용할 폰트를 설정해도 된다. Unix 또는 Linux 에서는 /etc/my.conf 파일에 default-character-set=utf8 을 설정해서 인코딩을 변경하면 된다고 하는데 사용 환경이 아니라서 검증은 해 보지 못했다. MYSQL 을 사용하는 경우라면 MYSQL command 창에서 set character...

[Java] Divide by Zero 예외는 항상 발생할까?

Divide by Zero === Exception?? Really? 흔히 산술연산을 처리할 때 0으로 나누면 Divide by Zero Exception 이 발생한다고 알고 있다. 실제 연산 샘플을 구성해 봐도 실제 Exception 이 발생한다. public static void main (String[] args) throws java.lang.Exception { int aa = 100 / 0; } 위의 코드는 Exception in thread "main" java.lang.ArithmeticException: / by zero 예외가 발생한다. 정말 모든 산술 연산이 이렇게 적용될까??? Really?? 책이나 관련된 정보를 찾아보면 보통 정수를 0으로 나누면 이라는 전제 조건이 있다. 그럼 정수가 아닌 경우는 어떻게 될까? 0 이 아닌 부동 소수점 값을 0 으로 나누면 부호 있는 Infinity 가 되고 예외는 발생하지 않는다. 1.0 / 0.0 은 Positive-Infinity 가 된다. -1.0 / 0.0 은 Negative-Infinity 가 된다. 0 이 아닌 정수를 정수 0 으로 나누면 ArithmeticException 이 발생한다. 음!! 위와 같이 정리할 수 있다. 그런데 0.0 / 0.0 은 뭐가 나올까? 결론은 isNaN 상태가 된다. 즉, 연산 불가라고 봐야 한다. 이런 상황은 실제 변수나 VO 등에 Assign 할 경우에는 예외가 없으니 큰 문제가 없지만 JSON 으로 변환하는 등의 작업을 진행하면 뜬금없이 "Infinity", "isNaN" 과 같은 값을 만나게 된다. 어디서 저런 값이 나오는지 모르겠다. 내가 만든 코드에서는 문자열 처리한 적이 없다. 문자열이 Float, Double,.. 등의 자료형에 입력되면 오류가 발생하기 때문에 내가 만든 코드 문제가 아니다. ... 대략 이런 반응들이 나올 듯 하다. ㅠㅠ 그럼 아래과 같은 코드는...

[Markdown] 마크다운과 관련해서 특수문자를 정리해 보자.

마크다운으로 문서를 정리할 때 가끔 또는 자주 예약된 문자 처리 때문에 난처한 경우가 발생한다. 이 내용을 정리하게 된 것도 마크다운 테이블을 구성하는데 예약어 ( '|' ) 문자 때문이다. 일반적으로 'pipe' 또는 'vertialcal bar' 라고 표현하는 문자인데 테이블을 구성하는 예약어다. 마크다운 문법에서 설명하는 것과 같이 여러 가지 방법을 적용해 봤지만 적용되지 않는다. 해결 방법은 의외로 쉽다. 마크다운이 결국 렌더링되서 HTML 로 표현되는 것이기 때문에 아예 HTML 문자를 사용 하면 된다. 아래의 표는 참조한 사이트에서 필요한 몇 가지만 발췌한 것이므로 참고 사이트에서 전체 내용을 확인하면 된다. Symbol HTML Number HTML Name Description ! &#33; exclamation point " &#34; &quot; double quotes # &#35; number sign $ &#36; dollar sign % &#37; percent sign & &#38; &amp; ampersand ' &#39; single quote ( &#40; opening parenthesis ) &#41; closing parenthesis * &#42; asterisk + &#43; plus sign , &#44; comma - &#45; minus sign - hyphen . &#46; period / &#47; slash : &#58; colon ; &#59; semicolon < &#60; &lt; less than sign = &#61; equal sign > &#62; &gt; greater than sign ? &#63...