2010. 12. 15.

포터블의 개념

1장 포터블의 개념과 이해

 제가 일전에 포터블(소프트웨어)에 관한 글을 포스팅 한적이 있는데 그 개념에 대해
약간의 혼동(?)을 느끼시는 분과 실직적으로 '포터블만들기'에 관심있으신 분이 계신 것 같아서
제가 시간이 되는 대로 '포터블구현' 이라는 최종의 목적으로 포스팅을 하겠습니다.

'포터블 소프트웨어 (앞으로는 포터블이라 부르겠음)'에 대해 제 각기 정의하기 나름이겠지만
위키에서는 이렇게 설명하고 있습니다.

[정의]
휴대용 소프트웨어는 컴퓨터 소프트웨어를 이동식 장치에 사용 흔적을 남기지 않고 사용할 수 있도록 리팩된
소프트웨어다. 사용자들은 포터블(portable) 프로그램으로 분류 또는 칭하기도 한다.

[사용목적]
주 목적은 설치 없이 이동식 장치에 있는 소프트웨어를 사용하는 것이다. 이를 위하여 설정의 저장이 필요한데
보통의 경우 ini 파일 이나 윈도 레지스트리에 저장한다 ini 파일의 경우 복사만 하면 되지만 윈도 레지스트리를
사용할 경우 약간의 처리가 필요하다. 또한 PE같은 정상적으로 프로그램을 설치하기 힘든 환경에서도 사용한다.

[문제점]
일부 잘못 만들어진 휴대용 프로그램은 사용한 흔적(레지스트리 임시파일 등)이 남기도 한다.
또한 경우에 따라서 시스템을 손상시킬 우려도 있다.

[무설치 소프트웨어와의 차이]
무설치 소프트웨어는 설치의 여부가 기준이고, 휴대용 소프트웨어는 흔적을 남기는지 여부가 기준이다.
즉, 설치 없이 실행 가능하기만 하다면 무설치이고, 그러면서 흔적을 남기지 않는다면 휴대용인 것이다.


여기까지가 위키의 내용이며 제가 앞으로 다루게 될 '포터블'에 대해서는 위키를 근거하여
좀 더 명확히 구분짓기 위해서 다음과 같이 정의 하겠습니다.

포터블이란 '무설치', '이동식', '설정보존' 이라는 이 세가지 기본개념을 충족시켜여 하며
파일시스템의 생성이나 레지스트리의 등록을 제어할수 있는 프로그램을 말함.

1. 무설치
일반적으로 설치 프로그램을 실행시키면 폴더가 생겨나고 해당 폴더에 파일이 복사되며 프로그램 그룹과
단축아이콘이 생성되고 언인스톨 항목이 레지스트리에 등록되는데 '무설치'의 경우는 이러한 설치 과정만
제거한 것으로 생각하시면 됩니다. 문제는 이러한 무설치 프로그램을 더 이상 사용하지 않을경우
정상적으로 언인스톨 과정을 밟아 등록된 항목을 제거해 줄수가 없다는 것입니다.
때로는 '무설치' 프로그램을 데스크탑 환경에서 사용하시는 유저분의 경우, 프로그램을 인스톨하고
언인스톨 하는게 귀챦아서가 아니라 설치 프로그램을 실행시킴으로서 혹시나 시스템에 미칠 영향에 대한
우려 때문이기도 한데, 프로그램의 성격에 따라 다소 차이는 있겠지만 레지스트리에 키가 생성되는 과정은
설치시에 생성되는 1차과정에서 끝나는 것만은 아닙니다. 프로그램을 실행시 2차과정, 종료시 3차과정,
때론 리부팅과 함께 4차과정 이상을 거치는 경우도 있고 실행 프로그램 자체가 조건부 검사과정을 거쳐
레지스트리 키 값을 검사하고 만일에 지워졌을 경우 다시 생성해 나가기도 하는데 여기에서는
이러한 파일시스템이나 레지키의 생성과정을 배재한 프로그램을 '무설치'라 정의 한 것입니다.
문제는 이러한 '무설치'가 '포터블'인 척 위장하여 다가올때 우리는 그것을 구분하기가 난감해 지는데
하지만 그 보다 더 난감한 것은 '포터블'이 '포터블'로서의 제 구실을 다 하지 못할 때 입니다.

