
'나 혼자가 아니구나' 하는 감각
온라인 쇼핑하다가 "지금 12명이 이 상품을 보고 있어요" 같은 문구를 본 적 있죠? 혹은 구글 문서에서 같은 문서를 보는 동료의 커서가 둥둥 떠다니는 거요. 이런 걸 프레즌스(presence), 우리말로는 '실시간 접속 현황' 정도로 부르는데요. 별거 아닌 것 같지만, 사람들에게 "여기 나 말고도 누군가 있다"는 감각을 주는 순간 웹사이트가 갑자기 살아있는 공간처럼 느껴지거든요.
그런데 막상 이걸 직접 구현하려고 하면 생각보다 일이 커져요. 실시간으로 누가 들어오고 나가는지 추적하려면 보통 웹소켓 서버를 띄우고, 접속자 상태를 어딘가에 저장하고, 누가 나갔는지 감지하는 로직까지 짜야 하거든요. 이번에 소개할 TownSquare는 바로 이 귀찮은 과정을 "아주 작고 가볍게" 만들어보자는 시도예요. 이름 그대로 웹사이트에 작은 '마을 광장' 하나를 붙여주는 거죠.
프레즌스가 어려운 진짜 이유
실시간 접속 현황이 까다로운 건 "누가 지금 보고 있는가"를 정확히 아는 게 의외로 어렵기 때문이에요. 사용자가 '나갔다'는 신호를 항상 친절하게 보내주지 않거든요. 브라우저 탭을 그냥 닫거나, 와이파이가 끊기거나, 노트북 덮개를 덮어버리면 서버는 그 사람이 떠난 걸 바로 알 수가 없어요. 그래서 보통은 하트비트(heartbeat) 라는 방식을 써요. 이게 뭐냐면, 접속한 브라우저가 몇 초마다 "저 아직 여기 있어요" 하고 작은 신호를 계속 보내는 거예요. 그러다 신호가 일정 시간 끊기면 "아, 나갔구나" 하고 판단하는 거죠. 마치 등산 갈 때 일정 간격으로 무전 치는 것과 비슷해요.
여기에 더해 실시간 양방향 통신이 필요해요. 누가 새로 들어왔을 때 다른 사람들 화면에도 바로 반영돼야 하니까요. 보통 이걸 위해 웹소켓(WebSocket) 을 쓰는데, 웹소켓은 일반적인 웹 요청처럼 '물어보면 답하고 끝'이 아니라, 한번 연결해두면 서버와 브라우저가 계속 열린 통로로 수다를 떨 수 있는 방식이에요. TownSquare 같은 프레즌스 레이어는 이 하트비트 관리와 웹소켓 연결, 접속자 상태 동기화를 한 덩어리로 감싸서, 개발자는 복잡한 내부를 몰라도 '붙이기만 하면' 되도록 추상화해주는 거예요.
'작다'는 게 왜 매력인가
이런 기능을 제공하는 서비스는 이미 꽤 있어요. 협업 기능의 강자 Liveblocks, 실시간 인프라를 통째로 파는 PubNub이나 Ably, 그리고 오픈소스 진영의 Supabase Realtime 같은 것들이 대표적이죠. 이들은 강력하지만, 대신 풀세트 플랫폼이라 처음 붙이려면 SDK 설치하고, 계정 만들고, 채널 설정하고… 손이 제법 가요. 그냥 "내 블로그에 지금 몇 명 보고 있는지만 띄우고 싶다" 정도의 소박한 욕구엔 과한 거죠.
TownSquare가 노리는 지점이 바로 거기예요. 화려한 기능을 다 욕심내지 않고, 딱 '존재감'만 가볍게 표현하는 데 집중하는 거죠. 작은 스크립트 한 줄, 혹은 간단한 컴포넌트 하나로 끝나는 걸 지향해요. 이건 요즘 웹 도구들에서 보이는 흐름과도 맞닿아 있어요. 무겁고 만능인 플랫폼 대신, 한 가지 일을 정말 잘하는 작은 도구들을 조립해 쓰는 방향이요. 마치 스위스 군용 칼 하나 사는 대신, 진짜 잘 드는 작은 칼 하나를 챙기는 느낌이랄까요.
한국 개발자에게 주는 시사점
실무적으로 보면, 이런 가벼운 프레즌스 레이어는 사이드 프로젝트나 개인 블로그, 작은 커뮤니티 사이트에 '살아있는 느낌'을 주고 싶을 때 딱이에요. 사용자에게 "지금 이 글을 함께 읽는 사람이 있다"는 신호 하나만 줘도 체류 시간과 참여도가 달라지거든요. 우리 DayCraft 같은 커뮤니티에도 "지금 이 스레드를 N명이 보고 있어요" 같은 게 붙으면 토론이 한결 활기차질 거예요.
다만 직접 도입할 땐 몇 가지 따져볼 게 있어요. 외부 서비스에 의존하면 그 서비스가 죽으면 내 사이트 기능도 같이 흔들리고요, 접속자 정보를 다루는 만큼 개인정보와 프라이버시 관점도 챙겨야 해요. 또 트래픽이 크게 늘면 웹소켓 동시 연결 수가 비용으로 직결되니, 작게 시작하더라도 확장 시 비용 구조를 미리 가늠해두는 게 좋아요. 무엇보다 이런 작은 도구를 직접 뜯어보면서 "하트비트와 웹소켓으로 프레즌스를 어떻게 구현하는지"를 익혀두면, 나중에 더 큰 실시간 기능을 만들 때 든든한 밑천이 됩니다. 사실 직접 한번 만들어보는 게 제일 좋은 공부거든요.
핵심을 한 줄로 정리하면, 프레즌스는 '기능'이 아니라 '분위기'를 만드는 장치이고, 이제 그걸 아주 가볍게 붙일 수 있는 시대가 됐다는 거예요. 여러분이라면 어떤 사이트에 '지금 함께 보고 있는 사람들' 표시를 넣어보고 싶으세요? 반대로, 누가 보고 있는지 드러나는 게 부담스러운 경우는 또 없을까요?
🔗 출처: Hacker News