내가 스마트폰에서 SNS앱으로 댓글을 쓰거나 알림을 읽은 순간 눈앞에 켜져있는 나의 컴퓨터에서도 해당 SNS서비스는 방금 스마트폰에서 했던 댓글, 알림을 읽었던 행동이 새로고침 없이 반영되는 건 멀티플랫폼 서비스라면 이제 당연한 일이다.

Untitled

이렇게 한 서비스를 어떤기기로 접속했는지 어떻게 달라졌는지 느끼지 못할 정도로 언제나 어디서나 "똑같은 환경"을 느끼며 사용할 수 있도록 끊김이 없는 것을 seamless한 서비스라고 합니다.

seamless서비스를 경험한 사용자가 seam(끊김)이 있는 서비스를 사용하면 어떤 생각이들까? 이 서비스는 이렇게 만들었으니 최신상태를 볼려면 새로고침을 해야하고...라고 생각해줄까?

"저건 이렇게 되는데 왜 이건 안되냐? 별로네" 라는 생각이 더 들지 않을까?

더 살펴보자면 스마트폰이 나오고 멀티 플랫폼이 된 지 10년이 넘었다. 컴퓨터를 데스크탑, 키보드, 마우스로 처음 접한 세대가 아닌 태어나 처음 찍힌 사진기가 스마트폰이고 모든 화면은 터치가 된다고 생각하는 세대한테 이해를 바랄 수 있을까? 이제는 한 서비스에 스마트폰이 뿐만 아니라 자동차, 집 등등 더 많은 기기가 포함될텐데 seamless한 건 너무 당연하다.

그 당연한 seamless 서비스 어떻게 만들까?

먼저 무엇이 seamless함을 느끼게 하는 걸까? 내가 서비스에서 A라는 기기로 무언가 행동을 했다면 다른 B기기도 그 행동의 영향이 반영되어야 하는데 그렇게 되기 위해서는 A와 B가 서비스를 사용하고 있는 동안 동일한 상태값을 바라보고 있어야 한다.그리고 서비스에서는 그 상태값이 변경된다면 그 상태값과 관계되고 활성화된 클라이언트 기기로 변경된 사항을 전달해야 한다.

서버와 관계도.jpg

변경된 상태값을 받기 위해서 A와 B 클라이언트는 서비스 이용하는 한 서버와 연결이 계속 유지되어야 한다. 그 연결은 유지되어야 하기에 서버는 절대로 shutdown되어서는 안된다. 죽으면 모든 연결을 다 잃어 버리기에

현재까지 필요조건을 정리하자면

  1. 절대로 죽지 않는 서비스 서버
  2. 클라이언트와 서버 연결(채널) 관리
  3. 동시성 문제 고려

필요조건을 보면 많은 부분이 서버쪽 작업 비중이 높다. 결과적으로 서버에서 필요조건이 기능들이 가능해져야 서비스를 할 수 있다.

절대로 죽지 않는 서비스 서버

어떤게 불멸의 서버일까? 오류가 하나도 없으며 완벽 무결한 서버를 만들면 될까? 그런 건 이 세상에 없다고 본다.