2. 포터블이 시스템에 미칠수 있는 영향
'무설치'가 이리저리 잔재를 남긴다해도 그리고 수많은 '무설치'로 인해 시스템이 느려진다 해도
실질적으로 피해를 주는 것은 '무설치'가 아니라 살짝 삐긋난(?) 형태의 '포터블'인데
당연한 이치겠지만 레지스트리를 제어하는 과정에서 자신과의의 다른 환경에서 결과가 다르게
나올수 있기 때문입니다. 또한 일부 USB에서 사용되는 '포터블'을 데스크탑에서 사용할 경우
환경변수에서 벗어나 추구하려 했던 목적(제어과정)에서 이탈되는 상황이 벌어질수 있으며
기존의 동일한 프로그램이 설치 된 상태에서 사용하게 될 경우 기존 프로그램을 마비시킬수 있으며
심지어는 해당 프로세스가 종료되지 않는 현상도 발생합니다.

3. 포터블을 만들기 위한 자세
'포터블'은 경우에 따라 아주 쉽게도 때론 복잡한 과정을 거쳐서 만들어 지기도 하는데 하나의 건강한(?) 포터블이
탄생되기 까지는 그 만큼 땀과 노력이 필요로 하고 여러차례의 실험을 통해서 또한  여러 다른 환경을 접해 보면서
본의 아니게 상대에게 피해를 주는 일이 없도록 심여를 기울여야 할것입니다.

4. 앞으로 줄기차게 사용될 포터블의 용어 (참고: 원래의 포괄적인 의미로서가 아닌 포터블 개요에 맞는 용어)
코딩: 프로그래밍 과정
패킹: 코딩된 파일을 패킹하는 과정 (프로그래밍 된 파일을 설치 형태로 묶어주는 과정)
언패킹: 패킹을 풀어주는 과정 (설치 형태를 다시 풀어주는 과정)
로더: 기존의 응용프로그램을 대신하여 불러 들이는 실행파일
가상화: 가상의 독립적인 형태로 파일시스템과 레지스트리 구축

5. 무설치의 예
다음은 크롬플러스 무설치버전 1.4.1.0 의 파일시스템과 레지스트리 등록과정을 스냅샵으로 비교해 본 결과 입니다.


 ChromePlus.jpg


물론 브라우져 특성상 부수적인 파일시스템과 레지키의 생성이 이루어 지겠지만 단편적인 '무설치'의 예제를 든것입니다.


6. 앞으로 전개될 포스팅의 계획
2장부터 실직적으로 포터블을 만드는 기본방법으로 시작하여, 3장에서는 배치파일의 응용, 4장에서는 NSIS의 컴파일과정 (로더의 이해), 5장에서는 오토잇의 구현, 6장에서는 가상레지스트리에 관한 내용을 다룰 예정이며 7장에서는 이 분야에 관심있으신 분들과 함께 하나의 간단한 프로젝트를 완성시키는 과정, 8장을 끝으로 SaaS (Software As A Service) 개념의 포터블에 대한 글로 마무리 지을 예정입니다. 파고 들면 광범위한 면도 있기에 기본적인 방법과 연관된 프로그램의 소개정도로 포스팅할 계획이며 혹시 더 이상의 개발이 이루어 지지 않거나 만든이가 자유롭게 배포하고 수정해도 된다고 하는 프로그램이 있으면 좀 소개해 주시기 바랍니다. 해부(?)하는 과정에서 저작권의 침해를 피하기 위함입니다.

7. 대충 이정도면 포터블의 개념에 대한 이해가 되셨으리라 믿습니다. 꾸벅~

2010. 9. 27.

'졸라'에 관해

첫째놈이 '졸라'라는 말을 많이 쓴다.
지네들 친구끼리만 쓰는거면 모를까 어른들이 계신 앞에서 조차
그러한 표현을 쓰는데 경고를 줘도 인식하지 못하는 것 같다.
그래서 오늘은 '졸라'에 관해 알아보겠다.

'졸라'는 '매우, 아주'를 대신하여 쓰이는 말인데, '존나, 존나게, 졸라게' 등으로 쓰인다.
주로 입으로 쓰이는 말이므로 발음을 그대로 표기하면 받침이 ㄹ이나 ㄴ으로 되지만,
사실은 ㅈ 받침에서 온 말이다. 이들 말은 모두 표준국어사전에서는 찾을 수 없는 말이고
오로지 ㅈ 받침 명사만 찾을 수 있다. (좆)
인터넷에서 검색해 보면, 모든 유형이 다 쓰이고 있고,
심지어 '좆나, 좆나게, 좇나, 좇나게' 등도 쓰이고 있다.
이 말은 설명 안 해도 다 알겠지만, '남자의 성기를 비속하게 이르는 말로서
'나다'를 결합한 것이다. 남자들이 쓰는 비슷한 말로 '빠지다' 라는 표현이 있는데
'x나게'와 'x빠지게'는 같은 맥락으로 쓰인다.
이전에는 서울과 몇몇의 도시만을 제외하고는 대부분 'ㅈ' 받힘으로 쓰였는데
2000년 3월 졸라맨이 발표된 이후, '졸라' 라는 발음으로 더욱더 쓰이게 되었다.
참고로 졸라맨의 작가는 72년생이라는 점을 감안한다면, 자신의 중고시절에 쓰던 말을
캐릭터 이름에 착용한 것으로 생각된다.

