노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.


들어가며

사용자는 프로그램을 사용하다가 버그가 발생하면 그것을 제작자(혹은 제작사)에 알려주게 된다. 이러한 행위를 버그리포팅(bug reporting; 오류 보고)이라고 하며, 이는 프로그램 수정판(patch version)이나 향상판(upgrade version)에 도움을 주게 된다.

그런데 이러한 버그리포팅을 제작자가 무시하는 경우도 있는데, 이럴 경우 사용자는 불쾌감을 느끼게 된다. 하지만 왜 버그리포팅이 무시되는지는 깊게 생각하지 않는 사람이 많다. 

우선 버그리포팅이 너무 추상적이기 때문에 무시된다. 둘째 재현이 되지 않는 경우에는 무시된다. 셋째로 개발자 측의 정책적인 이유에서 무시되기도 한다. 심지어 답변하는 측의 무지 또는 무성의 때문에 무시되는 일도 있다.

버그리포팅이 무시되는 이유

추상적인 버그리포팅

버그리포팅이 너무 추상적이기 때문에 무시되는 일도 있다. 버그패치를 하려면 구체적인 상황이 제시되어야 한다.

버그는 모든 경우에 발생하는 예는 매우 드물며, 대부분 특정 상황에서 발생하게 된다. 그러므로 버그가 발생한 상황을 구체적으로 기술할 필요가 있으며, 그게 어렵다면 특별한 버그 발생 조건을 명시해야 한다. 그것이 나타나지 않은 버그리포팅은 추상적이라 여겨지고 그 버그리포팅은 무시된다.

개발자 입장에서는 추상적인 상황에 대해 대처할 방법이 없다. 또한 프로그램의 내부 오류가 아닌 이상 버그는 반드시 외부로 표출되어야 하며, 그것은 거의 대부분 특정 조건에 따라 발생하게 된다. 이것은 그 상황을 구체적으로 설명할 수 있음을 나타낸다. 그러므로 반드시 버그가 발견되면 그 상황을 기록해 두어야 자신이 전달한 버그리포팅이 무시되지 않게 된다.

재현 불가

버그리포팅을 하기 전에 자신이 발견한 버그를 재현해 보아야 한다. 자신이 생각하는 그 상황에서 버그가 발생하는지를 시험해 보아야 한다는 뜻이다.

버그가 재현되지 않는다면 주로 (1) 그것은 일시적인 현상이거나, (2) 그게 아니면 내부적인 오류가 있는데, 그것이 사용자가 알지 못하는 어떤 이유로 외부로 표출된 경우이다. (1)의 경우는 프로그램 오류이기보다는 시스템의 문제이거나 설치된 프로그램끼리 충돌하는 경우 등으로 재현이 어려운 경우도 있고, 아예 그 상황 자체가 다시 나타나지 않을 수도 있다. (2)의 경우는 일반 사용자는 알 수 있는 방법이 없고, 이 경우 버그의 재현은 거의 불가능에 가깝다.

버그가 재현되지 않는 또 다른 이유는 버그의 발생원인을 착각했기 때문이다. 이 경우 버그는 존재하지만 발생원인을 착각했기 때문에 자신이 생각하는 이유로는 재현되지 않게 된다.

마지막으로 사용자는 재현에 성공했지만 개발자 측에서는 재현에 실패하는 경우도 있다. 이것은 하드웨어적인 문제가 겹치거나 사용자의 시스템 환경과 개발자의 시스템 환경이 판이하게 다른 경우에 발생한다.

정책적인 이유

개발자나 회사의 정책적인 이유로 버그리포팅이 무시된다.

개발자 측의 정책에 따라 최신 버전이 나오게 되면 이전 버전에 대한 버그리포팅은 무시되기도 한다. 예컨대 인터넷 익스플로러 5 이전 버전은 현재 버그리포팅을 무시하고 있다.

버그 패치를 적용하면 속도 저하 등의 현상이 생기는 예도 있다. 그런데 그 속도 저하 등 성능 저하가 심하다면 버그리포팅은 일정 기간 무시되기도 한다. 물론 중대한 보안버그라면 반드시 적용되겠지만, 그렇지 않다면 일정기간 무시될 수 있다는 말이다.

마지막으로 경쟁사 제품과 관련한 버그는 무시하는 경우가 있다. 이런 경우 고의적으로 경쟁사 제품의 설치 및 사용을 막는다는 의심을 받기도 한다.

답변자의 무지 또는 무성의

답변자가 글을 제대로 읽지 않거나 버그리포팅 내용을 확인하지 않아서 무시되는 경우도 있다. 나와 네이버는 악연인지 버그리포팅이나 항의글이 무시되는 경우가 많았다. 특히 답변자가 해당 내용을 알지 못하거나, 버그리포팅 내용을 확인하지 않아서 엉뚱한 답변을 하는 경우도 있었다.

  • 네이버 결계 벌레 : 파일이 존재함에도 "삭제한 파일이기 때문에 접근할 수 없다."라고 답변이 왔다. 또한 그 게시글에서 분명히 "홈페이지 등록 갱신을 거부합니다."라고 했는데, 나중에는 네이버 측에서는 내가 "홈페이지 등록 요청"을 했다고 주장했다.
  • 네이버에 파이어폭스에 대해 물었는데 익스플로러에 해당하는 답변을 하는 경우가 있다. 초보적인 오류임에도 다른 사이트에서는 일어나지 않는 일이 네이버에서는 몇 차례나 일어난다.
  • 그밖에 자주 나타나는 무성의한 답변으로는, 프로그램이나 제작자를 가리지 않고, 버그리포팅에 나타난 내용을 해결책으로 제시하는 경우이다. 다시 말해 버그리포팅을 할 때 A라는 작업을 했음에도 결과가 나아지지 않았다고 버그리포팅을 했음에도 다시 A라는 작업을 하라고 답변하는 경우가 많다.

답변자의 무지 또는 무성의는 매우 심각한 결과를 가져온다. 왜냐하면 버그리포팅이 무시되는 경우 일반적으로 사용자는 그 사실을 알 수 없다. 그러나 이러한 답변자의 무지나 무성의는 답변자가 바로 알아차릴 수 있고, 그에 대해 허탈함이나 불쾌감을 가지게 된다. 이는 대답하는 사람이 가져야 할 기본적인 소양, 곧 "질문 내용이나 버그리포팅 내용을 제대로 읽기"를 하지 않았다는 말이 되기 때문이다.

대응

버그리포팅이 무시되면 대응할 방법이 거의 없다. 추상적인 버그리포팅의 경우는 "개발자에게 의견을 전달했다."라는 식으로 말할 뿐이며, "재현 불가"는 재현할 수 없다는 말을 되돌려준다. 정책적인 이유라면 그 역시 "회사 정책상 지원하지 않는다."라는 말을 하게 되며, 답변자의 무성의는 어쨌든 답변은 받은 셈이다.

이때 추상적인 버그리포팅이나 재현 불가는 당장 할 수 있는 일이 없다. 그저 다시 버그가 나타나기를 기다려야 한다. 버그가 다시 나타나면 다행이고 그게 아니라면 어쩔 수 없이 포기해야 한다. 물론 나중에 다시 버그가 발생하면 그때 다시 버그리포팅을 하면 된다. 한/글/ 2005에 나타난 구결 표기 오류를 참조하라.

회사 정책상의 이유라면, 그것이 중대한 버그인지를 먼저 생각해야 한다. 사소한 버그이거나 다른 기능과의 충돌 때문에 "구현하지 않은 기능"일 수도 있기 때문이다. 다시 말해 사용자 설명서 등에 "불가능한 기능" 또는 "제공하지 않는 기능"이라는 식으로 기술되어 있다면 일단 버그가 아니다. 물론 사용자 입장에서는 버그라고 여겨지겠지만, 회사의 입장에서는 버그가 아니므로 "회사 정책"상 버그 수정은 하지 않게 된다. 만약 중대한 버그라면 반드시 추가로 버그리포팅을 하는 편이 좋다.

관련 문서

이 글은 스프링노트에서 작성되었습니다.

글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

팁텍

