서비스 시점이 다가오면서 열심히 개발한 서비스에 대한 관리는 어떻게 할것인가에 대한 고민이 생겼습니다. 일단 어떤 항목을 우선순위로 관리를 할 것인지에 대한 고민부터 시작하였습니다. Feedly에서 아래 글을 보게 되어 참고하였습니다.


https://indexoutofrange.com/Choosing-centralized-logging-and-monitoring-system/

=> 대부분 상용 서비스(Saas)를 비교하였고 글쓴이의 요구사항에 맞춰서 선택기준을 제시하고 있습니다.


Google Analytics vs. ELK +Graphite/Grafana vs. NewRelic vs. Retrace vs. Application Insights vs. Raygun vs. Datadog


저의 요구사항 우선순위는 아래와 같습니다.

1. 커스터마이징

2. 중앙에서 로그 관리

3. 알람

4. 서버의 성능 카운터

5. 실시간 모니터링

=> 아무래도 모니터링과 관련된 부분이다 보니 성능보다는 기능이나 수정이 용이한지가 더 중요하게 생각됩니다.


그러던 중에 아래의 OneTrueError라는 오픈 소스를 알게 되었고 대부분 제가 생각하는 요구사항을 만족하였습니다.


https://www.codeproject.com/Articles/1126297/OneTrueError-Automated-exception-handling


기술검토를 하기 전에 혹시 더 좋은 건 없나 찾아보던 중에 Opserver라는 Stack Exchange에서 사용하는 모니터링 시스템을 보게 되었습니다.


https://github.com/opserver/Opserver


 Opserver is a monitoring system by the team at Stack Exchange, home of Stack Overflow. It is a tool for monitoring:

  • Servers/Switches & anything supported by Bosun, Orion, or direct WMI monitoring
  • SQL Clusters & Single Instances
  • Redis
  • Elasticsearch
  • Exception Logs (from StackExchange.Exceptional)
  • HAproxy
  • PagerDuty
  • CloudFlare DNS
  • ... and more as we go

=> DB 서버에 대한 모니터링도 제공해주고 차후에 적용할 Redis, HAProxy, Elasticsearch에 대한 모니터링 기능도 지원이 가능하며 .NET으로 만든 오픈소스라 커스터마이징도 유용할 것으로 보였습니다.


Opserver에서 사용한 오픈소스 리스트는 아래와 같습니다.

StackExchange.Redis by Marc Gravell

Dapper by Stack Exchange

JSON.Net by James Newton-King

MiniProfiler by Stack Exchange

StackExchange.Exceptional by Nick Craver

TeamCitySharp by Paul Stack

d3.js by Michael Bostock

ColorBrewer by Cynthia Brewer and Mark Harrower

HTML Query Plan by Justin Pealing

isotope by Metafizzy

jQuery by The jQuery Foundation

jQuery cookie plugin by Klaus Hartl

jQuery autocomplete by Jörn Zaefferer

prettify by Google

TableSorter by Christian Bach

Toastr by John Papa and Hans Fjällemark

=> 저희 프로젝트에서 사용하고 있는 오픈소스인 Dapper, StackExchange.Redis, JSON.NET 등등이 보이고 HTML Query Plan이 보이는 것으로 봐서는 SQL Server에서 제공해주는 쿼리 플랜까지 제공해주는 것으로 보입니다.

=> Exceptional을 통해서 DB에 로그 데이터를 쌓고 해당 로그를 화면에서 보여주는 방식입니다.


Opserver SQL탭에 대한 화면은 아래와 같습니다.


추가적으로 아래와 같은 기능이 필요할 것으로 보입니다.

1. WMI를 활용하여 프로세스 단위로 모니터링

2. 알람 => 실시간 모니터링이 가능하지만 계속 화면을 보고 있을수는 없으므로 중요한 내용에 대한 알람이 필요해보이는데 알람 기능은 없는 것으로 보입니다.

Opserver에서 참조 중인 StackExchange.Exceptional에 메일 발송 기능이 있습니다. 다만 CPU가 Warning, Critical 상태일 경우의 발송이 되는 것은 아니고 Exceptional을 통해서 로그를 남기는 부분에 대한 메일 발송 기능입니다. (2017-08-19)


