Spring Boot와 JPA를 활용하여 간단한 SNS 기능을 구현한 프로젝트입니다.
- 목적:
- 데이터베이스 스키마 설계를 통해 전체 구조를 진행할 수 있다.
- JPA를 이용하여 데이터베이스와 연동하고, CRUD 작업을 수행할 수 있다.
- 사용자 인증과 인가의 기본 원리와 차이점을 이해하고 진행할 수 있다.
- 기능에 맞는 REST API 설계를 하고, Spring Boot를 이용하여 REST API를 구현할 수 있다.
- Git을 사용하여 소스 코드 버전 관리를 하고, Git branch를 이용하여 브랜치 관리 및 원화한 협업을 수행할 수 있다.
- Pull Request와 코드 리뷰 과정에 대해 이해하고 적용할 수 있다.
src
└── main
├── java
│ └── com
│ └── example
│ └── simplens
│ ├── common
│ │ ├── config
│ │ ├── consts
│ │ ├── dto
│ │ └── filter
│ ├── domain
│ │ ├── comment
│ │ ├── friend
│ │ ├── post
│ │ └── user
│ └── exception
│ ├── code
│ ├── custom
│ ├── dto
│ └── handler
├── resources
│ └── application.properties
└── SimpleSnsApplication.java
build.gradle
README.md
- 프로필 조회 기능
- 다른 사용자의 프로필을 조회할 수 있습니다.
- 조회 시 민감한 정보(
password)는 표시되지 않습니다. - 회원 목록을 조회할 수 있습니다. (Pagination)
- 프로필 수정 기능
- 로그인한 사용자가 본인의 프로필을 수정할 수 있습니다.
- 비밀번호 수정 기능
- 로그인한 사용자 본인의 비밀번호만 수정할 수 있습니다.
- 비밀번호 수정 시, 본인 확인을 위해 현재 비밀번호를 입력하여 올바른 경우에만 수정할 수 있습니다.
- 현재 비밀번호와 동일한 비밀번호로는 변경할 수 없습니다.
- 게시물 작성, 조회, 수정, 삭제 기능
- 게시물 수정, 삭제는 작성자 본인만 처리할 수 있습니다.
- 뉴스피드 목록 조회 기능
- 기본 정렬은 생성일자 기준으로 내림차순 정렬합니다.
- 10개씩 페이지네이션하여, 각 페이지 당 뉴스피드 데이터가 10개씩 나오게 합니다.
- 회원가입 기능
- 사용자 아이디
- 사용자 아이디는 이메일 형식이어야 합니다.
- 이메일이 중복되면 가입할 수 없습니다.
- 비밀번호
Bcrypt로 인코딩합니다.- 비밀번호는 최소 5글자 이상, 15글자 이하입니다.
- 사용자 아이디
- 회원탈퇴 기능
- 탈퇴 처리 시 비밀번호를 확인한 후 일치할 때 탈퇴 처리합니다.
- 탈퇴한 사용자의 아이디는 재사용할 수 없습니다.
- 회원 탈퇴시 유저 데이터는 논리삭제(Soft Delete)를 적용합니다.
- 로그인/로그아웃 기능
- 사용자 이메일과 비밀번호로 로그인합니다.
- 친구 요청/삭제 기능
- 특정 사용자를 친구로 요청/삭제할 수 있습니다.
- 친구 목록 조회 기능
- 친구 요청을 받은 사용자가 친구 요청 목록을 조회할 수 있습니다.
- 친구 요청을 수락하면, 친구 목록 조회에 친구가 된 사용자를 조회할 수 있습니다.
- 친구 뉴스피드 게시물 조회 기능
- 친구의 최신 게시물들을 최신순으로 볼 수 있습니다. (Pagination)
- 댓글 작성, 조회, 수정, 삭제 기능
- 사용자는 게시물에 댓글을 작성할 수 있고, 본인의 댓글은 수정 및 삭제를 할 수 있습니다.
- 댓글 목록 조회 기능
- 특정 게시물에 달린 댓글 목록을 조회할 수 있습니다. (Pagination)
- 게시물 및 댓글 좋아요 / 좋아요 취소 기능
- 사용자가 게시물이나 댓글에 좋아요를 남기거나 취소할 수 있습니다.
- 본인이 작성한 게시물과 댓글에 좋아요를 남길 수 없습니다.
- 같은 게시물에는 사용자당 한 번만 좋아요가 가능합니다.
- Language: Java
- Framework: Spring Boot
- Database: MySQL
- ORM: JPA
- Version Control: GitHub
Created by
@daylikezero
@mannaKim
@2024122601
@Park-EJ
@wjdgus2319