나는 자주 내 티스토리 블로그에 들어오는 사람들이 어떤 유입경로를 통해 들어오는지를 살펴본다. 딱히 그 사람들을 감시한다는 생각은 없고, 팁이나 벌레 글을 쓸 때 이용하기 위해서이다. 그런데 오늘(4월 24일) 재미있는 것을 발견했다. "이런 것도 모를까?"라는 생각이 들 만한 문제가 나타났다.

"dos 에서 감춰진 파일 보기"라는 저 내용이 처음에는 무엇인지 알지 못했으나, 잠시 후에야 "숨김파일"을 보려고 함을 알 수 있었다.

팁의 발견

감춰진 파일(숨김파일)을 본다는 말은 그 파일의 내용을 본다는 말이 아니라 파일 목록에서 그것이 나타나게 한다는 뜻이다. 도스에서는 여러 가지 방법을 제공하고 있다. 물론 여기에서 설명하는 방법은 윈도의 명령 프롬프트에서도 적용할 수 있다.

DIR 명령

우선 디렉터리에 있는 파일과 하위 디렉터리 목록을 보여주는 명령어인 DIR을 이용해 보자.[각주:1]

버추얼박스에서 MS-DOS 6.22를 실행시켰다.

영문 버전이지만 한글 버전과 별로 다르지 않다. 어쨌든 디렉터리 목록을 보기만 하면 되니까 그게 중요한 게 아니다.

위에서 보면 "11 File(s)"라는 부분이 있다. C:\TEMP 디렉터리는 이번 팁을 작성하면서 새로 만든 디렉터리이다.

이때 이 폴더에는 숨김파일이 있다. 숨김파일만 보려면 /AH 선택자(옵션/선택사항)를 사용하면 된다.

위와 같이 6개의 숨김 파일이 있다고 보여준다.

위의 화면은 차례대로 읽기 전용 파일, 시스템 파일, 모든 속성의 파일의 목록을 보여주는 화면이다.

ATTRIB 명령

DIR 명령을 쓰지 않고도 파일 목록을 볼 수 있다. 바로 파일 속성을 보여주는 ATTRIB 명령을 이용하는 방법이다.

앞서 DIR 명령에서는 모두 19개 파일이 보였는데, ATTRIB 명령에서는 17개만 보인다. 이것은 [.]과 [..] 디렉터리는 현재 디렉터리와 부모 디렉터리를 나타내는 디렉터리로서 실제로 존재하지 않기 때문에 ATTRIB 명령에서는 보여주지 않는다. 위의 목록에서 H 표시가 있는 파일이 숨김 파일이다.

다만 ATTRIB 명령에는 숨김파일만 보는 방법은 존재하지 않는다. 만약 한 화면을 넘기게 된다면 MORE 명령을 함께 이용하면 된다.

  1. ATTRIB | MORE

다른 유틸리티 이용

M-Dir이나 NC(노턴 커맨더) 등의 유틸리티를 이용하여 숨김 파일을 볼 수 있다.

M-Dir에서 숨김 속성 파일을 보여주고 있다. 파일 목록을 보여주는 아래쪽에 디렉터리 정보를 보여주고 있다. 그 맨 왼쪽에 QH라고 된 부분이 숨김 파일을 보여주고 있다는 표시이다(정확하게는 H 부분이다.). 또한 목록에서 파일 크기 부분이 자주색으로 보이는 파일이 숨김 파일이다.

윈도 탐색기

윈도 탐색기는 도스가 아니지만, 그래도 알고 있으면 유용하게 써먹을 수 있다.

숨김 속성을 보여주기 전 화면

숨김 속성을 보여주기 전 화면 (아래 상태표시줄에 숨김 파일이 4개 있다고 알려주고 있다.)

폴더 옵션에서 숨김 파일 및 폴더를 표시하도록 설정

폴더 옵션에서 숨김 파일 및 폴더를 표시하도록 설정

폴더 옵션에서 설정한 뒤의 화면. 숨김 속성의 파일은 희미하게 보인다.

폴더 옵션에서 설정한 뒤의 화면. 숨김 속성의 파일은 희미하게 보인다.

관련 문서

이 글은 스프링노트에서 작성되었습니다.

  1. DIR의 사용법을 알고 싶다면 명령 프롬프트에서 dir /? 라고 입력하기 바란다. [본문으로]
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

읽기에 앞서

여러분, 이 방법을 악용하지 맙시다.

이 팁에 나타난 방법은 그 금칙어를 꼭 써야 하기 때문에 이런 방법이 필요한 것이지, 무분별하게 쓰라는 뜻이 아닙니다.

팁텍

게시판 등에서 사용할 수 없게 지정해 둔 낱말이 있다. 이것을 금칙어라고 하는데, 이것이 순기능을 가지고 있으나, 역시 컴퓨터 프로그램에서 미리 정한 대로 작동하기 때문에 벌레가 있기 마련이다.

참고로 금칙어처럼 금지되는 낱말을 통틀어 금지어라고 한다. 이와 비슷한 개념으로 꺼리는 말을 금기어라고 하며, 금기어를 피하기 위해 쓰이는 말을 완곡어라고 부른다. 예컨대 변소는 금기어이며, 화장실은 완곡어입니다. 금기어가 가장 넓은 개념이고, 금지어와 금칙어는 좁은 개념이다.

팁의 발견

자주 가는 USBOffice 사이트에서 글을 올리다가 금칙어 문제로 올릴 수 없었다. 혹시나 하는 마음에 전부터 알고 있던 방법을 사용하여 게시물을 등록하게 되었다.

이 팁은 HTML 등을 허용하지 않으면 사용할 수 없는 단점이 있다는 점을 기억하자.

이미지로 올리기

그래픽 이미지 파일로 만들어서 올리는 것도 한 방법이다(켈베로스 님 의견).

예컨대 "알지도 못하고 보지도 못한다."라는 내용을 USBOffice 에서는 등록할 수 없었다. 

그림 1 : 댓글 편집 화면

그림 1 : 게시글 편집 화면

위와 같이 입력하고 [댓글 등록]을 클릭하면 다음과 같은 오류 메시지를 보여 준다. 참고로 댓글이 아니라도 이 팁은 적용할 수 있다.

그림 2 : 경고 화면

그림 2 : 경고 화면

억울하지만 저 낱말을 사용할 수 없다는 뜻이다. 캘베로스 님 의견에 따라 다음과 같이 그래픽 이미지를 만들어서 처리할 수 있다.

그림 3 : 예제 그림

그림 3 : 예제 그림

<그림 1>에서 나타난 [피일 첨부]를 클릭하여 <그림 3>의 예제 그림을 첨부한다. 그것을 본문에 넣으면 된다([본문 삽입]을 클릭하면 자동으로 본문에 넣어 준다.)

이 방법은 USBOffice처럼 xeEditor를 사용하는 게시판에서는 어디서나 쓸 수 있다.

HTML 코드 등을 이용하기

그래픽 이미지를 만들어 올리는 것은 보여주고 싶은 내용을 그대로 그래도 보여줄 수 있다는 점에서 매우 유용하다. 심지어 화면 배치까지 그대로 보여줄 수 있다. 화면 자체를 그림으로 바꾸기 때문이다. 다만 그래픽 이미지는 텍스트보다 그 크기가 크고, 화면 좌우 폭의 제한이 있는 경우에는 왼쪽이나 오른쪽이 잘리는 경우도 있다. 주로 오른쪽이 잘리게 된다.

