1. 요구 사항 정의
필수 기능
- 프로필 관리
- 프로필 조회 기능
- 프로필 수정 기능
- 비밀번호 수정 조건
- 비밀번호 예외처리
- 뉴스피드 게시물 관리
- 게시물 작성, 조회, 수정, 삭제 기능
- 사용자 인증
- 회원가입 기능
- 회원탈퇴 기능
- 친구 관리
도전 기능
- 검색 및 정렬 기능
- 정렬 기능
- 기간별 검색 기능
- 댓글
- 댓글 작성, 조회, 수정, 삭제
- 좋아요
- 게시물 및 댓글 좋아요 / 좋아요 취소 기능
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 브랜치에 병합한다.
- 코드 리뷰는 단순 승인보다는 학습과 개선을 위한 과정으로 간주하며, 이해 안 되는 부분은 질문하고, 개선점이 있다면 적극적으로 피드백한다.
'내일배움캠프(Spring 7기) > 내일배움캠프' 카테고리의 다른 글
[CH 4 코드 개선 및 테스트 코드 작성] 정리 & 회고 (2) | 2025.06.12 |
---|---|
[뉴스피드 프로젝트] 정리 & 회고 (4) | 2025.06.04 |
[CH 3 일정 관리 앱 Develop] 정리 & 회고 (0) | 2025.05.23 |
[CH 3 일정 관리 앱 Develop] 요구 사항 정의 및 설계 (0) | 2025.05.21 |
[CH 3 일정 관리 앱 만들기] 정리 & 회고 (0) | 2025.05.13 |