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

소프트웨어

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

본문

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

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

MSN 메신저 프로토콜

MSN 을 써 보시면서 이것이 어떤 원리로 동작되는지 궁금하셨을 것입니다. 저는 이 글에서 MSN 이 어떻게 움직이는지 뿐만 아니라 어떻게 여러분 자신만의 MSN 메신저를 만들 수 있는지도 알려드리고자 합니다.

MSN 메신저의 동작은 크게 두 가지 경우로 나눌 수 있습니다.

?        로그인 단계
?        메세지 전달 단계

로그인 단계에서는 MSN 메신저 서버의 로그인과 친구 리스트를 받아내는 과정입니다. 메세지 전달 단계는 인스턴트 메세징 전송/수신 요구의 접수와 실제 메세지 전송/수신으로 나누어집니다.

MSN 메신저 프로토콜은 ASCII 기반 프로토콜입니다. 말하자면 완전 영어로 구성된 명령어들입니다. 첫 번째 단계는 MSN 메신저 서버로의 접속입니다. 우리는 먼저 서버 64.4.13.58:1863 (MSN 메신저는 포트 1863으로 움직입니다) 으로 접속해야 합니다.

접속이 완료되면 그 다음 로그인 과정으로 넘어갑니다. 첫 번째 과정은 버젼 검사입니다. 여기서는 클라이언트 (여러분의 프로그램) 가 지원하는 버젼을 서버로 전송한 다음 서버로부터의 응답을 기다립니다.

VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVRO

MSN 메신저 프로토콜의 모든 명령과 함께 “trial id”가 함께 전송됩니다. Trial id 는 0부터 시작해서 서버가 클라이언트의 명령을 성공적으로 응답할 때마다 증가하게 됩니다.위의 명령에 따라 서버는 다음과 같이 응답하게 됩니다.

VER 0 MSNP7 MSNP6 MSNP5 MSNP4

클라이언트와 서버가 서로 교신할 프로토콜 버젼을 맞추게 됩니다.

다음으로 클라이언트가 서버에 로그인에 필요한 보안 패키지의 이름을 요구하게 됩니다.

INF 1

야후 등의 메신저와는 달리 MSN 은 패스워드를 그대로 전송하지 않고 암호화를 가하여, 누군가 포트를 모니터링하면서 패스워드가 들통나지 않도록 합니다.

서버는 다음과 같이 반응하게 됩니다.

INF 1 MD5

여기서 MD5 는 서버가 현재 지원하는 보안 패키지의 이름입니다. (Message Digest ver. 5 라는 뜻이겠지요? ­ 역자주)

그 다음으로 클라이언트는 userid 를 서버에 전송합니다.

USR 2 MD5 I venky_dude@hotmail.com

서버는 로그인하려는 사용자의 관련 정보가 있는지를 검사하며, 만약 정보가 없다면 다음과 같은 메세지를 반송합니다.

XFR 2 NS 64.4.13.55:1863 0

이 메세지는 클라이언트가 Notification Server(NS) 주소 64.4.13.55 포트 1863 으로 접속하라는 뜻입니다. 현재 접속을 끊고 동일한 과정을 새 서버 64.4.13.55 에 접속하여 반복하게 됩니다.

(클라이언트) VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVRO

(서버) VER 3 MSNP7 MSNPP6 MSNP5 MSNP4

(클라이언트) INF 4

(서버) INF 4 MD5

(클라이언트) USR 5 MD5 I venky_dude@hotmail.com

이번에는 서버에 로그인할 사용자 관련 정보가 담겨 있습니다. 서버는 다음과 같이 응답합니다.

USR 5 MD5 S 989048851.1851137130

서버로부터 전송된 문자열은 “MD5 해쉬” 입니다. 이것은 서버로부터 생성된 해쉬로서 사용자 인증 과정에 사용됩니다. 이제 클라이언트는 MD5 암호화 기법을 이용하여 패스워드를 전송해야 합니다. 실제적으로 클라이언트는 MD5 해쉬를 이용한 고유한 MD5 equivalent 를 전송합니다. 예를 들어 패스워드와 MD5 해쉬 989048851.1851137130 을 조합한 MD5 equivalent 3b7926d277068ec49576a0c40598ff21 을 전송하게 됩니다.