그럴 경우 게시판에서 HTML 코드 등을 지원한다면 그것을 이용하여 우회할 수 있습니다. 이른바 더미 태그라는 방법입니다. 더미 태그 방식은 실제로 쓰이지 않는 쓰레기 값을 태그로서 넣는 방법입니다. 실제로 쓰이는 태그라도 내용 없이 태그만 넣게 되면, 그것도 더미 태그가 됩니다.

  1. 일단 스타일 편집기 탭에서 글을 작성한 뒤에 저장합니다. <그림 1>에서 "듣지도 못하고 보지도 못한 잡것."으로 바꾸어도 역시 댓글이 등록되지 않는다.
  2. 아까와 마찬가지로 경고 메시지를 보여주는데, 대부분 금칙어를 알려줍니다. 그것을 수첩 등에 적어 놓습니다. 위의 <그림 2> 참조.
  3. 스타일 편집기 탭이 아닌 HTML 편집기 탭에서 금칙어를 찾습니다. 찾기 단축키는 Ctrl+F 입니다.
  4. 금칙어 부분을 찾으면 금칙어의 사이에 <b></b>라고 넣습니다. 위의 "보지 못한"에서는 "보<b></b>지 못한"이라고 하면 됩니다.
    그림 4 : HTML 편집기 화면

    그림 4 : HTML 편집기 화면

  5. 다시 저장한다. 다른 금칙어를 알려주면 1번에서 4번을 반복한다.

 참고로 이 방법은 HTML 코드를 지원하는 게시판에서만 가능합니다. BB코드를 지원하는 게시판에서는 <b></b> 코드를 [b][/b] 코드로 바꿀 수 있습니다. 여기에서 삽입하는 <b></b>와 [b][/b] 코드는 "글씨를 굵게" 만드는 코드입니다. 코드가 단순해서 써먹기 좋습니다.

관련 문서

이 글은 스프링노트에서 작성되었습니다.

글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

팁텍

암호 걸린 압축 파일을 엽기적으로 보관하는 방법이다. 이 방법은 1998년에 OLE에 대해서 배울 때 알게 되었다. 당시에는 MS Word97로 시험하였으나, 여기에는 한/글/2005를 사용했다.

팁의 발견

흔히 압축 파일을 저장할 때 암호를 걸게 된다. 그런데 그렇게 하고도 미덥지 않아서 처음 압축한 형식과 다르게 압축을 한다. 물론 암호도 걸어서.

그렇다고해서 안전할까? 물론 안전하다. 그런데 그런 파일이 있다는 사실 자체만으로 안전하지 못할 때가 있다. 누군가가 그것을 지우려 할 때다.

이럴 경우 압축 파일을 다른 파일 속에 넣어 버리면 좋을 때도 있을 텐데, 아쉽게도 그런 기능을 지원하는 프로그램이 없다.

그런데 알고 보면 그게 또 아니다. 윈도는 기본적으로 특정 파일을 다른 파일에 포함시킬 수 있도록 되어 있기 때문이다. 그것이 OLE 기능이다.

압축 작업

프리웨어인 Zip+ 프로그램을 이용하여 압축을 하였다. 참고로 알집은 애드웨어이다.

압축할 폴더/파일을 선택한다.

압축할 폴더/파일을 선택한다.

마우스 오른쪽 클릭하여

마우스 오른쪽 클릭하여

압축 하기 대화상자가 열린다. 아래쪽 중앙에 암호 입력을 클릭한다.

압축 하기 대화상자가 열린다. 아래쪽 중앙에 암호 입력을 클릭한다.

암호 입력 대화상자에서 암호와 암호 확인을 똑같이 입력한다. 이때 그 둘이 서로 다르면 입력을 다시 요구한다.

암호 입력 대화상자에서 암호와 암호 확인을 똑같이 입력한다. 이때 그 둘이 서로 다르면 입력을 다시 요구한다.

암호 입력을 마치면

암호 입력을 마치면

문서 작업

압축 파일을 문서 파일에 넣을 때 주의할 점은, 한 번 문서 파일에 넣어버리면 그것을 다시 빼낼 수 없다는 점이다. 물론 이렇게 문서 파일에 개체로서 넣더라도 그림 파일 등은 다시 빼낼 수 있다. 하지만 이 압축 파일의 경우는 다시 빼낼 수 없으니 심사숙고해서 문서 파일에 넣도록 하자. 압축 파일 자체는 빼낼 수 없지만, 그 압축 파일에 압축해 넣은 자료는 다시 빼낼 수 있으니 걱정하지 않아도 된다.

드래그&드롭으로 넣기

이렇게 압축파일이 만들어지면 압축 프로그램을 포함시킬 문서 파일을 골라야 한다.

위와 같이 문서 파일을 연 다음에 탐색기 창을 열어 압축 파일을 선택한다.

위와 같이 문서 파일을 연 다음에 탐색기 창을 열어 압축 파일을 선택한다.

압축 파일을 문서 파일 안에 드래그&드롭(끌어서 던져넣기)으로 포함시킨다.

압축 파일을 문서 파일 안에 드래그&드롭(끌어서 던져넣기)으로 포함시킨다.

위와 같이 압축 파일이 문서 파일에 포함된다.

위와 같이 압축 파일이 문서 파일에 포함된다.

메뉴를 이용하여 넣기

메뉴에서 선택하고 싶은 사람은 아래와 같이 입력 >> OLE 개체 넣기를 선택하면 된다.

물론 단축키는 위에 나온 대로 <Ctrl+N,O>이다. 단축키를 이용하든 메뉴를 이용하든 자신이 편한 방법을 사용하면 된다.

이때

이때

새로 만들기는 이미 OLE 개체의 형식이 정해진 자료만 가능하다. 대부분 압축 파일을 문서에 포함시킨다는 생각을 않으므로 이미 만들어져 있을 리는 없다.

불러오기

불러오기


문서 파일을 찾은 뒤

문서 파일을 찾은 뒤

결과 화면은 아래와 같다.

결과

아, 왜 두 개가 생겼느냐고? 앞서 작업한 파일은 오른쪽에 있는 개체(압축 파일)이고, 왼쪽은 방금 작업한 개체(압축 파일)이다. 저 개체(압축 파일)가 들어가는 곳은 아까 메뉴를 호출했을 때 커서가 어디에 있었느냐에 따라 다르다. 다시 말해 커서가 있던 곳에 개체가 들어간다. 물론 마우스로 던져넣은 경우 마우스 포인터가 마지막에 닿았던 곳을 기준으로 개체가 들어간다.

문서에 암호 걸기

마지막으로 한/글/2005 문서에 암호를 걸면 된다. 암호 걸기 기능은 메뉴에서 파일 >> 문서 암호에 있다.

위의 두 암호는 같아야 한다.

위의 두 암호는 같아야 한다.

암호를 건 뒤에는 저장하면 된다.

이 문서를 다시 불러오면 다음과 같이 암호를 물어본다. 아까 지정한 암호를 입력해야 문서를 읽을 수 있다.

문서 파일 사용하기

이 문서 파일을 어떻게 이용할 수 있는지도 알아야 한다. 기껏 이렇게 복잡한 과정을 거쳐서 파일을 2중으로 암호화했는데, 더구나 다시 빼낼 수도 없는데, 그것을 이용할 수 없다면 정말 큰일이기 때문이다.

이것을 압축 파일 관리 프로그램에서 읽어들이는 방법은 간단하다. 그냥 문서 파일 안에 있는 압축 파일 아이콘을 두 번 클릭(더블클릭)하면 된다.

두번 클릭했을 때 Zip+ 프로그램에서는 8.3형식으로 OLE 개체를 열었다.

두번 클릭했을 때 Zip+ 프로그램에서는 8.3형식으로 OLE 개체를 열었다.

이밖에도 다음과 같은 방법이 있다.

내용 활성화를 이용해서 압축 파일의 OLE 개체를 열 수 있다.

내용 활성화를 이용해서 압축 파일의 OLE 개체를 열 수 있다.

이때 OLE 개체는 두번 클릭했을 때와 같이 8.3형식으로 열렸다.

마지막 방법으로 위 그림에서 내용 활성화 대신에 패키지 편집을 클릭해서 열 수도 있다.

개체

패키지 편집을 클릭하면 위와 같이 개체 포장기 프로그램이 실행된다. 이때 오른쪽의 "sample.zip 복사본"을 두번 클릭하면 압축 파일 관리 프로그램에서 OLE 개체를 읽어올 수 있다.

아무튼 압축 파일의 OLE 개체를 연 뒤에는, 거기에 새로운 파일을 추가하거나, 파일 가운데 일부를 삭제할 수도 있다. 물론 원본이 .zip 파일이었기 때문에 가능하며, 일부 압축 형식은 압축 내 파일 삭제, 파일 추가 등의 기능을 지원하지 않기도 한다.

