2012년 12월 27일 목요일

[책추천 #16] 퍼스널 브랜드로 승부하라 - 조연심 이장우


2012년도 이책을 끝으로 책 추천을 마무리 합니다.
처음 이 글을 올릴 때는 한달에 1권 정도를 추천할 수 있으면 좋겠다고 했는데 계획 했던 것보다 몇권 더 추천을 하게 되었네요. 그러할 수 있었던 모든것에 감사함을 느낍니다. 마지막으로 추천드릴 책을 고르고 고르다가 " 퍼스널 브랜드로 승부하라 " 라는 책을 골랐습니다.

가장 큰 이유는 2012년을 뒤돌아 보고 또 새로올 2013년을 계획 하시면서 좀더 새로운 마음가짐을 준비 하실 때 좀더 도움이 되지 않을까 생각을 해봅니다. 저도 이 책이 조금은 시간이 지나서 추천 드리기 전에 다시 한번 책을 꺼내 보고 있습니다. 책 이야기로 들어가 볼까요?

하버드에서 토론식 강의로 유명한 마이크샌델 교수의 강의 방식은 질문을 통한 답을 찾아 내가는 과정이 강의 모든 것이라는 것이다. 온라인으로만 보았지만 강의 내용과 방식 그리고 결론을 도출해 가는 과정은 신선한 충격이었습니다. 우리는 살면서 많은 질문을 받게 되고 또 답을 하게 됩니다. 하지만 학교 생활을 시작하든 조직 생활을 시작하든 공통적인 건 틀린답을 이야기 할까봐.. 자신의 이야기를 많이 하지 않는다는 점을 가지고 있습니다. 또 다른 관점에선 과연 그렇다면 질문은 제대로 한 것인가? 라는 물음도 생깁니다.

컴퓨터는 질문이 잘못되면 잘못된 결과를 가져다 줍니다. 고로 우리는 좋은 질문을 만들기 위해서 자신의 생각과 말을 표현하고 좋은 답을 찾아가기 위한 과정을 통해서 모르는 것과 아는것을 분명하게 구분해 낼 수 있습니다. 핵심은 우리가 스스로 인생에 중요한 것을 스스로 결정하는 자신의 인생의 주인공이라는 것을 인지하고 자신의 인생에 제대로된 질문을 통해 부족한 부분과 강점인 부분을 명확하게 구분하여 인생을 경영할 수 있다는 것입니다.
저도 스스로에게 질문을 합니다.(질문은 책 속에서 발췌)

* 나는 누구인가?
* 내가 다른 사람보다 탁월한 점/ 아주 부족한 점은 무엇인가?
* 다른 사람들이 나에 대해 존경/경멸을 보내는 이유는 무엇 때문인가?
답을 찾아 가는 과정과 그에 대한 답을 스스로 하게 되면서 나만의 브랜드를 만들어 가는 것. 누구 에게나 지금 당장 필요 한 것은 아닐까 생각을 해봅니다.

* 책 내용 일부
우선 우리의 존재 목적을 이해하고, 남들이 인정할 만한 탁월한 기량이 있는지, 그리고 나에 대한 존경과 찬사가 가능 한가에 대해 생각해보아야 한다. 그것은 당신이 퍼스널 브랜드로 성공할 수 있느냐의 여부를 결정하는 핵심 문제이기 때문이다. 중요한 것은 ‘나’라는 사람의 존재 목적과 핵심 그리고 본질이다. ---p.9
퍼스널 브랜드가 되려는 사람이나 CEO가 된 사람들은 브랜드에 대해 오해하지 말아야 한다. 내가 하는 일에 대해 스스로 자부심을 가지고 확고한 신념과 실력으로 인정받을 자신이 있다면 다른 사람이 알아볼 때까지 꾸준하게 그 일을 하면 된다. 그렇게 되면 저절로 사람들의 입에서 입으로 알려져 영향력이 생긴다. 그럴 때 외부 환경의 변화와 무관하게 자신이 하는 일을 차질 없이 진행할 수 있다. 누구에게 보여주기 위한 일이 아니라, 내가 하고 싶고 잘하는 일을 하는 것이기 때문이다. 그 과정 하나하나가 진정성을 지닌 스토리가 되어 퍼스널 브랜드에 힘을 더하는 것이다. ---p.27

당신이 일을 하는 이유는 무엇인가? 돈을 벌기 위해서가 아니라면 당신을 행복하게 하는 일은 무엇인가? 그것을 찾아 어떤 순간에도 지치지 않고 몰입할 수 있는 일이 바로 당신을 그 분야의 최고가 되게 할 바로 그 일이다. 성공한 사람들은 서로 다르긴 하지만 한 가지 점에서 일치한다. 그것은 자신이 하는 일을 사랑한다는 점이다. 그들을 움직이는 것은 명예나 돈에 대한 욕심이 아니다. 그저 자신이 좋아하는 일을 할 따름이다. ---p.74

[책추천 #15] 빅데이터 경영을 바꾸다 - 함유근, 채승병 삼성경제연구소

오랜만에 다음책 추천을 이어 갑니다. 일전에 "빅데이터 비즈니스" 라는 책과 KBS 시사기획 창에서 빅데이터 관련 영상도 소개를 해드렸습니다. 제목이 주는 어감으로 힌하여 어 뭐야 이거 또 IT 기술 이야기인가? 라고 생각 하실 수 있을것 같습니다.
그러나 조금만 더 안으로 눈을 돌려 보시면 전반적인 향후 미래의 트랜드와 변화를 읽어 내실 수 있을거라 생각이 듭니다.

최근 국내에도 이와 같은 빅데이터를 활용하는 사례가 점차 증가 하고 있습니다. 대선의 이슈로 인하여 소셜미디어 분석이나 대선 주자들이 연설이나 보도자료를 통해 쏟아 내는 특정 키워드 단어 등을 잡아 연관관계를 만들어 내고 분석하는 것들은 빅데이터의 미디어 분석부분에 해당이 된다고 생각 하시면 됩니다.

빅데이터를 단순 소셜미디어 분석 및 미디어 감성분석으로만 생각하시면 조금은 아쉬운 부분이 있습니다. 위의 책은 이와 같은 여러가지 사례들을 소개 하고 각자의 업종에서 빅데이터 시대를 위해서 어떠한 준비를 해야 하고 또 어떤 환경이 만들어져야 하는 가를 짚어 주고 있습니다. 각 업무 파트별로 어떠한 부분들이 활용 가능한 부분인지 많은 도움이 되리라 생각이 듭니다.

최근에 국내에서 실제로 서비스 되고 있는 사례를 아래에 소개 해드립니다.
현재는 회원가입 후 무료로 서비스를 제공하고 있습니다. (일부제외) 그러나 조만간 모든 것들은 유료서비스가 되겠죠? 우리가 흔히 쓰레기데이터 라고 하는 것들이 새로운 가치를 부여 받아 새로운 비즈니스 모델이 되어 가고 있다는 것에 키포인트가 있는것 같습니다.

아래의 사례는 실제 미국의 월마트에서 있던 사례를 소개 해드립니다. 가장 빅데이터의 활용을 손쉽게 이해하는 글이지 않을까 싶네요.

-----------------------------------------------------------------------------------
" Why Big Data? Why Now? "
이제 겨우 고등학생인 딸이 출산용품 광고메일을 받자 남자는 매장을 찾아가 강하게 한의 한다. 해당 매장 점장도 마케팅팀의 타켓 실수라 생각하고 사과한다. 하지만 얼마 후 그 동안 딸이 임신 사실을 숨겨온 것이 밝혀지고 항의하던 남자는 다시 매장에 찾아가 사과를 한다. 여기서 우리가 궁금해 해야만 하는 것은 후일담이 아니라 도대체 부모도 모르고 있던 사실을 어떻게 알고 광고 메일을 보낼 수 있었는가이다. 월마트에 이어 미국 할인유통업계의 강자로 군림하고 있는 타킷은 수많은 고객의 구매 이력을 분석해 임산부가 보이는 특이 패턴을 찾아내는 예측 모형을 가동하고 있다. 그리고 이 사건은 그 예측 모형에 의해 빚어진 실제 사례이다. 이것이 바로 지금 우리가 살고 있는 "빅데이터 시대"의 단면이다.

-----------------------------------------------------------------------------------
외부에 알려진 위의 사례에 활용된 패턴은 검색키워드에 대한 패턴과 구매 이력에 포함되어 있는 식품/약품/가공품이 초기 임산부들이 구매하는 패턴과 유사 했다고 합니다. 구글의 트랜드가 질병관리 기구보다 독감 유행의 예측을 더 빨리 할 수 있는 이유이기도 하죠?

월초 입니다. 마감으로 많은 분들이 정신 없이 보내고 계시리라 생각됩니다. 모두 모두 수고하시고 화이팅 하세요. 혹 빅데이터와 관련된 좀더 많은 이야기를 공유하고 듣고 싶으신 분은 덧글이나 메세지로 요청을 주시면 회의실에서 조촐하게 무료로 세미나 해드리겠습니다. ^^

2012년 8월 30일 목요일

[책추천 #14] 어떻게 원하는 것을 얻는가? - 스튜어트 다이아몬드

많은 분들이 이곳 저곳? 에서 추천하는 책이라고 하셔서 이미 읽으셨으리라 생각을 합니다. 혹시나 아직 읽지 않으셨거나 관심이 있지만 선뜩 시작 하지 않으신분들을 위하여 간략하게 추천 서평과 의견을 남겨 봅니다. 다른 좋은 서평들은 인터넷에 검색을 하시면 많은 자료들이 나올것으로 생각을 하고 그것들은 생략을 하고 개인적인 생각들을 몇가지 남겨 보려 합니다.

책에서는 여러가지 협상을 위해서 좋은 방법론과 수칙등 주의해야 할 사항들에서 1장에서 소개를 하고 이를 바탕으로 현실적인 사례들을 통하여 어떠한 연습이 필요 한지를 보여주는 2장으로 크게 구성이 되어 있습니다. 결과적으로 저는 그 중에 협상을 위한 크게 3가지 정도로 요약을 해볼 수 있지 않을까 생각을 해봅니다.
* 협상을 위한 Tip 
 
1. 감정에 흔들리지 않고 자신을 절제할 수 있어야 합니다.
협상을 하는 상대와 내가 다른 입장 이기 때문에 상대를 자극하거나 아니면 나 자신이 감정적으로 자극이 될 때가 있습니다. 그로 인해 원래의 목적보다는 감정에 흔들려서 목표를 혼돈하고 협상을 망치게 될 수 있습니다. 협상을 위해서 진정성있는 감정으로 호소하여 상대에게서 얻어내는 것도 분명 있습니다만 지나친 감정적 처리는 좋지 않겠다 생각이 드네요.  
2. 거짓말을 하지 않아야 합니다.
때로는 선의의 거짓말이 필요하다고 생각할 수도 있지만 그것은 가족이나 친한 친구들에게나 통하는 것으로 생각을 해야 하지 않을까 생각을 합니다. 공식적인 협상에서 그것이 기록에 남게 된다면 언젠가 본인에게 큰 치명타가 될 것이고 거짓말은 상대에게 신뢰를 잃는 지름길이기도 합니다. 어느분이 이런 얘기를 했습니다. " 내가 가진 가장 큰 무기는 정직함이다. "
 
3. 인간적으로 소통하는 것입니다.
어쩌면 인간적 소통은 사람을 대하는 가장 기본적인 것입니다. 협상은 업무적인일이든 그렇지 않든 간에 결국엔 사람과 사람이 만나서 하게 됩니다. 상대에 대한 관심과 사랑을 진정성 있게 보여주고 느껴지게 하려면 결국엔 인간적 소통이 필요 하다고 생각이 듭니다. 상대의 이름이나 직급 업무 파악이나 존칭 사용, 먼저 인사하는 것들이 이에 해당이 되겠죠
이 이외에 더 좋은 의미와 방법들은 책을 읽어 보시면 얻어 내실 수 있습니다. 개인적으로 좋은 책이라고 생각이 들면서 조금은 아쉬운 부분은 책에 거론된 많은 사례들에 대해서 너무 성공적인 협상의 결과로 판단했다는 오류가 숨어 있지 않을까 생각을 합니다. 가장 좋은 협상의 결과는 아마도 협상을 하는 모두가 얻고 싶은 것을 얻었을때 일 것입니다. 좋은 협상은 누군가로부터 내가 얻고자 하는 것을 상대에게 피해를 주면서 까지 얻어 내는것은 아니라는 것입니다. 혹여나 잘못된 인식으로 이 책을 받아 들이게 되면 세상의 여러가지 꼼수를 통하여 협상을 유리하게 이끌고 상대를 이기는 것이 목적이 될수도 있단 조심스런 개인적 판단을 해봅니다.
어쨌든 결과적으로 업무를 하면서 끊임없이 협상하고 판단하며 결과를 이끌어 내야 하는 많은 분들에게 기준이되고 연습하고 단련을 위한 도움이 될 수 있지 않을까 해서 소개 해드립니다.

2012년 8월 8일 수요일

[#책추천 13] 넥스트 패러다임 - 최은수

지금, 변화를 읽는 자가 미래의 승자가 된다!
보고서’인 《다보스 리포트 힘의 이동》을 펴낸 저자는 이 책에서 지구촌을 움직이는 새로운 패러다임을 ‘힘의 이동 2.0’이라 정의한다. 이는 경제, 비즈니스, 기술·사회, 국제질서 등에 있어서 새로운 패러다임, 즉 넥스트 패러다임을 일으키고 있다. 이 책은 넥스트 패러다임을 만들어내는 요소들인 ‘G0과 뉴노멀, 초경쟁시대, 초연결사회, 하트스토밍, 패시브 인컴, 그리노믹스’ 등을 소개한다. 또 개인과 기업 그리고 국가가 미래의 부를 선점하기 위해 꼭 알아야 할 패러다임의 변화를 다루었다.
[ 교보문고 서평 중 ]
벌써 2012년도 7월의 중순을 넘어 반년의 시간을 보냈습니다. 횟수를 보니 이제 13번째 책을 추천 드리고 있네요. 좋은책이나 나쁜책이다 기준은 특별할게 없지만 공유하는 것 만으로도 충분한 역할이라 생각이 듭니다.
저는 대학생 시절이 가장 미래에 대한 불안함이 컸습니다. 생각해보면 여러가지 상황  취업에 대한 고민, 내가 다니는 곳이 흔히 사회에서 말하는 일류가 아니라 2류, 3류라는 생각들 뭐 여러가지가 있었겠지만 그중에서도 가장 두려움의 원인은 아마도 미래를 예측하지 못했고 예측하지 못한 미래를 위한 준비를 하고 있지 않았기 때문이었던것 같습니다.
 
지금도 물론 앞으로 다가올 미래에 대한 두려움은 있습니다. 마찬가지로 예측하기 힘든 국가의 환경,  기업의 환경, 개인의 환경이 있기 때문입니다.  저와 같은 생각을 하고 계시는 분들이 있다면 이 책은 분명 많은 부분에서 공감과 도움이 되시리라 생각됩니다. 저자가 이 책에서 5대 ‘빅 체인지’라는 새로운 패러다임을 제시하고, 공감을 이끌어 내면서 이를 기반으로 한 미래의 환경에 능동적으로 준비 할 수 있도록 도와주고 있습니다.
 
북포럼 토크에 나오신 저자와이 대화 내용을 듣다 보니 몇가지 느낌점이 있어 함께 남깁니다. 아직 여름휴가 안가신 분들이 많으시리라 생각됩니다. 휴가중에 들고갈 책으로 적극 추천 합니다.
1) 새로운 앵글로 세상을 바라보고 행동하라.
저자가 이번 책을 아마존에 e-book으로 올렸다고 하길래 이해가 안 되었습니다.
아마존에서 원서도 아닌 한국책을 사는 우리나라 사람들이 극소수 일것이기 때문인데, 저자의 세계에 퍼져있는 700만이 넘는 한국교포들과 한국을 배우고 싶은 외국사람들을 위하여 한국어판 e-book을 아마존에 올렸다는 말을 듣고 너무도 공감이 갔습니다. 틀을 깨고 판을 바꾸는 것 그것을 바로 몸에 습관처럼 만들어 놔야 할 것입니다.
2) 신뢰, 공유, 의미를 추구하는 새로운 자본주의가 다가온다.
"넥스트 패러다임"에서 소개한 세계적 석학들과 리더들의 문구를 보면, 70년대에는 보안법이나 공산당으로 몰릴 수 있는 발언들인데 결국 수평적으로 소통하고 진정한 신뢰를 기반으로 공생의 의미를 추구하는 자본주의가 되야지, 지금처럼 개인만의 발전과 탐욕으로 무한경쟁하는 시장만능주의는 계속 지속될 수 없다는 것입니다.
3) 네트워크에는 남녀노소가 없다.
네트워크 세상에서는 남녀노소를 구분할 필요도 없고 단지 그 사람의 정체성과 전문성으로 연결되고 사업이 전개될 것이기 때문에, 여성들에게 더욱더 큰 기회가 주어질 것이며, 남성도 이런 여성들과 잘 소통하고 협업할 수 있는 사람이 생존과 성공에 유리할 것 같습니다. 보잘것 없을것 같은 네트워크는 분명 큰 힘을 갖게 될 것입니다. 지금은 사용자가 몇명? 몇% 잖아? 라고 치부해버렸다가는 후회를 하게 될 것임은 자명 합니다.  

2012년 6월 29일 금요일

[책추천 #12] 소셜미디어 ROI

『소셜미디어 ROI』는 소셜미디어를 활용해 실제 사업에 도움을 얻기 위한 원칙을 정하고 사내조직의 목표를 잡는 기준을 제시하는 책이다. 소셜미디어의 성공적인 임무 완성을 위한 전략, 계획, 실행, 측정, 분석, 최적화의 방법을 소개한다. 소셜미디어 커뮤니케이션의 폭넓은 사업목적과 방법, 측정을 위한 효과적인 계획수립 방법, 소셜미디어의 효과적인 관리를 위한 운영기술과 가이드라인, 소셜미디어 실시간 운영기술과 고객서비스 최적화 방법 등 구체적인 방법을 다루었다. 이 책을 통해 소셜미디어 확산으로 인한 기업의 위기 관리 능력을 확립하고 매력적인 기업매체로서 고객들과 소통할 수 있는 구조와 프로그램이 무엇인지에 대해 알 수 있을 것이다.
[네이버 제공]


** 책 주요 내용 요약 **

ROI는 엄연히 재무적인 부분이며 소셜미디어 상에서의 비재무적, 재무적 성과의 차이를 정확히 구분해야 한다. 비재무적인 성과들은 중개적인 역할을 하는 측정수치들이다.
 
비재무적 성과의 예는,
- 웹사이트 방문자수 증가
- 긍정,부정적인 멘션의 변화
- 신규 페이스북 팬수
- 신규 트위터 팔로워수
- RSS 구독율 증가 수치
- 오프라인 매장 방문자 수 증가
- 유투브 동영상 다운로드 횟수, 좋아요, 공유하기 수의 증가
- 포스팅에 대한 피드백 증가
 
재무적 성과의 예는,
- 신규 매출 120만 달러
- 페이스북 프로모션 캠페인 기간 중 온라인 매출 16% 증가
- 페이스북에서 확보한 신규고객 매출 32만 달러
- 고객 서비스 요청 건수의 일부를 트위터로 이동시킴으로써 16% 비용 절감
- 소셜 미디어 채널을 활용하여 노출 건당 비용을 2.62달러에서 0.76달러로 절감
 
이런 일련의 과정을 정리해 보자면,
투자 -> 행동(공식페이스북개설) -> 반응(대중의 긍정적 피드백) -> 비재무적 영향
(1분기 30,000명의 사람들이 들어옴, 브랜드 멘션 3배 증가, 긍정적 정서 37%증가) ->
재무적 영향(12,000건의 신규 거래 발생 ) 으로 정리될 수 있다.
그러나 트위터에서 신규 팔로워가 1만명 추가된 것이 8,000명의 신규 고객이라는 것을 경험적으로 증명할 수 없고, 팔로워들이 신규 매출 200만 달러를 발생시켰다고 증명할 수는 없다.
그렇다면, 우리가 해야하는 일인 비재무적 영향 요소들을 어떻게 재무적 성과로 연결시킬 수 있을까?
1. 기준선을 설정하라
프로그램, 캠페인 시작일을 기준으로 측정을 시작하는 것이다. 회사가 연간 8%의 성장세를 기록하고 있다면, 하루에 온라인에서 언급되는 회사이름이 고작 3회에 불과하다면, 이것을 기준선으로 측정을 시작한다.
 
2. 활동타임라인이 있어야 한다. 
프로그램의 일거수일투족을 기록해 놓아야 한다. 몇월몇일에 관련 보도자료가 나갔는지, 언제 어느 채널에서 언급이 있었는지 기록을 해둔다면 이러한 요소들을 가지고 매출 증가의 원인을 파악할 수 있다.
 
3. 멘션 볼륨 모니터링
기준선을 시작으로 모니터링 툴을 이용해 회사 이름이 언급된 횟수를 측정하는 것이다. 또한 추가로 긍정, 부정의 정서적 비율을 측정한다. 사람들이 무슨 이야기를 어디서 하고 있나? 주제, 키워드, 경향, 링크 등을 파악하라. 그런데 여기서 주목할 점은, 자동화된 분석은 그다지 믿을 만하지 못하다는 것이다. 이런 엔진들이 말하는 신뢰도는 과장된 경우가 많으며 가장 좋은 방법은 사람이 직접 멘션의 긍,부정 여부를 판단하여 더블체크를 하는 것이다. 모니터링 툴을 고를 때 대부분의 여론 분석기관에서 말하는 정서분석에서 3%오차 범위를 가지고 있는 것은 나쁘지 않다. 이것을 기준으로 몇달간 사용할 툴을 테스트하여 정해야 한다. 테스트 기간 동안 사람이 직접 분석한 오차 범위가 3%정도라면 이제 안심하고 툴을 사용해도 된다.
 
4. 거래 전조 측정
거래를 암시하는 비재무적 측정 기준을 모니터링하라. 블로그 코멘트 증가와 웹사이트 방문자의 증가(블로그에서 웹사이트로의 클릭 전환율), 팬과 팔로워, 공유하기, 좋아요, 추천, 컨텐츠 다운로드 수치등이 여기에 해당된다.
 
5. 거래 데이터 검토
거래 고객, 거래 건수의 증감율 측정으로 본격적인 재무적 데이터를 측정한다,
 
6. 모든 데이터 (1-5단계) 통합하기
모든 데이터를 하나의 타임라인에 정렬시켜 모든 요소들을 시간 순서대로 배열한다.
 
7. 패턴 찾기
모든 요소를 시간순을 배열했다면 인과관계나 연관관계를 찾는 것이 아니라 단순한 패턴을 찾는 작업부터 한다. 소셜미디어 프로그램 시작하기 이전 활동부터 그래프를 그려 소셜미디어 활동이 긍정적인 영향을 끼치고 있는지 파악한다. 소셜 미디어 활동이 매출에 그닥 영향을 미치치 못했다면 이제 그 이유를 알아야 한다. 소셜미디어 활동이 잠재고객들을 오프라인 매장까지 보내는데 성공했지만 매장 내에서 구매로 이어지지 않은 문제점이 있을 수 있다. 또한 측정주기 시작 이후 동시에 증가한 선을 찾으면 이것이 바로 우리가 찾고자 하는 패턴이 된다.
8. 관련성 증명과 반박하기
소셜미디어 활동이 얼마만큼의 영향을 끼쳤는지를 가능한 만큼 증명해 보일 시간이다. 예를 들어, 페이스북 내 캠페인 후 관련 대화 볼륨이 증가하였으며 마이크로사이트 방문수가 증가하고 제품 매출이 증가했다. 그러나 한편으로 이 이론의 반대편에 서서 반박해보는 것이 중요하다. 매출의 증가가 타 매체에서의 언급, 혹은 할인행사 때문일 수도 있다. 제 3자에게 소셜미디어 활동을 감독해 줄 것을 부탁하고 각자의 분석과 데이터를 가지고 이를 취합해보는 것도 객관적이고 좋은 방법이다.
소셜 미디어ROI 측정은 예산과 활동, 활동과 성과, 비재무적 성과와 재무적 성과 간의 관계 분석과 제거 과정을 거쳐 먼저 정립되어야 한다. 이러한 프로세스를 통해 프로그램이 기업에 창출하는 정확한 재무적 가치를 파악하는 것에서부터 프로그램의 어떤 면이 효과가 있고 어떤 면이 효과가 없었는지에 관한 통찰을 얻을 수 있다. 소셜미디어 ROI 계산에 능숙해질 수록 소셜미디어 프로그램을 더욱 탄탄하게 구축할 수 있는 역량을 갖추게 된다.
 
==================================================================================================
올해를 포함해서 작년 한해는 많은 기업들이 소셜미디어에 대한 관심이 가희 폭발적이라고 해도 과언은 아닐 거라는 생각이 듭니다. 하지만 올해 하반기가 끝나기 전에 개인적인 생각으로 각자의 접근법과 활용 또는 성과측정에 관한 기준에 따라 운영의 성패는 분명하게 갈리게 되는 시기이지 않을까 생각도 함께 듭니다. 모두가 좋아 좋아 하니까 하게 된다거나 그냥 페이스북, 트위터 계정하나 만들어 놓고 홍보만 하면 매출증대와 연관된 결과를 가져올 것이라는 막연한 기대감들만은 갖고 시작한 기업들이라면 아마도 그 성패는 안봐도 결과를 예측할 수 있겠죠..
 
어느날 갑자기 툭.. 하고 획기적인 그 무엇이 탄생하기는 어렵습니다. 철저한 기획과 준비, 적절한 비용의 투자와 시간적 기다림, 준비된 인재와 조직의 문화가 유기적으로 어울려져야 한다는 것을 한번더 느끼게 된 책이라고 생각합니다. 단순히 책 제목에서 처럼 소셜미디어 라는 관점으로 준비단계에서 공유/확산 그리고 KPI 까지에 대한 단계별 준비사항과 기준들 평가지표들을 어떻게 꾸려야 하는지 교과서적인 내용을 다루고 있지만 여기서 소셜미디어라는 단어만 제외 한다면 각자의 위치에서 ROI라는 관점으로 조직과 회사를 다시금 바라볼 수 있을꺼라고 생각을 합니다.
 
또한 지금 현재 많은 분들이 불확실한 미래라고 생각하는 소셜웹의 진정한 힘을 이해 하려면 급변하게 변하는 IT기술에 관심을 갖거나 공부하고 준비 할것이 아니라 인간 자체의 본성 즉, 사회적 동물로서의 인간을 들여다보아야 한다고 합니다. 인간은 사회적인 상호 작용을 갈망하고 사회적 집단에 소속되고, 이야기 하고, 경험을 공유하고, 자신이 속한 집단에 가치 있는 무언가에 기여하기를 간절히 바랍니다. 지금의 시대나 몇만년전의 세대나 인간의 본질적 본성은 변하지 않고 인적네트워트라에서 소셜네트워크라는 도구의 변화만 가져왔다는 것을 인지하고 이것을 가능케 하는 그 무엇인가를 찾아야 할 때 라고 생각합니다.
 
이제 여름 휴가 기간들이 다가오고 있습니다. 모든 분들이 나름의 방식대로 재충전의 시간을 가질것이라 생각합니다. 짬을 내어 시원한 음료 한잔 그리고 시원한 바람과 함께 가볍게 읽을 수 있는 책한 권 정도 휴가기간에 즐기시는건 어떨까요?

2012년 6월 15일 금요일

[PowerBuilder] Data Windows to HTML ( save Excel)

String ls_HTML, ls_FileName, ls_Modify, ls_Named, ls_TmpFile
Integer li_FileNumber, li_Return
Long ll_Location
// Don't proceed if there is no data object loaded in the DW
If (dw_1.dataobject = "") Then Return -1
// Generate the HTML
ls_Modify += "DataWindow.HTMLTable.Border=1  "
If Trim(ls_Modify) <> "" Then
 dw_1.Modify(ls_Modify)
End If

ls_HTML = dw_1.Object.DataWindow.Data.HTMLTable
If IsNull(ls_HTML) Or Len(ls_HTML) <= 1 Then
 MessageBox ("Error", "Error generating HTML table.", Exclamation!)
 Return -1
End If
OLEObject EXCEL
EXCEL = CREATE OLEObject
EXCEL.ConnectToNewObject("Excel.Application")
// 저장 위치
li_Return = GetFileSaveName( "Save File", ls_FileName, ls_Named, "xls" , "All Files (*.*),*.*" )
IF li_Return <> 1 THEN
 MessageBox("확인", "저장할 곳을 선택하십시오.")
 Return -1
END IF
ls_TmpFile = ls_FileName + ".htm"
IF FileExists(ls_TmpFile) THEN FileDelete(ls_TmpFile)
IF FileExists(ls_FileName) THEN FileDelete(ls_FileName)
li_FileNumber = FileOpen(ls_TmpFile, LineMode!, Write!, LockReadWrite!, Append!, EncodingUTF8! )
If (li_FileNumber >= 0) Then
 DO WHILE LenA(ls_HTML) > 10240
  ll_Location = PosA(ls_HTML, '<TR>') + 3
  FileWrite(li_FileNumber, LeftA(ls_HTML, ll_Location))
  ls_HTML = MidA(ls_HTML, ll_Location + 1)
 LOOP

 FileWrite(li_FileNumber, ls_HTML)
 FileClose(li_FileNumber)
Else // File open error
 MessageBox ("FileOpen Error", "Could not open file: " + ls_FileName + " (" + String( li_FileNumber ) + ")")
End If
EXCEL.WorkBooks.Open(ls_TmpFile)
EXCEL.WorkBooks(1).SaveAs(ls_FileName)
EXCEL.WorkBooks(1).Saved = True
EXCEL.Application.Quit
EXCEL.DisConnectObject()
Destroy EXCEL
FileDelete(ls_TmpFile)
Messagebox("완료", "파일이 저장되었습니다.")
Return 1

2012년 6월 13일 수요일

[PowerBuilder] DataWindows to Excel

/*저장하는 칼럼의 셀에 맞혀 셀 위치에 (1:일반),(2:텍스트),(3:날짜) 셋팅

long Array1[], Array2[]
Array1[] = {1,1,2,2,1} //ex = {A,B,C,D,E} 
Array2[] = {1,1,2,2,1} //엑셀에 값이 먼저 들어가기전에 형식지정을 먼저 해주어 ' 0 ' 값이 사라지는것을 막습니다.
 OleObject oleExcel , oleQuery
long li_rc
 //하나의 Excel에 저장하려는 datawindow name 과 .txt파일을 먼저 저장할 경로 지정
dw_1.SaveAs('c:\t1.txt', TEXT!, True) 

//이제 Excel 생성 - .txt로 생성한 파일을 Excel로 이동
oleExcel = Create OleObject
li_rc = oleExcel.ConnectToNewObject("excel.application")
IF li_rc <> 0 THEN
 MessageBox("Information!", "File Conversion Failed!")
 MessageBox('오류!', 'Excel을 구동하면서 오류가 발생했습니다.', stopsign!)
 Destroy oleExcel
 RETURN -1
end if
oleExcel.WorkBooks.Add()
oleExcel.ActiveWorkbook.Sheets.Add.Name = 't1'
oleQuery = oleExcel.ActiveWorkbook.Sheets('t1').QueryTables.Add('TEXT;c:\t1.txt'   , oleExcel.ActiveWorkbook.Sheets('t1').Cells(1,1) )
oleQuery.TextFileColumnDataTypes = Array1
oleQuery.refresh()
oleExcel.Application.Visible = True

[PowerBuilder] Function List

1. 배열(Array)처리 함수  
LowerBound : 지정한 배열의 하위 경계
UpperBound : 지정한 배열의 상위 경계
 
2. Bolb관련 함수  
Blob       : 텍스트 데이터를 Blob 데이터로 변환 또는 복사
BlobEdit   : PB가 지원하는 데이터를 Blob변수로 복사
BlobMid    : Blob 데이터 문자열에서 N번째 문자를 반환 
Len        : 문자열의 길이
 
3. 데이터형 검사 및 변환 함수  
Char       : blob,정수,문자열을 문자로 바꿔서 반환
Dec        : 문자열의 내용을 십진수로 바꿔서 반환
Double     : 문자열의 내용을 Double로 바꿔서 반환
Integer    : 문자열의 내용을 정수로 바꿔서 반환
Long       : 문자열의 내용을 long으로 바꿔서 반환
Real       : 문자열의 내용을 실수로 바꿔서 반환
Date       : 데이터베이스로부터 읽은 DateTime값에서 Date부분만 빼온다.
DateTime   : Date나 Time을 DateTime 값으로 변환한다.
IsDate     : 지정한 문자열이 유효한 Date값을 지녔는지 검사한다.   
IsNull     : 넘어온 인자가 NULL인지 검사한다.
IsNumber   : 지정한 문자열이 숫자값을 지녔는지 검사한다.
IsTime     : 지정한 문자열이 유효한 Time값을 지녔는지 검사한다.
String     : 지정한 형식으로 문자열을 얻는다.
Time       : 데이터베이스로부터 읽은 DateTime값에서 Time부분만 빼온다.
 
4. 날짜,요일,시간 처리 함수  
Day        : 일자를 구한다(1에서 31 사이의 정수)
DayName    : 주간의 요일명을 구한다.
DayNumber  : 주간의 요일을 숫자로 표현한다.(예를들면 일요일은1, 목요일은 5)
DaysAfter  : 지정한 날짜에 n일전,후를 구한다.
Hour       : 주어진 시간의 시 값을 구한다.
Minute     : 주어진 시간의 분 값을 구한다.
Month      : 주어진 날짜의 월 값을 구한다.(1에서 12까지)
Now        : 클라이언트의 시스템 시간을 구한다.
RelativeDate:주어진 날짜를 기준으로 n일 후 날짜를 구한다.
RelativeTime:주어진 시간을 기준으로 n초 후 시간을 구한다.
Second     : 주어진 시간의 초 값을 구한다.
Today      : 클라이언트의 현재 날짜를 구한다.
Year       : 주어진 날짜의 년 값을 구한다.(1000에서 3000년까지임)
 
5.DDE클라이언트 함수  
CloseChannel:OpenChannel함수로 열린 DDE서버 어플리케이션의 채널을 닫는다.
ExecRemote : 서버 어플리케이션에게 명령 실행을 요구한다.
GetDataDDE : 연결된 서버 어플리케이션으로부터 새로운 데이터를 받아온다.
GetDataDDEOrigin:연결된 서버 어플리케이션으로부터 원래의 데이터를 받아온다.
GetRemote  : 서버 어플리케이션에게 데이터를 요구한다.
OpenChannel: DDE서버 어플리케이션을 연다.
RespondRemote:서버에게 명령 또는 데이터가 클라이언트에게 받아들여졌는지를 알려준다.
SetRemote  : 서버 어플리케이션에게 지정한 값을 설정하도록 한다.
StartHotLink:서버 어플리케이션과의 연결을 시작한다.
StopHotLink: 서버 어플리케이션과의 연결을 종료한다.
 
6. DDE서버 함수  
GetCommandDDE: 클라이언트 어플리케이션이 보낸 명령을 구한다.
GetCommandDDEOrigin:어떤 클라이언트 어플리케이션이 명령을 보냈는지 구한다.
GetDataDDE : 클라이언트 어플리케이션이 보낸 데이터를 구한다.
GetDataDDEOrigin:어떤 클라이언트 어플리케이션이 데이터를 보냈는지 구한다.
RespondRemote:클라이언트에게 명령 또는 데이터가 서버에게 받아들여졌는지를 알려준다.
SetDataDDE : 클라이언트 어플리케이션에게 데이터를 보낸다.
StartServerDDE:파워빌더를 서버로 동작하게 한다.
StopServerDDE:파워빌더가 서버로 동작하는 것을 중지한다.
 
7. 파일처리 함수  
FileClose  : 파일 닫기
FileDelete : 파일 삭제
FileExists : 파일 존재 유/무
FileLength : 파일 길이
FileOpen   : 파일 열기
FileRead   : 파일 읽기
FileSeek   : 파일 내 위치 이동
FileWrite  : 파일에 쓰기
GetFileOpenName:파일 열기 공통 다이얼로그 열기
GetFileSaveName:파일 저장 공통 다이얼로그 열기
 
8. 라이브러리 함수  
LibraryCreate:라이브러리 생성
LibraryDelete:라이브러리 삭제
LibrarDirectory:pb라이브러리 파일의 모든 오브젝트의 리스트를 구한다.
LibraryExport:라이브러리 파일의 모든 오브젝트를 Export한다.
Library Import:지정한 라이브러리 파일에서 오브젝트를 Import한다.
 
9.MAPI함수  
mailAddress         :메일 메세지에 주소를 주거나 주소 리스트를 보여준다.
mailDELETEMessage   :메일 메시지를 지운다.
mailGetMessages     :메지시 id를 얻어온다.
mailHandle          :내부 메일 시스템 핸들을 얻어온다.
mailLogOff          :메세징 시스템과의 세션을 끊는다.
mailLogOn           :메세징 시스템과의 세션을 시작한다.
mailReadMessage     :메일 메시지를 읽는다.
mailRecipientDetails:지정된 수취인의 주소 정보를 보여준다.
mailResolveRecipient:불분명한 수취인 명을 결정한다.
mailSaveMessage     :사용자 수신함에 새로운 메시지를 생성하거나 기존에 있는 메시지를 대체한다.
mailSend            :메일 메시지를 보낸다.
 
10. 수치 처리 함수  
Abs        : 수치의 절대값을 얻는다.
Ceiling    : 지정한 수보다 크거나 같은 최소 정수를 구한다.
Cos        : 주어진 각도의 코사인 값을 구한다.
Exp        : e를 Number만큼 거듭제곱한 값을 구한다.(e=2.71828182845904)
Fact       : 계승값을 구한다. Number의 계승값은 1*2*3*...* Number이다.
Int        : 소수점 이하를 버리고 가장 가까운 정수로 변환한다.
Log        : 지정 숫자의 자연로그값을 구한다.
LogTen     : 지정한 숫자에 대해 밑이 10인 로그값을 구한다.
Max        : 두 수 중 큰 수를 구한다.
Min        : 두 수 중 작은 수를 구한다.
Mod        : 두 수를 나눈 나머지를 구한다.
Pi         : 3.14159265358979를 구한다.
Rand       : 난수를 구한다.
Randomize  : 난수 발생기를 초기화한다.
Round      : 숫자를 지정한 자릿수로 반올림한다.
Sign       : 숫자의 부호를 결정한다. Number가 양수이면 1을 표시해주고 0이면 0, 
음수이면 -1을 표시한다.
Sin        : 주어진 각도의 사인 값을 구한다.
Sqrt       : 양의 제곱근을 구한다.
Tan        : 주어진 각도의 탄젠트 값을 구한다.
Truncate   : 숫자의 소수점 이하를 버리고 정수로 변환한다.

11. 출력(Print)함수  
Print      : 현재 글꼴로 문자열을 인쇄한다.
PrintBitmap: 지정한 인쇄공간에 비트맵 이미지를 인쇄한다.
PrintCancel: 인쇄를 취소한다.
PrintClose : 현재 페이지를 프린터에 보내고 인쇄를 멈춘다.
PrintDefineFont:인쇄작업시 폰트를 정의한다. 파워빌더는 각각의 인쇄 작업에 대해 8가지 폰트를 제공한다.
PrintLine  : 지정한 위치에 지정한 굵기로 타원을 그린다.
PrintOpen  : 현재 페이지를 프린터에 보내고 새로운 페이지를 셋한다.
PrintOval  : 지정한 위치에 지정한 굵기로 타원을 그린다.
PrintPage  : 지정한 위치에 지정한 굵기로 둥근 모서리의 사각형을 그린다.
PrintRect  : 지정한 위치에 지정한 굵기로 사각형을 그린다.
PrintRouneRect:지정한 위치에 지정한 굵기로 둥근 모서리의 사각형을 그린다.
PrintSend  :지정한 문자열을 프린터에게 보낸다.
PrintSetFont:현재 인쇄 작업에 대한 글꼴을 지정한다.
PrintSetSpacing:라인간 너비를 지정한다.
PrintSetup : 프린터 설정 다이얼로그 박스를 부른다.
PrintText  : 지정한 위치에 지정한 문자를 인쇄한다.
PrintWidth : 현재 글꼴에서 지정된 문자열의 너비를 구한다.
PrintX     : 커서의 X좌표를 구한다.
PtintY     : 커서의 Y좌표를 구한다.

12. 문자열 처리 함수  
Asc        : 문자열의 첫번째 문자의 ASCII값을 구한다.
Char       : 주어진 ASCII값에 해당하는 문자를 구한다.
Fill       : 지정한 문자를 반복시켜서 문자열을 만든다.
Left       : 문자열의 시작부터 지정한 수의 문자를 읽어온다.
LeftTrim   : 문자열의 시작에 있는 공백을 없앤다.
Len        : 문자열의 길이를 구한다.
Lower      : 주어진 문자열 내의 대문자를 소문자로 고친다.
Mid        : 주어진 문자열에서 시작 위치와 끝 위치를 지정해 문자열의
             일정 부분만을 구한다.
Pos        : 다른 문자열에서 주어진 문자열의 위치를 찾는다.
Replace    : 문자열의 일부를 다른 문자열로 바꾼다.
Right      : 문자열의 끝에서 주어진 수의 문자를 얻어온다.
RightTrim  : 문자열의 끝에 있는 공백을 없앤다.
Space      : 지정한 길이로 공백 문자열을 얻는다.
Trim       : 문자열의 시작과 끝의 공백을 없앤다.
Upper      : 지정한 문자열 내의 소문자를 대문자로 고친다.

13. 시스템 및 환경 함수(System and Environment)  
Clipboard  : 윈도우의 클립보드의 내용을 얻는다.
GetApplication:현재 어플리케이션의 핸들을 구한다.
CommandParm: 어플리케이션 실행시 지정된 파라미터가 있을 경우 그값을 구한다.
DoScript   : 애플 스크립트(AppleScript)를 실행한다.(매킨토시 버전에만 해당)
GetEnvironment:시스템의 운영체제와 프로세서 등과 같은 정보를 얻는다.
Handle     : Window SDK함수를 부르기 위해 사용한다.
Post       : 지정한 윈도우에 대한 메시지를 메시지 큐에 마지막에 삽입한다.
ProfileInt : 지정한 프로파일에서 숫자값을 얻어온다.
ProgileString:지정한 프로파일에서 문자열을 얻어온다.
Restart    : 모든 스크립트의 실행을 중지하고, 모든 윈도우를 닫으며 데이터베이스에 Commit한후 연결을 끊고 다시 어플리케이션을 실행시킨다.
Run        : 지정한 어플리케이션을 실행시킨다.
Send       : 지정한 윈도우에 메시지를 순차적으로 보낸다.
SetProfileString:지정한 프로파일 값을 저장한다. 
ShowHelp   : 윈도우 3.x에 있는 도움말(Help)파일을 읽어 파워빌더 어플리케이션에서 사용할 수 있다.
SignalError: 어플리케이션 레벨에서의 시스템 에러를 발생한다.
Yield      : 반복문 안에서 다른 오브젝트나 어플리케이션의 메시지가 발생 됐는지를 체크할수 있게 한다.

14. 시간처리 함수  
CPU        : 현재 실행중인 PB어플리케이션 프로그램의 시작 시간부터 현재까지의 CPU시간을 구해준다.
Idle       : 사용자가 아무런 입력이 없이 지정한 시간이 흐르면 Idle이벤트 발생시킨다.
Timer      : 지정한 윈도우에 일정한 간격의 타이머를 지정하여 Timer이벤트를 발생시킨다.


15. 그밖의 함수  
Beep         : 정해진 시간(초단위)동안 경고음을 발생한다.
DBHandle     : DBMS의 핸들을 반환한다.
IsValid      : 지정한 윈도우가 열려있는지 검사한다.
KeyDown      : 사용자가 특정한 키를 눌렀는가 검사한다.
MessageBox   : 메시지 박스를 출력한다.
PixelsToUnits: 픽셀(Pixel)을 PB의 Unit로 바꾼다.
RGB          : 특정 색상을 표현하는 Long형 값을 반환한다.
SetNull      : 변수의 유형에 상관없이 변수를 Null로 지정한다.
SetPointer   : 마우스 포인터를 지정한 모양으로 바꾼다.
TypeOf       : 오브젝트의 형을 결정한다. 예를들면 CheckBox, Picture, RadioButton
등이다.
UnitsToPixels: PB의 Unit를 픽셀(Pixel)로 바꾼다.

1. UpperBound(배열명,{배열차원}) : 가끔 사용 
   (1) 개념 : 배열의 가장높은 경계값을 알아낸다. 
       Option으로 배열의 차원을 지정할 수 있으며 Default 차원은 1차원이다.
   (2) Return : integer(배열의 가장높은 경계값)
   (3) 예제 
       가) 
       integer li_number[7] , li_return 
       li_return = UpperBound(li_number) // li_return 은 7이 된다. 
       나) 
       string ls_name[5,6] integer li_return 
       li_return = UpperBound(ls_name,1) // li_return 은 5가 된다 
       li_return = UpperBound(ls_name,2) // li_return 은 6이 된다
   (4) 메모 : 가변길이 선언 배열에서 ( ls_text[] ) 
   위의 함수를 사용하여 0이 Return되면 배열이 아직 현 메모리에 적재되지 않았음을 의미한다.
   (5) 상대함수 : LowerBound()

2. IsDate(string) : 자주 사용 
   (1) 개념 : 특정한 String이 정확한 Date인지를 확인한다.
   (2) Return : Boolean ( Date가 맞으면 True 아니면 False이다. )
   (3) 예제 boolean lb_check 
       lb_check = IsDate("1996/05/22") // lb_check 는 True이다 
       lb_check = IsDate("1996/00/22") // lb_check 는 False 이다
   (4) 메모 : 특정한 String등을 Date로 변환시키기 직전에 많이 사용한다.
   (5) 유사함수 : Isnull() , Isnumber() , Istime() , Isvalid()

3. Date(datetime) , : 자주사용 Date(string) , Date(year,month,day) 
   (1) 개념 : datetime , string , 년월일의 integer값을 Date 변수타입으로 변환한다
   (2) Return : Date ( Valid 한 Date가 아닐때는 1900-01-01을 Return한다 )
   (3) 예제 datetime ldt_this date ld_new 
       ld_new = Date(ldt_this) 
       IF ld_new = Date("1900-01-01") THEN 
          Messagebox("ERROR",'정확한 일자가 아닙니다 !!') 
          return 
       END IF 
       ld_new = Date("1996/08/15") ld_new = Date(1999,11,23)
   (4) 유사함수 : DateTime()

4. Control명.ClassName() : 가끔사용 ClassName(변수명) 
   (1) 개념 : 특정한 Object의 Class명을 String으로 알아낸다.
   (2) Return : String ( Error 발생시에는 empty string "" 이 반환된다)
   (3) 예제 
       가)
       string ls_name 
       ls_name = Parent.ClassName() 
       IF ls_name = "w_insa001u" THEN 
          sle_1.text = ls_name 
       END IF
       // 어떤 Object의 Dragdrop Event 에서 
       string ls_name dragobject ldr_what 
       ldr_what = DraggedObject() ls_name = ldr_what.ClassName() 
       IF ls_name = 'em_delete' THEN 
          ldr_what.Drag(end!) Messagebox("Drag Object",'Drag된 Object 는 '& + ls_name + '입니다') 
       END IF
       나) 
       long ll_qty string ls_class 
       ls_class = ClassName(ll_qty) // ls_class 는 'long' 을 받아온다 
       ls_class = ClassName(this) // ls_class 는 현 Object 의 Class 명칭을 받아온다
5. Object명.PostEvent(event명) : 자주사용 
   (1) 개념 : Script가 쓰여진 현 Event가 끝난뒤 특정 Object의 Event를 수행하게 한다. 
       위의 function은 script가 쓰여진 위치에 관계없음으로 그 이후에 어떤 scrip가 있다면 
       그것을 모두 수행한후에 실행된다.
   (2) Return : Boolean (성공하면 true , event가 없거나 script가 없으면 false)
   (3) 예제 
       cb_close.PostEvent(clicked!) // object에 기본적으로 있는 event일때 
       cb_close.PostEvent("ue_keydown") // User가 정의한 event일때
 
6. Object명.TriggerEvent(event명) : 매우 자주사용 
   (1) 개념 : 현 Event에서 어떤 특정Object의 특정Event를 즉각적 수행하고 돌아온다. 
       Script가 쓰여진 위치가 중요하다
   (2) Return : Boolean (성공하면 true , event가 없거나 script가 없으면 false)
   (3) 예제 
       cb_check.TriggerEvent(clicked!) // object에 기본적으로 있는 event일때 
       cb_check.TriggerEvent("ue_check") // User가 정의한 event일때
   (4) 메모 : 어떤 Event의 Script를 수행한다는 면에서는 Postevent와 Triggerevent는 동일하며 
       두 이벤트 중 어떤것을 써야할지의 선택기준은 현재의 Event가 수행되고 난뒤 
       어떤 Event를 이어서 수행시키느냐 (Postevent) , 즉각적으로 어떤 Event를
       수행하느냐 (Triggerevent) 의 차이이다.

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...