항해99 1주차, 슬랙 클론코딩으로 협업툴 UI/UX 200% 따라잡은 후기

2026-07-02 · 테크 · 읽는데 5분

슬랙 클론코딩 1주일, 협업툴 UI/UX를 따라잡는 현실적인 접근법

항해99 1주차 과제로 슬랙(Slack) 클론코딩을 진행한다면, 채널 기능을 제외한 워크스페이스 기반 채팅 기능을 구현하는 것이 핵심입니다. 이 과정에서 멤버 초대, 채팅방 생성, 실시간 메시지 전송을 다루며, Polling 구조로 채팅을 구현하되 서버 부하를 고려한 개선 방안까지 함께 고민하게 됩니다. 이 글에서는 실제로 어떤 부분을 집중해야 하는지, 그리고 클론코딩을 통해 배울 수 있는 핵심 포인트를 정리했습니다.


워크스페이스와 채팅방, 어떤 기능을 먼저 구현해야 할까

슬랙 클론코딩의 첫 단계는 워크스페이스(workspace) 기능을 구현하는 것입니다. 워크스페이스는 팀 단위의 공간으로, 멤버를 초대하고 채팅방을 생성할 수 있는 기반 역할을 합니다. 이때 반드시 포함해야 할 요소는 다음과 같습니다.

  • 워크스페이스 생성 및 참여: 사용자가 워크스페이스를 만들거나 초대 링크를 통해 참여할 수 있어야 합니다.
  • 멤버 초대 기능: 이메일이나 초대 코드로 다른 사용자를 워크스페이스에 추가할 수 있어야 합니다.
  • 채팅방 생성: 워크스페이스 내에서 새로운 채팅방(1:1 또는 그룹)을 만들 수 있어야 합니다.
  • 실시간 메시지 전송: Polling 구조를 활용해 메시지를 주고받을 수 있어야 합니다.

이 기능들은 슬랙이 제공하는 기본 협업 경험의 핵심입니다. 채널 기능(주제별 대화방)은 제외하고, 워크스페이스 중심의 채팅 기능에 집중하는 것이 과제의 목표였습니다.


Polling 구조로 채팅 구현하기, 서버 부담을 어떻게 해결할까

참고 자료에서 확인된 바에 따르면, 이번 클론코딩에서는 Polling 구조를 사용해 채팅 기능을 구현했습니다. Polling은 클라이언트가 일정 시간 간격으로 서버에 새 메시지가 있는지 요청하는 방식입니다. 구현이 단순하다는 장점이 있지만, 동시에 서버 성능에 부담을 줄 수 있다는 단점이 명확합니다.

  • 작동 방식: 클라이언트가 1-2초마다 서버에 "새 메시지 있어?"라고 묻습니다.
  • 서버 부하: 사용자가 많을수록 요청 횟수가 폭증해 서버 리소스를 많이 소모합니다.
  • 개선 방안: WebSocket이나 Server-Sent Events(SSE) 같은 실시간 통신 방식으로 전환하면 서버 부하를 크게 줄일 수 있습니다.

따라서 Polling 구조로 먼저 구현한 뒤, 서버 부하를 줄이기 위한 대안(WebSocket 등)을 학습하는 것이 이 과제의 중요한 학습 포인트입니다. 실제로 많은 개발자들이 초기에는 Polling으로 시작해 리팩토링 과정에서 WebSocket으로 전환합니다.


클론코딩 프로젝트, GitHub 저장소에서 무엇을 확인해야 할까

참고 자료에 나온 두 개의 GitHub 저장소는 각각 프론트엔드와 백엔드 코드를 제공합니다. 이 저장소를 분석하면 클론코딩의 전체 구조를 이해하는 데 큰 도움이 됩니다.

  • 프론트엔드 저장소 (act99/clone-slack): React 기반으로 UI를 구성하고, Polling 방식으로 백엔드와 통신하는 코드를 확인할 수 있습니다.
  • 백엔드 저장소 (fnzl08/SlackClone): Node.js 환경에서 채팅 서버를 구현한 코드로, 워크스페이스와 채팅방 관리 로직이 포함되어 있습니다.
  • Nest.js 기반 저장소 (usreon/slack-clone): 공식 문서와 인프런 강의를 참고해 Nest.js로 슬랙 서버를 클론코딩한 예시입니다. Nest.js의 모듈 구조와 의존성 주입 방식을 학습할 수 있습니다.

이 저장소들을 분석할 때는 API 엔드포인트 설계, 데이터베이스 스키마, 실시간 통신 구현 방식에 주목하는 것이 좋습니다. 특히 Polling을 어떻게 구현했는지, 그리고 어떤 부분에서 WebSocket으로의 전환이 필요한지 살펴보세요.


자주 묻는 질문

Q. 클론코딩에서 채널 기능을 제외한 이유가 무엇인가요?

채널 기능은 주제별로 대화를 분류하는 복잡한 구조입니다. 1주일이라는 짧은 기간 동안 워크스페이스 기반 채팅의 핵심 기능(멤버 초대, 채팅방 생성, 실시간 메시지)에 집중하기 위해 제외했습니다. 채널 기능은 추후 확장 과제로 남겨두는 것이 일반적입니다.

Q. Polling 대신 WebSocket을 사용하면 어떤 장점이 있나요?

WebSocket은 클라이언트와 서버 간에 지속적인 연결을 유지해, 서버가 새 메시지를 즉시 클라이언트에 전달할 수 있습니다. Polling처럼 불필요한 요청을 반복하지 않으므로 서버 부하가 크게 줄고, 실시간성이 향상됩니다.

Q. 초보자가 슬랙 클론코딩을 시작하려면 어떤 언어가 좋을까요?

프론트엔드는 React, 백엔드는 Node.js(Express 또는 Nest.js)를 추천합니다. 두 기술 모두 슬랙 클론코딩 관련 자료가 많고, 커뮤니티 지원도 활발합니다. 특히 Nest.js는 공식 문서와 인프런 강의를 기반으로 학습하기 좋습니다.

Q. 클론코딩 프로젝트를 포트폴리오에 활용할 때 강조할 점은?

실시간 통신 방식(Polling → WebSocket 전환)에 대한 고민, 워크스페이스와 멤버 관리 로직의 설계, 그리고 서버 부하를 고려한 최적화 시도를 강조하는 것이 좋습니다. 단순히 기능을 구현한 것을 넘어, 문제를 인식하고 개선한 과정을 보여주는 것이 중요합니다.