이번에 스터디 활동으로 인스타그램같은 SNS를 만들어보기로 했다. 처음은 기본적인 기능인 사용자 로그인, 회원 가입, 게시글 작성, 댓글 작성 등만 구현하기로 했다.
ERD
제일 먼저 데이터베이스 설계를 했다. 처음 무언가를 만들기 위해서 한 데이터베이스 설계라 잘 설계했는지는 모르겠지만 일단 조인을 여러 번 해야할 필요가 있다고 해도 최대한 정규화하려고 노력했다. 실무에서 RAW Quary를 사용할 때 조인을 여러 번하는 것을 피하기 위해서 한 테이블에 여러 속성을 우겨넣는 경우도 있다고 한다... 이걸 해결하려면 JPA를 사용하면 된다. 하지만 난 아직 JPA 사용에 익숙하지 않아서 앞으로 JPA를 공부해야할 필요가 있다.
ENTITY
FOLLOWS
| 속성 | 도메인 | 설명 |
| following_user_id | BIGINT | 팔로우한 주체 |
| followed_user_id | BIGINT | 팔로우한 사람 |
| created_at | TIMESTAMP | 팔로우한 날짜 |
USERS
| 속성 | 도메인 | 설명 |
| id | BIGINT | 기본키, 자동 증가 |
| VARCHAR(50) | 이메일 | |
| password | VARCHAR(20) | 비밀번호 |
| user_name | VARCHAR(30) | 이름 |
| nickname | VARCHAR(20) | 별명 |
| phone | VARCHAR(11) | 전화번호 |
| profile_image | TEXT | 프로필 이미지 |
| status | TINYINT | 계정 상태 |
| created_at | TIMESTAMP | 가입일 |
POSTS
| 속성 | 도메인 | 설명 |
| id | BIGINT | 기본키, 자동 증가 |
| user_id | INTEGER | 글쓴이 |
| title | VARCHAR(30) | 게시글 제목 |
| body | TEXT | 게시글 내용 |
| status | TINYINT | 게시글 상태 |
| likes | INTEGER | 게시글 좋아요 |
| views | INTEGER | 게시글 조회수 |
| created_at | TIMESTAMP | 게시글 작성일 |
POST_HASHTAGS
| 속성 | 도메인 | 설명 |
| post_id | BIGINT | 게시글 id |
| hashtag_id | BIGINT | 해시태그 id |
HASHTAG
| 속성 | 도메인 | 설명 |
| id | BIGINT | 기본키, 자동 증가 |
| tag | VARCHAR(20) | 해시태그 |
PHOTOS
| 속성 | 도메인 | 설명 |
| post_id | BIGINT | 게시글 id |
| photo | TEXT | 사진 |
| priority | TINYINT | 우선순위 |
VIDEOS
| 속성 | 도메인 | 설명 |
| post_id | BIGINT | 게시글 id |
| video | TEXT | 동영상 |
| priority | TINYINT | 우선순위 |
POST_LIKES
| 속성 | 도메인 | 설명 |
| post_id | BIGINT | 게시글 id |
| user_id | BIGINT | 게시글 좋아요한 사람 |
COMMENTS
| 속성 | 도메인 | 설명 |
| id | BIGINT | 기본키, 자동 증가 |
| post_id | BIGINT | 게시글 id |
| user_id | BIGINT | 댓글 작성자 id |
| parent_commet_id | BIGINT | 대댓글일 경우 부모 댓글 |
| body | VARCAHR(100) | 댓글 내용 |
| created_at | TIMESTAMP | 댓글 작성일 |
COMMENTS_LIKES
| 속성 | 도메인 | 설명 |
| comments_id | BIGINT | 댓글 id |
| user_id | BIGINT | 댓글 좋아요한 사람 |
앞으로 구현할 기능
사용자
- 회원가입
- 로그인
- 회원 정보 수정
- 회원 탈퇴
- 내가 좋아요한 게시글 목록
- 내가 좋아요한 댓글 목록
- 내가 팔로우한 사람
- 나를 팔로우한 사람
게시글
- 사진, 동영상 복수개 업로드
- 게시글 작성
- 게시글 수정
- 게시글 삭제
- 게시글 좋아요
- 댓글 작성
- 해시태그
- 게시글 목록 보기
- 조건에 맞는 게시글 보여주기(필터링)
댓글
- 댓글 작성
- 댓글 수정
- 댓글 삭제
- 대댓글 작성
- 대댓글 수정
- 대댓글 삭제
- 댓글 좋아요
검색
- 아이디로 사용자 검색
- 해시태그로 게시글 검색
생각해 봐야할 점
- 테이블을 여러 개로 나눌 시 조인을 여러 번 해야 해서 쿼리문이 복잡해질 가능성 있음
- 대댓글 구현을 어떻게 할건지 - 일단은 단순하게 초기 작성 시간순으로 정렬할 예정
'스터디 모임' 카테고리의 다른 글
| [스터디 모임] CSRF (0) | 2024.03.04 |
|---|---|
| [스터디 모임] 스프링 핵심 원리 - 도입편 (0) | 2024.02.18 |
| 오늘 겪었던 문제 Error: 4091-42S02: Unknown SEQUENCE: (0) | 2024.02.13 |
| 오늘 구현한 것들 - 회원 가입 / 검증 / @Valid 작동 안 하던 문제 해결 (0) | 2023.11.02 |
| 스프링 시큐리티 authorizeRequests deprecated 문제 (0) | 2023.10.29 |