이제 설계 단계를 진행합시다.
설계 단계에서는 컴포넌트 다이어그램의 프로젝트 구성 요소들 내부에 필요한 형식과 기능을 약속하는 작업을 수행합니다. CBD 개발 방법론에서는 클래스 다이어그램에 정의할 형식과 형식간의 관계를 나타내며 시퀀스 다이어그램 등을 이용하여 흐름을 약속합니다.
EH 메신저는 소켓 통신 프로그래밍을 해야 하고 다양한 메시지를 사용합니다. 이에 EH 메신저 응용 프로토콜 스택을 정의하는 작업을 추가로 진행할게요.
7.4.1 응용 프로토콜 스택 정의
EH 메신저에서는 Peer와 서비스, 서비스와 서비스 사이에 전달하는 메시지를 메시지 헤더와 메시지 바디로 구성하여 전달하기로 약속할게요.
4바이트 | 4바이트 | BDLEN 바이트 |
MSGID | BDLEN | 메시지마다 별도 정의 |
[표 7.11] EH 메신저 메시지 구조
가입 요청에 사용하는 RegReq 메시지는 아이디와 비밀 번호, 이름을 전달해야 합니다. 이들을 고정 길이로 전달하면 구현이 간단한 반면 네트워크 대역을 많이 차지합니다. 여기에서는 가변 길이로 전송할 수 있게 설계합시다. 이를 위해서는 아이디 길이와 비밀 번호 길이, 이름 길이도 전달해야 합니다.
4 | 4 | 4 | IDLEN | 4 | PWLEN | 4 | NAMELEN |
MID_REGREQ | BDLEN | IDLEN | ID | PWLEN | PW | NAMELEN | NAME |
[표 7.12] RegReq 메시지 구조
가입 요청의 응답인 RegResponse 메시지는 가입 요청 결과를 전달합니다.
4 | 4 | 4 |
MID_REGRES | BDLEN | result |
[표 7.13] RegResponse 메시지 구조
탈퇴 요청에 사용하는 UnRegReq 메시지는 아이디를 전달해야 합니다. 아이디를 가변 길이로 전송할 수 있게 아이디 길이도 전달합시다.
4 | 4 | 4 | IDLEN |
MID_UNREGREQ | BDLEN | IDLEN | ID |
[표 7.14] UnRegReq 메시지 구조
로긴 요청에 사용하는 LoginReq에는 아이디와 비밀 번호를 전달합니다. 가변 길이로 전달할 수 있도록 아이디 길이, 비밀 번호 길이도 전달합시다.
4 | 4 | 4 | IDLEN | 4 | PWLEN |
MID_LOGINREQ | BDLEN | IDLEN | ID | PWLEN | PW |
[표 7.15] LoginReq 메시지 구조
로긴 요청 응답인 LoginRes에는 로긴 요청 결과를 전달합니다.
4 | 4 | 4 |
MID_LOGINRES | BDLEN | result |
[표 7.16] LoginRes 메시지 구조
로그 아웃 요청인 LogOutReq에는 아이디를 전달합니다. 가변 길이로 전달할 수 있도록 아이디 길이도 전달합시다.
4 | 4 | 4 | IDLEN |
MID_LOGOUTREQ | BDLEN | IDLEN | ID |
[표 7.14] LogOutReq 메시지 구조
STS_LOGGED 상태를 유지하기 위해 Peer가 주기적으로 보내는 KeepAlive 메시지를 정의합시다. 아이디와 아이피 주소, 계정 정보를 수신하기 위한 포트 번호, 숏 메시지 수신 포트 번호, 파일 수신 포트 번호를 전달해야 합니다.
4 | 4 | 4 | IDLEN | 4 | 4 | 4 | 4 |
MID_KEEPALIVE | BDLEN | IDLEN | ID | IP | STSPORT | SMSGPORT | FILEPORT |
[표 7.15] KeepAlive 메시지 구조
다른 Peer의 계정 정보를 전달하는 OtherUserInfo 메시지에는 아이디 아이피 주소, 숏 메시지 수신 포트 번호와 파일 수신 포트 번호를 전달해야 합니다.
4 | 4 | 4 | IDLEN | 4 | 4 | 4 |
MID_USERINFO | BDLEN | IDLEN | ID | IP | SMSGPORT | FILEPORT |
[표 7.16] OtherUserInfo 메시지 구조
존재하는 아이디인지 확인 요청하는 IDExist 메시지에는 아이디를 전달해야 합니다.
4 | 4 | 4 | IDLEN |
MID_IDEXIST | BDLEN | IDLEN | ID |
[표 7.17] IDExist 메시지 구조
아이디 존재 여부 결과를 전송하는 IDExistAck에는 존재 여부를 전달해야 합니다.
4 | 4 | 4 |
MID_IDEXISTACK | BDLEN | ISEXIST |
[표 7.18] IDExistAck 메시지 구조
계정 정보 추가 요청하는 AddUserInfo 메시지에는 아이디와 비밀번호, 이름을 전달해야 합니다.
4 | 4 | 4 | IDLEN | 4 | PWLEN | 4 | NAMELEN |
MID_ADDUSERINFO | BDLEN | IDLEN | ID | PWLEN | PW | NAMELEN | NAME |
[표 7.19] AddUserInfo 메시지 구조
사용자 상태를 요청하는 UserSts에는 아이디를 전달해야 합니다.
4 | 4 | 4 | IDLEN |
MID_USERSTS | BDLEN | IDLEN | ID |
[표 7.20] UserSts 메시지 구조
사용자 상태 응답 메시지인 UserStsAck에는 사용자 상태를 전달합니다.
4 | 4 | 4 |
MID_USERSTSACK | BDLEN | STATUS |
[표 7.21] UserStsAck 메시지 구조
아이디와 패스워드 정보가 정확한지 확인 요청하는 IsCorrect는 아이디와 비밀 번호를 전달합니다.
4 | 4 | 4 | IDLEN | 4 | PWLEN |
MID_ISCORRECT | BDLEN | IDLEN | ID | PWLEN | PW |
[표 7.22] IsCorrect 메시지 구조
아이디와 패스워드가 일치하는지 결과를 알려주는 IsCorrectAck에는 일치 여부를 전달합니다.
4 | 4 | 4 |
MID_ISCORRECTAK | BDLEN | RESULT |
[표 7.23] IsCorrectAck 메시지 구조
상태 변경 요청하는 ChangeSts에는 아이디와 상태를 전달합니다.
4 | 4 | 4 | IDLEN | 4 |
MID_CHANGESTS | BDLEN | IDLEN | ID | STATUS |
[표 7.24] ChangeSts 메시지 구조
탈퇴 요청에 따른 사용자 정보를 삭제 요청하는 RemoveUser 메시지에는 아이디를 전달해야 합니다.
4 | 4 | 4 | IDLEN |
MID_REMOVEUSER | BDLEN | IDLEN | ID |
[표 7.25] RemoveUser 메시지 구조