또한 개체 포장기를 종료시킬 때 "을(를) 업데이트하시겠습니까?"라고 묻는데, 파일 추가나 삭제를 했는데 그것을 적용하겠다면 [예]를 클릭하고, 아무런 작업도 하지 않았다면 [아니오]를 클릭하면 된다.

물론 압축 파일 안의 파일을 밖으로 꺼낼 때에는 아까 입력한 암호를 입력해야 한다.

원리 및 특징

위에서 윈도는 기본적으로 특정 파일을 다른 파일에 포함시킬 수 있도록 되어 있으며, 그러한 기능이 OLE라고 했다.

윈도XP의 도움말 및 지원센터에 따르면 OLE는 다음과 같은 뜻을 가진다.

OLE
어떤 응용 프로그램에서 만든 정보를 다른 응용 프로그램에서 만든 스프레드시트나 워드 프로세싱 파일 등의 문서에 붙여넣어 응용 프로그램 간에 정보를 전송하고 공유하는 방법입니다.
관련 항목: 패키지; 포함 개체; 연결된 개체

이때 중요한 점은 응용 프로그램 간에 정보를 공유하는 방법이라는 점이다. 다시 말해 압축 파일은 압축 프로그램에서 다루지만, OLE를 이용하면 워드 프로세싱 파일 안에 압축 파일을 넣어서 필요할 때만 압축 프로그램으로 불러내어 다룰 수 있다는 뜻이다.

이러한 기능은 메모장에서는 동작하지 않는다. 왜냐하면 메모장은 OLE 개체 기능을 지원하지 않기 때문이다. 그러나 워드패드에서는 잘 동작한다. 워드패드에도 OLE를 지원하는 메뉴가 있으며, 마우스로 드래그&드롭으로 삽입할 수 있다. 메뉴는 삽입 >> 개체이며, 한/글/2005의 경우와 비슷하다.

이렇게 문서에 삽입하는 대상을 개체라고 부르는데, 이러한 개체는 특별하게 지정되어 있지 않다. 그럼에도 대부분의 프로그램에서 "정해진 개체"가 따로 존재하는 이유는, 그렇게 정해진 개체가 다른 개체보다 자주 쓰이기 때문이다.

심지어 HTML 등에서도 <OBJECT> 태그와 <EMBED> 태그가 있어서 개체를 삽입할 수 있다. 물론 HTML에 들어가는 개체는 한/글/ 파일이나 워드패드 파일(.rtf 파일)과는 달리 문서와 완전히 융합되는 형태는 아니다. HTML 특유의 링크 형태로 HTML 문서를 보여줄 때 함께 보여주는 형식을 취할 뿐이다.

물론 대부분의 문서에서 OLE 개체는 문서 안에 직접 삽입되어 문서의 일부를 이루게 된다. 이 경우 장점은 운영체제에서 OLE 개체 접근을 허용하면 그 개체를 두번 클릭함으로써 쉽게 접근하고, 열어 볼 수 있고, 심지어 편집까지 바로 할 수 있다.

그런데 이 방법에 결정적인 단점이 있다. 바로 원본을 복원할 수 없다는 점이다. 한 번 다른 문서에 집어 넣은 압축 파일은 다시 압축 파일 형태로 복원되지 않는다. 두 번째로 윈도에서만 사용할 수 있다는 점이다. 리눅스 등에서도 OLE를 지원하기는 하나, 어디까지나 OLE는 윈도 기반에서 작동하도록 만들어져 있다. 결국 윈도가 아니면 쓸 수 없는 방법이라는 말이다. 세 번째 이 작업을 할 때 항상 두 가지 프로그램이 필요하다는 점이다. 바로 문서 편집기와 압축 파일 관리자가 항상 필요하다. 또한 압축 파일이 문서에 포함되면, 그만큼 문서 크기가 늘어난다는 특징이 있다.

장점은 하나뿐이다. 암호를 두 번 지정할 수 있는데, 그 방법을 상대방이 모를 가능성이 높다는 점이다. 물론 아는 사람은 어떻게든 알아낸다는 점을 잊어서는 안 된다.

관련 문서

이 글은 스프링노트에서 작성되었습니다.

'벌레와 팁 > ' 카테고리의 다른 글

버그리포팅이 무시되는 경우  (0) 2009.04.25
DOS에서 숨김 파일 보기  (0) 2009.04.24
금칙어 피해가기  (0) 2009.04.21
티스토리 인쇄CSS 적용하기  (3) 2009.04.09
중복 파일 제거하여 용량을 줄이자  (0) 2009.04.06
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

팁텍

티스토리는 인쇄 페이지 기능을 지원하지 않는다. 그러다가 인쇄CSS를 이용하면 어느 정도 자신이 바라는 부분만 인쇄할 수 있지 않을까 생각하여 이 팁을 작성하게 되었다.

팁의 발견

티스토리에서 인쇄 페이지를 지원하지 않는다는 사실은 우연히 알게 되었다. 그러다가 도아의 세상사는 이야기에서 블로그에 PDF 저장 단추를 달자 라는 글을 보게 되었다. 댓글로 의견을 나누는데, CSS 이야기가 나오게 되었고, 그것에서 힌트를 얻어 CSS를 적용해 보게 되었다.

프로그램 설명

CSS에 대한 기본 사용법은 각자 알아서 하기 바란다.

추천 사이트 - Learn CSS (한국어 사이트이지만, 글자가 깨질 수도 있다. 문자셋을 한국어 (UTF-8) 또는 유니코드 (UTF-8)로 맞추어야 한다.)

CSS 만들기

기본적인 부분 인쇄

CSS를 이용하지 않는 방법은 WWW이 생길 무렵부터 쓰던 방법인 드래그&프린트가 있다. 말 그대로 마우스로 화면에서 인쇄하고 싶은 부분을 주~욱 잡아당겨 선택한다. 그리고 메뉴에서 파일-인쇄를 누르면 된다.

마우스로 드래그한 화면

일단은 이렇게 마우스로 좌~악 그어서 선택한다.

파일 메뉴에서 인쇄 선택

파일 메뉴에서 인쇄 선택

페이지 범위-선택 영역, 그 다음에 인쇄를 콕! 눌러주면 된다.

페이지 범위-선택 영역, 그 다음에 인쇄를 콕! 눌러주면 된다.

그러나 이 방법은 웹페이지 방문자가 해야 하는 작업이지, 웹페이지 제작자가 할 수 있는 작업이 아니다. 더구나 마우스 드래그를 막아놓은 웹페이지에서는 통하지 않는다.

인쇄 CSS 이용하기 1

인쇄용 CSS를 이용하면 웹페이지 제작자가 자신이 인쇄로 출력하고 싶은 부분을 정할 수 있다. 인쇄 CSS에서 인쇄하고 싶지 않은 부분에는 display: none 라는 속성을 주면 된다(참조 블로그에 PDF 저장 단추를 달자)

인쇄 CSS 이용하기 2

나는 티스토리에 적용할 때 주로 <div class="_ad"> 또는 <div class="noprint">와 같이 인쇄 금지 항목을 만들었다. 이것을 화면CSS에 응용하면, 화면에만 안 보이는 <div class="noseeing"> 또는 <div class="blind"> 항목을 만들 수도 있다.

참고로 현재 왕미친세상에 적용된 인쇄CSS는 다음과 같다.

  1. /* 이 파일에 적용된 설정은 http://www.w3.org/StyleSheets/home-import.css 파일을 참조하여 만들었습니다. */
  2.  
  3. /* ****************** 프린트 CSS ****************** */
  4. /* 아래에 설정값이 없으면 기본값을 따르게 됩니다. */
  5.  
  6. /* 개요 스타일 설정 */
  7. h1, h2, h3,
  8. h4, h5, h6     { page-break-after: avoid; page-break-inside: avoid }
  9.  
  10. /* 인용 스타일 설정 */
  11. blockquote,
  12. pre     { page-break-inside: avoid }
  13.  
  14. /* 목록 스타일 설정 */
  15. ul, ol, dl     { page-break-before: avoid }
  16.  
  17. /* 링크 스타일 설정 */
  18. a     { font-weight: normal }
  19.  
  20. /* 그림 파일 스타일 설정 */
  21. img     { border: 0; }
  22.  
  23. /* 인쇄에서 제외할 부분 */
  24. script     { display:none } /* 본문 안에 보일 내용을 script 태그 처리했을 경우 주의 요망 */
  25. div script     { display:none } /* IE6 버그가 있음. div.noprint / div._ad 태그 설정이 되어도 인쇄에서 나타남.
  26.                            그러므로 div 태그와 script 태그를 중첩하여 최대한 정돈하게 만듦. */
  27. .noprint     { display:none } /* 말 그대로 인쇄 안함. */
  28. ._ad     { display:none } /* 구글 광고 등은 인쇄 안 함. IE6은 오류가 있어서 그대로 인쇄됨. */
  29. #paging     { display:none } /* 문서 하단의 #paging 아이디는 인쇄 안함 */
  30. #header     { display:none } /* 문서 상단의 #header 아이디는 인쇄 안함 */

