• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

소프트웨어

[App 개발] MSN 메신저 프로토콜 해부 1/3

본문

원본은 여기에 있습니다: http://www.devarticles.com/c/a/HTML/The-MSN-Messenger-Protocol-Torn-Apart-Part-1/

----------------------------------------------------------------------------------------------------------------

MSN 메신저 프로토콜 해부 1/3

여러분만의 MSN 메신저를 만들고 싶습니까? 필자는 이 글에서 메신저 프로토콜을 알기 쉽게 분석해 보겠습니다. 이 글은 모든 개발자들을 위한 것입니다. 어느날 밤 저는 책상에 앉아서 “이노무 메신저는 어떤 원리로 움직이는 걸까?” 생각해 보았습니다. 저는 만약 제가 야후나 MSN 메신저 클라이언트를 만들거나, 혹은 어떻게 메신저 프로그램이 동작하는지 이해할 수 없을까 상상했습니다. 그 첫 번째 단계로 포트 모니터를 이용하여 MSN 메신저를 동작시키면서 패킷 전송 과정을 기록하였습니다. 그리고 제가 동작했던 데이터 전송 기록을 살펴보기 위하여 로그파일을 열어보았습니다.

당연히 처음 그 파일을 보면서 아주 황당함을 느꼈습니다. 그리고 저는 죽치고 앉아서 각각의 패킷이 어떤 동작을 뜻하는지를 파해쳐 나가는 방법 대신, 온라인에서 뭔가 정보가 없는지 찾아보기 시작했습니다. 온라인에는 제가 기대하는 이상의 정보들이 담겨 있었습니다.

제가 말씀드렸던 프로그램은 포트 모니터이지 포트 스캐너가 아닙니다. 그 두 가지 차이를 아시겠지요. 포트 스캐너는 어떤 호스트에 어떤 포트가 열려있는지를 알려주는 프로그램입니다. (아무 호스트나 마구 스캔하지 마십시오. 상대편에서 그 사실을 알게 되면 곤경에 처할 수 있습니다.) 포트 모니터는 호스트의 어떤 특정한 포트의 활동 상황을 모니터하는 프로그램입니다. 이것이 제 컴퓨터의 MSN 메신저를 모니터할 때 쓰던 프로그램입니다.

다른 메신저도 아니고 왜 하필 MSN 메신저를 택하였는가? 첫째, 다른 메신저보다 MSN 메신저를 제가 많이 사용하기 때문입니다. 둘째, 인터넷을 검색해보니 놀랍게도 마이크로소프트가 유용한 MSN 메신저의 공식 프로토콜 요약본을 공개했기 때문입니다. 그리고 인터넷에서 MSN 메신저 프로토콜에 대해서 간략하게 설명하고 있는 유용한 예제들을 살펴보았습니다.

저는 어떤 패킷이 어떤 역할을 하고, 두 개의 소스에서 어떻게 데이터가 전송되는지를 풀어 설명하려는 것이 아닙니다. 네트웍 강좌가 아니니까요. 이 강좌를 읽으시려면 기본적인 네트워킹 관련 지식이 있어야 합니다. 이 글에서는 패킷이라든지 소켓, 포트, 포트 스캐너, 포트 모니터 등의 네트웍 용어들이 등장합니다.

진행하는 동안 최대한 자세히 설명하겠습니다만, 그저 MSN 메신저를 만들어보겠다는 일념에 사로잡힌 왕초보 분들은 사양하겠습니다. 이 글은 초심자를 위한 글은 아닙니다.

MSN 메신저는 TCP/IP 통신규약을 사용합니다. 클라이언트에서 서버로 전송되는 모든 데이터는 완전히 텍스트입니다. 따라서 컴퓨터에서 전송되는 메세지를 모니터해보면 실제로 전송되는 데이터를 읽을 수 있습니다.

시작하기 전에, MSN 메신저 프로토콜의 기본 개념을 소개하겠습니다. 모두 세 개의 서버가 전체 과정에 사용됩니다.

디스패치 서버
맨 먼저 연결해야 하는 서버입니다. 이 서버는 클라이언트의 기본 인증을 담당합니다. 64.4.13.17 (FQDN 으로 하면 messenger.hotmail.com) 에 포트번호 1863 으로 디스패치 서버에 접속합니다.

통지 서버
디스패치 서버로부터 기본 인증을 끝낸 후 디스패치 서버는 통지 서버의 주소를 클라이언트에 전송합니다. 클라이언트는 프로그램이 종료할 때까지 통지 서버에 연결되어 있어야 합니다. 통지 서버의 기본 기능은 클라이언트 세션의 상세한 내용을 저장하는 것입니다. 컨택 리스트 관리, 상태 변환, 이메일 수신 등의 기능이 통지 서버로부터 전송됩니다.

스위치보드 서버
스위치보드 서버는 클라이언트와 상대방의 챗 세션을 연결할 때 사용됩니다. 예를 들어 “Fred” 가 “Tom” 에게 메세지를 보낸다고 하면, 다음과 같은 과정이 발생하게 됩니다.

•        프레드는 통지 서버에게 톰과 대화하고 싶다는 요청을 보냅니다.
•        통지 서버는 프레드(송신인)에게 스위치보드 서버의 주소를 보냅니다.
•        곧바로 톰(수신인)은 통지 서버로부터 프레드(송신인)이 접속해있는 같은 스위치보드 서버의 주소를 통지합니다.
•        같은 서버에 접속하였으면 인스턴트 메세징을 시작합니다.

이러한 내용은 네트웍에서 주고받는 패킷 데이터를 보는 것만으로 해독해 내기에는 어려운 것입니다. 지금 당장 포트 모니터를 가지고 어떤 데이터가 전송되는지를 가지고 전체 MSN 메신저 프로토콜을 분석해 나간다고 해 보십시오. 쉽지 않은 일입니다. 한 번 전체 글을 다 읽고 시도해 보십시오. 내용을 모두 이해하고 난 다음 여러분 컴퓨터에서 전송되는 패킷을 관찰해 보면 지금 당장 해 보는 것보다 훨씬 이해가 빠를 것입니다.

성능 좋은 포트 모니터도 하나 구비하십시오. 제가 사용하고 있는 Uasoft 의 sniffer 를 추천합니다. 패킷 중에서 어떤 것만 골라서 모니터하는 기능도 있습니다. 반드시 MSN 메신저가 실제로 동작하고 있는 TCP 와 IP 패킷만 관찰하십시오.

