brunch

You can make anything
by writing

C.S.Lewis

by 판뚜 May 11. 2019

메신저 앱은 왜 서버가 필요할까?

예전에 이런 댓글을 본 적이 있습니다. 한창 톡 감청 루머로 대한민국이 시끌시끌하던 때입니다.

애초에 카카x톡에 왜 서버가 필요한지 모르겠어요. 그냥 서로 주고받으면 되는 거 아닌가요?

물론 지금 이 글을 저분이 볼지 안 볼지는 모릅니다. 물론 못 보실 확률이 높겠지만 저의 마음이 그분께 닿길 바랍니다.




톡돌이와 톡순이


유치하긴 하지만 상황극으로 예를 들어보겠습니다.


추억의 컵과 실.

톡돌이와 톡순이는 연애를 시작했는데요. 이렇게 컵과 실을 연결하여 대화를 합니다. 편의상 실은 필요한 만큼 무한정 늘일 수 있다고 가정합니다.

톡돌이와 톡순이는 서로의 위치에 직접 연결되어있다.

언제 어디서나 꼭 귀를 대고 있기로 합의했다.

그렇지 않으면 상대의 메시지를 놓칠 수 있음에 동의했다.

만약 연결이 끊어지면 어떻게든 서로의 위치를 알아내서 직접 연결하기로 한다.


하지만 며칠 지내보니 너무 불편했습니다. 위는 아래의 문제점이 있기 때문입니다.

저장매체가 없기 때문에 한 번 받은 메시지는 다시 확인할 수 없다.

계속 연결을 유지하고 있어야 한다.

귀를 떼거나 자고 있으면 메시지가 유실된다.

끊어지면 직접 위치를 파악한 후 다시 직접 연결해야 한다.

생각만 해도 매우 애틋한 상황입니다. 이 상황을 조금이나마 편하게 할 수 있는 방법은 무엇일까요?




구름이


톡돌이, 톡순이는 뭔가 도움이 될 수단을 찾아보았습니다. 구름이에게 부탁을 해보려 합니다. 톡돌이와 톡순이의 요구사항은 아래와 같습니다.

메시지를 다시 확인할 수 있으면 좋겠다.

귀를 떼도, 자고 있어도 메시지가 유실되지 않았으면 좋겠다.

위치를 직접 파악하지 않아도 연결을 잘 시켜줬으면 좋겠다.

구름에게 부탁했다.

그래서 구름에게 부탁했습니다. 이 구름이는 어떻게 위 문제점들을 해결했을까요?

메시지를 전송하면 구름속에 쌓아둔다.

상대가 연결되어 있다면 메시지를 바로 보낸다.

상대가 부재중이라면 메시지가 왔다고 알려준다.

재접속시 구름속에 쌓아둔 메시지를 보여준다.


단, 구름이는 톡돌이, 톡순이에게 몇 가지 부탁을 했습니다.

다른 사람이 구름 속을 휘저을 수 있으니 나를 부를 때마다 너임을 증명해줘.

자는 동안 쌓아둔 메시지는 다시 확인시켜줄게. 단, 너희들이 받아 적어두었으면 해.

단, 3일 동안만 보관할게. 내가 너무 무거워지면 너희들을 도와줄 수 없으니까.

3일이 지났는데 너희들이 적어두지 않은 메시지는 평생 확인 못한다는 점 꼭 주의하고!




구름이(cloud) == 서버


바로 위 구름이의 역할이 서버의 역할이라고 보면 되겠습니다. 개발자의 언어로 바꿔봅시다. 일단 톡돌이, 톡순이 커플의 요구사항입니다.

메시지를 다시 확인할 수 있으면 좋겠다.
→ 지금까지 주고받은 메시지를 시간순으로 앱에서 보고 싶다.

귀를 떼도, 자고 있어도 메시지가 유실되지 않았으면 좋겠다.
→ 앱을 꺼둔 상태에서도 다시 켰을때 쌓인 메시지를 보고 싶다.

위치를 직접 파악하지 않아도 연결을 잘 시켜줬으면 좋겠다.
→ 서버가 알아서 내가 원하는 상대에게 메시지를 전송해주면 좋겠다.

우리가 메신저 서비스를 이용할 때의 요구사항과 같습니다. 이를 위해서는 서버가 꼭 필요합니다.


아래는 서버가 하는 일입니다.

메시지를 전송하면 구름 속에 쌓아둔다.
→ 서버(database)에 메시지를 저장한다. 단, 당사자만 확인할 수 있도록 암호화하여 저장한다.

상대가 연결되어 있다면 메시지를 바로 보낸다.
→ 상대가 접속된 채팅 서버를 통해 메시지를 bypass 한다.

상대가 부재중이라면 메시지가 왔다고 알려준다.
→ iOS, Android 각각의 푸시 노티 서비스(APNS, FCM) 이용한다.

재접속 시 구름 속에 쌓아둔 메시지를 보여준다.
→ 앱 구동 시 서버와 메시지를 동기화한다.