일단 저런 식으로 만들 수 있다.

저것을 티스토리에 적용한 다음 출력하고 싶지 않은 부분을 <div class="noprint"></div>로 감싸서 화면에서는 보이지만, 인쇄에서는 보이지 않게 했다.

  • 참고 1 : 모든 경우에 적용할 수 있는 클래스 이름을 만들려고 한다면, <div class="displaynone"> 또는 <div class="nodisplay">를 추천한다. 이것은 화면CSS, 인쇄CSS, 음성CSS 등에서 같은 이름으로 쓸 수 있기 때문이다. 이 display:none와 비슷해서 나중에 적용할 값을 기억하기에도 좋다. 참고로 display:none은 사용자에게 "보여주지 않는다."라는 뜻이 아니다. 이것은 "사용자에게 내보내는 출력이 없다."라는 뜻이다.
  • 참고 2 : div script  { display:none } 설정과 div, script { display:none } 설정은 서로 다르다. 앞엣것은 div 태그와 script 태그가 중첩될 경우에 출력을 없게 하라는 뜻이고, 뒤엣것은 div 태그와 script 태그 각각에게 출력이 없게 하라는 뜻이다.

티스토리에 적용

처음 적용 : 실패 1

처음에는 티스토리 스킨 편집 화면을 열었다.

HTML/CSS 편집은 두 부분으로 나뉘는데, 위가 skin.html 파일이고, 아래가 style.css 파일이다. 여기에서 style.css를 편집하였다. 위의 화면은 화면을 최대한 줄인 화면이다. skin.html과 style.css을 클릭하면 편집 영역이 아래로 길어지게 된다.

style.css 파일 맨 아래에 다음과 같이 끼워넣었다.

  1. @media print {
    h1, h2, h3,
    h4, h5, h6     { page-break-after: avoid; page-break-inside: avoid }

    blockquote,
    pre     { page-break-inside: avoid }

    ul, ol, dl     { page-break-before: avoid }

    a     { font-weight: normal }

    img     { border: 0; }

    /* 인쇄에서 제외할 부분 */
    script     { display:none }
    div script     { display:none }
    .noprint     { display:none }
    ._ad     { display:none }
    #paging     { display:none }
    #header     { display:none }

    }

그러나 작동하지 않았다. 다른 부분은 추가 작업이 필요했지만, 최소한 #paging 아이디 선택자와 #header 아이디 선택자를 사용한 곳에서는 적용이 되어야 했기 때문이다. 다시 말해 화면 인쇄를 하면 화면에 나타나지 않아야 하는 #paging 아이디 선택자와 #header 아이디 선택자를 사용한 곳이 버젓히 드러나 있었다.

나는 내 실수를 알지 못해 한참을 헤매야 했다.

참고로 내가 참조한 http://www.w3.org/StyleSheets/home-import.css 파일은 http://www.w3.org/StyleSheets/home.css 파일에서 @import 를 이용하여 불러왔고, http://www.w3.org/StyleSheets/home.css 파일은 http://www.w3.org/ 페이지 헤더 태그에서 link 태그를 이용하여 불러왔다.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
  4. <head profile="http://www.w3.org/2000/08/w3c-synd/#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.   ... 생략 ...
  6.   <title>World Wide Web Consortium - Web Standards</title>
  7.   <link rel="meta" href="/Overview-about.rdf" />
  8.   <link rel="stylesheet" type="text/css" href="/StyleSheets/home.css" />
  9.   ... 생략 ...
  10. </head>

그런데 내가 쓰는, 그리고 이전에 썼던 티스토리 스킨의 헤더에서 공통적인 부분만 뽑아내면 다음과 같았다.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <link rel="alternate" type="application/rss+xml" title="왕미친놈의 왕미친세상" href="https://koc2000.tistory.com/rss" />
  6. <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
  7. <link rel="shortcut icon" href="https://salm.pe.kr/favicon.ico" />
  8. <title>왕미친놈의 왕미친세상 :: '벌레와 팁/팁' 카테고리의 글 목록 (2 Page)</title>
  9.  
  10. </head>

차이가 나는 부분은 빨간색으로 처리했다. 저 부분을 발견하지 못해서 헤매고 말았다.

다시 말해 내가 style.css 내용에 아무리 인쇄에 대한 내용을 넣어서 반응하지 않을 수밖에 없었다.

  1. @media print {
  2.     ... 인쇄 CSS 내용 ...
  3. }

위와 같은 설정은 처음부터 무시되었다는 뜻이다. 왜? 처음 읽어들일 때부터 화면(screen)에 맞게 읽어들였다는 뜻이고, 인쇄(print)음성(aural)은 무시한다는 뜻이다. 위에 빨간색으로 된 media="screen"은 그런 뜻이다.

실패 2

HTML/CSS 편집이 안 된다면 파일로 처리하자는 생각을 가지게 되었다. 이때 위의 화면에 있는 "파일 업로드" 탭이 눈에 들어왔다.

흠, 파일업로드를 클릭하여 파일을 찾아 올렸다. 여기에서도 또 실수를 하고 만다. 바로 print.css 파일이 올라간 곳을 확인하지 않아 버렸다. 아무튼 다음과 같이 입력했다.

  1. <link rel="alternate" type="application/rss+xml" title="왕미친놈의 왕미친세상" href="https://koc2000.tistory.com/rss" />
  2. <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
  3. <link rel="stylesheet" media="print" type="text/css" href="./print.css" />
  4. <link rel="shortcut icon" href="https://salm.pe.kr/favicon.ico" />

아무 생각 없이 당연히 style.css와 같은 경로에 있겠거니 생각하고, 써넣어 버린 무지막지한 실수였다.

당연히 실패!

그렇다면 파일은 어디에 있을까?

인쇄CSS 적용 성공

인쇄 CSS 파일을 찾아서 다시 파일업로드 탭을 쿡 눌러주었다. 스크롤바를 아래로 주~욱 내리자 보였다.

어라, preview.gif는 다른 파일과 달리 앞에 images/ 가 없었다. 물론 print.css도 다른 파일처럼 images/ 가 붙어 있었다. 결국 preview.gif 파일만 빼면 같은 디렉터리에 있다는 말이었다. 

다시 HTML/CSS 편집 탭으로 넘어가서, 아까 편집했던 부분을 적당히 고쳤다.

  1. <link rel="alternate" type="application/rss+xml" title="왕미친놈의 왕미친세상" href="https://koc2000.tistory.com/rss" />
  2. <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
  3. <link rel="stylesheet" media="print" type="text/css" href="./images/print.css" />
  4. <link rel="shortcut icon" href="https://salm.pe.kr/favicon.ico" />

위와 같이 고치자 드디어 작동했다.

좀 더 추가

아까 서버에 올린 인쇄CSS 파일에는 .noprint 및 ._ad 클래스에 대한 설정이 있었다. 이것은 곧 인쇄하지 않을 부분과 광고 부분을 <div></div>로 감쌀 수 있다는 뜻이다. 

또한 마지막으로 화면에는 안 보이지만 인쇄에서만 보일 부분도 설정하였다.