명령어
클라이언트와 서버가 서로 통신을 하려면 그에 필요한 명령어를 전송해야 합니다. 모든 명령어는 3글자의 예약어로 구분됩니다. 이 예약어로 수신측은 이 명령이 무엇인지를 구분할 수 있습니다. 명령어 문자열의 맨 마지막은 줄바꿈 글자가 포함되어 수신측으로 하여금 명령이 끝났음을 알려줍니다. 여기에는 몇 가지 예외가 있는데, 이것에 대해서는 나중에 설명하겠습니다. 명령어의 기본 문법은 다음과 같습니다.

(명령 예약어)(트랜젝션 ID)(값)(줄바꿈)

트랜젝션 ID
클라이언트가 서버로 보내는 어떤 명령어들은 서버측의 응답이 필요한 경우가 있습니다. 간단히 예를 들어 보겠습니다. 서포트 티켓 시스템을 인터넷에서 사용해보신 적 있으신지요? 동작 원리가 어떻던가요? 시스템에 질의문을 넣게 되면 티켓 아이디가 발급됩니다. 입력한 질문의 답변이 돌아올 때 어떤 질문이 답변되었다는 것을 알려주기 위하여 서포트 티켓 아이디가 같이 전송되어 옵니다.

MSN 메신저의 경우에도 유사합니다. 클라이언트가 서버로 명령을 전송할 때 트랜젝션 아이디를 명령과 함께 보냅니다. 숫자 0 부터 4294967295 사이의 어떤 값도 상관 없습니다. 서버는 입력된 명령에 대한 응답과 함께 명령에 붙였던 트랜젝션 아이디를 같이 보냅니다. 대부분의 경우 서버는 한 번의 명령에 여러 번 응답할 수 있습니다.

서버가 클라이언트로 명령을 보내는 경우는 어떤가? 대부분 명령들은 서버에서 클라이언트로 전송됩니다. 이런 경우 서버는 트랜젝션 아이디 0 을 보냅니다. 이런 경우 서버는 클라이언트로부터의 응답을 필요로 하지 않습니다. 그 반대의 경우가 챌린지 커맨드입니다. (잠시 후에 설명하겠습니다.)

에러
에러가 발생했을 때 서버는 에러 명령을 전송합니다. 에러 명령은 에러가 발생된 명령의 트랜젝션 아이디와 함께 세 자리 숫자가 전송됩니다. 모든 에러 명령에는 발생된 에러에 대한 간략한 설명이 첨가됩니다. 서버에서 클라이언트로 전송되는 기본적인 에러 명령의 형식은 다음과 같습니다.

(에러 코드)(트랜젝션 아이디)(에러 설명)

마이크로소프트 공식 요약문서에 에러 코드와 설명이 수록되어 있습니다. 저는 맨 마지막 페이지에 부록으로 수록해 놓았습니다.

붉은색으로 표시한 메세지들이 클라이언트에서 서버로 전송되는 메세지들입니다. 초록색으로 표시된 명령들은 서버로부터 클라이언트로 전송되는 메세지들입니다. (여기서는 클라이언트=>서버, 클라이언트<=서버 로 표시하겠습니다. 역자주)

프로토콜 버젼 선택
메신저 프로토콜의 첫 번째 단계는 접속입니다. 클라이언트는 디스패치 서버로부터 인증을 받아야 합니다. 먼저 디스패치 서버 64.4.13.17 (messenger.hotmail.com), 포트번호 1863 으로 접속을 시도합니다. 접속이 완료되면 첫 번째로 VER 명령을 서버로 전송합니다. 이 명령은 다음과 같습니다.

클라이언트=>서버:
VER 0 MSNP7 MSNP6 MSNP5 MSNP5 CVR0

이 명령은 클라이언트와 서버간의 통신 규약 버젼을 결정하는 것입니다. 클라이언트가 사용 가능한 버젼을 서버로 보냅니다. 명령 예약어는 VER, 트랜젝션 아이디는 0 입니다.

서버는 다음과 같은 메세지를 전송합니다.

클라이언트<=서버:
VER 0 MSNP7

이 명령을 접수함으로써 서버와 클라이언트 간에 어떤 통신 규약을 사용할지를 결정합니다.

인증 프로토콜의 결정
통신 규약 버젼이 결정되었으면 이제 인증 프로토콜을 결정합니다. INF 명령을 서버로 다음과 같이 전송합니다.

클라이언트=>서버:
INF 1

이 명령은 어떤 인증 방법을 사용할 것인지를 서버에 물어보는 것입니다. 이 명령에는 특정한 트랜젝션 아이디 1 을 첨가합니다.

서버는 다음과 같이 응답합니다.

클라이언트<=서버:
INF 1 MD5

이제 서버와 클라이언트는 MD5 인증 방식을 사용하기로 결정하였습니다.

MD5 는 암호화 알고리듬입니다. 이 알고리듬은 텍스트를 “메세지 다이제스트” 기법으로 암호화된 문자열을 생성합니다. 이 알고리듬을 따로 구현할 필요는 없습니다만, 사용하고자 하는 언어에 해당되는 API 를 구비하여 텍스트를 MD5 알고리듬으로 암호화된 텍스트로 바꾸어 줍니다. MD5 에 대해서 당장은 이 정도만 알고 계셔도 됩니다.

통지 서버의 주소
이제 USR 명령을 디스패치 서버에 다음과 같이 전송합니다.

클라이언트=>서버:
USR 2 MD5 I you@hotmail.com

이제 서버로부터 통지 서버의 주소와 포트 번호를 부여받게 됩니다. 고유한 트랜젝션 아이디 2, 인증 프로토콜, 접속하려는 사람의 이메일 주소가 같이 전송됩니다. ‘I’ 는 USR 명령의 인증 과정을 흉내낸다는 뜻입니다. 메세지를 주고 받기 위해서는 전체 인증 과정을 거쳐야 합니다.

디스패치 서버에서는 인증 과정의 일부분만 수행됩니다. 실제 로그인과 패스워드 대조는 통지 서버에서 수행됩니다.

서버는 다음과 같이 응답합니다.

클라이언트<=서버:
XFR 2 NS 2.3.4.5:1234

서버는 USR 명령의 응답으로 XFR 명령을 전송합니다. XFR 명령은 서버 변경 명령입니다. ‘NS’ 는 통지 서버라는 뜻입니다. IP 주소와 포트 번호가 뒤따라 옵니다. 이 명령은 접속해야 할 통지 서버의 주소를 알려주는 명령입니다.

유저와 패스워드 인증
통지 서버의 정보를 획득한 다음에는 디스패치 서버에서 수행한 것과 비슷한 인증 과정을 다음과 같이 수행합니다.

클라이언트=>서버:
VER 3 MSNP7 MSNP6 MSNP5 MSNP5 CVR0
클라이언트<=서버:
VER 3 MSNP7
클라이언트=>서버:
INF 5
클라이언트<=서버:
INF 4 MD5
클라이언트=>서버:
USR 5 MD5 I you@hotmail.com