욕의 어원

참으로 신기한 것이 종교성이 유별리 강한 특정한 나라를 제외하고는
세계 모든나라의 욕에 공통성이 있다.
미국과 비교해 본다면, 사실상 미국은 오래전 부터 문명국가였고
우리나라와는 차이가 있었다.
하지만 미국의 'Fuck you', 'Mother Fucker' 와 우리의 '좃까' '씨팔' 을 비교해 보면
얼 비슷한게... 성의 억압이 욕이라는 분출구로 왜곡되어 생겨나기 때문이다.
남성의 '좆', 여성의 '씹' 등 성기를 수식하는 단어들이 쓰이는 것도
다 그러한 이유 때문이다.

우리가 흔히 쓰고있는 '씨팔' 이란 표현은 사실상 두가지의 의미가 있다.
첫째는 (씹할->씨발->씨팔)로 [제 에미(지미/니미)와 씹할 놈]이란 욕의 축약형인데
동서양 고금을 막론하고 인간에게 가장 큰 taboo 는 근친상간이 때문에 그러한 욕이
생겨 난것이다. (니미 씨팔=네 어미와 씹을 할)
둘째로 여성에게 국한되어 쓰여질 경우에는 (씹팔년->씨팔년)으로
'창녀와 같이 몸을 파는 여자'를 빗댄말이다.

그 밖에도 무수한 욕들이 있고 그 어원을 따져보면 신기하기도 하고 재밌기도 하지만
욕이란 안쓰는게 가장 좋으며 굳이 써야한다면 뜻이라도 정확히 알고 써야 할것이며
최소한 욕도 언어인데 말은 되야 되지않겠는가.
여성이 '졸라' 라는 말을 써대는게 사실상 얼마나 부적합하고 황당한 표현이 아니겠는가.

아들아...네가 무심히 내뱉는 '졸라' 라는 말은...
(졸라<졸라게<좃나게<좃이나오게<좃이나올정도로황당하게)
를 비유하는 표현이란다. -.-

2010. 9. 23.

윈도우 7의 Vhd 기능

Vhd는 Virtual Hard Drive의 약자이며 말 그대로 가상화 하드디스크를 말한다.

Vhd는 실지로 VirtualPC나 2005 Virtual Server에 사용되 왔으며
가상화 하드디스크란 점에서 VMware, VirtualBox, Parallels에서 사용되는 가상디스크와
별 차이가 없었다.

하지만 윈도우7이 출시되고 Enterprise 와 Ultimate 에서 선보인 이 Vhd의 기능은
대단히 혁신적인 것이었고 앞으로의 무한한 가능성을 보여 주었다.
그것은 가상화 디스크를 물리적인 시스템에 직접적으로 도입하여 독립적인 운영체제로
사용이 가능하다는 점이다.

현재는 윈도우7의 Enterprise, Ultimate, 그리고 2008 Server R2가 설치된 Vhd 파일만이
인식되어 부팅될수 있게 제약을 걸었지만 이러한 기술이 VirtualPC와의 호환이
가능하게 된다면 VirtualPC에서 사용할수 있는 모든 운영체제를 물리적 형태에서도
사용 가능할수 있게 될것이다.
그건 결국, 다른 모든 가상프로그램과도 호환이 가능하다는 얘기인데
그렇게 되면 가상화 프로그램에서 돌아가는 모든 운영체제가 물리적인 형태로
사용될수 있게될 것이다.

물론 MS가 바보가 아닌 이상, 자신의  MS 계열 모두를 Vhd와 호환이 되게 하진
않을것이다. 하지만 이러한 가능성은 우리에게 희망을 준다.
언젠가 Vhd로 손쉽게 운영체제를 사용해 볼수 있는 날이 오지 않겠는가.
물론 별의 별 제약이 따르겠고 MS에서 쉽게 그 정보를 내줄리는 없겠지만 말이다.

2010. 9. 20.

포터블 프로그램에 관해

