• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'분류 전체보기'에 해당되는 글 1246건

  • 2010.09.13 Mac Book 수령기.
  • 2010.09.10 (pjyoung 님 댓글 답변) ActiveX HTML에 박기. 4
  • 2010.09.09 여친님 Cyworld
  • 2010.09.08 Installer 구현 정보 정리 - 2
  • 2010.09.08 Installer 구현 정보 정리 1
  • 2010.09.04 8월 14일에 한 Extream Hour에서 말해주신 나의 첫인상 들.
  • 2010.08.12 아.. 진짜 인터파크 고객센터..
  • 2010.08.12 개인 출판에 대한 제언.

Mac Book 수령기.

잡글 2010. 9. 13. 20:51

사실 Mac Book을 사고는 싶었는데, 그 가격이나, 금전적인 타이밍이 계속 맞지 않아 미루고 있었다.

그러다가, 저번 주 금요일(2010-09-10 일경) 오전에 우연히 맥북 관련 검색을 했었고,
확인해보니 딱 100만원에 판매하는 것을 보게 되었다.
게다가 배송비 무료!
( http://itempage.auction.co.kr/detailview.aspx?itemNo=A543950391 )

설마 설마 하는 마음에 이런 저런 부분을 살펴보는데, 새 제품 같기는 했다.
하지만, 왜 100만원이라는? 리퍼가 아닐까?

의문 반, 호기심 반으로 지름신이 살콤시 내 머리에 앉아버렸다.
하지만 무턱 대고 지르기에는 무리.
일단, 결재가 가능한지, 여친님께 타진을 했다.
”맥북… 사도 돼? 애플에서 나온.. 그 허연 노트북. 아이폰 개발에 쓸.. .그.~”
하며, 오전에 출근하자 마자, 결재 타진.
물건에 대해서는 잘 모르겠지만, 일단 필요한 거면 사라는 긍정적 답변!

그래서 그 즉시 결재 진행!
차근 차근 결제관련 내용을 살펴보자, 추선선물 이벤트로 16개월 무이자 행사까지.
얼씨구나 하는 마음에 16개월 할부로 구매했다.

금요일 당일 날 퀵을 통해 전달 된다고 했는데, 애석하게도 그날은 회사 워크샵 일자.
아버지께 수락을 부탁드리고, 난 워크샵을 갔다. 그리고 여친님 남동생 결혼식까지
참석 한 뒤, 토요일 저녁 즈음에 그 물건을 만질 수 있었다.

맨 처음 받을때는 재활용 종이로 된 박스로 싸여 있었다. 일단 테이프를 끊고..
SANY0041
안을 살콤이… 그리고 4방향으로 잡고 있는 가이드를 들어내고 본체가 담긴 박스를 꺼냈다.
SANY0042
호호.. 비닐로 포장된 알맹이. 이 알맹이를 을매나 갖고 싶었는지.. 기쁜 마음에 비닐 걷어내고
박스를 열어보았다.
 SANY0044 SANY0045
뭔가 꽉차게 포장되어 있는데다, 스티로폼 재질의 쿠션들이 덕지 덕지.일단, 하나씩 열어본다.

SANY0046
꺼내자 본체가 스티로폼 비닐에 싸여 있고, CD와 메뉴얼이 담긴 얇은 박스. 그리고 아답타가 보였다.
거두 절미… 본체의 껍데기를 벗기고 알맹이를 까봤다.
SANY0047 
흐흠. 예전 ASUS Netbook을 구매한적이 있는데, (1008HA) 그것보다 더 매끄러운 재질!
SANY0048
알맹이를 까자, 이번엔 키보드와 LCD 사이를 보호하기 위한 스티로폼!
SANY0049
아답타를 연결하기 전. 아답터와 전원 케이블을 연결했다. 고무가 조금은 딱딱해서 일반 전선 말듯이하기 보다는 철사줄 매듯 돌돌 감기는게 더 자연스럽다. 게다가 아답터가 무슨 장난감 같이 생겨서 나름 이쁘장 했다.
SANY0050 
아답터 연결하고 첫 부팅. 가운데 사과그림.!
SANY0051
기타 메뉴얼과 설치용 DVD가 담겨 있었다. 아주 간단한 패키지 이지만,
나름 깔끔하게 구성되어 있는 제품이였다.

부팅한 뒤, 제일 먼저 한 것은 역시 XCode 설치.
Apple 계정 만들고 개발자 등록한 뒤, 설치를 해보았다.
예전에 해킨토시 할때는 이것 저것 걸리는게 많아 제대로 설치조차 안되던데,
역시.. 맥이니까 바로 설치되고 제대로 동작하는 것 같다.

일단 간단하게 사용해 보니까, 먼저 터치패트가 예술이였다.
상당히 널찍한데다가, 손가락 1개일때, 2개일때, 3개일때, 그리고 4개일때 액션을
나누어 자유롭게 쓸 수 있게 한 부분이나, 패드 자체가 클릭이 되어 나름 인상적이였다.
애들도 쉽게 적응할 수 있는 굉장히 직관적인 I/F 인 것 같다.

카메라가 달려 있어, 간단한 자기 사진정도는 등록할 수 있었다.
그리고 방열구가 LCD 아래쪽 흰지 안쪽으로 되어 있어, 좌측이나 우측에서 뜨거운 바람을
맞을 일은 없었다. 그래서 생각보다 인상적으로 사용하는데, 문제는 어느정도 열이 쌓이자,
전체적으로 뜨뜻해지는 것 같았다. 역시 무릎위에 얹어 놓고 쓰기에는 무리가 있어 보인다.

키보드는 전체적으로 보기에는 이쁘긴 한데, 생각보다 띄엄띄엄 놓여 있어,
IBM 호환기종을 쓰던 사람에게는 좀 낫설었다.
아, 그리고 한/영 전환의 개념이 Windows와는 달랐다. Windows에서는 자판 배열이 한글이면, 한글 자판 안에 한글/영어가 혼재되어 있어, 한/영키를 누르면 입력 언어를 언제든 바꿀 수 있었지만,
맥에서는 한글 키보드는 한글만, 영문 키보드는 영문만 입력한다.
그래서 한글을 칠때는 한글 키보드를, 영문을 칠때는 영문 키보드를 꺼내야 했다.
이거.. 생각보다 좀 불편하긴 했다.

뭐 UI가 이쁘던, 사용성이 어쨌던, 일단 IPhone App 개발이 1순위 목표이기 때문에,
현재로는 별 불만이 없다. 게다가 블리자드 게임이 돌아간다. ( 스타2, 와우 등등 ) ㅋ

아직은 개발 코드를 더 자세히 보지 않아 감은 안오지만, 나름 괜찮을 것 같다!

이런 깜짝 이벤트 ( 100만원에 팜! ) 언제 또 있을지 모르겠다. – 오늘 보니까, 이미 마감상태 -

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

(pjyoung 님 댓글 답변) ActiveX HTML에 박기.

기술자료/Web 2010. 9. 10. 10:19

댓글을 이용해서 pjyoung 님께서 질문을 남겨주셨는데요.( http://www.hind.pe.kr/805#comment6147213 )
내용을 읽어보다가, 잠시 대기라는 느낌이 들어 글을 남김니다.

지금 OBJECT 태그를 이용하시는 것까지는 맞는데요. CODEBASE 부분의 Tag 부분이 잘못된 것 같습니다.
CODEBASE라는 부분의 의미는 Object 태그가 들어간 페이지를 브라우저를 통해 띄울 때,
해당 ActiveX가 없을 때 어디서 받아가지고 오는 것인지 알려주는 부분입니다.

은행권 사이트를 예를 들어볼께요.(ActiveX 범벅이라 참 좋은 예제 같습니다 -_-;;; )
먼저 한번도 들어가본적이 없는 은행권 사이트에 접속을 합니다.
그 은행권에서 사용하는 보안용 ActiveX의 GUID가 33e6b301-a928-438d-b3b1-733bfc68ccdb 라고 하죠.
그 은행권 사이트에 접속하는 IE에서는 자신의 컴퓨터 안에 저 위의 GUID에 해당하는 ActiveX가 있는지 검색합니다.
당연히 있으면 띄우고 없으면 CODEBASE에 설정된 정보를 따라 들어가 다운로드 받고 설치합니다.
그 때 IE에서 보면 주소바 아래쪽에 노란색 바 같은게 뜨잖아요?
바로 그 행동을 한다고 사용자에게 알려주는 부분입니다.
그러나 여기서 잠시… 이 CODEBASE에 담기려면, 인증서가 배포 파일 안에 있어야 됩니다.
공인인증서 같은 것인데, 프로그램 배포용 공인인증서 입니다.
그거 안들어가면 IE에서 설치 못합니다.
(바이러스 따위로 인지해버린다는 거죠.)

아래의 링크를 보시면 알겠지만, 그 CODEBASE에 관련된 내용이 자세히 나와있습니다.

.http://digitalangelmaster.wordpress.com/2008/02/15/기존-activex-control-업그레이드/

 

그런데 위의 내용은 어떻게 보면 실험용이라기보다는 실전용의 의미에 가깝습니다.

만일 그냥 웹페이지에 띄우는 실험이나 자체적인 연습이라고 한다면 다르게 접근하시면 됩니다.
먼저 CODEBASE 부분을 삭제하시구요.
다음은 그 ActiveX를 띄우는 PC에 ActiveX를 강제적으로 설치하는 것입니다.

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm /codebase “xxxxxxxx/form.dll”

저 위의 명령이 바로 그 ActiveX를 강제적으로 설치하는 것입니다.
아예 미리 PC 안에 설치되어 있으면 IE 에서는 군말 없이 띄웁니다. 즉 위의 명령을 써서, 직접 PC에 인스톨을 하는 것입니다. 그러면 특별한 코드상의 문제만 없다면 화면에 뜰 것입니다.

한번 확인해보세요.
(제가 해보고 싶었지만, 지금 밀린일이 좀 많아서 테스트는 안해봤어요 -_- ;;;)

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

여친님 Cyworld

잡글 2010. 9. 9. 12:49

예전에 몇번 이야기를 할 때마다 가족간의 싸이 이야기가 많았다.
언니들 싸이라든가, 어머님의 싸이라든가..

나야, 원래 블로그를 운영하고 있었고, 지금은 tistory에 안착해서 잘 사용하고 있다보니,
그런 별도 개인 공간이 필요없어 거의 사용하지 않았다.
그래도 이번에 문득 떠오른 김에 여친님 싸이로 가봤다.

아.. 그런데 글씨…이런 부분이 보이네..

Capture 

어머.. "삼촌" 이라니..

그럼 여친님이 내 조카? ㅎㅎ

여튼 뭐 조금 황당하긴 했지만 일단 일촌 신청하고, 팬 등록을 했다.
오늘은 아마도 연차를 쓴듯. 메신저에 안보여서 일촌 허락 요청은 안했다.

모레 만나면 부탁해야징.

PS. 친구인 고 작가의 미니 홈피갔더니만.. 얼라. "사촌" 이네. ㅎㅎ

Capture2

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

Installer 구현 정보 정리 - 2

기술자료/개발도구 2010. 9. 8. 22:36

2. Visual Studio 2010 Deployment Project

Visual Studio 안에 배포 프로젝트를 만들 때 사용하는 도구가 있다. Visual Studio 2002 때 부터 이미 존재는 했었고, Windows Installer의 버전과 .NET 내 지원 여부에 따라 몇번의 개정은 있었지만, 2005 때 부터의 기능적인 변화는 크게 없다. 그래서 생각보다 제작하기는 쉽다.

문제는 커스터마이징 부분이 많다. 현재로는 이 커스터마이징에 대한 벽에 부딪혀 더 이상의 진행은 잘 안되고 있다. 지금까지 파악된 내용을 정리하도록 하겠다.
여기서는 현재 개발도구가 Visual Studio 2010이여서 Visual Studio 2010을 기준으로 설명할 예정이다.
그리고 영문판이다 - -;;;

1. 프로젝트 생성 및 배포 대상 구성.

프로젝트를 생성하는 방법은 간단한다.

메뉴에서 File -> New -> Project를 선택한다.

그러면 새로운 프로젝트의 유형을 묻는 창이 뜨는데, 왼편의 Tree 에서 Other Project Type -> Setup and Deployment -> Visual Studio Installer 를 선택한다.(만일 Install Sheild가 없다면 Setup and Deployment 에서 바로 보인다.

selectproject

프로젝트 종류 중에 Setup Project를 선택한다. 그리고 .NET Framework 종류를 2.0을 선택하도록 한다.
요즘 최소한 .NET Framework 2.0 정도는 설치되어 있으니 2.0으로 선택하는 것이 좋을 것이다. (4.0 같은 것을 설치하면 나중에 배포 할 때 .NET 4.0 배포 처리를 해야 한다.

그리고 프로젝트이름을 적절히 정하고, 프로젝트가 위치할 곳도 정하도록 한다. 그리고 OK를 누르도록 한다.

최초 생성되면 신규 솔루션 파일안에 이 배포 프로젝트만 달랑 있는데, 실제 배포할 프로그램이 있는 프로젝트를 연결하도록 한다. 여기서는 예제로 필자가 기존에 재미삼아 만든 프로젝트를 포함해보도록 한다.

solutiontree 
배포할 것은 바로 GetLottoNum 에서 만들어진 Exe 파일을 올리는 것으로 판단하면 될 것이다.

2. 배포될 파일 구성.

먼저 배포 프로젝트에서 오른쪽 버튼을 클릭한다.
그러면 나오는 컨텍스트 메뉴에서 View -> File System을 선택한다.
selectview_filesystem

그러면 중앙 화면에 배포 파일 위치들이 나오게 된다.
filesystem_view

팬이 두개가 나오는데 그 중 왼편이 일종의 Tree 같은 것이고, 오른편이 왼쪽에서 선택한 폴더의 내용을 보여주는 부분이다. 최초 기본값으로 만들어진 내용은 총 3가지의 폴더의 형태를 가지고 있다.
Application Folder에는 배포할 때 배포 위치에 저장될 파일목록을 기록하는 내용이다.
두번째의 User's Desktop은 바탕화면을 의미한다.
마지막의 User's Programs Menu는 시작을 눌러서 나오는 프로그램 메뉴를 의미한다.

즉 두번째와 세번째에 위치한 User's Desktop과 User's Program Menu에는 일종의 아이콘들을 넣는 곳이라고 보면 되고, 첫번째에 위치한 Application Folder가 바로 실제 응용 프로그램들이 담기는 위치를 의미한다.

일단 왼편 트리에서 Application Folder를 선택한다. 그리고 오른쪽 빈공간에서 오른쪽 버튼을 클릭하여,
Add -> Project Output.. 을 선택한다.
addproject001

그러면 다음화면과 같은 Project 내 추가할 그룹들을 선택하게 된다.

selectprojectgroups

먼저 Project 에서 추가시킬 프로젝트를 선택한다.

그리고 난 뒤 하단에 위치한 종류를 원하는 대로 선택한다.

  • Primary output : 프로젝트를 빌드하면 출력되는 최종 결과물. 보통 Exe 나 Dll 이된다.
  • Localized resource : 언어별로 만들어진 Resource Dll 들이 된다.
  • Debug Symbol : 만일 빌드하는 형태가 Debug인 경우 pdb 같은 디버그 관련 정보 파일들이 된다.
  • Content Files : 프로젝트내에서 프로젝트 파일들을 Source가 아닌 Content로 선택한 내용들을 복사해온다.
  • Soruce Files : 프로젝트에서 빌드하기 위해서 있는 Source 들을 복사해온다.
  • Documentation Files : 프로젝트 내에서 문서로 분류해놓은 파일들을 복사해온다.
  • XML Serialization Assembles : XML 시리얼라이즈로 구성된 XML 파일들을 복사해온다.

보통은 Primary output을 하지만, 간혹 content 나 Localized resource를 포함하는 경우가 있다. 또 기본값 설정을 위해 XML Serialize 구성이 되어 있다면 XML Serialize Assemblies를 포함해야 한다. 원하면 여러개를 선택하여 한꺼번에 넣을 수 있다. Ctrl 키를 눌러 다중 선택이 가능하다.

그리고 Debug/Release 별로 나누고 싶을 때는 Configuration 부분을 적절히 선택하면 된다.

여기서는 Primary output을 선택하도록 한다.

3. 바탕화면, 시작메뉴에 프로그램 바로가기 만들기.

아이콘으로 된 바로가기를 만드는 작업을 한다.

왼편 트리에서 User's Desktop 을 선택하고, 오른편에서 오른쪽 버튼을 클릭하여, Create New Shortcut을 선택한다.
그러면 아래와 같은 선택 창이 나오는데, 앞서 설정한 Application Folder 안에 있는 Primary output을 선택하도록 한다.
select_newshortcut

OK를 누르면 알아서 자동으로 바로가기가 추가된다.적당한 이름으로 변경해준다.

이번에는 User's Programs Menu 이다.

바탕화면은 바로 만들었지만, 시작 메뉴는 하위에 폴더를 먼저 만들도록 한다. 시작메뉴 바깥에 그냥 만드는 경우도 있지만, 대개의 경우에는 폴더를 구성해서 그 폴더 안에 바로가기가 들어 있다. 그러므로 가급적이면 다른 프로그램 처럼 구성하는 것이 좋다.

startmenu_examples

앞서 바탕화면에서 했던 작업과는 별도로 한가지 더 작업이 있는 것이다. 폴더를 만드는 것.
여기서는 Get Lotto Number 이라는 폴더를 만들고 그 안에 바로가기를 만든다. 폴더를 만드는 방법은 해당 위치에서 오른쪽 버튼을 눌러 Add -> Folder를 선택하면 된다.
새로 만들어진 폴더를 클릭하고 앞서 만든 바로가기 처럼 추가하면 된다.

createshortcutforstartmenu

그냥 이렇게 만들어진 바로가기는 이쁘지 않으니, 해당 바로가기를 선택한 뒤, Properties 창에서 Icon 부분을 클릭해 새로운 아이콘을 넣도록 한다. 넣는 방법은 Properties 중에서 Icon 부분을 클릭하면 드랍다운 창이 드는데 그 중 (Browse..) 를 선택한다 그러면 선택창이 나오는데, Application Folder를 선택하고, Add File을 선택한다.
그리고 적당한 ico 파일을 선택하면 자동으로 Application Folder로 들어간다. 새롭게 Application Folder에 들어간 icon 파일을 선택하고 OK를 클릭한다.

selectnewicon

4. Build

오른편에 위치한 솔루션 트리에서 Deployment 프로젝트를 선택하고 오른쪽 버튼을 클릭해 Build 혹은 Rebuild를 선택한다. 그러면 자동으로 빌드를 하고 해당 프로젝트 하위에 각 프로젝트 형태(Debug/Release) 형태로 폴더를 만들어 결과물을 만들어 낸다.

5. 선결 설치 내용 정의하기.

개발 환경에는 개발을 위해서 다양한 선결 조건이 먼저 구축되어 있다. 최소한 .NET 프로그램을 만들기 때문에, 당연히 이에 필요한 .NET Framework가 버젼별로 구성되어 있다. 하지만, 이 프로그램을 설치할 PC에서는 해당되는 구성요소가 없을 수 있다. 이를 위한 설정을 해야 한다.

이를 위해서는 Deployment Project에서 오른쪽 버튼을 클릭하여 Property에 들어간다.
deploymentproejctproperty

속성창 하단에 위치한 Prerequisites 버튼을 클릭하도록 한다.
그러면 각종 선결작업으로 사용될 패키지들이 보인다. 만일 원한하는 패키지가 없다면 MS 사이트에서 업데이트 받으면 된다. ( 중간에 보이는 Check Microsoft Update for more redistributable component 를 클릭해도 된다. )
prerequisite

만일 이 프로그램을 설치하는 사람들이 인터넷을 사용할 수 없다면 맨 아래쪽에 선택하는 것들 중에 중간을 선택하도록 한다. 그러면 배포 패키지 안에 설치본이 자동으로 들어간다. 예를 들면, .NET Framework 3.0 같은 경우 인터넷에서 다운받아서 설치하게 끔 되어 있은데, 2번째를 선택하면 이미 전체를 다운 받은 버전을 설치본에 넣어줘서 인터넷 접속없이도 설치가 가능하게 된다. (가급적 2번째를 선택하는게 설치 작업을 빠르게 끝낼 수 있다.)

위에 나열된 내용은 Microsoft SDK 라는 곳에 있는 버젼별 SDK 안에 Bootstrapper 의 Package 안의 내용을 보여준다. (아래 캡쳐 화면에 있는 주소줄 위치로 보시면 된다. )

bootstrappers

각 폴더 안에는 설치본들이 담겨 있으며, 자동으로 설치되는 설정이나, 버젼 체크 방법을 위한 도구들이 같이 담겨 있다. 이 패키지를 만드는 방법은 다음 사이트를 참고하도록 한다.

http://msdn.microsoft.com/en-us/library/ms165429.aspx (Creating Bootstrapper Packages )
http://msdn.microsoft.com/ko-kr/library/ms165429.aspx

6. 인스톨러 추가 기능 만들기.

사실 Visual Studio 안에서 이 설치 프로젝트를 수정하는 방법이 애매하다.
그래서 추가적인 기능을 덪붙이기는 쉽지는 않다.
대신 방법은 Exe 나 Dll 을 통해 처리하도록 할 수 있다.

여기서는 간단하게 DLL 프로젝트로 만들도록 한다.
현재 Deployment Project가 있는 솔루션에 Class Library 프로젝트를 하나 만든다.
installeraddon

References(참조)에서 .NET 중, System.Configuration.Install 을 추가하도록 한다.

그리고 현재 Main Class 에 System.Configuration.Install.Installer 클래스를 상속 받게 한다.

classinheritance

안에 다음과 같은 함수들을 추가한다. "override" 라는 키워드를 치면 인텔리센스를 통해 자동으로 대부분 나오게 된다.

  • Install
  • Uninstall
  • Commit
  • Rollback

꼭 만들필요는 없지만, 원하는 이벤트의 형태에 따라 만들면 된다.

  • OnBeforeInstall
  • OnAfterInstall
  • OnBeforeUninstall
  • OnAfterUninstall
  • OnBeforeCommit
  • OnAfterCommit
  • OnBeforeRollback
  • OnAfterRollback

각 실행지점에 대한 설명을 하고 싶지만, 애석하게도 명확히 구분이 안되서 필자역시 여기가 한계다.

일단 이런 DLL이 만들어지면, 다음에는 Deployment Project로 돌아가도록 한다.

이제 Application Folder에 위의 프로젝트의 결과물을 넣도록 한다.
View -> File System을 선택한 뒤, 위의 프로젝트의 Primary Outputs를 넣도록 한다.

이 예제대로면 아래와 같이 2개의 Primary output이 들어가 있을 것이다.

primaryouts2

그리고 View -> Custom Actions를 클릭하여 Custom Actions 창을 띄우도록 한다.
창이 떴으면 원하는 단계에서 오른쪽 버튼을 클릭하여 Add Custom Action.. 을 클릭한다.
(만일 모든 단계에 포함하고 싶으면 트리의 최상단에 있는 Custom Actions에서 하면 된다).

addcustomactions

그러면 선택화면이 뜨는데, 그 중 Application Folder 안에 있는 Primary output 중에 앞서 만든 Installer 를 선택한다.

selectinstallerprimaryoutput

등록이 성공하면 Install 아래에 한가지의 Action이 추가되었을 것이다. 이 Actions을 선택하고 속성창을 열도록 한다.

actionproperties 

여기서 반드시 확인해야 하는것이 바로 InstallerClass 부분이다. 반드시 이 부분이 True로 되어 있어야 한다.

그리고 이 사용자 정의 Installer에 정보를 별도로 제공하려면, CustomActionData를 사용해야 한다.
마치 파라미터를 통해 데이터를 주듯 주면 된다.
예를 들어 설치 폴더의 정보를 주려면,

/DestDir="[TARGETDIR]\"

이라는 값을 CustomActionData 속성으로 넣어야 한다.

만일 그 외의 값들을 추가적으로 주려면, 한칸 띄고 그 옆에 / 하여 계속 붙여서 보내주면 된다.

/내부이름=값

위의 형식을 기억하면 간단한 것이다. 여러개인 경우 /내부이름1=값  /내부이름2=값  /내부이름3=값 … 이런식으로 넣는다. 또 값안에 공백이 있는 경우에는 반드시 " " 를 통해 막아서 보내도록 한다.

위의 예제에서 보면 /DestDir="[TARGETDIR]\" 라고 했는데, 값 부분에서 맨 끝에 \ 가 들어가 있다.
정확히는 왜 이런지는 모르겠는데 안들어가면 오류가 난다. 아마도 내부 변수 ([TARGETDIR] 같은 것들)를 사용하면
오류가 발생하는 것 같다.

이렇게 전달되는 값을 프로그램안에서 쓰려면 아래와 같이 하면 된다.

destdir_paramtest

this.Context.Parameter 를 통해 값을 전달 받는 것이다.

이를 통해 인스톨러 내에서 사용되는 각종 값을 수신하는 것이다.(상태값, 입력값 등등)

7. Launch Condition.

각 구성요소의 실행 조건을 미리 만들어 놓는 곳이다.

View -> Launch Conditions 를 선택하면 나온다.

왼편 폴더가 보이는데 그 중 Search Target Machine이 바로 IF문을 만드는 부분이다.
종류는 총 세가지가 있다.

  • File Search
  • Registry Search
  • Windows Installer Search

각각 파일이 존재여부로, 레지스트리의 특정값이 존재여부로, 마지막으로 Windows Installer로 설치된 ID로 있는지 없는지를 판단하여 true/false로 결정되는 사항이다.

하위에 있는 Lauch condition인데, 여기서는 외부에서 실행될 내용을 연결할 때 사용되는 부분이다.

앞서 만든 Custom Action들 중에 특정 조건에 해당할 때만 실행되도록 만들려면, 먼저 Search Target Machine에서 해당 조건을 만들고, 이를 가지고 Lanch Condition을 만든다. 이를 Custom Acition 의 속성안에 설정한다.

 

 

사실 이 프로젝트를 이용하여 좀더 커스터마이징을 가해서 원하는 형태로 뽑아내고 싶었다.
이 Deployment Project는 Visual Studio로 만드는 모든 프로젝트 결과물을 가장 효율적으로 묶을 수 있기 때문에, 사용성은 우수하다. 하지만, 정말 원하는 기능을 추가하기 위해서는 제약점이 너무크다. 그나마 커스터마이즈 율이 제일 큰게 외부 모듈을 이용해 Action을 정의할 수 있는 부분인데, 그 마저도 애석하게도 한계점이 자주 보인다.

(아직 조사가 끝난 것은 아니지만, UI를 제어할 방법이 있는지를 명확히 모르겠다.)

시간이 허락되면 나중에 이 Installer에 대한 자세한 파악이 병행될 필요는 있어보인다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

Installer 구현 정보 정리

기술자료/개발도구 2010. 9. 8. 20:23

기존 Application이나 Patch등은 별다른 조건 없이 설치 진행이 되었기 때문에, 설치 프로그램의 기본값만으로도 충분하게 패키지화 했다. 하지만, 이번에는 본격적으로 End-User를 향한 제품을 패키지 하는 작업이기 때문에, 그렇게 단순하고 쉽게 패키징을 할 수 없었다.

물론 아래의 처리 방법들은 현재까지 패키징을 하면서 받았던 각종 정보와 설정 값들일 뿐, 원하는 형태로 성공적인 패키지 한 것은 아니다.

단순하게나마 패키지를 할 때 도움이 될 것 같아 기록에 남긴다.

1. NSIS ( Nullsoft Scriptable Install System )

Nullsoft에서 제작한 Installer System 프로그램. 100%에 가깝게 스크립트기반이며, 스크립트로 처리가 불가능한 경우 DLL 등을 이용하여 외부 모듈을 통해 플러그인의 개념처럼  추가할 수 있다. 하지만, 아직 그 부분까지는 접근조차 하지 못했으며, 특히 매 버전마다 변경점 마다 스크립트 수정 작업의 부하가 너무 커서 제작 중 도중에 포기하였다.하지만, 단순하고 직관적으로 패키지를 말때는 상당히 도움이 될 것 같다.

준비물.

  1. NSIS( Nullsoft Scriptable Install System) 컴파일러.
    제일 중요한 부분. 이 제품은 Open Source 라이센스를 따르며 무료로 배포되고 있다.
    http://nsis.sourceforge.net/Main_Page
    에서 Download 부분을 통해 다운 받을 수 있다.
  2. HM NIS Edit
    NSIS의 동작은 모두 Script를 컴파일 한 뒤, 나온 결과물로 동작한다. 즉 Script 파일과 실제 배포할 파일들만 있으면 간단하게 만들 수 있다. 진짜 “메모장” 하나 열고 그 안에서 Text 파일로 된 Script 파일을 구성한 뒤, 컴파일 하면 된다. 하지만, 이제 처음 NSIS를 돌려보시거나, NSIS 개념을 막 잡아가는 초보(필자도 포함)에게는 버겁기 그지 없다. 이를 그나마 많이 편하게 제공하는 UI가 바로 HM NIS Edit 프로그램.
    이 역시 무료이며, 불편함이 없지않아 있지만, 그 작은 불편을 뛰어 넘는 다양한 기능들이 NSIS를 조금은 더 쉽게 다가게 해준다.
    해당하는 프로그램은
    http://hmne.sourceforge.net/
    에서 볼 수 있으며, 다운로드 받아 설치하면 된다.

 

개념을 익히기 좋은 사이트들.

사실 NSIS 는 개념익히는데 상당히 어렵다. 물론 MSI 작성 방법보다는 조금은 더 직관적이고 단순하다. 그러나 작은 개념조차 익히기 어려운 건 사실이며, 대부분의 설명 사이트들은 영어로 되어 있다. 그래도 국내에서 NSIS로 삽질하시던 많은 프로그래머들이 있고 그들의 흔적을 잘만 찾아 댕겨도 의외의 많은 정보들을 얻을 수 있다.

  1. Kipple 사이트
    꿀뷰(HoneyView)라는 이미지 뷰어 프로그램으로 유명세를 타고 있던 분. 이 분이 만든 제품들의 패키지를 NSIS로 했으며, 그에 따라 다양한 기능등를 자체적으로 구성했다. 그래서 그 속에서 묻어 나오는 각종 팁들이나 예제들을 제공한다. 특히 예제로 담은 nsissample.zip 파일은 받드시 받고 그 안의 스크립트 내용을 잘 확인해보록 한다.
    http://www.kippler.com/doc/nsis/
  2. 게으른 엔지니어가 사는법 ~~~~ 사이트.
    NSIS 에는 몇가지 UI가 있는데, 과거 Winamp 시절에 사용한 classic 방법 부터 현재는 MUI2 라는 방식까지 여러가지가 존재한다. 필자의 경우 Windows Installer 3.1 UI랑 비슷하게 나오게 하는 MUI2를 주로 사용하는데 간혹 관련 예제들을 Google에서 찾으면 classic 시절에 짰던 방법으로 많이 나온다. 그래서 이래저래 방황을 많이 했는데, 아래의 사이트에서 많은 도움을 얻었다.
    http://www.cipher.pe.kr/tt/cipher/154?category=6
  3. 그 외..
    http://innara.springnote.com/pages/3828755
    http://jgh0721.tistory.com/category/프로그래밍/NSIS

 

구성 순서.

1. 기본 도구 설치 준비.

제일 먼저 NSIS 컴파일러와 HS NIS Edit를 설치한다.
이 두가지는 반드시 설치해서 진행하도록 한다.

2. 작업 폴더 준비.

인스톨러를 준비하기 위한 적절한 폴더를 하나 마련한다.
보통 이 폴더에 배포하기 위해 필요한 내용도 적절하게 보관하여 정리하도록 한다.
실행에 필요한 각종 내용들 (.NET 기준으로 bin\Debug 혹은 bin\Release 같은 폴더)을 담은 폴더와,
기타 부가적으로 필요한 내용들 ( 인스톨러 커스터마이징을 위한 이미지나 아이콘 등)을 담은 폴더,
그리고 별도로 복사할 때 사용되는 잡스러운 내용을 담은 폴더를 나누어 정리한다.

folderlists

3. 설정 파일 생성 혹은 템플릿 이용.

HM NIS Edit에서 새로 만들기를 하면, 마법사를 이용하여 기본적인 NSIS용 설정파일을 하나 만들어준다. 하지만, 이 방법으로 만들게 되면 결과물이 거의 완전 영어판으로 나오기 때문에,영어 알레르기가 있으신 분은 무척 애매해지는 경우가 발생할 수 있다.
이 경우에는 앞서 언급한 Kipple 님의 홈페이지에서 NSIS 예제를 다운로드 받는 것이다.
그 파일을 그대로 활용해도 된다.  물론 바로 받아와서 사용하려고 하면 컴파일할 때 오류가 발생하는데,
NSIS를 Kipple님이 수정한 버전으로 교체하거나, 아니면 설정 파일에서 오류나는 부분을 주석 처리해도 된다.
여기서는 Kipple님의 설정파일을 기준으로 설명한다.

4. 설치 파일 설정하기.

My_CopyFile 라는 함수를 찾는다. Ctrl + F를 눌러 저 Text로 찾으면 된다.
다른 부분은 그대로 두면 되고, SeachOutPath와 File 이라는 명령어가 있는 부분을 대거 수정한다.

filelist1

설치 결과물를 잘 고민하도록 하자. 만일 아래와 같은 형태로 구성하고 싶은 경우라고 가정을 하자.
filelist2

Program Files 밑에 Easy Connect 라면, 일단 그 부분은 그대로 두고,
그 폴더 안에 복사될 파일들을 File 이라는 명령을 사용해 넣도록 하자.
지금 설치될 파일은 모두 Binaries 폴더에 있으니 그 경로의 파일들을 나열하면 된다.

File ".\Binary\bin\Debug\\DevExpress.XtraTreeList.v10.1.xml"
File ".\Binary\bin\Debug\\DevExpress.XtraTreeList.v10.1.dll"
File ".\Binary\bin\Debug\DevExpress.XtraRichEdit.v10.1.xml"
File ".\Binary\bin\Debug\DevExpress.XtraRichEdit.v10.1.dll"
File ".\Binary\bin\Debug\DevExpress.XtraPivotGrid.v10.1.xml"
…………

자 다음은 Cur 부분. 일단 File 이 쭉 나열된 목록들 맨 끝에 다음과 같은 줄을 넣는다.

SetOutPath "$INSTDIR\Cur"

그리고 Cur 폴더에 들어갈 파일들을 위의 FILE 처럼 쭉 아래로 나열한다.

원리는 간단하다 SetOutPath 라는 것을 이용해 폴더를 구축한다. 여기서 시작점이 바로 "$INSTDIR"이 된다.
그 하위에는 당연히 \ 가 붙고 그 하위에 폴더를 만들면 된다.

5. 조건 별로 설치되어야 할 파일 설정.

지금 배포할 응용 프로그램은 .NET Framework 2.0 을 기반으로 구성되어 있다.
그러므로 반드시 미리 .NET Framework 2.0이 설치되어 있어야 하는데, 이를 체크한 뒤에 해당하는 프로그램이 설치되어 있지 않으면 설치해야 할 것이다.
아래의 코드로직을 설명하기 전에, 찾는 방법을 간단하게 설명하면 아래와 같다.

  1. 레지스트리에서 HKey_Local_Machine\SOFTWARE\Microsoft\.NETFramework 부분의 키를 따라들어간다.
  2. 키 안에 값들 중 InstallRoot 라는 항목을 열어 본다.
  3. 그 안의 값에 맨 뒤에 .NET 버전을 붙여본다.
    보통 .NET 2.0 이 설치되어 있다면 "C:\Windows\Microsoft.NET\Framework\2.0.50727" 라는 폴더가 있고, 그 안에 파일들이 있다.
  4. 위의 경로에 파일이 있는지 확인한다.

위의 단계에서 1 부분에서 오류가 있다면, 즉 레지스트리에 값이 없다면 .NET Framework가 설치되어 있지 않다는 의미. 그러므로 .NET Framework 2.0 을 그냥 설치하면 된다. 만일 이 부분이 있다면 .NET Framework 가 설치된 폴더에 파일들이 있는지 확인한다. ( Windows 설치 폴더가 생뚱 맞은데일 수도 있다. - E:\Windows 등등 ). 만일 파일들이 없다면 다른 .NET Framework 는 설치되어 있지만, 2.0은 설치되어 있지 않다는 것이다.

이런 로직으로 찾아보도록 한다.

제일 먼저 .NET Framework 가 설치되어 있는지 아닌지 여부를 저장하기 위한 전역 변수를 하나 설정한다.

Var IsHadNetFramework20

이 변수에 "t"가 들어 있으면 설치되어 있는것이고, 비어 있으면 설치되지 않은 것으로 정한다.

그리고 난 뒤, 체크하는 로직을 위한 Function을 만든다.

Function CheckAlreayInstalledSolutions

    ; .NET Framework 2.0 설치 여부 체크
   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\.NETFramework" "InstallRoot"
   StrCpy $IsHadNetFramework20 ""
   StrCmp $R0 "" notFound foundIt

   foundIt:
           IfFileExists "$R0\v2.0.50727\*.*" VersionFound notFound
   VersionFound :
           StrCpy $IsHadNetFramework20 "t"
   notFound:


FunctionEnd

함수는 Function {이름} 으로 시작해서 FunctionEnd 로 끝난다.
그 안에 필요한 로직을 넣으면 된다.

일단 한 줄 씩 끄집어 보도록 하자. 

함수의 맨처음 줄은 ";" 가 맨 앞에 붙어 있는데, 주석이다. "#" 을 써도 된다.

ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\.NETFramework" "InstallRoot"

ReadRegStr은 특정 레지스트리 에서 값을 가져오는 것이다.
HKLM은 HKey Local Manchine을 기준으로 "SOFTWARE\Microsoft\.NETFramework" 에서 "InstallRoot" 라는 곳에서 문자열을 읽어온다. 이렇게 읽어온 문자열은 $R0 이라는 임시변수에 저장한다는 것이다.

StrCpy $IsHadNetFramework20 ""

별다른 의미는 없고 전역 변수로 설정한 변수를 초기화 하는 것이다. 그를 위해서 StrCpy라는 명령을 썼는데, 다른게 아니고 바로 문자열 복사같은 것이다. "" 를 복사했으니 완전 빈 변수가 되었다고 보면 된다.

StrCmp $R0 "" notFound foundIt

이 부분 부터 암호화의 느낌을 받은 문장. 다른 의미는 아니고 $R0 과 "" 를 비교한다는 것이다.
그 결과에 따라서 만일 같으면 notFound로 같지 않으면 foundIt 으로 이동한다는 의미.
굳이 Basic 스타일로 번역하면..

if $R0 == "" 
Then 
  Goto notFound
Else
  Goto foundIt

이 NSIS의 스크립트에는 IF라는 개념이 없는데 그와 유사한 로직으로 사용하는 것이 바로 이 StrCmp.
이 것을 활용하는 것으로 보면 된다.

foundIt:

암호화에 일조하는 부분인데, 바로 라벨이다. 즉 goto 해서 이동할 라벨을 의미하는 것.

   IfFileExists "$R0\v2.0.50727\*.*" VersionFound notFound

왠지 IF 스러운 내용인데, 이 If 는 여러가지로 활용가능한 If 가 아니라, 오로지 파일이 있는지 여부를 확인하기 위한 로직이다. .NET 2.0 파일들이 있는지 확인한다. 만일 파일들이 있다면 VerisonFound로 goto 하고 없다면 notFound 로 goto 한다.

위의 로직에서는 Check 하는 것이므로, 이젠 설치하는 로직을 만들도록 하자.

Function InstallNETFramework20

; .NET Framework 2.0이 설치되어 있지 않으면 설치
   StrCmp $IsHadNetFramework20 "t" DoInstllDotNet PassInstall
   DoInstllDotNet:
       DetailPrint "Install .NET Framework 2.0"
       ExecWait '".\AddonPackage\installdotnet.cmd"' $1
       SetRebootFlag true
       Sleep 20000
    PassInstall:

FunctionEnd

위에서 언급안된 부분을 설명하도록 한다.
DoInstallDotNet 이라는 라벨이 있는 부분을 보도록 한다.

DetailPrint "Install .NET Framework 2.0"

다른 의미는 없고 인스톨 설명 줄에 "Install .NET Framework 2.0"를 출력하는 것 뿐이다. 설치 화면 중에 지금 무엇이 설치되고 있는지 설명을 출력되는 창에 보이는 문구라고 보면 된다.

ExecWait '".\AddonPackage\installdotnet.cmd"' $1

이 부분이 중요한데, '".\AddonPackage\installdotnet.cmd"' 라는 문자을 Shell을 써서 실행한다는 의미이다. 단 실행은 하는데, 단지 실행이 완전히 종료될 때까지 대기를 하겠다는 의미이다. 그리고 최종적으로 실행 결과를 $1에 출력하겠다는 것이다. 기다릴 필요가 없는 경우에는 Exec 를 쓰면 된다.

SetRebootFlag true

일종의 옵션인데, 설치 후 맨 마지막에 Reboot 하겠다는 의미이다. 종종 설치 프로그램에서도 특정 프로그램을 설치한 뒤 자동으로 재시작하는 경우를 많이 보는데, 바로 그럴 때 사용하는 옵션이다. 만일 .NET을 설치하지 않는 경우에는 Reboot를 할 필요가 없으니, 설치할 때만 이 옵션을 true로 설정하는 것이다.

Sleep 20000

설치 중에 다른 프로그램을 설치하게 되면 HDD의 Access Time이라는 것이 있어서, 약간의 대기가 필요할 수 있다.
여기서는 20초 정도로 설정했다. 1/1000 초이므로 1000이 1초. 즉 20초 대기라는 의미.

 

일단 설치되어 있는지 여부를 체크하는 함수와 그 체크한 결과 값을 기준으로 설치하는 로직을 담은 함수를 제작했다.
이제 이 함수를 호출하는 로직을 넣어보도록 한다.

먼저 체크.

설치하기 전에 맨 처음 부분에서 실행한다.
윈도우의 EventHandler 같은 기능들을 제공하는데, 그 중 인스톨러 시작할 때 걸리는 함수는 이것이다.

Function .onInit
     ………
FunctionEnd

저 함수 안에 다음과 같음 문장을 넣는다.

Call CheckAlreayInstalledSolutions

 

이제 마지막으로 남은 것은 설치하는 함수.
설치할 때 넣어주거나, 아예 시작할 때 넣어도 된다. 여기서는 설치할 때 넣을 수 있도록,
앞서 보여준 My_CopyFile  라는 함수 안에다가 다음과 같은 문장을 넣는다.

Call InstallNETFramework20

 

6.사용자 정의 화면 넣기.

사용자 정의 페이지를 넣으려면 MUI2 에서 제공하는 페이지 적용하는 방법부터 확인해야 한다.

pages

대략 보면 알겠지만, "!insertmacro" 라는 키워드를 이용해 MUI_PAGE_ 로 시작하는 페이지들을 나열한다.
바로 원하는 페이지를 넣는 방법이다. 이 방법은 MUI2 에서 만들어진 화면을 끼워넣는 것으로써,
저 넣는 순서를 바꾸면 실제 나오는 화면이 순서도 바뀌게 된다. 그리고 뒤쪽에 MUI_UPAGE는 언인스톨 할 때 보여주는 페이지들이다.

사용자 정의 화면을 만드는 방법은 다음과 같다.

  1. UI를 표시하는 ini 파일을 생성한다.
    물론 텍스트 파일 편집기로 ini 파일을 만들어도 되지만, HM NIS Edit 도구를 써서 만들도록 한다.
    만드는 방법은 파일(F) -> 인스톨 옵션 파일 만들기 를 선택한다. 그러면 다음과 같은 UI 도구가 나오는데,
    원하는 형태의 UI를 구성한다.
    custompage1
    적당한 UI를 넣고 설정을 한 뒤, 저장하면 ini 파일이 만들어진다.
  2. 만들어진 ini 파일을  스크립트 파일 내에서 등록해줘야 한다.
    먼저 스크립트 소스의 상단에 다음과 같은 줄을 포함한다.

    ReserveFile ".\qlmscr.ini"

  3. .onInit 함수 - 초기화 함수 - 에 다음과 같은 줄을 넣는다.

    !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\qlmscr.ini" "qlmscr.ini"

    ini 파일의 내용을 미리 분석해서 이름을 정해 놓는 것이다. 즉 .\qlmscr.ini 라는 의미는 스크립트가 담긴 폴더위치의 qlmscr.ini를 분석한 뒤 이제 이름을 "qlmscr.ini" 로 하겠다는 것이다. 이제 이 화면에 대한 아이디는 바로 "qlmscr.ini" 가 되는 것이다.

    사실 ini 파일은 NSIS 가 설치된 폴더 아래에 있는 Plugin에 복사해서 사용하는게 일반적인 것 같다.
    하지만, ini 파일을 영구히 다른데서 쓸 예정이 아니라면, 스크립트 파일이 있는 위치에 ini 파일을 위치시켜 놓고, 위와 같은 줄을 포함해 놓으면 좋다.
  4. 위 쪽에 페이지 순서를 넣는 부분 처럼 Page custom 부분을 만들어 넣는다.
    여기서 Page custom을 만들 때 뒷부분에 다음과 같은 항목들이 들어가야 된다.
    Page custom {페이지생성용 함수} {페이지내 입력값 확인용 함수}

    예를 들면 이렇게 넣는다.

    Page custom CreateCheckUserInfo ValidateCheckUserInfo

    위와 같이 만들었으면 CreateCheckUserInfo 라는 함수와 ValidateCheckUserInfo 라는 함수도 덩달아 만든다.
  5. 생성용 함수로 들어가 다음과 같은 줄을 포함시킨다.

    !insertmacro MUI_HEADER_TEXT 'User Information' 'Input your information and serial key for authorizing this application'
    !insertmacro INSTALLOPTIONS_DISPLAY "qlmscr.ini"

    MUI_HEADER_TEXT 라는 것을 !insertmacro 해서 넣었는데, 이 부분이 현재 사용자 정의로 만든 창의 제목줄과 설명 줄 내용을 넣는 부분이다. 적당한 제목과 설명을 넣으면 된다.

    다음에 있는 INSTALLOPTIONS_DISPLY "qlmscr.ini" 부분은 qlmscr.ini 라고 정의된 사용자 정의 화면을 띄우는 작업이다. qlmscr.ini 는 앞서 .onInit 함수 안에서 설정한 그 이름이다. 즉 화면 아이디 같은 것. 즉 저 화면을 띄우겠다는 의미가 되는 것이다.

    만일 화면 안의 특정 요소들에서 값을 빼와야 되는 경우가 있다. 예를 들어 문자열을 입력받을 때 사용되는 텍스트 박스 같은 것이 있다면, 그 ID와 변수를 연결한다. 이 때 사용되는 문구가 다음과 같은 것이다.

    !insertmacro INSTALLOPTIONS_WRITE "qlmscr.ini" "Field 1" "State" "$UserName"

    번역하자면, "qlmscr.ini" 화면에 있는 "Field 1" 라는 컨트롤에서 속성 값 중, "State" 부분의 속성값을 $UserName 이라는 변수에 넣는다는 것이다. 이 때 주의할 점은 모든 값들 정보에 " " 가 들어간다.

    예를 들면 아래와 같은 모습이 되는 것이다.
    !insertmacro INSTALLOPTIONS_WRITE "qlmscr.ini" "Field 1" "State" "$UserName"
    !insertmacro INSTALLOPTIONS_WRITE "qlmscr.ini" "Field 2" "State" "$UserCompany"

 

일단 NSIS 로 인스톨러를 구성하면서 막혔던 부분에 대한 설명을 모두 담은 것 같다.
아직은 이 NSIS 라는 도구에 대한 학습이 부족하고, 더욱이 버젼별로 나누어 만드는 방법을 자동화 하는 방법을 아직 못찾고 있어서 현재로는 더 이상의 파악은 어려운 상태이다.

나중에 시간적인 여유가 되면 이 NSIS 라는 부분을 체크하고 인스톨러 답게 만들려고 한다.

여기까지 정리.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

8월 14일에 한 Extream Hour에서 말해주신 나의 첫인상 들.

잡글 2010. 9. 4. 19:09

2그룹으로 나누어 8분 정도가 나에 대한 첫인상에 대해, 그것도 긍정적인 부분에 대해서만 언급한 내용이다.

말씀해주신 각종 첫인상들을 듣고 있으면 나름 즐겁고, 내가 몰랐던 다른 모습을 돌아보게 되었다. Agree 하는 부분도 그렇지 않은 부분도 있지만, 그렇지 않더라도, 그 부분에 대해서 다시 생각하면서 스스로를 고칠 수 있는 또 다른 계기가 된것도 사실이다.

같은 조에세 나왔던 내용들을 내 나름대로 메모를 했고, 그 메모한 내용은 아래와 같다.

  1. 같이 있으면서 대화를 하면 재미있게 해줄 것 같다.
  2. 업무를 맡게 되면 고집스럽게 진행할 것 같다.
  3. 고민 상담 같은 것을 잘 받아 줄 것 같다.
  4. 의외로 식도락을 즐길 것 같다.
  5. 리더쉽이 있어 사람들을 이끌 것 같다.
  6. 프로그래밍에 소질이 있을 것 같다.
  7. 털털하게 넉살 좋게 생활할 것 같다.
  8. 요리를 잘할 것 같다.
  9. 유머감각이 있을 것 같다.
  10. 상당히 사소한 것으로도 잘 웃을 것 같다.
  11. 특정 취미에 매니악(오타쿠)의 성향이 있을 것 같다.
  12. 새로운 환경에 적응을 잘 할 것 같다.
  13. 낙천적으로 생각하며, 긍정적으로 바라볼 것 같다.

나와 이런 저런 관계를 맺고 나름 관찰하신 분들이나, 나 스스로를 바라볼때, 대략 절반정도, 내 성향을 나타낸 것 같다. 그리고 일본 사람처럼 오모테(겉모습),혼네(속마음)이 다르기 때문에, 오모테 부분을 이야기하는 부분도 없지 않다. 하지만, 그런 부분도 나의 장점처럼 받아들이면서 미처 그렇지 않은 부분도 수정하여 최대한 위에서 언급된 장점들을 스스로의 장점으로 만드는 것도 나쁠 것 같지는 않다.

이번 Extream Hour에서 건진 나름대로의 성과라고나 할까?

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

아.. 진짜 인터파크 고객센터..

잡글 2010. 8. 12. 14:22

오늘 비스킷 관련 건의 3건과 아이디어 1건 전달하고 난 뒤..
아일랜드 4권 문제로 1:1 문의 사항을 올렸는데..그 답변

내가 위에 내용을 대략 화가 난 상태여서… 제대로 안 쓴 점이 있긴 하지만…
인터파크 도서 관련 1:1 할 때, 카테고리와 구입한 책의 종류를 선택하는 창이 아래 처럼 나타나게 된다.

즉, 고객이 어떤 것을 선택해서 입력을 하던 말던, 고객센터에서는 저런 카테고리 따윈 보지도 확인하지도 않는다는 답변. 즉 고객이 무엇을 선택하든 다 씹고 들어간다는 말.
즉 카테고리는 그냥 아무거나 선택하고 대충 말로 잘 쓰란 말이라는 것이다.

그럼 왜 저런 복잡한 프로세스를 만든 것인지.. 그 의도가 너무 불량해 보인다.
왜냐면 2Step에 있는 조회버튼을 한번이라도 클릭하지 않으면, 입력 조차 안된다.
진짜.. 답답한 짓거리.

또 무슨 답변이 쳐 나올지 모르겠다.일단 다음과 같이 더 써서 보내버렸다.

지금 비스킷을 통해서 구입한 아일랜드 4권이라는 책 문제라구요.
아니 그러면 위의 주문 상품명은 왜 입력하게 하는지요?
그리고 구체적으로 몇페이지의 무엇이 문제가 있는지 일일히 말해줘야 하나요?
그럼 내가 종이책을 다시 사서 봐서 일일히 비교해보시라는 말인가요?
무슨 답변이 그 모양입니까?
문제가 있다면 문제가 있는지 아닌지 체크는 안해보고,
자세한 내용이 없어서라뇨?
나.. 원.. 이러니까.. 지금까지 E-Book 파일 오류 수정이 제대로 안되는 거였군요.
하하.. 어이가 없네.

 

뭐라 답변을 할지 심히 궁금할 따름이다!

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

개인 출판에 대한 제언.

잡글 2010. 8. 12. 13:54

예전에도 비슷한 글을 쓴 적이 있습니다만.. 뭐 그건 미래를 이렇게 했으면 좋겠다는 그냥 단순한 소원이였고..
좀 구체적인 형태로 제시하고 싶은 아이디어 같은 것입니다.

사실 개인 출판하는 컨텐츠는 출판사에서 직접  제시하는 컨텐츠와는 다른게 사실입니다.
개인이 자신의 글에 대해 알리는 작업은 그렇게 쉽지가 않죠. 출판사 내에서는 자체적인 홍보팀이 있어,
각 서점에 마케팅이나, 신문 등의 광고들을 하게 되고, 작가와 책 관련 기자들과의 연계등등을 수행하지만,
개인이 위와 같이 한다는 건 사실 무리라고 봅니다.

그래서 인터넷이라는 문화를 통해 무료에 가까운 게시판을 통해 게시를 하고, 그 글을 소비하게 하고,
네임 벨류를 높이는데 그치고 있죠. 즉 무료로 보여줄테니, 평가해보고, 가치가 있으면,
나(해당 글의 필자)를 알아봐주고, 나중에 나오는 책들도 소비해달라.. 라는 것입니다.
하지만, 위의 문제는 결국 컨텐츠의 무료화라는 비상식적인 고정관념만 세우게 되고,
결국 양질의 컨텐츠 생산을 하기 위한 최소한의 벌이 조차 되지 않고 있는게 현실입니다.
이제 겨우 소설가로써의 첫발을 딛는 사람들이야, 벌이보다 네임 벨류 높이기에 여념이 없어,
위와 같은 내용에 대해서 스스로 감수하고 있다고는 하지만, 정작 자신의 위치가 잡혔을때는
자신의 책들이 모두 인터넷을 통해 공유되고 있어, 최소한의 밥벌이 조차 어려운게 사실입니다.
그러니 재미있는 이야기를 가진 사람도 결국 입을 닫고 마는 시대가 되버리고 마는 것이죠.
그래서 이런 E-Book을 통한 개인 출판업이 발달되기를 간절히 빌고 있죠.

그런데, 소비자의 입장으로 돌아가보죠.
소비자들은 일단 컨텐츠의 사정은 이차 문제입니다. 소비해야 될 컨텐츠를 돈 주고 사보게 되는데,
그 금전적인 부담은 당연히 소비가가 안고 가는 숙제가 되게 되죠.
책 소비량이 광적인 레벨이거나, 신 귀족 레벨의 경제사정을 갖지 않다면, 무차별적인 컨텐츠 사보기는 어렵습니다.
결국 소비자는 광고나, 오프라인을 통해 직접 본 책 외에는 구입해서 사보기를 꺼려한다는 것이죠.

이 부분에 대한 절충안을 제안하려 합니다.

먼저 최초 올라가게 되는 컨텐츠의 작가와 협의를 먼저 했으면 좋겠습니다.
1권당 얼마로 하고 싶나. 라는 것이죠. 권당 2000원~5000원 사이로 정하는게 좋겠죠.
그리고, 실제로는 일정 단위로 나누어 가격을 낮게 책정하는 것입니다.
1~100권까지는 500원, 100권~500권까지는 1000원, 500권~만권은 1500원,
만권~ 무한대는 원하는 가격 이런식으로요.
즉 인기있으면 제값을 받고 파는 것이고,
인기가 없으면 낮은 가격으로 소비자 접근 관문 레벨을 낮추는 것입니다.

물론 이 시스템에 헛점이 없는 것이 아닙니다.
뭐 500권까지 아는 사람들을 통해 억지로 구매하게 끔해서 가격을 올릴 수도 있겠죠.
하지만, 이런 부분은 다듬어 보면 다양한 방법이 제시되지 않을까요?

또, 각 책에 대한 평을 저자가 쓰던, 읽었던 독자가 쓰던 그들이 각자 쓰게 하고,
나름 그 책에 대한 토론을 하게 끔 하는 것이죠.

평이 너무 좋으면 E-Book 10만권이도 생기지 않을까요?
혹은 종이 책으로 한정판도 만들 수 있는 기회도 되구요.

 

능력있고, 재치있지만, 가난한 이름없는 소설가들의 문턱을 최대한 낮추어
그들의 이야기를 끌어내고, 읽고 소비하는 올바른 문화가 제발 정착되었으면 합니다.
Offline 출판사는 이런 역할을 하기에는 돈이 너무 없다는게 현실이구요.
그래서 이런 갭을 인터파크가 좀 밀어주었으면 하구요.

 

일단… 트위터를 통해 이 글도 제언을 해보겠지만…
뭐 필터되어 사라질 수도 있겠지만…(최소한 제 블로그가 망하지 않는한 이 글은 계속 있겠네요.)

여튼 좀 잘 좀 되었으면 좋겠네요.
이번 개인 출판 사업관련 한 이벤트도 단발성으로 끝나지 않았으면 하는 바램입니다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • ···
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • ···
  • 156
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2025/06   »
일 월 화 수 목 금 토
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

Google Apps Engine moss me2photo SharePoint 비스킷 2010 me2dayzm me2sms 블로그 WSS 개발환경 Buscuit 오류 친구 인터파크 좀 불만 java Azure Visual Studio twi2me e-book 협업 지름신 매뉴얼 MOSS 2007 windows Tutorial 수 것

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바