위 명령들이 무슨 뜻인지 다 기억하실 것입니다. 지금 우리는 통지 서버에 메세지를 전송하고 있습니다. 각각의 트랜젝션 아이디를 보십시오. 앞에서 사용한 것과 다른 아이디를 쓰고 있습니다. 간단한 업 카운터 변수를 마련하여 클라이언트에서 전송하는 트랜젝션 아이디를 하나씩 증가시키면 됩니다.

기본 인증 메세지를 통지 서버에 보내고 나면 다음과 같은 메세지를 전송받게 될 것입니다.

클라이언트<=서버:
USR 5 MD5 S 0987654321.123456789

서버 쪽에서 USR 명령을 전송하였습니다. 우리가 USR 명령을 사용할 때 썼던 트랜젝션 아이디, 인증 프로토콜, 그리고 챌린지 스트링이 전송되었습니다. ‘S’ 는 subsequent 의 약자입니다. 이 말은 이미 인증 과정이 진행중이며, 이 명령은 뒤따라오는 인증 명령 중의 하나라는 뜻입니다. 이 명령에는 챌린지 스트링이라고 불리는 MD5 해쉬가 따라붙습니다.

이제 이 챌린지 스트링과 패스워드를 묶어서 MD5 알고리듬을 이용하여 소문자 16진수 해쉬를 생성합니다. 앞서 말씀드린 대로 MD5 암호화 기법이 구현된 API 를 사용하실 수 있습니다. 생성된 해쉬를 이제 서버로 전송합니다.

클라이언트=>서버:
USR 6 MD5 S 45tc56cd52aq6fcdsw3cdkl3ds3dddsc

명령 예약어 USR 로 시작하는 명령과 새로운 트랜젝션 아이디를 보냅니다. ‘S’ 키워드는 뒤따라오는 인증 메세지라는 것을 뜻합니다. 마지막으로 서버로부터 전송된 챌린지 스트링과 패스워드를 결합한 MD5 해쉬를 전송합니다.

이 과정이 실패하면 서버는 인증 실패 에러를 전송해 옵니다. 그렇지 않고 인증이 성공적으로 이루어졌으면 다음과 같은 메세지가 전달됩니다.

클라이언트<=서버:
USR 6 OK you@hotmail.com NevilleMehta

서버는 마지막 USR 명령어와 함께 트랜젝션 아이디, 이메일 주소, 그리고 로그인 한 사람의 대화명이 전달됩니다. 키워드 ‘OK’ 는 유저가 인증되었음을 뜻합니다.

인증이 종료된 후에는 현재 상태를 변경해야 합니다. 여기에 사용하는 명령 예약어는 CHG 입니다. 이 명령어로 우리 현재 상태를 변경합니다. 다음은 초기 상태를 변경하는 명령을 서버로 보내는 것입니다.

클라이언트=>서버:
CHG 7 NLN

먼저 명령 예약어 CHG 를 쓰고 그 다음 고유한 트랜젝션 아이디, 그리고 전달인수 ‘NLN’ 을 보냅니다. NLN 은 서버에게 현재 상태를 온라인으로 바꾸라는 명령입니다. NLN 같은 종류의 명령어는 여러 가지가 있습니다. 예를 들어 우리 상태를 보이지 않는 상태로 만들도록 서버에게 보내는 명령은 다음과 같습니다.

클라이언트=>서버:
CHG 7 HDN

HDN 은 우리 상태를 Hidden/Invisible 로 바꾸라는 전달 명령입니다. 마이크로소프트 공식 프로토콜 문서에는 어떤 파라미터가 어떤 역할을 하는지 자세히 설명되어 있습니다. 이 글 마지막에 문서를 첨부하였습니다.

서버는 클라이언트에게 사용자 상태가 바뀐 것을 확인하는 메세지를 보냅니다.

클라이언트<=서버:
CHG 7 HDN

서버가 보낸 회신에는 명령 예약어, 트랜젝션 아이디, 그리고 유저의 현재 상태 값이 들어있습니다.

중요한 서버 메세지 수신
지금까지 클라이언트는 서버로부터 몇 가지 메세지들을 수신할 차례입니다. 지금까지는 서버가 보내는 명령어들을 취급하였습니다만, 메세지들은 다른 포맷으로 되어 있습니다. 살펴보았던 대로 명령어 포맷은 다음과 같습니다.

<COMMAND IDENTIFIER> <TRANSACTION ID> <PARAMETERS>

서버가 보내는 메세지는 위와 같은 형식을 취하고 있지 않습니다. 서버로부터 기본 상태에 대한 값을 통지받고 난 다음 서버는 다음과 같은 메세지 명령을 전송합니다.

MSG Hotmail Hotmail 450
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile; charset=UTF-8
LoginTime: 1034601891
EmailEnabled: 1
MemberIdHigh: 93760
MemberIdLow: -52562410
lang_preference: 1033
preferredEmail: neville2150895@hotmail.com
country: IN
PostalCode:
Gender: m
Kid: 0
Age: 19
BDayPre: 2
Birthday: 30245
Wallet: 0
Flags: 1031
sid: 507
kv: 4
MSPAuth: 4voZp65RUDJlf6KzMhWAgJKts*N3Wn8OVQB6AW
JfFNos3D0een95XDaOLIFTt3q6!L7M*cdoHvKQ6*2NrYOaMG7Q$$

이것이 메세지 명령어의 모습입니다. 처음 줄에 보시면 MSG 가 있는데, 이것은 명령 예약어입니다. 그 다음 두 개의 인수, Hotmail Hotmail 그리고 마지막으로 숫자 450이 있습니다. 450은 현재 명령어 줄(MSG 줄)을 뺀 나머지 메세지의 길이를 바이트 수로 표시한 것입니다.

그 다음에는 MIME-Version 과 Content-Type 이 있습니다. MIME-Version 은 언제나 동일한 값입니다만, Content-Type 은 여기서는 “text/x-msmsgsprofile” 이라고 되어 있습니다. 메세지의 문자 세트는 바로 뒤에 붙어있습니다. 그 밑으로 따라오는 모든 문자행은 마임 본문입니다.

서버가 보낸 메세지에는 로그인한 유저의 .NET 패스포트 정보가 담겨 있습니다. 따라서 메세지 본문에는 로그인한 유저의 나이, 성별, 생일, 우편번호 등이 포함됩니다.

그 외에도 다음과 같은 메세지를 수신하게 됩니다.

MSG Hotmail Hotmail 221
MIME-Version: 1.0
Content-Type: text/x-msmsgsinitialemailnotification; charset=UTF-8

