학교 프로젝트로 안드로이드 어플을 만드는데
서버 구축도 하려고 합니다..
----------------------------------------------------------------
web서버는 사용자가 클라이언트로 요청을 보내오면 그 명령에 대한 처리를 실행하고 다시 사용자에게 답변을 보내주는 역할,
즉 클라이언트와의 통신이 주된 역할
- Web에서 서버 기능을 처리하는 프로그램으로서 HTTP라는 프로토콜을 기반으로
하여 Web클라이언트(브라우저)로 부터의 요청을 서비스하는 기능을 담당
WAS 서버는 Web Server와 DBMS를 연계 3tier를 구현하는 Middle Ware이다.
실제로 처리해야되는 비지니스 로직이 올라가서 web서버를 통해 들어오는 요청을 처리해서 다시 돌려주는 형태,
-Web 서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시된것, 크게 Web 서버의 기능과 컨테이너의 기능으로 구성
아파치서버 -> php
아파치톰캣 -> jsp
C2DM: 서드파티 어플리케이션 서버가 자신의 안드로이드 어플리케이션에 간단한 메시지를 보낼수 있게해준다..
(서드파티 app로부터 메시지를 받아 이를 장치로 전송하는 데 수반되는 구글 서버)
서드파티 app서버: ... 이 서드파티app서버는 c2md서버를 통해 장치에 있는 안드로이드 어플리케이션으로 데이터를 보낸다.
-----------------------------------------------------------------
찾은 정보들을 요약하면 이정도입니다
그러다가 '웹서비스설계 강의 때 프로젝트한거비슷하게 하면 되겠구나' 하고 생각이들었는데요..
1.WAS(web서버+ 컨테이너)이고
각 서버들의 관계가 아래가 맞나요??
컨테이너(jsp으로) ---------- -JDBC---------- DB (MySql) : DAO패턴 적용
|
web서버: 아파치톰캣서버, php
|
client (app) : SQLite, xml파싱
2.모든 로직 처리를 컨테이너가 하는거고
그리고 c2dm과 다른 app와 통신할(메시지 주고 받을) 소켓서버를 추가하면 아래처럼되는 게 맞나요??
컨테이너(jsp으로) ---------- JDBC ---------- DB
| |
| |______ 소켓서버 : 자바 소켓 프로그램과 동일하게..
| |
| |______서드 파티 어플리케이션 서버 __________C2DM
|
|
web서버: 아파치톰캣서버, php
|
client (app) : SQLite, xml파싱
3. 마지막으로 서버 파티 어플리케이션 서버 구축은 어떻게하는건지...
C2DM으로 "**이 메시지를 보냈다"정도의 알림을 보내는 것 정도밖에 잘 모르겠습니다...
나름 열심히 찾아보았는데 코드는 부분부분있지만
전체적인 관계에 대한 정보는 없어 찾아서 이해한대로 합쳐본 것입니다..
2번(위의 관계)에서 서버파티서버,C2DM만 빠지면 맞는거 같은데..
C2DM서버를 넣으면 잘 모르겠습니다..
도와주세요ㅜㅜ
참고로 주고 받을 메세지는 채팅의 형식으로, 주고받은 내용을 저장하지는 않고
DB에는 메세지를 주고받는 사람들의 정보정도만 있습니다..




구조 자체는 맞는것으로 보입니다.
저도 푸시관련을 개발하고 있고 (C2DM은 아님...) 대충 아키텍쳐가 저런모양입니다.
프로토콜 나름이라 장담은 못하는데... WAS에서 반드시 Push메시지를 날릴필요는 없습니다.
client가 APP이라면 App에서 날릴수도 있습니다.
물론 이런경우 실제 구현에서는 스레드 Safe에 신경을 써야 할거구요...
아주 많은 Msg가 몰렸을 경우의 처리가 문제가 될수 있습니다.
HTTP는 지정된 시간안에 응답을 해줘야 하는 성격을 가지고 있기 때문에
메시지가 밀려서 못나가는 시간을 그냥 잡아먹고 있으면 안됩니다.
못나가는 것을 해결하는 것은 상당히 어렵구요...
못나가더라도 시간을 잡아먹지 않는쪽으로 해결을 봐야 하는게 맞습니다.
WAS에서 MessageQueue를 하나 만들고 그 MessageQueue에 메시지를 넣고 바로 응답을 보내는 형식이 제일 무난한 기법입니다.
그리고 항상 MessageQueue를 감시하는 스레드가 돌고 있어야 합니다.
스레드는 MessageQueue에 메시지가 있으면 이것을 빼서 소켓이나 서드파티 서버에 전달하는 역할을 합니다.