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 |
---|