한때 포터블 프로그램에 흥미를 느낀적이 있었다.
첫째는 이동식 드라이브에 저장하여 아무 컴퓨터에서나 설치없이 사용할수 있다는 점과
둘째는 제거할 필요없다는 점이 었다.
제거해도 찌꺼기가 남는 무수한 프로그램을 경험하면서
필자와 같이 레지스트리에 민감한 경우, 특히나 더 유용하다고 느껴졌다.
하지만 이러한 포터블이 시스템에 얼마나 악영향을 줄수 있는지에 대해
필자와 같이 수 차례 경험해 본 입장에선 한번 집고 넘어가야 할것같다.
그에 앞서 먼저 포터블의 의미를 어디에 두는가를 생각해 봐야 할것이다.

포터블의 의미를 어디에 두는가?

다른 의견이 있을수 있다.
프로그램과 설정의 이동이 가능하며 설치와 제거없이 사용이 가능한
일종의 무설치 프로그램 으로서의 의미를 두는가 아니면
필자와 같이 얼마나 완벽히 등록과 비등록간의 과정을 제어 할수 있는가에
의미를 둘수 있다.

전자인 경우 예를 들어, A라는 포터블 프로그램을 실행 시켰을때
경로나 설정, 더 나아 가서는 해당 클래스나 서비스, 라이브러리등에 등록이 될 경우,
프로그램을 종료시켰을때 그 모든 등록상태에서의 비등록이 이루어 지지 않는다면
결국 눈에 보이는 설치 과정만 교묘히(?) 감추었을 뿐,
설치 프로그램이나 다를 것이 없으며 오히려 제거목록에 등록되지 않으므로
그 제거에 있어서도 추적이 힘들어 질것이다.
그러한 포터블이 쌓일 경우, 레지스트리가 꼬이고,
시스템은 불필요한 자원을 낭비하게 되어 느려지거나 불안정한 상태가 될것이다.
결국 포터블이 포터블 인척 한것 뿐이다.
필자가 의미를 두고있는 포터블이 무엇인가는 나중에 다루기로 하겠다.

2010. 9. 19.

XP의 페이지 파일의 이동에 관하여

페이지 파일의 이동에 관하여 엇갈리는  포스팅을 본적이 있어서 직접 확인해 보았다.
필자는 페이지 파일을 하나의 물리적 하드 디스크의 다른 파티션에 옮겨 놓고 사용하는데
언젠가 페이지 파일을 다른 물리적 디스크가 아닌 기존의 디스크의 다른 파티션에서 사용할 경우 무리가 올수 있다는 포스팅을 보고 마이크로 소프트사에서 직접 확인해 보았다.

http://support.microsoft.com/kb/307886/ko

이 문서에서는 Windows XP에서 페이징 파일의 위치를 변경하는 방법을 설명합니다.
페이징 파일은 Windows에서 RAM처럼 사용하는 하드 디스크의 영역을 말합니다. 이것을 "가상 메모리"라고도 합니다. 기본적으로 Windows는 이 파일을 Windows 시스템 파일과 같은 파티션에 저장합니다. 이 폴더를 다른 파티션으로 옮기면 Windows 성능을 향상시키고 부팅 파티션에 여유 공간을 늘릴 수 있습니다.
위로 가기
페이징 파일을 옮기는 방법
컴퓨터에 Administrator로 로그온합니다.
시작을 누른 다음 제어판을 누릅니다.
성능 및 유지 관리를 누른 다음 시스템을 누릅니다.
고급 탭을 선택한 다음 성능에서 설정을 누릅니다.
고급 탭을 선택한 다음 가상 메모리에서 변경을 누릅니다.
드라이브[볼륨 레이블] 목록에서 Windows가 설치되어 있는 드라이브(Windows는 보통 드라이브 C에 설치됨) 이외의 다른 드라이브를 선택합니다. 모든 드라이브의 총 페이징 파일 크기에서 권장 옆에 표시되어 있는 값을 기록해 둡니다.
사용자 지정 크기를 누른 다음 처음 크기(MB) 상자에 기록해 둔 권장 값을 입력합니다.
최대 크기(MB) 상자에 페이징 파일에 허용할 최대 크기를 입력한 다음 설정을 누릅니다.
드라이브[볼륨 레이블] 상자에서 Windows가 설치되어 있는 드라이브(보통 드라이브 C)를 선택한 다음 아래 단계 중 하나를 수행하십시오.
해당 드라이브에 페이징 파일을 설정하지 않으려면 페이징 파일 없음을 누른 다음 설정을 누릅니다. 다음과 같은 내용의 메시지가 나타납니다.
C: 볼륨의 처음 페이지 파일 크기가 126MB보다 작으면 STOP 오류가 발생했을 때 디버그 정보 파일을 만들 수 없습니다.
계속하시겠습니까?
예를 누릅니다.
를 누릅니다. 해당 드라이브에서 최소 크기의 페이징 파일을 그대로 사용하려면 사용자 지정 크기를 누른 다음 처음 크기(MB) 상자에 해당 컴퓨터의 RAM 크기보다 크거나 같은 값을 입력합니다. 최대 크기(MB) 상자에도 값은 값을 입력한 다음 설정을 누릅니다.
다음과 같은 오류 메시지가 나타납니다.
변경한 내용을 적용하려면 컴퓨터를 다시 시작해야 합니다.
확인을 차례로 세 번 누른 다음 컴퓨터를 다시 시작할 것인지 묻는 메시지가 나타나면 예를 누릅니다.

http://support.microsoft.com/kb/314482/ko

페이징 파일(Pagefile.sys)은 컴퓨터의 하드 디스크에 있는 숨겨져 있으며 Windows XP가 RAM처럼 사용하는 파일입니다. 페이징 파일과 실제 메모리는 가상 메모리를 구성합니다. 기본적으로 Windows는 부팅 파티션(운영 체제 및 지원 파일이 들어 있는 파티션)에 페이징 파일을 저장합니다. 페이징 파일의 기본 크기 또는 권장 크기는 전체 RAM의 1.5배입니다. 이 문서에서는 시스템 최적화 및 복구를 위해 페이징 파일을 구성하는 방법을 설명합니다.
성능을 향상시키려면 페이징 파일을 다른 파티션 및 다른 하드 디스크 드라이브로 이동하십시오. 그러면 Windows에서 여러 I/O 요청을 보다 빠르게 처리할 수 있습니다. 페이징 파일이 부팅 파티션에 있으면 Windows는 시스템 폴더와 페이징 파일 둘 모두에서 디스크 읽기와 쓰기 요청을 수행해야 합니다. 페이징 파일을 다른 위치로 이동하면 읽기와 쓰기 요청 간의 경쟁이 줄어듭니다.
그러나 부팅 파티션에서 페이징 파일을 제거하면 Windows에서는 커널 모드 중지 오류 메시지가 발생하는 경우 디버깅 정보를 기록하기 위한 덤프 파일(Memory.dmp)을 만들 수 없습니다. 따라서 중지 오류 메시지 문제를 해결하는 데 디버그 절차가 필요할 경우 다운 시간이 길어질 수 있습니다.
최적의 솔루션은 부팅 파티션에 저장되는 페이징 파일을 하나 만든 다음, 다른 실제 하드 디스크를 사용할 수 있는 경우 자주 액세스하지 않는 다른 파티션에 페이징 파일을 하나 더 만드는 것입니다. 또한 데이터나 운영 체제 파일이 없는 페이지 파일만의 고유한 파티션에 두 번째 페이지 파일을 만드는 것이 좋습니다. Windows는 자주 액세스하는 부팅 파티션의 페이징 파일보다는 자주 액세스하지 않는 파티션의 페이징 파일을 사용하도록 설계되었습니다. 가상 메모리 관리에 어떤 페이징 파일을 사용할지 결정하기 위해 내부 알고리즘이 사용됩니다.
페이징 파일을 전용 파티션에 저장하면 페이징 파일이 조각화되지 않으므로 또 다른 확실한 장점으로 작용합니다. 페이징 파일이 다른 데이터가 들어 있는 파티션에 있을 경우에는 요구되는 추가 가상 메모리를 충족시키기 위해 확장되기 때문에 조각화가 발생할 수 있습니다. 페이징 파일이 조각화되지 않으면 가상 메모리 액세스가 빨라지고 큰 오류 없이 덤프 파일을 캡처할 수 있게 됩니다.
이러한 권장 사항을 준수하면 최적화 및 복구를 위한 다음과 같은 페이징 파일 구성 목표를 충족하게 됩니다.
컴퓨터에서 커널 모드 중지 오류가 발생하는 경우 Memory.dmp 파일을 캡처할 수 있도록 시스템이 올바로 구성되어 있습니다.
자주 액세스하지 않는 파티션의 페이징 파일이 가장 사용되지 않는 파티션에 있기 때문에 가장 자주 사용됩니다.



한줄 정리를 하자면 ...

1. 시스템 파티션에 126MB의 페이지 파일만 만들어 준다
2. 물리적 메모리의 크기가 2GB 이상인 경우 1배 또는 1.5배의 페이지 파일을
    다른 물리적 디스크에 잡아 주거나 기존 디시크의 다른 파티션에 잡아준다
3. 처음 크기와 최대 크기를 동일 하게 잡아 준다