내일배움캠프(Spring 7기)/내일배움캠프

[뉴스피드 프로젝트] 요구 사항 정의 및 설계

가지코딩 2025. 6. 4. 17:25

1. 요구 사항 정의

필수 기능

  1. 프로필 관리
    • 프로필 조회 기능
    • 프로필 수정 기능
    • 비밀번호 수정 조건
    • 비밀번호 예외처리
  2. 뉴스피드 게시물 관리
    • 게시물 작성, 조회, 수정, 삭제 기능
  3. 사용자 인증
    • 회원가입 기능
    • 회원탈퇴 기능
  4. 친구 관리

 

도전 기능

  1. 검색 및 정렬 기능
    • 정렬 기능
    • 기간별 검색 기능
  2. 댓글
    • 댓글 작성, 조회, 수정, 삭제
  3. 좋아요
    • 게시물 및 댓글 좋아요 / 좋아요 취소 기능

2. 와이어 프레임 작성


3. 필수 기능 DB 설계

개념적 설계

 

 

 

논리적 설계

 

 

물리적 설계

DROP DATABASE IF EXISTS newsFeed;
CREATE DATABASE IF NOT EXISTS newsFeed;
USE newsFeed;

-- 사용자 인증(accounts) 테이블 생성
CREATE TABLE accounts (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '사용자 인증 ID (PK)',
    email VARCHAR(100) NOT NULL UNIQUE COMMENT '이메일',
    password VARCHAR(255) NOT NULL COMMENT '비밀번호',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일'
) COMMENT = '사용자 인증 Table';

-- 사용자 정보(profile) 테이블 생성
CREATE TABLE profiles (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '사용자 정보 ID (PK)',
    account_id BIGINT COMMENT '사용자 인증 ID (FK)',
    nickname VARCHAR(50) NOT NULL UNIQUE COMMENT '닉네임',
    birth DATE COMMENT '생년월일',
    bio TEXT COMMENT '자기소개',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일',

    FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
) COMMENT = '사용자 정보 Table';

-- 게시글(posts) 테이블 생성
CREATE TABLE posts (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '게시글 ID (PK)',
    profile_id BIGINT NOT NULL COMMENT '작성자 ID (FK)',
    title VARCHAR(100) NOT NULL COMMENT '제목',
    content TEXT NOT NULL COMMENT '내용',
    category VARCHAR(50) COMMENT '카테고리',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일',
    likes INTEGER COMMENT '좋아요',

    FOREIGN KEY (profile_id) REFERENCES profiles(id)
) COMMENT = '게시글 Table';

-- 팔로우 목록(follows) 테이블 생성
CREATE TABLE follows (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '팔로우 ID (PK)',
    follower_id BIGINT NOT NULL COMMENT '팔로우한 사람 ID (PK)',
    following_id BIGINT NOT NULL COMMENT '팔로잉된 사람 ID (FK)',
    created_at DATETIME COMMENT '생성일',

    FOREIGN KEY (follower_id) REFERENCES profiles(id),
    FOREIGN KEY (following_id) REFERENCES profiles(id)
) COMMENT = '팔로우 목록 Table'


3. 도전 기능 DB 설계

개념적 설계

 

 

논리적 설계

 

 

물리적 설계

DROP DATABASE IF EXISTS newsFeed;
CREATE DATABASE IF NOT EXISTS newsFeed;
USE newsFeed;

-- 사용자 인증(accounts) 테이블 생성
CREATE TABLE accounts (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '사용자 인증 ID (PK)',
    email VARCHAR(100) NOT NULL UNIQUE COMMENT '이메일',
    password VARCHAR(255) NOT NULL COMMENT '비밀번호',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일'
) COMMENT = '사용자 인증 Table';

-- 사용자 정보(profile) 테이블 생성
CREATE TABLE profiles (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '사용자 정보 ID (PK)',
    account_id BIGINT COMMENT '사용자 인증 ID (FK)',
    nickname VARCHAR(50) NOT NULL UNIQUE COMMENT '닉네임',
    birth DATE COMMENT '생년월일',
    bio TEXT COMMENT '자기소개',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일',

    FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
) COMMENT = '사용자 정보 Table';

-- 팔로우 목록(follows) 테이블 생성
CREATE TABLE follows (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '팔로우 ID (PK)',
    follower_id BIGINT NOT NULL COMMENT '팔로우한 사람 ID (FK)',
    following_id BIGINT NOT NULL COMMENT '팔로잉된 사람 ID (FK)',
    created_at DATETIME COMMENT '생성일',

    FOREIGN KEY (follower_id) REFERENCES profiles(id) ON DELETE CASCADE,
    FOREIGN KEY (following_id) REFERENCES profiles(id) ON DELETE CASCADE
) COMMENT = '팔로우 목록 Table';

