마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안녕하세요 nodejs사용 데이터 전송 관련해서 질문있습니다.

0 추천
안녕하세요 앱개발자 지망생인 학생입니다.

다름아니라 이번에 토이프로젝트를 진행하면서 nodejs서버를 두고 통신하는 기능을 구현하게 됏는데요.

A와 B가 통신할 때 B에서 데이터를 서버로 전송하면 이걸 서버가 A로 전송해주는 기능을 만들고 싶습니다.

인터넷에서 찾아보니 채팅프로그램이 이런 방식으로 만들어지는 것 같던데

전부 소켓통신밖에 없더라고요. 저는 지금 retrofit으로 nodejs랑 통신하고 있는데

retrofit으로도 이런 기능 구현할 수 있을까요?
bonon (620 포인트) 님이 2021년 2월 1일 질문

1개의 답변

0 추천
네, retrofit으로는 안됩니다.

통신 방식은 소켓이 커넥티드 된 상태와 커넥트리스 두가지 방식으로 크게 나눌 수 있습니다.

리트로핏도 소켓을 사용합니다.

커넥트리스 방식은 주로 웹서버가 많이 사용하는데요,
클라이언트의 요청에 대해서 답변을 처리하는 방식으로 구동됩니다.

커넥티드는 온라인 게임, 채팅 등의 서비스에서 쓰입니다.
소켓이 연결되어 있는 상태이므로, 원할 때 메시지를 보낼 수 있습니다.

당연히 후자가 서버의 리소스를 많이 사용할 가능성이 큽니다.
그리고 서버마다 처리할 수 있는 소켓의 한계가 있습니다. (잘만들면 한서버에 만개의 소켓 접속이 된 상태에서 동작하고, 못만들면 천개의 소켓도 못사용하죠. 또한 통신량이 헤비하면 또 그렇죠. 서버가 화상 통화서버라면, 몇십명 커버를 못하죠)

실시간으로 A가 보낸 메시지를 B에게 최대한 빨리 보내야 한다면 소켓방식으로 사용해야 합니다.

만약에 1분에 한번씩 서버에 메시지가 있는지 확인 하는 Polling 방식이라면,
대화를 Redis나 DB에 보관하고, Retrofit으로 계속 조회하는 방법이 있을 수 있습니다.

그러나 공부를 하는단계라면, 소켓 기반 채팅을 사용해 보기를 바랍니다.

Android Socket Chatting Samples 같은 키워드로 검색을 해서 스스로 이해할 수 있는 수준의 샘플을 몇개 받아서 그 중 동작되는 것 중에서 맘에 드는 것을 골라 좀 더 딥하게 들여다 보세요.

소켓 샘플은 github에 있는 것은 복잡할 것입니다. 간혹 강좌 식으로 되어 있는 샘플이 있으면 좀 간단하겠죠.
너무 복잡하면, 이해하기 힘들기 때문에, 단계별로 접근해야 합니다.
Will Kim (43,170 포인트) 님이 2021년 2월 1일 답변
...