USR 6 MD5 S 3b7926d277068ec49576a0c40598ff21

패스워드가 정확하다면 서버는 다음과 같이 응답합니다.

USR 6 OK venky_dude@hotmail.com venkat

여기서 마지막 문자열은 유저가 사용하는 닉네임입니다.

새 프로토콜 (MSNP7) 에서는 서버가 유저의 일반 정보와 함께 여러 가지 작업에 사용되는 쿠키와 같은 종류의 인증 코드를 함께 전송합니다.

MSG Hotmai Hotmail 362
MIME-Version: 1.0
Content-Type: text/x-msmsgspro file; charset=UT
LoginTime: 1011252477
EmailEnabled: 1
MemberIdHigh: 84736
MemberIdLow: - 1434729391
lang _preference: 103
preferredEmai l: venky_dude@hotmail.com
country: IN
PostalCode:
Gender: M
Kid:0
Age: 22
sid: 517
kv: 2
MSPAuth: 2AAAAAAAADU0p4uxxxJtDJozJSlUTS0i7YpwnC9PUHRv56YKxxxCTWmg$$

서버에 접속은 하긴 했지만 아직 상태는 오프라인입니다. 이제 우리는 현재 상태를 online 으로 바꾸어 메세지를 전송할 수 있도록 합니다. 클라이언트에서 다음과 같은 메세지를 전송합니다.

CHG 7 NLN

서버는 현재 여러 상태로 온라인중인 친구들의 이름을 전송합니다.

CHG 7 NLN

ILN 7 NLN btxxxe@hotmail.com nick
ILN 7 AWY wmpyxxx@msn.com mike
ILN 7 BSY tehpxxpxx@hotmail.com yeaxxx

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

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

서버로 전송하는 다음 명령에는 현재 사용하고 있는 클라이언트의 버젼을 함께 보냅니다. 여기에는 현재 버젼 번호와 함께 사용하는 컴퓨터와 OS, build 정보를 포함합니다.

CVR 8 0x0409 win 4.10 i386 MSMSGS 4.5.0127 MSMSGS

0x0409 win 4.10.i386 은 클라이언트가 인텔 프로세서와 win98 에서 움직이고 있다는 뜻이며, MSMSGS 4.5.0127 MSMSGS 는 현재 버젼과 msmsgs.exe 의 빌드 넘버 (기본적으로 MSN 메신저의 버젼 번호) 입니다.

서버는 최신 버젼을 다운로드할 수 있는 url 과 함께 기타 정보를 전송합니다.

CVR 8 4.5.0127 4.5.0127 1.0.0863 http://download.microsoft.com/download/msnmessenger/install/4.5/win98me/en-us/mmssetup.exe http://messenger.microsoft.com

CVR 명령을 반드시 보낼 필요는 없습니다. 명령을 보내지 않더라도 메신저 프로토콜은 정상적으로 동작합니다.

친구 목록에 등록된 모든 사람들의 이름을 얻기 위해서 다음의 명령을 사용합니다.

LST 9 RL

이 명령은 서버로부터 reverse list 를 얻어낼 수 있습니다. 리버스 리스트는 온라인 상태에서 메세지를 보낼 수 있는 사람들의 리스트입니다. 그 외에 forward list 를 LST 9 FL 명령으로 얻을 수도 있습니다. 포워드 리스트는 his/her list 에 등록한 모든 사람들의 이름을 포함하는 리스트입니다.

서버에서 전송되는 메세지는 이런 식입니다.