검토 단계여서 기능 위주로 확인해보았으며 소스 분석을 통해서 구조나 추가 기능을 구현해보려고 합니다. 혹시 비슷한 고민을 하고 계시는 분들이 있으시다면 Opserver 한번 검토해보세요. ㅎㅎ

Posted by resisa
,

중국 출장을 다녀온 이후로 크롬(사파리도) 브라우저에서 자동으로 redirect(광고, 바이러스 관련 프로그램 설치 등등) 되는 페이지가 탭으로 추가되는 현상이 지속적으로 발생하였습니다. 이런 부분에 예민한 편은 아니라 별다른 생각이 없었는데 2주 정도 시간이 흐르니 언제까지 이렇게 닫아줘야 할까 귀찮기도 하고 로그인(개인정보)를 할때 불안감도 들어서 삭제하기로 마음을 먹고 검색을 해보았습니다.

네이버에서 먼저 검색을 해보았는데 윈도우에 관련(제 노트북은 MAC이라는)된 내용들만 많이 나와서 구글에서 검색을 하였습니다.


구글 크롬 고객센터에서 해결방법을 알려주고 있습니다.

https://support.google.com/chrome/answer/2765944?hl=ko


MalwareBytes라는 프로그램을 설치하고 Scan한 이후에 재부팅, 브라우저 초기화, 다시 Scan하고 재부팅을 하였습니다.

https://www.malwarebytes.com/


멀웨어라는 용어가 악성 소프트웨어였군요 ㅎㅎㅎ;;;

아래와 같이 정의되어 있습니다.


바이러스나 트로이 목마와 같이 시스템에 해를 입히거나 시스템을 방해하기 위해 특별히 설계된 소프트웨어, 또는 데이터ㆍ컴퓨터ㆍ네트워크를 위험에 노출시킬 수 있는 코드. 악성 소프트웨어(malicious software), 또는 악성 코드(malicious code)에서 나온 말로, 남에게 피해를 입히기 위해 개발된 소프트웨어를 의미한다. 최근의 멀웨어는 첨부 파일을 열어 보거나, 소프트웨어를 다운받아 설치하는 종래의 통념을 벗어나 단지 유명 검색 페이지의 링크나 이미지를 클릭하기만 해도 원하지 않는 소프트웨어가 설치되고, 시스템이 하이재킹당할 수 있어 주의가 필요한다.

[네이버 지식백과] 멀웨어 [malicious software, malware] (IT용어사전, 한국정보통신기술협회) 


http://terms.naver.com/entry.nhn?docId=864358&cid=42346&categoryId=42346


최근 블로그 통계를 보면 유입 로그와 구글 분석에 비해서 방문자 수치가 많이 잡혀 이상하다고 생각하였는데 멀웨어 때문이였는지 의심스럽기도 합니다. 시간이 좀 더 지나보면 알겠죠? ㅎㅎ

Posted by resisa
,

동기부여

고찰 2017. 7. 6. 09:25

이번에는 개발하고 직접 관련된 주제는 아니지만 그보다 더 중요한 주제로 글을 써보려고 합니다. 바로 글 제목인 '동기부여'라는 주제입니다.

해외 출장이 있어 책을 보려고 고르던 중 작년에 사놓고 읽지 못했던 '최고의 리더는 사람에 집중한다'라는 책이 눈에 들어왔습니다. 이 책을 산 이유는 제가 뜻하지 않게 팀장이 되면서 의욕이 없어 보이는 팀원에게 도움을 주고 싶은 마음은 있는데 방법을 알고 싶어 구입하게 된 책입니다. 그런데 해당 시기에는 책을 제대로 보지 못했습니다. 이번 기회에 다시 책을 읽다가 긍정적인 충격을 받았습니다. 충격을 받은 내용은 목차의 제일 첫 부분입니다.


직원들을 동기부여 하는 일은 효과가 없다. 그들은 언제나 이미 동기부여 되어 있기 때문이다. 동기부여의 딜레마는 동기부여가 효과가 없는데도 불구하고 리더가 이에 대해 책임감을 느끼면서 발생한다.  

=> 헉. 어떻게 하면 동기부여를 할 수 있는지가 궁금했는데 동기부여가 이미 되어 있기 때문에 동기부여 하는 일은 효과가 없다는 말입니다.


