본문 바로가기

프로젝트

[사이드] SNS와 실시간 채팅을 구현해보기 - 기능 과 DB 설계

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

기능 목록:

  • 소셜 네트워크
    • 사용자 관리: 회원가입, 로그인, 프로필 관리
    • 게시물 관리: 게시물 작성, 수정, 삭제
    • 댓글 및 좋아요: 댓글 작성, 좋아요 추가/삭제
    • 팔로우 시스템: 팔로우/언팔로우
    • 알림: 댓글, 좋아요, 팔로우에 대한 알림
  • 실시간 채팅
    • 1:1 채팅 및 그룹 채팅
    • 실시간 메시지 전송
    • 읽음 상태 표시
    • 채팅 알림

2. DB 설계

PostgreSQL과 MongoDB의 테이블 및 컬렉션

 

PostgreSQL 테이블

-- Users 테이블
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    profile_picture VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Posts 테이블
CREATE TABLE posts (
    id SERIAL PRIMARY KEY,
    user_id INT REFERENCES users(id),
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Comments 테이블
CREATE TABLE comments (
    id SERIAL PRIMARY KEY,
    post_id INT REFERENCES posts(id),
    user_id INT REFERENCES users(id),
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Likes 테이블
CREATE TABLE likes (
    id SERIAL PRIMARY KEY,
    post_id INT REFERENCES posts(id),
    user_id INT REFERENCES users(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Follows 테이블
CREATE TABLE follows (
    id SERIAL PRIMARY KEY,
    follower_id INT REFERENCES users(id),
    following_id INT REFERENCES users(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

 

MongoDB 컬렉션 설계

 

// Chats 컬렉션
{
  "_id": ObjectId,
  "participants": [ObjectId], // User IDs
  "messages": [
    {
      "sender": ObjectId, // User ID
      "message": String,
      "timestamp": Date,
      "readBy": [ObjectId] // User IDs
    }
  ],
  "createdAt": Date
}

// Notifications 컬렉션
{
  "_id": ObjectId,
  "user": ObjectId, // User ID
  "type": String, // 'like', 'comment', 'follow', 'message'
  "content": String,
  "isRead": Boolean,
  "timestamp": Date
}

 

 

'프로젝트' 카테고리의 다른 글

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