LST 9 RL 69 1 19 venky_dude@hotmail.com venkat
LST 9 RL 69 2 19 puxxxxx@hotmail.com PUJA
LST 9 RL 69 3 19 vancxxxxx@hotmail.com ramachandran
LST 9 RL 69 4 19 moxxxxx@hotmail.com chandramouli
LST 9 RL 69 5 19 v_n_xxxxx@hotmail.com Narayanaswamy
LST 9 RL 69 6 19 dexxxxx@hotmail.com Venkatesh
LST 9 RL 69 7 19 lousydxxxxx@hotmail.com deepika%20kalyani%20Vairam                                                  
LST 9 RL 69 8 19 hexxxxxr@hotmail.com Hetchar%20Ramachandran
LST 9 RL 69 9 19 ambxxxxx@hotmail.com Aiyer
LST 9 RL 69 10 19 suxxx@hotmail.com Ganesh
LST 9 RL 69 11 19 deexxxxx@hotmail.com Deepak
LST 9 RL 69 12 19 anilxxxxx@hotmail.com anil
LST 9 RL 69 13 19 dixxxxx@hotmail.com <Diamond>
LST 9 RL 69 14 19 nvxxxx@hotmail.com giri
LST 9 RL 69 15 19 shxxx@hotmail.com Hari
LST 9 RL 69 16 19 radhikashuxxxxx@hotmail.com radhika
LST 9 RL 69 17 19 eskaxxxxx@hotmail.com kannan
LST 9 RL 69 18 19 shaxxxxx@hotmail.com Shankar
LST 9 RL 69 19 19 puneetagarxxxxx@hotmail.com puneet

친구가 온라인 상태가 되면 서버 (NS)는 다음과 같은 메세지를 전송합니다.

NLN 10NLN deaxxxx@hotmail.com Venkatesh

그리고 친구가 오프라인이 되면 서버는 다음의 메세지를 전송합니다.

FLN 10 FLN deaxxxx@hotmail.com

MSNP7 프로토콜에서 MSN 은 새로운 챌린지 인증 구조를 채용하였습니다. 세션을 계속 유지하기 위해서는 MSN 서버가 보내는 챌린지 키를 이용하여 사용자가 인증을 하여야 합니다.

CHL 0 20881396011366812350

클라이언트는 위의 MD5 해쉬와 함께 문자열 “Q1P7W2E4J9R8U3S5” 를 결합한 MD5 equivalent 를 서버에 전송하여야 합니다. 따라서 MD5string(20881396011366812350Q1P7W2E4J9R8U3S5 ) 의 결과로 나오는 MD5 equivalent 를 서버에 전송합니다.

클라이언트의 응답은 다음과 같이 됩니다.

QRY 18 msmsgs@msnmsgr.com 32
0212eaad0876afb8505859ca75d21a78

여기서 18은 trial id 입니다. 여러분의 프로그램에서는 적절한 trial id 로 바꿔넣어 주어야 합니다.

인증이 정확하다면 서버에서는 다음과 같은 메세지를 보냅니다.

QRY 18

이제 우리는 MSN 메신저 서버에 성공적으로 접속하였습니다. 다음은 인스턴트 메세징 과정입니다.

MSN 메신저의 인스턴트 메세징은 세션 기반입니다. 대화를 시작하려는 사람들은 모두 세션 모드로 되어야 합니다. 유저와 챗 세션을 시작할 수 없으면 메세지를 주고받을 수 없습니다.

유저가 챗 세션 상태가 되는 것은 두 가지 경우가 있습니다.

?        유저가 다른쪽 유저에게 챗 세션 요구를 보내는 경우
?        상대방 유저로부터 챗 세션 요구를 받는 경우

유저가 챗 세션 요구를 보내는 경우

클라이언트(유저) 는 서버에게 스위치보드(SB) 서버의 주소를 요구합니다. 모든 인스턴트 메세징 대화는 스위칭보드 서버를 통해서 이루어집니다.

XFR 9 SB

서버는 스위칭보드 서버의 주소와 접속할 수 있는 포트번호, 그리고 CKI 해쉬를 함께 보내옵니다. CKI 는 보안 패키지이며 클라이언트는 이 해쉬를 이용하여 스위치보드 서버에 접속해야 합니다.

XFR 9 SB 64.4.13.88:1863 CKI 989487642.2070896604    