최종적으로 인쇄 CSS 적용 전과 적용 후의 화면 인쇄(일부)는 다음과 같다.  

  • 인쇄CSS 적용 전 인쇄 미리보기 화면 (전체 7쪽[각주:1]) : 삭제할 내용을 분홍색으로 표시하였다.[각주:2]

    • 처음 두 쪽은 쓸모 없는 내용이다. 아니 쓸모는 있지만, 인쇄에서는 굳이 필요하지 않다.
    • 3쪽 위의 내용은 "My 블로거 뉴스"이다. 역시 방문자에게는 필요하지 않은 내용이다. 가운데 있는 내용은 구글 광고라서 역시 인쇄에서는 필요하지 않다.
    • 6쪽에서 보이는 것은 위젯이다. 역시 인쇄에서는 필요하지 않다.
    • 7쪽은 티스토리 저작권 정보이다. 화면이 아닌 인쇄 결과는 티스토리 회사에서 만든 페이지 구성대로 되지 않으므로 인쇄할 필요가 없는 부분이다.
      CSS 적용 전 인쇄 미리보기

      CSS 적용 전 인쇄 미리보기

    • 인쇄 CSS 적용 후 화면 (전체 4쪽[각주:3]) : CSS 적용 전 화면과 비교하면, 헤더 부분이 모두 사라져서 앞부분이 아주 깔끔해졌다.[각주:4] 또한 화면에는 나타나지 않지만, 맨 마지막 쪽에 위젯이 사라지지 않고 남아 있다. 이 부분도 script 태그와 embed 태그의 영향으로 보인다.[각주:5]
      CSS 적용 후 인쇄 미리보기 (IE)

      CSS 적용 후 인쇄 미리보기 (IE)

      CSS 적용 후 인쇄 미리보기 1 (FF)

      CSS 적용 후 인쇄 미리보기 1 (FF)

      CSS 적용 후 인쇄 미리보기 2 (FF)

      CSS 적용 후 인쇄 미리보기 2 (FF)

위와 같이, 인터넷 익스플로러 6 환경에서는 구글 광고 및 위젯 사이에는 인쇄CSS 적용에서 약간의 문제가 있다.

적용 및 원리

티스토리에서는 게시글 부분이 따로 분리되어 있다. 그 점을 이용하여 인쇄할 때 나타날 부분만 골라낼 수 있다. 또한 내가 했던 것처럼 자세히 할 필요도 없다. 그저 본문만 남겨도 된다.

이때 몇 가지를 중시해야 한다. 우선 티스토리 HTML 파일은 들여쓰기가 되어 있다. 이때 같은 단계끼리 짝을 짓도록 노력하라. 화면에서 보이지 않게 할 부분을 찾아, 그것이 HTML 코드의 어느 부분인지를 알아내야 한다. 그 뒤에 알맞은 곳에 noprint 클래스를 삽입하여야 한다. 아래 그림에서는 <s_tb> 태그에 noprint 클래스를 삽입하였다.

가장 중요한 것은 본문을 잘 찾아야 한다는 점이다. 왜냐하면 본문은 반드시 인쇄할 때 종이에 출력되어야 하기 때문이다. 자세한 사항은 티스토리 스킨 제작 가이드에 나오는 스킨의 구조를 살펴보시기 바랍니다. 간단히 말한다면, 구글 광고가 없다면, <div class="article"> 태그를 찾아야 합니다. 구글 광고가 있다면 <div class="article">를 찾고, 그 뒤에 <div class="article_post"> 태그를 찾아야 합니다. 특히 <div class="article_post"> 부분은 티스토리 글쓰기에서 입력한 내용이 나타나는 부분입니다. 치환자가 바로 본문을 만들어 주는 부분입니다. 이때 article 클래스 및 article 클래스 모듬[각주:6]이 화면에서 "게시글"을 이루게 됩니다. 앞서 말한 "본문"은 그러한 의미입니다. 따라서 인쇄할 때도 이 article 클래스 모듬 부분이 주를 이루게 해야 합니다.

그 다음으로 중요한 것은 paging 아이디 선택자와 header 아이디 선택자를 찾아야 한다. 이 두 부분은 반드시 인쇄할 때 출력하지 않아야 하기 때문이다. header 부분은 방문객에게는 쓸모가 없는 부분이 많고, paging 부분은 저작권 정보에 해당하는데 화면 구성에서는 옳지만, 인쇄에서는 그 저작권 정보가 그다지 유용하지 않다. 그러므로 인쇄할 때는 나타나지 않게 해야 한다. 하지만 이 부분을 모두 인쇄에서 나타나지 않게 하려면 굳이 HTML에서 찾기보다 인쇄CSS 파일에 아래와 같이 처리하면 된다.

  1. #paging     { display:none }
  2. #header     { display:none }

나머지 부분은 스스로 잘 찾아서 잘 처리하기 바란다.

PDF 저장

원래 인쇄CSS에 관심을 가지게 된 까닭이 바로 웹페이지를 PDF로 저장해 주는 기능 때문이었다. 이것은 도아의 세상사는 이야기의 게시글 블로그에 PDF 저장 단추를 달자를 읽고 나서 생각했다. 자신의 홈페이지나 블로그에 PDF 단추를 다는 기능은 도아의 세상사는 이야기를 참고하기 바란다.

각설하고, 이 PDF 저장 단추도 인쇄CSS를 이용하기 때문에 자신의 홈페이지에 인쇄CSS를 적용해 두면 PDF 저장 기능에서 더 짧은 시간에 그 기능을 이용할 수 있다. PDF 저장 기능은 외국 사이트에 웹페이지 정보를 보내면, 그곳에서 PDF로 저장해서 자신의 컴퓨터로 내려받을 수 있게 해 주는 서비스이기 때문이다.

아래 다운로드는 왕미친세상에 달아둔 PDF 저장 단추를 클릭하여 만든 PDF 파일이다. 참고하기 바란다.

다운로드

다음과 같이 아이디 페이지를 PDF 파일로 변환하였다.

관련 문서

  • 도아 님의 블로그 도아의 세상사는 이야기 : 블로그에 PDF 저장 단추를 달자
  • Learn CSS : CSS 문법을 한국어로 번역해 놓은 사이트. 글자가 깨질 수도 있다. 문자셋을 한국어 (UTF-8) 또는 유니코드 (UTF-8)로 맞추면 해결된다.

이 글은 스프링노트에서 작성되었습니다.

  1. 참고로 파이어폭스는 전체 5쪽이었다. [본문으로]
  2. 인터넷 익스플로러 6은 CSS를 제대로 지원하지 못하고 있다. 이는 모질라 파이어폭스도 비슷하나, 인터넷 익스플로러에 비하면 매우 양호하다. 또한 인터넷 익스플로러 사용자가 많으므로 자료화면은 인터넷 익스플로러에서 따왔다. [본문으로]
  3. 참고로 파이어폭스는 80% 축소 인쇄로 전체 3쪽, 100% 인쇄로 전체 4쪽이었다. [본문으로]
  4. 파이어폭스에서는 아예 구글 광고가 사라져 있다(두 번째 그림) [본문으로]
  5. 파이어 폭스에서는 위젯 없이 공백으로 남아 있다. 이 부분에 대해 좀 더 연구가 필요하다. [본문으로]
  6. article 및 article_ 로 시작하는 클래스를 편의상 article 클래스 모듬이라고 하겠다. [본문으로]
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

팁텍

처음 올리는 팁이다. 그런데 처음부터 황당한 팁이다. 또한 전혀 효과가 없을 수도 있다. 왜? 압축이지만 압축이 아니기 때문이다. 다만 이 팁을 잘 쓰면 확실히 용량을 줄일 수 있다.

  • 참고 : 이 글에서 다루는 비주얼 스튜디오 익스프레스(Visual Studio Express)의 최신 버전은 Visual Studio 2008 Express 이며, 마이크로소프트 MSDN 홈페이지에서 무료로 구할 수 있다. 이 비주얼 스튜디오 익스프레스는 비주얼 스튜디오의 축약 버전이라서 기능에 제한이 있고, 상업용 프로그램 제작에도 제약을 가지고 있다. 하지만 당장 쓸 만한 프로그래밍 툴 및 프로그래밍 통합 환경(IDE)을 구할 수 없다면, 이것도 좋은 대안이 될 수 있다.