Inbox-Unread: 0
Folders-Unread: 2
Inbox-URL: /cgi-bin/HoTMaiL
Folders-URL: /cgi-bin/folders
Post-URL: http://www.hotmail.com

이 메세지에도 다른 메세지 명령과 마찬가지로 명령 예약어, Hotmail Hotmail 인수, 그리고 첫 번째 줄을 뺀 나머지 본문의 바이트 수가 전송됩니다. 그 다음 항상 동일한 마임 버젼, 그리고 Content-Type 이 여기서는 “text/x-mmsmsgsinitialemailnotification” 이라고 전송되었습니다. 그 다음 문자 세트가 표시됩니다.

이 메세지에는 사용자의 받은 편지함에 대한 정보가 담겨 있습니다. 메신저에 로그인하게 되면 아직 읽지않은 이메일이 있다는 것을 통지받게 되는데, 이 메세지가 바로 그 역할을 하는 것입니다. 위에 보시면 “Inbox-Unread: 0” 이 마임 본문에 들어있는데, 받은 편지함에 안 읽은 이메일이 0 개 있다는 뜻입니다. 그 외에도 받은 편지함에 대한 몇 가지 사항이 수록되어 있습니다.

어떤 메세지들은 여러분이 만드는 클라이언트에서 취급하고 싶지 않은 것일수도 있습니다. 저는 일단 전체 과정이 어떻게 흘러가는지를 설명하기 위하여 이 내용을 삽입했습니다. 여러분이 만드는 메신저에서 새 이메일이 도착했음을 사용자에게 알리도록 만드는 것은 여러분 마음입니다. 그런 경우에는 이 메세지들은 무시해 버리면 됩니다. 서버에서 첫 번째로 전달되는 사용자의 .NET 패스포트 정보에 대한 메세지는 사실 쓸모가 없습니다.

리스트 요청
이제 친구 목록을 요청할 차례입니다. 그 전에 먼저 네 가지 종류의 리스트에 대해서 말씀드리겠습니다. 첫째, 포워드 리스트 ‘FL’ 이 있습니다. 이것은 여러분의 컨택 리스트에 있는 유저들입니다. 둘째, 리버스 리스트 ‘RL’ 입니다. 이것은 현재 당신을 컨택 리스트에 담고 있는 사람들의 리스트입니다. 셋째, 얼라우 리스트 ‘AL’ 입니다. 이것은 당신의 온라인 상태를 볼 수 있도록 허용한 사람들의 리스트입니다. 마지막, 블럭 리스트 ‘BL’ 입니다. 이것은 당신이 막아 놓은 사람들의 리스트입니다. 요약해 보면 다음과 같습니다.

•        FL – 포워드 리스트 (나의 컨택 리스트에 있는 사람들 목록)
•        RL – 리버스 리스트 (나를 컨택 리스트에 갖고 있는 사람들 목록)
•        AL – 얼라우 리스트 (내 상태를 보도록 허용된 사람들 목록)
•        BL – 블럭 리스트 (내 상태를 볼 수 없는 사람들 목록)

LST 라는 명령은 위에서 설명한 리스트를 얻는 명령입니다. 유저의 포워드 리스트를 서버에 요청한다면 다음과 같이 명령을 내립니다.

클라이언트=>서버:
LST 8 FL

먼저 명령 예약어 LST 를 써 넣고, 그 다음 명령의 트랜젝션 아이디를 넣습니다. 마지막에 서버에서 얻고자 하는 리스트의 코드 두 글자를 넣습니다. 위의 명령에서 FL 대신 서버에서 얻고 싶은대로 RL, AL, BL 을 넣어도 됩니다.

클라이언트<=서버:
LST 8 FL 35 1 4 yourpal1@hotmail.com Pal1 0
LST 8 FL 35 2 4 yourpal2@hotmail.com Pal2 1
LST 8 FL 35 3 4 yourpal3@hotmail.com Pal3 2
LST 8 FL 35 4 4 yourpal4@hotmail.com Pal4 1

서버는 목록에 있는 모든 사용자를 전송해 줍니다. 현재 리스트에 네 명이 있으므로 네 줄이 전송되었습니다. 이제 전달 인수가 어떤 의미인지를 보겠습니다.

먼저 명령 예약어 LST 가 있고, 트랜젝션 아이디 (우리가 서버로 보낸 아이디와 동일. 이것은 우리가 서버로 보낸 LST 명령에 대한 응답으로서 보내어지는 전송이라는 것을 표시함) 가 있습니다. 그 다음에 있는 35 라는 숫자는 리스트 버젼 아이디라고 하는 것입니다.

그 다음 사용자의 일련 번호인데, 단순한 카운터입니다. 그 다음에 있는 숫자는 리스트에 담겨 있는 유저의 총 수입니다. 여기서는 네 명이므로 4 입니다. 계속해서 리스트에 있는 유저의 이메일 아이디, 그 다음은 유저의 대화명, 마지막으로 그룹 아이디가 따라옵니다.

아직 그룹에 대해서 설명드리지 않았으므로 일단 그대로 두겠습니다. 마지막 인수는 해당 유저의 그룹 아이디입니다.

유저의 상태
메신저에 접속을 하고 나면 서버는 리스트에 있는 유저들의 상태를 전송합니다. 일단 유저의 초기 상태를 변경하는 CHG 명령을 사용합니다. 명령은 다음과 같습니다.

클라이언트=>서버:
CHG 7 HDN

명령과 함께 사용된 트랜젝션 아이디는 7입니다.

서버가 컨택 리스트에 있는 사용자의 상태 변경을 통지할 때에는 우리가 서버에 CHG 명령을 전송할 때 사용되었던 트랜젝션 아이디와 함께 필요한 정보를 전송합니다. 여기서는 7이 되겠지요. 살펴보겠습니다.

클라이언트<=서버:
ILN 7 BSY yourpal1@hotmail.com Pal1
ILN 7 AWY yourpal2@hotmail.com Pal2

이것은 우리가 메신저에 접속했을 때 서버로부터 전송되어오는 명령어들입니다. 일단 두 명의 유저가 컨택 리스트에 있다고 가정해 봅시다. 각 줄마다 유저의 상태를 표시하고 있습니다. 먼저 명령 예약어 ILN 으로 시작합니다. 이것은 포워드 리스트에 있는 유저의 초기 상태를 통지하는 데 사용되는 명령입니다. 그 다음 트랜젝션 아이디 7 (왜 7인지는 위에서 설명했습니다.), 그리고 유저의 현재 상태가 전송됩니다. 첫 번째 줄에 있는 BSY 는 Busy 를 뜻합니다. 두 번째 줄에 있는 AWY 는 Away 입니다. 유저의 현재 상태를 뜻하는 인수에는 여러 종류가 있습니다. 예를 들어 NLN 은 온라인, AWY 는 어웨이, PHN 은 전화받는 중 등입니다.