-- 게시글(posts) 테이블 생성
CREATE TABLE posts (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '게시글 ID (PK)',
    profile_id BIGINT NOT NULL COMMENT '작성자 ID (FK)',
    title VARCHAR(100) NOT NULL COMMENT '제목',
    content TEXT NOT NULL COMMENT '내용',
    category VARCHAR(50) COMMENT '카테고리',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일',

    FOREIGN KEY (profile_id) REFERENCES profiles(id) ON DELETE CASCADE
) COMMENT = '게시글 Table';

-- 게시글 댓글(post_comments) 테이블 생성
CREATE TABLE post_comments (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '댓글 ID (PK)',
    post_id BIGINT NOT NULL COMMENT '게시글 ID (FK)',
    profile_id BIGINT NOT NULL COMMENT '작성자 ID (FK)',
    content TEXT NOT NULL COMMENT '내용',
    created_at DATETIME COMMENT '생성일',
    updated_at DATETIME COMMENT '수정일',

    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
    FOREIGN KEY (profile_id) REFERENCES profiles(id) ON DELETE CASCADE
) COMMENT = '게시글 댓글 Table';

-- 게시글 좋아요(post_likes) 테이블 생성
CREATE TABLE post_likes (
    id BIGINT AUTO_ㅍINCREMENT PRIMARY KEY COMMENT '댓글 ID (PK)',
    post_id BIGINT NOT NULL COMMENT '게시글 ID (FK)',
    profile_id BIGINT NOT NULL COMMENT '사용자 ID (FK)',
    created_at DATETIME COMMENT '생성일',

    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
    FOREIGN KEY (profile_id) REFERENCES profiles(id) ON DELETE CASCADE
) COMMENT = '게시글 좋아요 Table';

-- 게시글 댓글 좋아요(post_comment_likes) 테이블 생성
CREATE TABLE post_comment_likes (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '댓글 ID (PK)',
    post_comment_id BIGINT NOT NULL COMMENT '게시글 ID (FK)',
    profile_id BIGINT NOT NULL COMMENT '사용자 ID (FK)',
    created_at DATETIME COMMENT '생성일',

    FOREIGN KEY (post_comment_id) REFERENCES post_comments(id) ON DELETE CASCADE,
    FOREIGN KEY (profile_id) REFERENCES profiles(id) ON DELETE CASCADE
) COMMENT = '게시글 댓글 좋아요 Table';


4. API 명세서

Postman: document

Notion


5. 협업 규칙 정하기

해당 프로젝트는 팀프로젝트로 진행하게 됐다.

이에 따라 원활한 협업과 효율적인 개발 진행을 위해 팀원들과 함께 몇 가지 기본적인 협업 규칙을 정한 후 프로젝트를 시작했다.

 

 

3계층 아키텍처(Controller → Service → Repository) 반환 타입

 

 

예외 발생 시 응답 코드 및 메시지 format

{
    "timestamp": "2025-05-22T14:12:16.923+00:00",
    "status": 404,
    "error": "Not Found",
    "message": "해당 id 의 유저가 존재하지 않습니다. : 2",
    "path": "/users/2"
}

 

 

커밋 컨벤션 (Commit Convention)

feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정 (README 작성 등)
comment: 주석 추가 및 변경
rename: 파일 혹은 폴더명 수정
remove: 파일 삭제
style: 코드 포맷팅, 세미콜론 등 스타일 변경 (논리 변경 X)
refactor: 리팩토링 (기능 변경 X)
test: 테스트 코드 추가/수정
chore: 빌드 설정 변경
merge: 파일 병합
// 예시

chore: 프로젝트 구성

feat(account): 로그인 기능 추가

fix(post): 게시물 조회 응답 오류 수정

refactor: 중복 코드 제거

 

 

PR 템플릿

[#이슈번호] 로그인 기능 구현
## 상세 내용

- 
- 

<br/>

## 주의 사항

- 
- 

<br/>

 

 

코드 리뷰

  • 모든 Pull Request(PR)은 2명 이상의 리뷰어 승인을 받은 후 develop 브랜치에 병합한다.
  • 코드 리뷰는 단순 승인보다는 학습과 개선을 위한 과정으로 간주하며, 이해 안 되는 부분은 질문하고, 개선점이 있다면 적극적으로 피드백한다.