팁의 발견

오랜만에 비주얼 스튜디오 2005 익스프레스(Visual Studio 2005 Express)를 설치하려고 하드디스크에 잠들어 있던 iso 파일을 뒤졌다. 그런데 막상 이미지를 살펴보니 너무 중복 파일이 많았다. 일단 하위 폴더인 WCU를 옮겨 보니~ 아뿔싸! 먼저 설치하지 않는 한 옮기게 되면 설치 도중 오류가 발생한다. ㅡㅡ; 쳇!

이 경우 이미지 안에 있는 WCU 폴더에서 먼저 설치한 뒤에 본 프로그램을 설치하면 되지만, 폴더를 옮긴 뒤에 항상 기억할 수 있다는 보장이 없었다.

또한 비슷비슷한 이미지가 모두 다섯 개였다. VB.iso, VC.iso, VCS.iso, VJS.iso, VWD.iso. 참고로 비주얼 스튜디오 익스프레스는 무료이며. ^^a 이미지 파일 내부 경로의 구조는 위와 같다(이때 VB 폴더는 없지만, 압축을 풀었을 때는 저와 같이 된다.). 이때 WCU 폴더가 다른 이미지 파일에도 거의 똑같이 존재한다.

이때 생각난 것이 바로 마이크로소프트에서 배포하는 oscdimg 프로그램이다. 이 프로그램은 마이크로소프트에서 CD 이미지를 만들 수 있게 제공하는 프로그램이다. 최신 버전은 2.54로 알려져 있다. 주로 쓰이는 버전은 oscdimg의 바로 앞 버전인 CDIMAGE v2.47이다. CDIMAGE v2.47 다음 버전이 oscdimg인데, 기능이 많이 줄어들었다. 그러다가 2.54 버전에서는 CDIMAGE에서 지원하던 기능을 모두 지원하도록 바뀌었다.