인수의 종류와 의미에 대해서는 문서 뒤에 첨부한  마이크로소프트의 공식 프로토콜 문서에 수록되어 있습니다. 그리고 그 뒤에 유저의 이메일 아이디와 대화명이 전달됩니다.

메신저는 그 외에도 서버로부터 전송되는 수많은 명령들을 처리할 준비가 되어 있어야 합니다. 클라이언트는 서버에서 전송되는 명령어를 인식, 분석, 행동하여 어떠한 오류도 범하지 않도록 해야 합니다.

유저의 상태
유저가 온라인 상태가 되면 MSN 메신저는 상대방이 온라인이 되었음을 통지합니다. 왜냐하면 서버가 언제 유저가 온라인이 되었는지 알려주기 때문이고, 클라이언트는 그 메세지를 처리할 준비가 되어 있기 때문입니다. 서버는 NLN 과 FLN 명령을 가지고 유저의 실시간 상태를 통지합니다.

클라이언트<=서버:
NLN AWY yourpal1@hotmail.com Pal1
FLN yourpal2@hotmail.com

첫 번째 명령어를 보시면 NLN 이라는 예약어로 시작합니다. 이것은 유저가 온라인이 되었거나 온라인 상태가 변경되었음을 알려주는 명령입니다. NLN 명령에는 트랜젝션 아이디가 없는데 왜냐하면 이 메세지는 응답(이 명령에 대한 응답으로 서버에게 명령을 전송)이 필요하지 않기 때문입니다. 이것은 단지 유저의 상태가 변했다는 것을 통지하는 것 뿐입니다. 이제 유저의 현재 상태를 알게 되었습니다. 여기서 ‘AWY’ 는 유저의 상태가 away 로 변경되었다는 뜻입니다. 그 다음 해당 유저의 이메일 아이디와 대화명이 출력됩니다.

두 번째 명령을 보시면 FLN 이라는 예약어로 시작됩니다. 이것은 유저가 오프라인이 되었다는 것을 클라이언트에게 알려주는 것입니다. 여기서도 명령어에 트랜젝션 아이디는 없습니다. 그 외에 전달되는 인수는 오프라인이 된 유저의 이메일 아이디입니다.

챌린지
MSN 메신저가 동작하고 있는지를 확인하기 위해서 서버는 주기적으로 챌린지 신호를 전송합니다. 이 명령어는 무작위 횟수로 전송됩니다. 전달되는 명령어가 어떻게 생겼는지, 그리고 클라이언트에서는 어떻게 반응하여야 하는지 보여드리겠습니다. 서버에서 전송되는 챌린지 메세지는 다음과 같습니다.

CHL 0 90938290383838737622

여기서 명령 예약어 CHL 이 쓰입니다. 그리고 트랜젝션 아이디 0 이 전송됩니다. 서버가 클라이언트에게 메세지를 전송할 때 보통 트랜젝션 아이디 0 을 사용합니다. 마지막 인수는 챌린지 문자열입니다.

이제 챌린지 문자열과 문자열 ‘Q1P7W2E4J9R8U3S5’ 를 조합하여 MD 5 알고리듬으로 암호화한 문자열을 만듭니다. 위의 경우 MD 5 알고리듬을 이용하여 문자열 '90938290383838737622Q1P7W2E4J9R8U3S5' 을 암호화한 다음 서버에 전송합니다. 응답하는 명령은 다음과 같습니다.

QRY 9 msmsgs@msnmsgr.com 32
1293ft670983hydr5423yhdv67f6f4f5

챌린지 명령에 대한 응답은 QRY 명령을 씁니다. 그리고 한 번도 사용하지 않았던 트랜젝션 아이디를 붙이고 문자열'msmsgs@msnmsgr.com' 과 숫자 32를 보냅니다. 32는 QRY 명령 예약어가 있는 현재 줄을 제외한 나머지 글자의 바이트 수입니다. 줄바꿈 글자를 전송한 다음 MD 5 로 암호화된 문자열을 전송합니다.

서버는 다음과 같이 응답할 것입니다.

QRY 10

서버는 QRY 명령과 함께 챌린지 메세지를 응답할 때 사용했던 트랜젝션 아이디 10 을 전송합니다. 이 명령은 챌린지를 무사히 통과했다는 것을 알려주는 메세지입니다. 챌린지를 실패했을 경우 서버는 끊어지고 에러 명령을 전송하게 됩니다.

서버 메세지
서버에서 종종 전송되는 몇 가지 다른 메세지들이 있습니다. 이 메세지들은 응답하지 않아도 상관없습니다.

유저가 새 이메일을 받았을 때 서버로부터 전송되는 메세지입니다.

MSG Hotmail Hotmail 340
MIME-Version: 1.0
Content-Type: text/x-msmsgsemailnotification; charset=UTF-8

From: Mehta
Message-URL: /cgi-bin/getmsg?msg=MSG1029401739.3&start=1610592&
              len=402&curmbox=ACTIVE
Post-URL: https://lc1.law13.hotmail.passport.com
                     /ppsecure/domessengerlogin/EN
Subject: Hi
Dest-Folder: ACTIVE
From-Addr: example@passport.com
id: 2

처음 세 줄은 앞에서 설명한 것과 동일합니다. Content-Type 은 ‘text/x-msmsgsemailnotfication’ 입니다. 마임 본문에는 방금 도착한 새 이메일 메세지에 대한 정보가 담겨 있습니다. 여기에는 제목, 발송인 등이 있습니다.

메일함에서 이메일을 지웠을 때 서버가 전송하는 메세지입니다.

MSG Hotmail Hotmail 145
MIME-Version: 1.0
Content-Type: text/x-msmsgsactivemailnotification; charset=UTF-8

Src-Folder: ACTIVE
Dest-Folder: trash
Message-Delta: 1

앞의 세 줄은 위에 설명과 동일합니다. Content-Type 은 'text/x-msmsgsactivemailnotification' 입니다. 마임 본체에는 편지함에서 삭제된 이메일의 정보가 담겨 있습니다.
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 0

등록된 댓글이 없습니다.
전체 529 건 - 9 페이지
2006.05
13

[App 개발] [질문] xcode는 인스톨 아니면 안되나요?

os를 덮어씌우기 했습니다. 좀 찝찝하지만 넘 갑작스럽게 시스템이 맛이가서 어쩔 수 없이 그냥 깔았습니다. 맥에서 기존에 파일들을 다 백업해주고.. 응용프로그램도 다 해줘서 자잘한 설정파일만 복사해줬는데 xcode는 실행이 안되네요...뭐 다시 인…

2006.05
02

