본문 바로가기

프로젝트

[사이드] SNS와 실시간 채팅을 구현해보기

공부도 할겸 SNS와 실시간 채팅을 구현해보려한다.

 

소셜 네트워크은 댓글, 좋아요, 팔로우에 대한 알림 실시간 채팅은 대화에 대한 알림을 포함 하여 구현하고

 

개발은

1. 서비스 기획(기능 명세)

2. DB 설계

3. 백엔드 기능 개발

4. 서버 구성

5. 프론트 개발 순서로 진행할거다 

 

프론트는 디자인 할줄 몰라서 그냥 기능만 보여주게만...ㅎ

 

아래는 사용할 기술 스택에 대한 설명이다.

데이터베이스

  • PostgreSQL: 관계형 데이터베이스로, 소셜 네트워크의 구조화된 데이터(유저, 게시물, 댓글, 팔로우 관계 등)를 관리하기에 적합
  • MongoDB: 비정형 데이터와 고속의 읽기/쓰기 작업에 적합한 NoSQL 데이터베이스로, 실시간 채팅 메시지 기록에 활용할 수 있습니다. 대량의 채팅 로그를 효율적으로 처리 가능

백엔드 프레임 워크는 스프링과 FastAPI, Node.js 중 하나를 고르려는데 

  1. 스프링 (Spring Boot)
    • 장점:
      • Java 기반으로 강력하고 확장성 있는 프레임워크
      • 대규모 애플리케이션에서 안정적이고 성능이 우수
      • 보안 기능이 우수하며, 스케줄링, 트랜잭션 관리 등 고급 기능 지원
      • PostgreSQL과의 호환성이 높아, 구조화된 데이터 처리
    • 단점: 설정과 구성이 상대적으로 복잡할 수 있고, 학습 곡선이 높다.
    • 적합한 경우: 대규모 프로젝트, 안정성과 보안이 중요한 프로젝트.
  2. FastAPI
    • 장점:
      • Python 기반으로 빠르게 개발이 가능하며, 비동기 처리를 기본으로 지원
      • 경량화된 구조로 빠른 성능을 보장하며, REST API와 실시간 기능(WebSocket)을 쉽게 구현
      • 코드가 간결하고, 타입 힌트 지원으로 유지보수가 용이
    • 단점: 대규모 애플리케이션에서는 관리가 다소 복잡
    • 적합한 경우: 빠른 개발 속도가 필요한 프로젝트, 경량화된 서버 구성
  3. Node.js
    • 장점:
      • JavaScript 기반으로, 프론트엔드(React)와의 언어 일관성 유지
      • 비동기 I/O 처리가 우수하여 실시간 채팅 같은 비동기 작업에 최적
      • WebSocket, REST API 등 실시간 기능 구현이 용이
    • 단점: CPU 집약적인 작업에서 성능 저하가 발생
    • 적합한 경우: 실시간 데이터 처리, 빠른 이벤트 처리, 그리고 프론트엔드와 통합된 개발 환경

위의 장점과 단점을 고려했을 때 Node.js가 적합할 것 같다.

소셜 네트워크와 실시간 채팅의 비동기 처리, 빠른 응답성과 언어 일관성(JavaScript)을 모두 고려하고, 실시간 기능(WebSocket) 구현도 용이하다.

 

서비스 기획(기능 명세)

  • 소셜 네트워크: 사용자 프로필, 게시물 작성 및 편집, 댓글 및 좋아요 기능, 팔로우 시스템, 알림 기능
  • 실시간 채팅: 사용자 간의 실시간 채팅, 그룹 채팅, 읽음 상태 및 메시지 알림
  • 통합 알림 시스템: 댓글, 좋아요, 팔로우, 채팅 메시지에 대한 실시간 알림

DB 설계

  • PostgreSQL: 유저, 게시물, 댓글, 팔로우 관계 등의 테이블 설계
  • MongoDB: 채팅 메시지, 실시간 알림 로그 등 비정형 데이터 저장

백엔드 기능 개발

  • Node.js로 REST API 및 WebSocket 서버 구축
  • JWT를 사용한 인증 및 인가 시스템
  • 알림 시스템 구현: Socket.IO를 활용한 실시간 알림 전송
  • PostgreSQL과 MongoDB의 데이터 연동 및 처리 로직 개발

서버 구성

  • 로컬에서 Docker Compose를 이용한 환경 구성
  • PostgreSQL, MongoDB, Node.js 서버 컨테이너화
  • 추후 배포를 고려한 환경변수 설정 및 스크립트 작성

프론트 개발

  • React로 사용자 인터페이스 개발
  • React Query 혹은 SWR을 이용한 데이터 페칭 및 상태 관리
  • Socket.IO 클라이언트를 사용한 실시간 채팅 및 알림 처리

위를 기반으로 개발을 하려한다.