설명서는 마이크로소프트 테크넷에서 구할 수 있으며,( http://technet.microsoft.com/ko-kr/library/cc749036.aspx ) oscdimg v2.54용이다.

프로그램 설명

oscdimg의 기본 사용법은 다음과 같다.

OSCDIMG [선택사항] 작업대상(원본) 만들파일

실제로 적용하면 다음과 같다.

OSCDIMG -L볼륨명 -H -M -X -O -N "작업대상(원본)" "만들파일.ISO"

사용자가 지정해야 하는 부분은 굵은 글씨로 하겠다.

처음부터 차례대로 설명하자면 다음과 같다. 선택사항 -L과 -X를 제외한 나머지는 반드시 지정해야 한다. -X는 반드시는 아니지만 대부분의 압축파일이 지원하고 있으므로 지정하는 편이 낫다.

  • -L : 볼륨 레이블을 지정합니다. l과 labelname 사이에 공백을 넣지 않습니다. 예: -lMYLABEL

  • -H : 숨김 속성을 가진 디렉터리와 파일을 포함합니다.

  • -M : 이미지의 최대 크기 제한을 무시합니다. 곧 이미지의 크기가 681,984,000바이트보다 크더라도 무시하고 진행합니다.

  • -X : 이미지의 AutoCRC 값을 계산하고 인코딩합니다.

  • -O : MD5 해시 알고리즘으로 파일을 비교해 중복 파일을 한 번만 인코딩하여 저장소를 최적화합니다.

  • -N : (도스의 8.3 이름보다) 긴 파일 이름을 사용합니다.

매개변수 가운데 원본폴더와 만들파일 이름은 만약에 대비하여 위와 같이 따옴표로 묶는 편이 낫다.

적용

이 팁을 생각하게 된 원인은 의외로 단순했다. 이 기술은 수많은 WOW CD에 담긴 파일을 처리하는 방법이다. 그것을 자주 보았지만, 전혀 느끼지 못했다.

그러다가 Visual.Studio.2005.Express.Edition.en.iso (651,726,848 바이트)라는 파일을 보게 되었다. 분명 한국어판에는 저런 CD를 지원하지 않는데, 영어판에는 지원이 되고 있었고, 어떤 이유에서인지 인터넷에 풀려 있었다. 물론 저기에 담긴 파일은 모두 무료 버전으로 비주얼 스튜디오 2005보다 기능의 제약이 많다. 내가 앞서 예를 든 .ISO 파일은 대부분 한글판으로 저렇게 전체를 묶은 CD 이미지를 구할 수 없었다.

아무튼 저런 CD가 나에게 있었으면 좋겠다고 생각하고, 압축을 풀었는데 용량이 2,369,667,072 바이트로 처음보다 3.5배로 늘어나 버렸다. 그것을 본 그때 "이 방법"도 저장 용량을 줄이는 좋은 방법이라는 생각이 머릿속을 스치고 지나갔다.

이 방법은 중복 파일이 많으면 많을수록 효과가 좋다. oscdimg 프로그램은 압축을 해 주는 프로그램이 아니라, 단순히 파일을 묶어서 CD 마스터링 이미지를 만들어주는 프로그램일 뿐이기 때문이다.

  • 참고 : 이때 이런 유틸을 패키징 유틸리티라고 부르는데, 도스와 윈도에서는 대부분의 압축 프로그램이 패키징 기능을 제공하고 있다. 그러나 유닉스 계열에서는 압축 프로그램과 패키징 프로그램이 따로 나뉜 경우가 많다. 대표적인 경우가 바로 tar, deb, rpm 등이다. 특히 tar는 압축 없이 파일을 그냥 묶어만 주는 특이한 프로그램으로, 초기 유닉스에서부터 현존하는 여러 유닉스와 리눅스 등에서도 널리 쓰이는 유틸리티이기도 하다. 유닉스에서는 강력한 파이프라인 기능을 바탕으로 패키징 기능과 압축 기능을 나누어서 사용할 수 있다. 그러나 도스에서는 파이프라인이 64킬로바이트 한계를 지녔기 때문에 파이프라인을 이용하여 크기가 큰 파일이나 파일 수가 많은 디렉터리를 다룰 수 없었다. 결국 압축 파일이 패키징 기능도 갖추어야만 했다. 이런 이유로 이 글에서는 패키징 기능도 압축이라고 설명하겠다.

압축 풀기

우선 Visual.Studio.2005.Express.Edition.en.iso 파일과 VB.iso, VC.iso, VCS.iso, VJS.iso, VWD.iso 파일들을 자신이 만든 임시 폴더에 압축을 풀어 놓자. 편의상 Visual.Studio.2005.Express.Edition.en.iso 파일의 압축을 풀어 VSEN 폴더에 집어넣고, VB.iso, VC.iso, VCS.iso, VJS.iso, VWD.iso 한글판 비주얼 스튜디오 익스프레스 파일들은 각각 파일 이름대로 VB, VC, VCS, VJS, VWD라고 폴더를 만들었다.

참고로 압축을 풀기 전의 용량은 다음과 같다.

  • VB.iso : 555,814,912 바이트
    VC.iso : 587,999,232 바이트
    VCS.iso : 552,095,744 바이트
    VJS.iso : 459,505,664 바이트
    VWD.iso : 562,378,752 바이트
  • 소계 : 2,717,794,304 바이트
  • Visual.Studio.2005.Express.Edition.en.iso : 651,726,848 바이트 (2,369,667,072 바이트 내장)

그렇게 압축을 풀었더니 다음과 같은 폴더 구성을 지니게 되었다.

 

위의 두 그림은 VSKO의 하위 폴더의 수가 2개 모자라서 아래로 내려오게 수정한 것을 제외하면 동일하다. 아, 대/소문자가 다르다고? 윈도에서는 파일 이름과 폴더 이름에서 대/소문자를 쓸 수 있지만, 겉보기로만 다를 뿐 윈도에서 다룰 때는 같다고 인식하므로 문제 없다. 위에는 나타나지 않았지만, VSEN 폴더에는 SQL2005EE.EXE (56,105,688바이트) 파일이 존재했다. 이것은 SQL2005 Express Edition 파일이다. 아무튼 SQL2005 익스프레스 에디션은 내가 가지고 있지 않았기 때문에 이것을 그대로 남기기로 했다. 그밖에 VSEN 폴더에는 익스프레스 에디션 전체 설치를 위한 설치 프로그램이 있었는데, 그것도 그대로 이용하기로 했다.

복사 작업

복사 작업 1

그 뒤 한글판 비주얼스튜디오의 파일을 VSEN 폴더에서 찾아 이름이 같은 폴더끼리 복사해 넣는다. 이때 같은 이름을 가진 파일은 무조건 덮어쓰기를 하였다. 이는 파일 날짜가 한글판이 좀 더 늦었고, 날짜가 늦다는 말은 무언가 기능 추가가 있었을 수도 있기 때문이다. 거기다가 한글판이나 영문판에만 있는 파일도 있는 등의 이유로 전체 용량이 늘어나서 2,786,927,907 바이트가 되었다.

복사 작업 2

그 뒤 WCU 및 그 하위 폴더의 용량과 파일을 비교해야 한다. 폴더 비교에는 WinMerge v2.10.4.0 Unicode 버전을 이용했다. 다만 이 파일 비교 작업은 수작업으로 할 필요 없이 oscdimg 프로그램에 -O 옵션을 주어 처리하면 된다. 이 작업을 굳이 하는 이유는 가끔 하위 버전이 섞이는 때가 있기 때문이다.

각 폴더의 용량은 다음과 같다.

  • VSKO\VB\wcu - 504,992,856 바이트
  • VSKO\VC\wcu - 504,992,856 바이트
  • VSKO\VCS\wcu - 504,992,856 바이트
  • VSKO\VJS\wcu - 410,896,792 바이트 (jsharpredistcore 폴더를 제외하면, 407,100,120 바이트)
  • VSKO\VWD\wcu - 504,992,856 바이트

위에서 VJS\wcu 폴더의 크기는 폴더의 수가 하나 더 많음에도 지나치게 작았다. 이는 dotNetFramework 폴더에 언어팩 파일이 없었고, 그밖에 몇몇 파일에서 차이가 났다. 더구나 MSDN의 축약 버전인 MSDNExpress 파일에서 차이가 심하게 났다.

  • VSKO\VB\wcu\MSDNExpress - 319,828,160 바이트
  • VSKO\VJS\wcu\MSDNExpress - 234,788,544 바이트

나머지 폴더도 확인해 보니 일부 파일 날짜가 다르기는 했다. 결국 VJS 폴더를 제외하면 모두 같은 파일이었다. 또한 VJS 폴더의 MSDNExpress 폴더는 영문판의 것과 같았다는 데에도 덮어쓰는 이유가 있었다.

이와 같은 결과를 바탕으로 VSKO\VB\wcu 폴더의 파일을 VSKO\VJS\wcu 폴더에 복사하여 덮어쓰기로 했다. 복사 전 용량은 2.59GB (2,786,927,907 바이트 )로 표시되었고, 복사 후 용량은 2.68GB (2,884,820,643 바이트)로 표시되었다.

주의 : 이 수작업 복사는 매우 위험하다. 이번 작업에서는 확실히 영문판과 한국어판의 차이를 알고 있었기 때문에 복사해 넣어도 무리가 없었다. 그러나 일반적으로 이렇게 작업하면 나중에 설치 작업이 제대로 이루어지지 않을 수도 있다. 그러므로 확실히 알지 못한다면 이 "복사 작업 2"는 하지 않기를 바란다.

압축 작업

그 뒤 명령줄에서 다음과 같이 입력하여 폴더를 ISO 파일로 바꾸었다. 이때 작업할 대상은 F:\Temp\VSKO 폴더이고, 만들 파일은 F:\Temp\VS2005EK.ISO 파일이다.

OSCDIMG -LVS2005KO -H -M -X -O -N "F:\Temp\VSKO" "F:\Temp\VS2005EK.ISO"

참고로 복사 작업 2를 하지 않고 작업하면 1.02GB (1,096,298,496 바이트)로 표시되며, 복사 작업 2를 하고 작업하면 783MB (821,385,216 바이트)로 표시되었다. 압축 전에는 복사 작업 2를 거쳤을 때 용량이 더 컸지만, 압축한 뒤에는 오히려 복사 작업 2를 거치면 더 용량이 적어진다. 이 압축이 동일한 파일만을 대상으로 삼아 처리하기 때문이다.

이 파일을 다시 압축하면 좀 더 용량을 줄일 수 있다. 그것은 여러분의 선택의 몫이다. 또한 UltraISO 프로그램 등을 이용하면 ISO 파일 자체를 압축한 형태로 지원해 준다(그때 확장자는 .isz로 바뀐다.).

원리

이러한 파일 처리 방식도 압축 기법일까? 당연히 압축 기법이다.

압축에 대한 컴퓨터 알고리듬을 배울 때 맨 처음에 등장하는 알고리듬이 바로 반복 길이 부호화(RLE, Run-length encoding) 알고리듬이다. 예를 들면 다음과 같다.

원문 : FFFFFFFFAAACCCCCCCUUBBBBKXXXXXXXXXDDDDD (39바이트)
압축문 : F8A3C7U2B4K1X9D5 (16바이트)

위와 같이 반복되는 문자의 길이를 수치화하여 전체 코드를 줄이는 방법이다. 곧 반복 되는 문자를 [문자 + 갯수]의 형태로 치환하여 전체 길이를 줄이려는 압축 방법이 반복 길이 부호화 방법의 핵심이다. 다만 간혹 오히려 길이가 늘기도 하는데, 위에서는 K의 경우가 그것에 해당한다.

그런데 oscdimg 파일이 시도하는 방법은 반복 길이 부호화 방법과 원리상 동일하나 그 구현이 조금 다르다. 반복 길이 부호화에서는 파일 내부를 대상으로 삼지만, oscdimg는 디렉터리(폴더) 내부를 내상으로 삼는다. 반복 길이 부호화에서는 파일 내부에서 같은 문자 또는 문자열을 발견하여 치환하지만, oscdimg는 디렉터리 내부에서 MD5 값이 같은 파일을 대상으로 삼는다. 이때 MD5 값은 파일이 같은지를 검증하는 방식 가운데 하나로서 그 값이 같으면 설령 파일 이름이나 만든 날짜가 다르더라도 그 내용이 같게 된다. 반대로 MD5 값이 다른 파일은 설령 파일 이름과 만든 날짜가 모두 같더라도 서로 다른 파일이다. (물론 그에 앞서 파일 크기가 같아야 한다.)

이러한 과정을 거치는 이유는 파일 내부에서는 같은 문자는 같은 비트의 배열로 나타나지만, 디렉터리에서는 파일 이름이나 파일 크기가 같음이 곧 파일 내용이 같다는 뜻은 아니라는 데에서 파일의 실제 내용이 같은지를 알아낼 방법으로써 MD5라는 방법을 사용하고 있다고 보면 된다.

아무튼 mscdimg의 방식은 파일은 그대로 두고 그 갯수를 세는 방식이 아니라, 나올 때마다 그 파일이 위치한 색인 위치를 기억시켜 처음 발견된 곳(또는 저장소에서 따로 지정된 곳)을 참조하게 만들고 있다. 반복 길이 부호화 방식이 중복되는 문자(또는 비트 배열)가 많을수록 압축률이 높아지듯이, 이 방식은 중복되는 파일이 많아지면 전체 용량이 줄어들게 된다.

이번 경우에는 VB, VC, VCS, VJS, VWD 폴더에 WCU 라는 하위 폴더가 거의 동일하게 존재했기 때문에 상당한 용량을 줄일 수 있었다. 또한 앞서 복사 작업 2를 거친 쪽이 압축 전 용량은 더 많았지만, 압축 후 용량은 저 적어진 까닭도 중복 파일이 더 많아졌기 때문이다.

다운로드

  • oscdimg 다운로드 : readme.txt 파일을 읽어보고 자신에게 맞는 프로그램을 쓰면 된다.
  • MD5 값 : 6a27dd39c64f8a8035d4d164c2f439a5
  • CRC32 값 : D57A0CE3

관련 문서

이 글은 스프링노트에서 작성되었습니다.

글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
(36)
버그 (81)
제안 (1)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

글 보관함