동기부여의 본질을 탐구하다 보면 매우 중요한 진실 하나가 모습을 드러낸다. 사람들이 어떤 행동을 한다는 것은 이미 사람들이 행동을 하도록 동기부여가 되어 있다는 사실이다. 사람들은 언제나 동기부여가 되어 있다. 그러므로 동기부여가 되었는가 아닌가를 묻는 것은 자체가 이미 잘못된 질문이다. 우리는 그들이 행동을 하도록 동기부여 되었는가?” 하고 물어야 한다. 

=> 동기부여의 유무가 있는 것이 아니라는 의미이며 만약 어떤 사람이 어떤 일에 의욕이 없어 보인다고 가정 했을 경우 그 사람은 동기부여가 안된 상태가 아니라 의욕 없이 일을 하기로 결론(평가)을 내린 상태라는 것입니다.

시작부터 흥미롭게 느껴졌고 책의 목차에 기반 하여 아래와 같이 구분하여 이야기를 해보려고 합니다.


1. 동기부여는 어떻게 이루어지는가

먼저 동기부여의 평가 과정은 아래 그림으로 설명됩니다.

=> 해당 책에 대한 모든 리뷰를 보았는데 이부분에 대해서는 크게 주목을 하지 않는 것으로 보였습니다. 평가의 과정에서 '그냥 싫어, 좋아'의 저차원적인 표현보다는 위의 그림에서 처럼 정의나 이론으로 표현하는 것은 다른 사람들과의 의사소통에도 도움이 되고 고차원적인 표현이라고 생각합니다.

=> 사람들은 의식적이든 무의식적이든 동기부여에 대한 평가의 과정을 거칩니다. 평가의 과정은 어떤 상황에 대한 생각이나 느낌(인지 및 감정)이 들게 되면서 본인의 행복감에 영향을 미치고 행복감에 따라서 의도가 결정됩니다. 결국 의도는 본인이 어떻게 행동할지 결정하는 판단 기준으로 작용합니다.


동기부여는 반복적인 본인의 평가 과정을 통해서 이루어지며 긍정적인 평가 과정을 도출할 수 있도록 여러가지 연구를 통해서 아래와 같은 '동기부여 스펙트럼 모델'을 보여주고 있습니다.


=> 무관심, 외부, 강요는 부정적인 동기부여 관점으로 이전에 예로든 의욕 없이 일하기로 한 것은 무관심에 해당하는 내용입니다. 외부 관점은 금전적인 보상, 지위 상승과 같은 것들이며 강요(강요보다는 의무라는 표현이 더 적절해보입니다 : 동료의 의견) 관점은 회의에 모든 사람이 참여하기 때문에 참여한다는 등의 압박감, 이로 인한 죄책감, 불이익에 대한 우려라고 합니다.

=> 연계 관점은 학습과 같은 중요한 가치와 연결시키는 것을 의미하며 통합은 중요한 사안에 대해서 자신의 의견을 제시하는 것, 내재는 순수하게 무엇인가를 즐기는 것입니다.

참고 : 현실적으로 따져보면 직장이라는 곳에서 순수하게 재미있고 내재적인 만족감을 안겨주는 내재 동기부여 관점을 얻기란 어렵다. 따라서 가치관과 목적의식을 바탕으로 한 연계 동기부여 관점과 통합 동기부여 관점이 직장에서 경험할 수 있는 가장 실제적이고 중요한 동기부여의 특성에 가깝다.


2. 무엇이 사람들을 동기부여 하는가


동기부여의 진실은 사람들이 자율성, 관계성, 역량에 대한 심리적 욕구를 지나고 있다는 전제로부터 출발한다. 인간은 배움을 통해 성장을 추구하고, 일을 즐기기를 원한다. 누군가에게 긍정적으로 기여하기를 바라며, 오래 지속되는 인간관계를 지향한다. 

=> 결국에는 인간의 욕구(본성)에 의해서 동기부여가 된다는 말이며 이러한 심리적 욕구를 정리하면 아래와 같습니다.


A. 자율성(Autonomy)

 자신에게 선택권이 있다고 인식하고 싶은 욕구.

 자신의 의지가 자신의 의지에서 나왔다고 느끼고 싶은 욕구.


주의 : 자율성은 관리자의 지나친 자유방임이나 불간섭을 의미하지 않는다.

참고 : 직원들에게 부여되는 자율적 권한 중 20%는 저절로 주어지지만 80%는 직원 스스로 쟁취해야 한다는 것이 일반적인 법칙이다.