[App 개발] 네이트온같은 것을 리버스엔지니어링으로 맥용으로 만들 수 있나요?

전 프로그래머는 아닙니다만, 갑자기 궁금해져서요. 불법인점은 논외로 치고서라도 궁금해서 질문 올립니다.-_-;; 마소전용 플그램을 리버스 엔지니어링해서 맥용으로 만드는 것이 가능할까요 가능하다면 메신저로 메세지 주고받는 것만이라도 호…

2006.04
30

[App 개발] Apple pro apps의 GUI 스타일은 어떻게..

C++로 커맨드라인수준의 프로그래밍만 하다가 팔자에도 없는 Cocoa 및 GUI 프로그래밍을 해야하는 상황이 닥쳤습니다 ㅎㅎ; 일단 이래저래 공부를 시작하고는 있는 중인데, 한가지 궁금증이 생겼습니다. Apple의 pro apps(가령 Final …

2006.04
22

[App 개발] xcode에서 인텔리센스 기능..

인텔리센스 라는 용어가 맞는지 모르겠습니다. 자동완성;; 이라 해야되나 써본거라곤 vs6 밖에 없어서...;; 새로운 걸 하고 싶어서 과감히 전환을 시도하는 중입니다. 맥도 새로 구입하고 ㅎㅎ 하루하루를 맥에 푹 빠져살고 있습니다. x…

2006.04
15

[App 개발] [질문]Xcode 만 설치하면 맥용 개발툴은 다 설치한건가요?

우연히 OS Cd를 뒤지다가 Xcode Tools란 폴더를 찾았습니다. 폴더를 열어보니 Xcode Tools라는 파일이 있어서 설치를 했네요. 이것만 이스톨하면 개발툴은 다 인스톨 된건가요 제가 원하는 언어는 C,C++.JAVA 입니다.

2006.03
23

[App 개발] GNU Scientific Library 를 Xcode 에서 컴파일하다

과학, 공학 전공하시는 분들이시라면, 선호하는 계산 라이브러리가 있으실 줄 압니다. 가장 간편하고 인기있는 라이브러리는 역시 Numerical Recipes 라이브러리가 되겠지만, 요즘은 GNU Scientific Library (GSL) 이 대세죠 …

2006.03
11

[App 개발] 인텔맥에 대처하는 우리의 자세 ㅡㅡ;

이미 작년 6월 이후부터 꾸준하게 유니버설 바이너리 관련 개발자 정보들이 나왔기 때문에 지금은 그 충격이 거의 상쇄되어 버린 기분입니다. 그리고 새로 출시된 인텔 아이맥과 맥북 프로의 성능이 기존 제품을 훨씬 능가한다는 사실을 보면서 많은 개발자들이 …

2006.01
03

[App 개발] Xcode 2.2 에서 C++ 프로그래밍 하기

아직 초보라서 잘 모르는데 어떻게 하는지 알려주세요... Project를 어떤 것을 선택해야하는지...

2005.12
28

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (7) 응용문제

지금까지 연습했던 기법들을 모두 동원하여 그럴듯한 게임 하나를 만들어 보겠습니다. 만들기 쉽고 이해하기 편하고 간단한 예제로 무엇이 좋을까 생각해보니, 퍼즐 게임이 있더군요. 비트맵 조작, 마우스 입력, 간단한 게임 데이터 관리 등을 모두 연습해볼 수…

2005.12
26

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (6) Keyboard

이번 예제는 겉으로 보기엔 후즐근해 보이겠습니다만, 그 내용은 심히 유용한 것을 담고 있습니다. 1. 키보드 입력 이벤트를 처리하는 루틴에서 이번에는 입력된 키보드 값을 버추얼 키 값에서 우리에게 친숙한 ASCII 값으로 바꾸었습니다. 이 값을 …

2005.12
24

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (5) Events

이제는 본격적으로 이벤트 부분을 파 들어가 보도록 하겠습니다. 이 세상 거의 모든 GUI 는 Event Driven 입니다. 이벤트에 의하여 전체 프로그램이 동작하게 됩니다. 이러한 점은 많은 초심자들이나 옛날 Procedual Programming …

2005.12
21

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (4) ATSUI

비트맵 예제는 지난 글들을 살펴보시면 되겠습니다. 이제부터는 간단한 것 같으면서도 상당히 까다로운 주제인 텍스트를 다루어 보고자 합니다. 그래픽 환경으로 넘어오면서 오히려 텍스트 다루는 것이 점점 더 어려워지고 있습니다. 글꼴도 다양하고 예쁘게 만들어…

2005.12
19

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (3)

이번에는 본격적으로 Quartz 의 Core Graphics 를 이용해서 그림을 그려 보겠습니다. 참고 자료로는 애플 홈페이지에서 다운로드 받으실 수 있는 Quartz 2D Programming Guide 입니다. 프로그램의 기본 구조는 이…

2005.12
17

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (2)

윈도우 프로그래밍을 처음 공부한ㄴ 사람들이 한결같이 내놓는 불만은 "왜 이렇게 어렵냐" 라는 것입니다. 막말로, C 에서는 printf("Hello World\\n") ; 요거 하나만 하면 글을 볼 수 있는데, 윈도우에서는 글자 하나를 보…

2005.12
16

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (1)

Xcode 새 버젼의 카본 어플리케이션 템플릿이 좀 더 친절해졌더군요. 한편, 지금까지 자기 고유의 이벤트 핸들러를 갖고 계시던 분들에게는 더 힘들어 졌더군요. ㅠㅠ 자 해 봅시다. 일단. Xcode 를 실행하고, File->N…

2005.12
08

[App 개발] PCWEB 이란 곳에 올라온 코코아 강좌(1)

제가 소개할 사이트는 http://pcweb.mycom.co.jp/column/objc/ 에 연재되고 있는 코코아 강좌입니다. 이번에 제 1회를 부족한 일본어 실력으로 해석해 보았는데, 해보니 번역기를 돌린것과 비슷하게 되어버렸습니다. 결국 그렇…

2005.12
07

[App 개발] Apple Development Document 중 일부가 업데이트 되었습니다.

12.6일자로 몇가지 문서가 새로 마이너 버젼으로 업데이트 되었습니다. - Apple Human Interface GuideLines - Dashboard programming Topics - Dashboard Tutorial - DVD P…

2005.12
06

[App 개발] C# VS Object C (1) - 터미날 프로그램을 사용할때 받는 인자를 활용해서 MS-DOS 의 Mdi…

우선 object C 를 활용한 프로그램부터... 제가 제가 잘 적었는지 모르겟습니다. 워낙 엉뚱한 말을 저도 몰래 쓰기 때문에..... 이 프로그래의 사용법은 다음과 같습니다. 우선 소스 파일을 받으면 Xcode 로 열수 있습니다. 그…

2005.12
06

[App 개발] OMIAI (아스키 코드 값를 이용해서 도형의 색갈을 바꾸어 주는 프로그램입니다.)

두번째로 케이머그에 올리는 글이네요. 약 한달전에 만든건데, 필요한 분에게 프로그램과 소스만 전해주고 그냥 하드 속에다가 묵혀두었는데, 이렇게 놔두는 것 보다 공개해서 수정이나, 부족한 부분도 남에게 자문도 받아보고, 이를 통해서 공부도 배울…

2005.10
22

[App 개발] 신형 듀얼 코어 2.3 GHz 의 속도 비교

제가 지금까지 쓰던 PowerMac G5 Single 1.8 GHz, 프론트사이드 버스 900 MHz 짜리 제품과 이번에 새로 나온 Dual Core PowerMac G5 2.3 GHz, 프론트사이드 버스 1.15 GHz 제품과의 성능 비교입니다…

2005.09
30

[App 개발] Apple에서 하드웨어 제어 ~_~

안녕하세요 ㅎ 컴퓨터로 하드웨어를 제어해서 프로토타입을 만들 일이 생겼는데 Mac에서 사용가능한 인터페이스가 있는지 궁금해요 >_< PC의 경우 K8055보드같은 USB인터페이스가 판매되고 있습니다만 제품 사양에 Mac은 언급되지 않았더군요…

2005.09
29

[App 개발] 요즘 이런 망상에 빠져.. ~_~;

개발실 게시판에는 정말로 오랫만의 포스팅입니다. 그동안 일도 바쁘고.. 개인적인 작업과 학업.. 모두 바쁜 관계로.... 이제 어느덧 9월도 마지막에 다가가고 있습니다. 최근에는 그냥 알바식으로 일하면서.. 인체 인식으로 PC를…

2005.08
25

[App 개발] IDE와 DB관련해서 질문있습니다.

제가 4학년 플젝으로 erp제품중에서 일부분을 자바로 해보려하는데요. 원래 회사에다닐때 사용하던건 비베랑 ms-sql이였습니다. (보고서는 크리스탈 레포트로했습니다.) 대부분 sp로 짜여져서 sp지원하는 어떤 db를 사용해야할지 난감합니다.…

2005.08
17

[App 개발] 코드 최적화 (6) 분기 예측

분기 예측 (Branch Prediction) 이라는 것은 프로세서의 파이프라인이 길어지면서 발생하게 되는 비효율적인 문제를 해결하기 위한 방법으로 도입된 것이지요. 이것이 우리 프로그래밍에 어떤 영향을 미치게 되는지를 살펴보기 위하여 간단한 예제를 …

2005.08
15

[App 개발] XCode 2.1로 Maya plug-in 개발하기..?

Maya 6.0에서 제공하는 Maya API를 이용하여 plug-in을 개발하려고 help문서를 뒤져보니.. xcode는 예제의 프로젝트 파일을 컴파일해보라고 나와있는데.. xcode의 버전때문인지 컴파일이 되질 않는군요..-.- MSVC로 프로…

2005.08
15

[App 개발] 코드 최적화 (5) Unrolling

언롤링이라는 기법은 언뜻 보기에는 거의 삽질과 다름이 없습니다. 지난 (4) 번 예제에서 사용된 코드를 언롤링한 코드의 예를 보시면 이야기가 더 쉽게 진행될 것 같습니다. for( j = 0 ; j < MAT_SIZE ; j++ )…

2005.08
14

[App 개발] 코드 최적화 (4) 행렬, AltiVec

이번에는 매우 고전적이면서 아직도 수없이 많은 곳에서 쓰이고 있는 행렬 곱셈 문제를 한 번 생각해 보겠습니다. for( i = 0 ; i < MAT_SIZE ; i++ ) { for( j = 0 ; j…

2005.08
13

[App 개발] 코드 최적화 (3) 인덱싱

매트릭스 연산은 여러 곳에서 널리 쓰이고 있습니다. 단순 반복적인 계산을 거듭하는 이 루틴의 효율을 어떻게 높이느냐에 따라서 컴퓨터의 최대 계산 능력을 끌어낼 수도, 혹은 전혀 이용하지 못할 수도 있습니다. 다음의 예제는 가우스 소거법 소스를 간…

2005.08
13

[App 개발] 코드 최적화 (2) 컴파일러

계산 밀도 (Computational Intensity)라는 것이 있답니다. 이것이 무엇이냐 하면 컴퓨터에서 어떤 계산을 수행할 때 계산 명령 (Operation) 대 계산 인수 (Operand) 의 비율을 말합니다. 비싼 값을 주고 사는 좋은 컴파일…

2005.08
12

[App 개발] 코드 최적화 (1) 캐시

이름은 거창하게 지어 봤습니다만, 별 것 아니고요... ㅡㅡ;;; 앞으로 몇 회동안 제가 직접 작성한 코드로 어떻게 하면 빠른 프로그램을 작성할 수 있을까를 같이 한 번 연구해 보았으면 합니다. 보유하고 계신 맥의 종류마다 약간씩 다르지만, 제가…

2005.07
28

[App 개발] openGL을 이용해서 만든 카툰렌더러 입니다.

가입하고 첫 글 올립니다. 제작중인 게임 엔진으로 카툰렌더링한 스크린샷입니다. 크로스 플렛폼을 목표로 제작중이라 엔진은 콘솔에서 라이브러리로 만들었고, 아직 코코아는 내공이 부족해서 opengl fullscreen 예제에 붙였습니다. 퍼포먼스 …

2005.07
23

[App 개발] Cocoa 책 구입했습니다.

출장온김에 한국에서 구하기 힘들었던 Mac 프로그래밍 관련 책을 Amazon.com 에서 구입했습니다. 싸게 샀네요. 이거 두권이면 기초부터 시작해서 한참 동안 볼 수 있을것 같죠

2005.06
15

[App 개발] Cell 아키텍쳐 글을 읽기위한 간단한 토막상식 (2)

뭘 이런 걸 2편씩이나... ㅡㅡ;;; * DSP DSP 라는 것이 각광을 받기 시작한 것은 80년대 말~90년대 초라고 여겨집니다. 그 당시까지는 DSP 라는 개념이 확립되어 있긴 했지만 이것을 실현할 수 있는 빠른 속도의 프로세서가 …

2005.06
15

[App 개발] Cell 아키텍쳐 (5)

솔직히 이번 마지막 요약 결론글은 무지 조악합니다. 별로 권하고 싶지 않은 글이군요. ㅡㅡ; 장미빛 청사진이 이번에는 총천연 시네마스코포로 펼쳐지는데, 낯간지러워서 번역하다가 그만 윈도우 닫을 뻔 했습니다. ㅡㅡ;;; 한 편이 더 남았군요. 최근…

2005.06
14

[App 개발] Cell 아키텍쳐 (4)

4장의 글은 이번 애플-인텔 연합 발표가 있기 전의 내용이라 현재의 인식과 많은 차이가 있고, 실제 셀 탑재 웍스테이션도 선보인 지금의 생각과도 역시 괴리감이 느껴집니다. 셀 칩의 스펙이 보여주는 장미빛 청사진 (청사진이 장미빛이라... 쿨럭~ ㅡㅡ;…

2005.06
13

[App 개발] Cell 아키텍쳐 글을 읽기위한 간단한 토막상식 ㅡㅡ;;

전자공학이나 컴퓨터 공학을 전공하지 않으신 분들, 그리고 컴퓨터 구조의 기본에 대해서 잘 모르셔서 아래 글들을 접수하기 곤란하신 분들을 위해서 필요한 내용을 해설해 드리고자 합니다. 컴퓨터 잘 아시는 분들은 읽지 마시고... ㅎㅎ 저도 빠삭하게 다 아…

2005.06
13

[App 개발] Cell 아키텍쳐 (3)

3장: 셀 컴퓨팅 셀은 그래픽 전용 칩이 아닙니다. 셀은 범용으로 개발된 칩입니다. 만약 플스 3 의 그래픽 칩으로 활용된다면 nVidia 에서 제공될 것입니다. APU 는 일반 마이크로프로세서처럼 범용은 아니지만 셀 프로세서는 일반 파워피씨 마…

2005.06
13

[App 개발] Cell 아키텍쳐 (2)

셀 아키텍쳐 ­ 2장: 셀의 내부 스트림 프로세싱 셀이 일반 프로세서와 다른 점은 APU 를 하나로 연결하여 스트림 프로세서로 동작시키는 기능이 있다는 점입니다. 스트림 프로세서는 데이터를 수령하여 처리하는 것을 순차적으로 처리합니다. 이러…

2005.06
12

[App 개발] Cell 아키텍쳐 (1)

앞으로 몇 회에 걸쳐 Nicholas Blachford 사이트에 있는 Cell 아키텍쳐 설명 글을 번역해 올리도록 하겠습니다. 잡스가 Cell 을 보고 콧방귀를 뀌었다던데... 과연 왜 그랬는지 함 보죠. ^^ -------------------…

2005.05
30

[App 개발] 인공지능에 대해 공부해보려는데...

자연어 처리와 인공지능에 대해 관심을 갖고 공부해보고 싶은데요.... 이론적인 측면에서 어디서부터 어떻게 시작하면 돟을까요

2005.05
14

[App 개발] xcode2.0에서 파일 오픈?

사실 2.0뿐만 아니라 1.5에서도 잘 안되네요.. 파일 오픈하는 방법은 vc++이나 같은거 아닌가요 처음 작업은 vc++에서 c++로 짰습니다. (gcc라 오픈하는 방법도 다른건지요..) 오픈하려는 파일을 프로젝트 폴더안에 위치해두고 …

2005.05
11

[App 개발] 마스크 이미지를 이용한 애니메이션

이번에도 역시 제목만 요란할 뿐, 내용은 별로 대단할 것이 없습니다. ^^; 지난 예제에서 한 번 비트맵 데이터를 이용하여 CGContext 를 작성하는 방법을 사용해 보았습니다. 이번에는 이것을 응용하여 투명 레이어에 조그마한 애니메이션을 출력…

2005.05
10

[App 개발] 투명 윈도우를 만들자

오늘도 역시 콜롬부스의 달걀입니다. ㅡㅡ; 엉망으로 짠 프로그램이지만, 나름대로 설명을 달아두면 도움을 받으실 만한 분도 계시겠지요 ^^; 프로젝트명을 거창하게 FullScreenCoreImage 라고 달았지만, 아쉽게도 코어 이미지는 여기…

2005.05
08

[App 개발] Carbon 에서 Core Image 프로그램을 짜는 법 (2)

일단은 샘플로 프로그램을 짜 보았습니다. ^^ QuickDraw 와 Core Graphics 와 Core Image 가 마구 뒤섞인 무시무시한 프로그램이 탄생하고 말았습니다. ㅡㅡ; 예외 처리라든지 그런 것이 하나도 안 되어 있는 완전 개발…

2005.05
05

[App 개발] Carbon 에서 Core Image 프로그램을 짜는 법

타이거의 등장과 함께 꽤나 주목을 받고 있는 Core Image, 그럴싸한 비됴 카드와 128 메가 메모리 없이는 구경도 못한다는 신비의 기술을 한 번 구경하기 위해 이곳저곳 자료를 뒤적여 보았습니다. 카본에서 Core Image 를 호출하기 위해서였…

2005.05
03

[App 개발] Xcode 2.0 + gcc 4.0

오늘 배달온 타이거를 설치하고 나서 맨 먼저 해본 것이 그간 가지고 놀았던 매트릭스 연산 프로그램의 속도 측정이었습니다. Xcode 1.5 에 gcc 3.5 를 가지고 대략 17~20초 사이에 완료하던 작업을 8~9 초만에 끊습니다. 이는 gcc 4.…

2005.04
06

[App 개발] 코코아 개발 서적좀 추천해 주세요.

자바도 관심이 있긴 하지만 퍼포먼스 측면에서 코코아가 더 끌리네요 mfc로 약간 개발 경험이 있는데 역시나 맥쪽은 관련 자료가 드무네요.. 코코아 추천 서적좀 부탁드립니다 ^^

2005.03
26

[App 개발] 프로그래밍 공부하시는 분들이나 개발자 분들은 어떤 컴파일러를 이용하시나요?

오랫만에 개발실에 글을 남기네요.. 영환군입니다~ 최근에 ibm PC를 XP pro SP2로 세팅하면서 다시금 간단히 EditPlus와 Java SDK로 자바 코딩을 세팅하고.. 간단한 C++ 부터 windows APP까지의 컴파일을 위해 여…

2005.03
16

열람중 [App 개발] MSN 메신저 프로토콜 해부 1/3

원본은 여기에 있습니다: http://www.devarticles.com/c/a/HTML/The-MSN-Messenger-Protocol-Torn-Apart-Part-1/ ----------------------------------------…

2005.03
14

[App 개발] MSN 메신저 프로토콜

다음 글은 Venky's World (http://www.venkydude.com/articles/msn.htm) 의 글을 번역한 것입니다. MSN 메신저의 기본적인 동작 원리를 이해하는 데 도움이 될 수 있는 쉬운 글입니다. ----------…