현재 만들고 있는 팀 프로젝트의 어플은 '채팅'이 메인 기능이다. 마침 내가 맡은 담당 파트도 '채팅' 파트이다. 코드를 짜기 전에 한 번 고려해야될 점을 정리하는 것이 좋겠다고 생각해서 이 글을 작성한다.
채팅은 소켓통신을 통해 하며, 메세지를 받기 위해서는 소켓이 연결되어 있어야 한다. 우리는 이 연결하는 부분을 각각의 필요한 액티비티에 작성했다. 하지만 액티비티에 구현하면 한 가지 문제점이 있었다. 액티비티의 생성과 함께 소켓 통신이 연결되면은 반대로 그 액티비티를 나가서 액티비티가 소멸하면 연결이 끊긴다는 것이다. 처음에 어플을 만들 때는 그냥 채팅을 하는 화면에서만 소켓 통신이 유지되면 되지 않는건가 하는 생각을 했었는데 실상은 달랐다.
우리가 주로 쓰는 메신저 어플인 카카오톡이 소켓 통신으로 이루어진다고 가정해보자.(실제로 그런지는 모른다.) 만약 위에처럼 채팅방에서만 소켓 통신을 유지하게 되면 어떤 일이 생길까? 물론 채팅방에서는 별 문제가 없다. 하지만 채팅방을 나가고 소켓 통신이 끊어지면 더이상 메세지를 받지 못하는 상태가 된다. 즉, 만약 우리가 채팅방에 없을 때는 메세지를 못 받는다. 카카오톡으로 치자면 채팅방에 없는 동안 무슨 메세지가 왔는지 모르게 된다는 것이다.
우선은 이 소켓통신을 항시 유지하는 것이 가장 큰 이슈이다. 다행이게도, Service 클래스를 이용해서 소켓통신을 백그라운드 쪽으로 빼면 항시 유지할 수는 있겠지만, 소켓 통신의 구현체가 액티비티와 서로 통신을 하기 위한 방법을 찾아내야 한다. 일단 얼마 안 남은 프로젝트 기간의 가장 큰 이슈는 소켓 통신을 항상 유지하는 방법을 찾는 것이다.
다음으로는 채팅내용의 보존이다. 채팅방을 나갔다 들어와도 그 전 채팅의 기록이 남아있어야 하는데 이를 어떻게 구현할지이다. 알아본 바로는 어플 내부 데이터베이스와 서버 측 데이터베이스 모두에 저장하는 것같다. 하지만 서버는 서버측 담당자분이 알아서 하실(?) 거라고 생각하고 일단 소켓 통신을 항상 유지하는 이슈가 끝나면 어플 내부 데이터베이스도 설계해야 겠다.
'프로그래밍 언어 > javaAndroid' 카테고리의 다른 글
javaAndroid를 시작하며...(나의 구체적인 계획, 목표) (0) | 2021.01.06 |
---|---|
[디자인 패턴] 싱글톤 패턴 구현 (0) | 2021.01.02 |