기본 콘텐츠로 건너뛰기

[OS] Windows 에서 MSVCR90.dll 오류 발생 대처하기

MSVCR 관련 오류 “MSVCR (Microsoft Visual C++ Runtime)” 관련 오류는 어플리케이션을 직접 개발해서 배포하거나 아니면 다른 어플리케이션을 설치해서 사용할 때 흔히 발생하는 오류 중에 하나기 때문에 큰 문제는 없다. 그러나 조치를 취했음에도 불구하고 동일한 오류가 계속 반복되는 경우라면 상황을 잘 파악해 봐야 한다. 일반적인 발생 원인 거의 대부분은 MSVCR 라이브러리가 설치되지 않았기 떄문에 발생한다. 주로 볼 수 있는 오류 상황은 다음과 같다. 설치가 되지 않은 상황이거나 아니면 버전 또는 아키텍처와 관련되어 라이브러리를 로드할 수 없는 경우도 존재한다. 오늘 이 게시글을 작성하는 이유는 설치도 로드도 모두 잘 되었지만 사용 중에 오류가 발생하면서 어플리케이션이 종료가 되는 경우도 있기 때문이다. 이 경우는 아마도 C++ 코드 작성에서 메모리 처리를 하면서 OS 특성을 타는 부분일 것으로 예상된다. 발생한 오류는 예외 코드 0xc0000417 이며 발생한 모듈은 MSVCR90.DLL 이다. 좀 더 구체적인 상항은 덤프된 정보를 분석해 봐야하지만 일반적인 해결 방법을 적용해 보도록 한다. 해결 방법 해결 방법은 구체적인 오류 발생 정보가 없는 경우라면 아래와 같이 단순하게 적용해 볼 수 있다. 설치가 안되었거나 로드할 수 없는 경우 설치가 안된 상태이거나 설치에 문제가 있거나 아니면 다른 버전과의 문제가 있다면 프로그램 및 기능 을 통해서 기존에 설치되어 있는 것을 제거한 후에 재 부팅해서 다시 설치하는 방식을 사용하면 된다. 설치를 해서 필요로 하는 버전과 아키텍처가 맞는지를 확인해 봐야 한다. 필요하다면 다른 버전의 배포판도 검토해야 한다. Microsft Visual C++ 2008 SP1 재배포 가능 패키지 - 32bit (x86) Microsft Visual C++ 2008 SP1 재배포 가능 패키지 - 64bit (x64) 설치 및 로드 후 문제가 있는 경우 설치도 모두 되어 있고, 정상적으로 어

[취미] 새로운(?) 당구 시스템?

몇 가지 안되는 취미생활 중에 요즘 빠져있는 것이 당구다. 물론 영화 보는 것도 좋아하지만, 너무 활동량이 없어서 운동 겸해서 동호회 당구 (정액제)를 하고 있다. 작년 1월부터 다시 시작을 했고, 3구 기준으로 이제 20점이다. 물론 아직은 제대로 원리를 이해하지는 못하는 수준이지만 개발도 맨땅에 헤딩하면서 배웠듯이 당구도 지금 열심히 헤딩 중이다. 이런 저런 이론적인 것을 동호회나 카페, 유튜브 등에서 읽어보고 휴일에 당구장에서 살 듯이 연습을 해 보지만 역시나 이론과 실제는 너무나 차이가 많다는 것을 체감할 뿐이다. ㅠㅠ 예전에는 거의 4구 경기만 했었기 때문에 오늘 소개하는 것도 역시 4구에 대한 이론 (주로 세리)을 개인적으로 정립하신 정필규님의 자료다. 겨냥점이라는 것은 어려운 것이 아니다. 수구로 제 1 목적구를 맞춘 후에 제 2 목적구를 맞추기 위해서 어떤 곳을 향해서 쳐야 하는지를 정리한 것이라고 생각하면 된다. 여기서 당구의 이론과 각종 시스템을 논의하는 것도 아니고, 내가 좋아하는 취미고, 4구 이론을 3구에도 적용할 수 있을 것 같아서 소개하는 것이다. 아직은 형편없는 수준이지만 몇 가지만 기억하면서 연습하면 될 듯 하다. 타격, 힘, 과다한 회전 등은 공의 성질을 변화시킨다. 최대한 공의 자연스러운 방향과 힘을 유지할 수 있도록 해야 한다. 과다한 스트록은 오히려 독이 된다. 상황에 맞는 스트록을 적용해야 한다. 자신의 회전량을 알아야 한다. 기준이 되는 공의 흐름 또는 라인을 정하고 이에 맞춰서 스트록, 회전 등에 따른 변화를 몸에 익혀야 한다. 당구라는 것이 워낙 다양한 변수들이 조합되는 것이라서, 딱히 정답이라는 것은 없을 수 밖에 없다. 단지 고점자들이 다양한 경험을 기준으로 대략적인 방법을 만들어 놓은 것 (시스템)을 제시하는 것일 뿐이다. 몇 번 시스템을 검토해 보고 따라해 봤지만, 나는 역시 감으로 하는 당구 (무식한 감이 아니라 어느 정도 확률이 높은 나만의 라인을 찾아가고 있다)가 맞는 듯 해서

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 set euckr; 명령

[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,.. 등의 자료형에 입력되면 오류가 발생하기 때문에 내가 만든 코드 문제가 아니다. ... 대략 이런 반응들이 나올 듯 하다. ㅠㅠ 그럼 아래과 같은 코드는