이제 스위칭보드 서버와 새로운 접속을 시도해야 합니다. MSN 메신저 서버와의 접속은 계속 유지하고 있어야 합니다. 만약 그 접속이 끊어지게 되면 우리는 로그아웃 상태가 됩니다.

스위칭보드 서버와 접속하고 나면 다음과 같은 메세지를 스위칭보드 서버에 전송합니다.

USR 1 venky_dude@hotmail.com  989487642.2070896604  

만약 전송받은 CKI 해쉬가 정확하다면 스위칭보드 서버는 다음과 같이 응답합니다.

USR 1 OK venky_dude@hotmail.com venkat

위의 작업이 끝나면 유저는 다른 유저를 다음과 같은 명령으로 챗 세션으로 불러냅니다.

CAL 2 deadxxx@hotmail.com

서버는 다른 유저에게 보낸 것과 동일한 세션 아이디를 보내옵니다.

CAL 2 RINGING 11717653

상대방 유저가 반응하고 나서 챗을 할 준비가 되면 서버는 다음과 같은 명령을 보내옵니다.

JOI deadlee@hotmail.com Venkatesh

이것은 상대 유저가 대화에 참여했으며 메세지를 주고받을 준비가 되었음을 뜻합니다.

유저가 챗 세션 요구를 받는 경우

우리가 다른 유저로부터 챗 세션 요구를 받았을 경우 서버(NS)는 다음과 같은 메세지를 전송합니다.

RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 deaxxxx@hotmail.com Venkatesh

여기서 서버(NS)는 세션 아이디, 스위치보드 서버의 IP 주소, 접속할 포트 번호, CKI 해쉬, 그리고 대화를 시작하려는 사람의 이름을 전송합니다.

이제 스위치보드 서버와 접속을 시도해야 합니다. MSN 메신저 서버와의 접속은 그대로 유지해야 합니다. 만약 접속이 끊어지면 우리는 로그아웃 상태가 됩니다.

스위치보드 서버와 접속한 후 다음과 같은 명령을 보냅니다.

ANS 1 venky_dude@hotmail.com 989495494.750408580 11742066

여기서 로그인 이름, 전송되었던 CKI 해쉬, 그리고 전송되었던 세션 아이디를 보냅니다.

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

IRO 1 1 1 deaxxxx@hotmail.com Venkatesh

그리고

ANS 1 OK

이제 메세지를 주고받을 준비가 되었습니다.

메세지 전송을 알아보기 전에 먼저 메세지가 어떻게 완성되는지 보겠습니다.

메세지를 전송할 때 다음과 같은 방법으로 헤더를 만듭니다.

MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

메세지를 보낼 때에는 다음과 같은 방법으로 보냅니다.

MSG  2  N 137
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

hello

여기서 2는 trial id 로서 메세지를 보낼 때마다 하나씩 증가합니다. 137 은 메세지의 총 길이로서, 헤더와 실제 전송하는 메세지, 여기서는 ‘hello’ 를 포함한 길이입니다.

메세지를 받는 과정도 대동소이합니다.

다음은 수신된 메세지의 예입니다.

MSG deaxxxx@hotmail.com Venkatesh 137
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

hello

상대 유저가 타이핑을 할 때에는 다음과 같은 메세지를 받게 됩니다.

MSG deaxxxx@hotmail.com Venkatesh 100
MIME-Version: 1.0
Content-Type: text/x-msmsgscontrol
TypingUser: deaxxxx@hotmail.com


참고자료:

다음 사이트에서 더 자세한 내용을 볼 수 있습니다.

이곳은 마이크로소프트에서 발행된 원본 프로토콜입니다.

http://www.tlsecurity.net/Textware/Misc/draft-movva-msn-messenger-protocol-00.txt

이곳은 MD5 홈페이지로서 MD5 암호화 기법의 프로그램 코드를 얻을 수 있습니다.

http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 1

장재균님의 댓글

다음 이나 네이트온도 거의 비슷한 프로토콜을 사용하죠 ^^

전체 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 메신저의 기본적인 동작 원리를 이해하는 데 도움이 될 수 있는 쉬운 글입니다. ----------…