B. 관계성(Relatedness)

 타인에게 관심을 기울이거나받고 싶은 욕구.

 또한 타인과 연결되어 있다고 느끼고 싶은 욕구.

 자신보다 중요한 무언가에 기여한다고 느끼고 싶은 욕구


C. 역량(Competence)

 매일매일 닥치는 도전과 기회에 효과적으로 대응하고자 하는 욕구.

 점차 향상되는 기술(역량)을 보여주고 싶고자신이 성장하고 발전하고 있다고 느끼고 싶은 욕구


=> 여기서 가장 중요한 점은 세 가지 욕구 가운데 하나라도 결핍되면 다른 욕구에 부정적인 영향을 미친다는 사실입니다.


3. 드라이브의 위험

참고 : 동인이론(Drive Theory) : 인간은 결핍된 무언가를 얻기 위해 동기부여 된다.


드라이브라는 말이 이 책의 번역이 매끄럽지 못하다는 하나의 증거로 보입니다. 그렇다고 다른 좋은 말이 생각나는 것은 아닙니다. 드라이브를 당한다는 것에 대한 적절한 예는 마마보이라고 생각됩니다. 다른 사람을 만족시키기 위해서 강요 동기부여(엄마를 실망시킬지 모른다는 우려)가 되면 자율성이 상실되며 그로 인해 다른 심리적 욕구에도 부정적 영향을 미치게 됩니다.


심리적 욕구(자율성, 관계성, 역량)는 손상되기 쉽기 때문에 이를 보호할 수 있는 방법은 동기부여 스펙트럼의 세로축, 즉 자율적 제어입니다. 자율적 제어를 높이는 세 가지 방법을 정리하면 아래와 같습니다.


A. 마음 챙김(Mindfulness)

 현재 순간을 있는 그대로 수용적인 태도로 자각하는 것이다. 즉 주의를 기울이는 것이며, 현재 이 순간에 일어나고 있는 일을 자동적인 반응이나 판단 없이 알아차리고 이에 익숙해지는 것이다.


누구나 마음 챙김을 통해 고도의 자율성을 경험한다. 사안의 본질과 상관없는, 과거의 경험이 빚어낸 왜곡되고 독선적인 태도에서 자유로워질 수 있기 때문이다. 또 마음 챙김의 상태에서는 더 강력한 관계성을 느낀다. 이기적인 해석이나 선입견을 배제하고 다른 사람에게 진정으로 관심을 가질 수 있기 때문이다. 마음 챙김은 역량을 향상하는 역할도 한다. 반사적인 행동 대신 적절한 선택을 끌어내며 어떤 상황이든 더욱 잘 이해하고 정통하게 만들어준다.


B. 가치관(Values)

 무엇이 좋고 나쁘다고를 판단하는 기준이다.


C. 목적(Purpose)

 어떤 행동을 하는 의미 있는 이유다. 당신의 행동에 사회적 의의가 포함되어 있을 때, 그 행동의 목적은 고결한 의지와 더불어 작용한다.

=> 결국 동기부여 스펙트럼 모델이 해당 책에서 말하자고 하는 핵심적인 내용들을 모두 담고 있습니다. 심리적 욕구에 의해서 부정적 또는 긍정적 동기부여 관점으로 평가하게 됩니다. 심리적 욕구는 영속적이지 않고 손상되기 쉽기 때문에 자율적 제어를 높여 보호합니다.


여기서 책의 뒷부분의 내용을 간단하게 서술하고 마무리하려고 합니다.

동기부여에 대하여 하지 말아야 하는 것과 해야 하는 것을 알려주며 긍정 동기부여를 활성화하기 위해서는 리더부터 긍정적 동기부여가 되어야하며 그렇게 하기 위한 방법을 예를 통해서 설명해 줍니다. 관점 면담을 통해서 관점을 전환하여 긍정적 동기부여로 전환할 수 있는 방법도 소개해주며 긍정적 동기부여가 선사하는 약속, 결과에 대해서도 이야기합니다. 이러한 것들을 한단어로 말하면 동기부여 기술(기술이라는 단어가 조금 그러합니다;;)이라고 할 수 있으며 이 부분에 대해서 더 공부 + 적용을 해보고 기회가 된다면 좋은 사례(경험담)로 글을 쓸 수 있었으면 좋겠습니다.