구름이가 부탁한 일도 개발 언어로 바꿔보겠습니다.

다른 사람이 구름 속을 휘저을 수 있으니 접속할 때마다 너임을 증명해줘.
→ 회원가입 및 계정 생성. 인증. (카톡의 경우 전화번호 인증 및 카카오 계정 인증)

자는 동안 쌓아둔 메시지는 다시 확인시켜줄게. 단, 너희들이 받아 적어두었으면 해.
→ 서버에 저장된 메시지들을 앱에 저장하여 동기화한다.

단, 3일 동안만 보관할게. 내가 너무 무거워지면 너희들을 도와줄 수 없으니까.
→ 서버 메시지 저장 정책.

3일이 지났는데 너희들이 적어두지 않은 메시지는 평생 확인 못한다는 점 꼭 주의하고!
→ 서버 메시지 저장 정책.


카카오톡, 라인, 텔레그램, 페메 등 대부분의 메신저 서비스들의 서버가 이런 일을 합니다. 이제 서버가 왜 필요한지 감이 좀 오실지 모르겠네요. 물론 서버는 추가적으로 이런 일도 합니다.

멀티 디바이스 관리

비개발분들은 어떻게 생각하실지 모르겠지만, 멀티 디바이스를 사용 시 그게 자동으로 동기화가 되는 게 아닙니다. 폰, 태블릿, 노트북 이 세 가지 기기가 동시에 접속되어 있는 경우는 서버에서 내가 접속된 기기들을 확인 후 강제로 동기화를 시켜줘야 하는 것이죠. 물론 동시에 접속된 상황이 아닌 경우는 어차피 앱을 켤 때 서버와 메시지를 동기화하는 절차를 거칩니다.


물론 이외에도 굉장히 많은 일을 하는 게 서버의 역할입니다. 이제 왜 서버가 꼭 필요한지 이해가 되셨을 거라고 생각합니다.




의문점


내가 자고 있어도 구름이가 내 집에 들어와서 적어두면 되는 거 아닌가요?
→ 기술적으로 불가능합니다. 물론 된다고 해도 개인정보 침해라서 못합니다.

암호화한다고 해도 서버에서 누군가는 확인 가능한 것 아닌가요?
→ 디코딩을 위한 키는 톡돌이, 톡순이 본인만 알고 있어서 불가능합니다.

"상대가 접속된 서버를 통해 메시지를 bypass 한다."와 "APNS, FCM 등의 푸시 노티 서비스"를 사용하는 게 다른가요?
→ 결과적으로 다르진 않습니다만 OS별 푸시 노티 서비스는 굉장히 느립니다. 채팅하다가 속터집니다. 따라서 둘 다 앱을 켠 경우는 서비스 자체적으로 빠르게 튜닝하여 bypass 시킵니다.

승x, 정준x 등 뉴스에서는 몇 달 전 단톡방 메시지도 복구한다고 하는데, 3일 간만 저장한다는 건 무슨 얘기인가요?
→ 서버에만 3일간 저장한다는 뜻입니다. 뉴스에서 나오는 메시지 복구는 폰에 저장된 데이터를 복구한다는 뜻입니다.


우리나라는 개인정보에 정말 민감한데요. 사실 비개발자분들이 잘 모르는 부분이 있어서 좀 더 크게 느끼시는 것 같습니다. 결론적으로, 메신저 앱 회사 차원에서의 감청이나 해킹은 거의 불가능하다고 보면 되겠습니다. 요즘 빈번하게 발생하는 해킹 사건은 이 서버가 잘못한 건 아니고요. 사기꾼들이 사용자의 아이디/패스워드를 살살 꼬셔서 갈취하는 것입니다. 그러니 평소에 보안을 철저히 하도록 합시다.


메시지를 서버에서 아무리 암호화한다고 해도 직원들이 디비를 조회하여 풀 수 있는 거 아니냐고 의문을 품으실 수도 있겠습니다만 이렇게 생각하시면 되겠습니다. 군필자 분들은 아실 겁니다. "우와! 군대에 실탄 많으니까 막 꺼내서 맘대로 쏘고 놀고 그랬겠다!!"라는 말이 얼마나 터무니없는 말인지를요. 심지어 폐쇄 조직인 군대에서도 위험한 부분에 대해선 스스로 매우 엄격하게 관리하는데, 국가 기관에서 호시탐탐 정책에 대해 감시받고 감사받는 일개 메신저 회사가 이 민감한 메시지들을 허술하게 관리하지 못합니다. 절대요.




마치며


나름 쉽게 설명해보려고 예시도 들고, 여자 친구한테 부탁해서 그림도 그려달라고 했는 데 성공한 건지 잘 모르겠습니다. 무튼 글 위에 언급했던 그 댓글을 다셨던 분에게 저의 마음이 조금이나마 전달됐길 빕니다.

작가의 이전글 집돌이 개발자의 항변 (feat. POJO)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari