제가 일전에 포터블(소프트웨어)에 관한 글을 포스팅 한적이 있는데 그 개념에 대해
약간의 혼동(?)을 느끼시는 분과 실직적으로 '포터블만들기'에 관심있으신 분이 계신 것 같아서
제가 시간이 되는 대로 '포터블구현' 이라는 최종의 목적으로 포스팅을 하겠습니다.
'포터블 소프트웨어 (앞으로는 포터블이라 부르겠음)'에 대해 제 각기 정의하기 나름이겠지만
위키에서는 이렇게 설명하고 있습니다.
[정의]
휴대용 소프트웨어는 컴퓨터 소프트웨어를 이동식 장치에 사용 흔적을 남기지 않고 사용할 수 있도록 리팩된
소프트웨어다. 사용자들은 포터블(portable) 프로그램으로 분류 또는 칭하기도 한다.
[사용목적]
주 목적은 설치 없이 이동식 장치에 있는 소프트웨어를 사용하는 것이다. 이를 위하여 설정의 저장이 필요한데
보통의 경우 ini 파일 이나 윈도 레지스트리에 저장한다 ini 파일의 경우 복사만 하면 되지만 윈도 레지스트리를
사용할 경우 약간의 처리가 필요하다. 또한 PE같은 정상적으로 프로그램을 설치하기 힘든 환경에서도 사용한다.
[문제점]
일부 잘못 만들어진 휴대용 프로그램은 사용한 흔적(레지스트리 임시파일 등)이 남기도 한다.
또한 경우에 따라서 시스템을 손상시킬 우려도 있다.
[무설치 소프트웨어와의 차이]
무설치 소프트웨어는 설치의 여부가 기준이고, 휴대용 소프트웨어는 흔적을 남기는지 여부가 기준이다.
즉, 설치 없이 실행 가능하기만 하다면 무설치이고, 그러면서 흔적을 남기지 않는다면 휴대용인 것이다.
여기까지가 위키의 내용이며 제가 앞으로 다루게 될 '포터블'에 대해서는 위키를 근거하여
좀 더 명확히 구분짓기 위해서 다음과 같이 정의 하겠습니다.
포터블이란 '무설치', '이동식', '설정보존' 이라는 이 세가지 기본개념을 충족시켜여 하며
파일시스템의 생성이나 레지스트리의 등록을 제어할수 있는 프로그램을 말함.
1. 무설치
일반적으로 설치 프로그램을 실행시키면 폴더가 생겨나고 해당 폴더에 파일이 복사되며 프로그램 그룹과
단축아이콘이 생성되고 언인스톨 항목이 레지스트리에 등록되는데 '무설치'의 경우는 이러한 설치 과정만
제거한 것으로 생각하시면 됩니다. 문제는 이러한 무설치 프로그램을 더 이상 사용하지 않을경우
정상적으로 언인스톨 과정을 밟아 등록된 항목을 제거해 줄수가 없다는 것입니다.
때로는 '무설치' 프로그램을 데스크탑 환경에서 사용하시는 유저분의 경우, 프로그램을 인스톨하고
언인스톨 하는게 귀챦아서가 아니라 설치 프로그램을 실행시킴으로서 혹시나 시스템에 미칠 영향에 대한
우려 때문이기도 한데, 프로그램의 성격에 따라 다소 차이는 있겠지만 레지스트리에 키가 생성되는 과정은
설치시에 생성되는 1차과정에서 끝나는 것만은 아닙니다. 프로그램을 실행시 2차과정, 종료시 3차과정,
때론 리부팅과 함께 4차과정 이상을 거치는 경우도 있고 실행 프로그램 자체가 조건부 검사과정을 거쳐
레지스트리 키 값을 검사하고 만일에 지워졌을 경우 다시 생성해 나가기도 하는데 여기에서는
이러한 파일시스템이나 레지키의 생성과정을 배재한 프로그램을 '무설치'라 정의 한 것입니다.
문제는 이러한 '무설치'가 '포터블'인 척 위장하여 다가올때 우리는 그것을 구분하기가 난감해 지는데
하지만 그 보다 더 난감한 것은 '포터블'이 '포터블'로서의 제 구실을 다 하지 못할 때 입니다.
2. 포터블이 시스템에 미칠수 있는 영향
'무설치'가 이리저리 잔재를 남긴다해도 그리고 수많은 '무설치'로 인해 시스템이 느려진다 해도
실질적으로 피해를 주는 것은 '무설치'가 아니라 살짝 삐긋난(?) 형태의 '포터블'인데
당연한 이치겠지만 레지스트리를 제어하는 과정에서 자신과의의 다른 환경에서 결과가 다르게
나올수 있기 때문입니다. 또한 일부 USB에서 사용되는 '포터블'을 데스크탑에서 사용할 경우
환경변수에서 벗어나 추구하려 했던 목적(제어과정)에서 이탈되는 상황이 벌어질수 있으며
기존의 동일한 프로그램이 설치 된 상태에서 사용하게 될 경우 기존 프로그램을 마비시킬수 있으며
심지어는 해당 프로세스가 종료되지 않는 현상도 발생합니다.
3. 포터블을 만들기 위한 자세
'포터블'은 경우에 따라 아주 쉽게도 때론 복잡한 과정을 거쳐서 만들어 지기도 하는데 하나의 건강한(?) 포터블이
탄생되기 까지는 그 만큼 땀과 노력이 필요로 하고 여러차례의 실험을 통해서 또한 여러 다른 환경을 접해 보면서
본의 아니게 상대에게 피해를 주는 일이 없도록 심여를 기울여야 할것입니다.
4. 앞으로 줄기차게 사용될 포터블의 용어 (참고: 원래의 포괄적인 의미로서가 아닌 포터블 개요에 맞는 용어)
코딩: 프로그래밍 과정
패킹: 코딩된 파일을 패킹하는 과정 (프로그래밍 된 파일을 설치 형태로 묶어주는 과정)
언패킹: 패킹을 풀어주는 과정 (설치 형태를 다시 풀어주는 과정)
로더: 기존의 응용프로그램을 대신하여 불러 들이는 실행파일
가상화: 가상의 독립적인 형태로 파일시스템과 레지스트리 구축
5. 무설치의 예
다음은 크롬플러스 무설치버전 1.4.1.0 의 파일시스템과 레지스트리 등록과정을 스냅샵으로 비교해 본 결과 입니다.

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