Posted by resisa
,

오랜만에 글을 쓰고 있네요 ㅎㅎ 12월이 지나면 어느덧 저도 개발 10년에 접어들게 됩니다. 믿기지 않네요 ㅎㅎㅎ

최근 회사를 이직하고 이제 적응(출근적응 ㅎㅎ)도 되고 글쓰기 관련 도서를 읽으면서 문득 블로그질을 하고 싶다는 생각이 들었습니다.


신규 프로젝트에 많은 오픈 소스를 사용하다 보니 관련 글을 쓰려고 합니다. 먼저 오픈 소스를 사용하는 것에 대한 이야기를 하려고 합니다. 어떤 개발자 분이 오픈 소스 관련 대화를 하다가 '의미있는 바이너리를 만들어내야 한다.'라는 이야기를 한적이 있습니다. 이 말에 대략적인 의미는 아래와 같습니다.

1. 오픈 소스처럼 의미있는 것을 만드는 개발자가 되어야 한다.

2. 오픈 소스가 모든 것을 해결해주지는 못한다. 즉 한계가 존재하여 직접 만들 수 밖에 없다.


1번은 이상적이고 멋있는 개발입니다. 아마도 이분은 2번에 더 많은 의미를 실어서 이야기를 한다고 느껴졌습니다. 


언제부터인지 개발자를 보면 1. 기술에 관심이 많은 개발자 2. 업무에 관심이 많은 개발자로 분리가 됩니다. 교과서적인 이야기지만 기술 + 업무가 조화를 잘 이루어야 진짜 의미있는 결과물이 나옵니다. 1번이 강한 사람은 2번에 관심이 없고 2번이 강한 사람은 1번에 관심이 없습니다. 모두가 그런 것은 아니지만 제가 봐온 많은 개발자들은 편차가 심합니다. 아마도 위에 언급한 분은 기술에 관심이 많고 업무에는 별 관심이 없는 개발자입니다. 기술에만 관심을 가져도 되는 분야가 있습니다. 하지만 업무가 중요한 부분을 기술에만 관심있는 개발자가 설계를 하고 리드해가는 과정과 그 결과물을 보면서 '앙꼬없는 진빵'이라는 생각이 들었습니다. 누구를 위한 기술이고 무엇을 위한 기술인지 알수가 없었습니다. 물론 저의 생각이고 시야가 좁아 그런걸 수도 있습니다. 업무가 중요한 분야에서 업무에 대한 관심과 분석 없이는 좋은 결과물을 만들어낼 수 없다고 확신합니다.


그럼 이제 본론?!으로 들어가서 오픈 소스 선택에 대한 기준에 대해서 이야기를 해보겠습니다.

동일한 기능을 제공하는 오픈 소스들이 많이 있습니다. 

예를 들어 IoC Container만 하더라도 20여 가지가 넘습니다.

저는 아래와 같은 기준으로 오픈 소스를 선택합니다.

1. 성능

2. 기능

3. 레퍼런스 사이트

4. 문서, 커뮤니티 기타 등등


1번째로 성능입니다. 여기서 순서는 우선순위를 의미합니다. 많은 기능을 가지고 있더라도 성능이 떨어지면 제외가 된다는 의미입니다. 성능을 가장 우선순위에 놓은 이유는 성능에 관련된 문제가 발생하게 되면 사용한 오픈 소스에 전체 구조 및 문제점을 분석 해야하고 수정을 하면 수정으로 인한 부작용까지 감수해야 하는 어려움 때문입니다. 기능에 대한 단순 버그를 수정하는 것과 근본이 흔들리는 성능은 큰 차이점이 있다고 생각합니다. 그리고 의외로 기능만 보고 오픈 소스를 선택하는 경향이 있습니다. 기능이 되기 때문에 일단 도입을 해서 사용을 하다가 성능 때문에 고생을 한 경우를 몇 번 보았기 때문이기도 합니다. 성능을 고려할 때 절대적인 수치로만 고려할 부분은 아니고 상대적인 수치로 조금 성능이 낮더라도 기능이 우수한 오픈 소스를 선택하는 경우도 있습니다.

2번째는 역시 기능입니다. 원하는 기능이 되지 않으면 당연히 의미가 없습니다. 기본 기능을 살펴보고 당장은 사용하지 않더라도 확장성을 고려해서 선택합니다.

3번째로는 해당 오픈소스를 사용한 레퍼런스 사이트입니다. 예를 들어 Dapper와 같은 매퍼는 Stackoverflow에서 사용한 오픈 소스로 레퍼런스 사이트만 들어도 신뢰가 생기는 오픈소스입니다.

마지막으로는 문서, 커뮤니티, 사용성 등등 고려해야할 요소들이 있습니다. 


위의 내용을 기준으로 제가 이번에 선택한 IoC Container는 SimpleInjector입니다.

1번째 성능에 의해서 SimpleInjector와 Lightinject를 선택하였습니다. 2번째 기능에 대해서 IoC Container 본연의 기능과 추후의 확장가능한 기능인 AOP를 둘 다 제공합니다. 3번째는 잘 모르겠고 문서, 커뮤니티 등등 우열을 가리기가 쉽지 않았습니다.

작년에 LightInject를 간단하게만 사용해보았고 이번에 검토를 하면서 SimpleInjector를 사용해보았습니다. 사용해본 느낌은 LightInject는 유연한 느낌이고 SimpleInjector는 엄격한 느낌입니다. 이런 느낌의 근거는 의존성 주입이 되는 객체가 1개 또는 N개에 따라서 컬렉션(List<T>)으로 받을 수 있는지 없는지에 대한 차이 때문입니다. 전자는 받을 수 있고 후자는 예외가 발생합니다.

평상시에 저라면 유연한 것을 선택했을 확률이 높은데 컨테이너는 엄격해야 한다는 생각이 들었습니다.

이번에 검토를 하면서 이전에 사용해봤던 Spring, Unity, Windsor, MEF는 유물이 된 느낌이였습니다. 일단 성능 수치가 상대가 안되었고 요즘 아이들은 이름처럼 간단하고 가벼운 느낌이 들었습니다.


IoC Container로 프로젝트를 처음부터 해본적이 없었는데 적용을 해보면서 경험해봐야만 알 수 있는 내용과 왜 사용하였는지에 대해서도 해당 프로젝트의 1차 개발이 끝날때쯤(한3월초? ㅎㅎ) 작성해보도록 하겠습니다.

Posted by resisa
,
몇일 전부터 MSDN사이트가 정상적으로 열리지 않는 현상이 있었습니다. 저는 IE와 크롬을 사용하는데 둘 다 동일하게 발생하는 현상입니다. 그래서 검색을 해봤는데 인터넷 정보 삭제를 하면 된다는 글을 보고 삭제를 하니 정상적으로 MSDN 사이트가 보이는 듯 싶었습니다. 그래서 해결이 되었구나 싶었는데 검색을 한 이후에 검색 결과를 선택하고 나면 이전과 동일하게 아래의 메세지를 보여주었습니다.

 The specified CGI application encountered an error and the server terminated the process.

그래서 다시 검색을 해보았지만 별다른 해결책은 없어 보였습니다. 검색 중에 짧게 쿠키 때문이라는 말이 보여서 크롬에서 먼저 아래와 같이 쿠키 설정을 해보았습니다.

크롬

옵션 -> 고급설정 -> 콘텐츠 설정 -> 쿠키(예외관리)


위의 그림과 같이 msdn사이트에 대한 쿠키 쓰기를 차단해주었더니 해결이 되었습니다.
이미 저장된 쿠키가 있을 수도 있기 때문에 인터넷 사용정보 삭제(전체)를 하신 후에 하시면 됩니다.

IE
먼저 아래와 같이 인터넷 사용정보를 삭제해주세요.
도구 -> 인터넷 옵션 -> 일반탭 ->  검색기록(삭제)


여기서 중요한 것은 즐겨찾기 웹 사이트 데이터 보존에 체크를 해제하셔야 합니다. 이게 안되면 MSDN 첫 페이지가 제대로 열리지 않습니다. 그리고 난 이후에 쿠키에 대한 설정을 아래와 해주시면 됩니다.

도구 -> 인터넷 옵션 -> 개인 정보 탭 -> 사이트


MSDN 사이트를 차단해야 MSDN에서 검색을 할 수 있다니. --;;
여튼 이 모든게 MS 때문인 것으로 보입니다. ^^; 



 
Posted by resisa
,