인스타그램을 벤치마킹하여 음식 레시피 공유에 특화된 소셜 뉴스피드 백엔드 서비스입니다.
| 이름 | 역할 | GitHub | 트러블슈팅 |
|---|---|---|---|
| 곽지훈 | 핵심 콘텐츠(피드/댓글) 데이터 흐름 관리 시스템 및 접근 제어 로직 설계/구현 | Gwakjihun | click |
| 전재민 | Toggle 기능 이용 사용자 관계 관리 시스템 구축 (팔로우 서비스) 및 콘텐츠 분류 및 관리 시스템 구축 | Beforejamni | click |
| 최재혁 | 사용자 활동 지표(좋아요,댓글) 관리 및 통합 검색, 개인화된 정보 조회 시스템 개발 | Gemini-kei | click |
| 최한솔 | Security & JWT Token Auth System 구축, 테스트 진행 후 기록 및 관련 영상 제작 | hansolChoi29 | click |
- 사용 기술: Java 17, Spring Boot 3, MySQL, JPA, Gradle, Postman, Tomcat
- 협업 도구: GitHub, Notion, Figma, ERDcloud
- 기능
- 회원가입 / 로그인 / 로그아웃
- 비밀번호 변경, 전화번호 변경, 프로필 이미지 변경
- 게시글 작성, 수정, 삭제
- 다중 이미지 업로드 및 관리
- 게시글별 댓글 관리 (작성자/접근권한 기반)
- 개인 계정 공개 범위에 따른 팔로우 요청/수락/거절/취소
- 내 댓글 활동 / 내 좋아요 게시글 조회
- 다른 유저 프로필 조회
- 게시글, 프로필 공개범위 설정 (전체 공개 / 팔로워에게만 공개 / 나만 보기)
2025.08.04 ~ 2025.08.16
- 🔧 환경 설정 방법
- 필수 설치
- MySQL Database 생성
- application.properties 생성
- 📝 브랜치 컨벤션
- 📋 커밋 컨벤션
- 🙌 협업 규칙
- 🎈 API명세서 및 와이어프레임, ERD, 트리구조
-
Postman
-
Java 17
-
Spring Boot 3.5.4
-
MySQL : 8.0.42
-
의존성 (dependency):
분류 의존성 이름 설명 🌐 웹 Spring WebREST API 개발용 🛢 데이터 Spring Data JPAJPA ORM 사용 🐬 데이터베이스 MySQL DriverMySQL 연동용 JDBC 드라이버 🔒 인증/보안 Spring SecurityJWT 인증 구현 시 필수 💾 파일업로드 Spring Boot DevTools개발 시 핫 리로딩 등 🔍 검증 Validation@Valid, @NotNull 등 유효성 검사 🛠️ 개발도구 lombok코드 간소화
CREATE DATABASE hansolbab;📁 경로: src/main/resources/application.properties
🔐 Git 보안 설정 application.properties은 절대 Git에 업로드하지 않습니다.
.gitignore에 민감 정보 추가:
application.properties
.env 등
-
main: 배포 브랜치
-
dev: 통합 개발 브랜치
-
feature/{기능명}: 기능 단위 브랜치
예시: feature/user-signup, feature/feed-crud
| 이모지 | 타입 | 설명 |
|---|---|---|
| ✨ | feat | 해당 파일에 새로운 기능이 생김 |
| 🎉 | add | 없던 파일을 생성함, 초기 세팅 |
| 🐛 | fix | 버그 수정 |
| ♻️ | refactor | 코드 리팩토링 |
| 🚚 | move | 파일 옮김/정리 |
| 🔥 | delete | 기능/파일 삭제 |
| ✅ | test | 테스트 코드 작성 |
| 🙈 | gitfix | gitignore 수정 |
| 🔨 | script | build.gradle 변경, docker compose 변경 |
| 📝 | chore | 주석 추가 및 수정, 변수명 및 클래스명 수정 |
| ⚡️ | improve | 개선 |
기능 단위로 PR 작성
코드 리뷰어는 2명 모두 승인 시 merge
일일 커밋 후 PR 리뷰 요청
프로젝트 구조
com.example.newsfeedproject/
├── NewsfeedProjectApplication.java
│
├── auth/
│ ├── controller/
│ │ └── AuthController.java
│ ├── dto/
│ │ ├── signin/
│ │ │ ├── SignInRequestDto.java
│ │ │ └── SignInResponseDto.java
│ │ └── signup/
│ │ └── SignUpRequestDto.java
│ ├── impl/
│ │ ├── UserDetailsImpl.java
│ │ └── UserDetailsServiceImpl.java
│ └── service/
│ ├── signin/
│ │ └── SignInService.java
│ └── signup/
│ └── SignUpService.java
│
├── category/
│ ├── controller/
│ │ └── CategoryController.java
│ ├── entity/
│ │ ├── Category.java
│ │ └── CategoryEntity.java
│ └── service/
│ └── CategoryService.java
│
├── comment/
│ ├── controller/
│ │ └── CommentsController.java
│ ├── dto/
│ │ ├── CommentResponseDto.java
│ │ ├── CreateCommentRequestDto.java
│ │ └── UpdateCommentRequestDto.java
│ ├── entity/
│ │ └── Comments.java
│ ├── repository/
│ │ └── CommentsRepository.java
│ └── service/
│ └── CommentsService.java
│
├── common/
│ ├── config/
│ │ ├── AuthConfig.java
│ │ ├── JwtConfig.java
│ │ └── SecurityConfig.java
│ ├── dto/
│ │ ├── PrincipalRequestDto.java
│ │ ├── ReadUsersFeedResponseDto.java
│ │ └── ReadUserSimpleResponseDto.java
│ ├── exception/
│ │ ├── auth
│ │ │ ├── AuthErrorCode.java
│ │ │ └── AuthErrorException.java
│ │ ├── comment
│ │ │ ├── CommentErrorCode.java
│ │ │ └── CommentErrorException.java
│ │ ├── feeds
│ │ │ ├── FeedsErrorCode.java
│ │ │ └── FeedsErrorException.java
│ │ ├── follow
│ │ │ ├── FollowErrorCode.java
│ │ │ └── FollowErrorException.java
│ │ ├── users
│ │ │ ├── UserErrorCode.java
│ │ │ └── UsersErrorException.java
│ │ ├── ErrorExeption.java
│ │ ├── ErrorResponseDto.java
│ │ └── GlbalExceptionHandeler.java
│ ├── filter/
│ │ └── JwtAuthorization.java
│ └── util/
│ └── JwtUtil.java
│
├── feedimg/
│ ├── entity/
│ │ └── FeedImage.java
│ └── repository/
│ └── FeedImgRepository.java
│
├── feeds/
│ ├── controller/
│ │ ├── FeedsController.java
│ │ └── FeedsLikeController.java
│ ├── dto/
│ │ ├── CreateFeedsRequestDto.java
│ │ ├── CreateFeedResponseDto.java
│ │ ├── FeedsResponseDto.java
│ │ ├── ReadFeedsResponseDto.java
│ │ └── UpdateFeedsRequestDto.java
│ ├── entity/
│ │ └── Feeds.java
│ ├── repository/
│ │ └── FeedsRepository.java
│ └── service/
│ ├── FeedsLikeService.java
│ └── FeedsService.java
│
├── follow/
│ ├── entity/
│ │ └── FollowsController.java
│ ├── dto/
│ │ ├── FollowResponseDto.java
│ │ └── ReadFollowUsersDto.java
│ ├── entity/
│ │ ├── Follows.java
│ │ └── FollowsStatus.java
│ ├── repository/
│ │ └── FollowsRepository.java
│ └── service/
│ └── FollowService.java
│
├── likes/
│ ├── entity/
│ │ └── Likes.java
│ └── repository/
│ └── LikesRepository.java
│
├── myinfo/
│ ├── controller/
│ │ ├── MyInfoController.java
│ │ └── MyInfoModifyController.java
│ ├── dto/
│ │ ├── ResetPasswordRequestDto.java
│ │ ├── UpdateProfileImageRequestDto.java
│ │ ├── UpdatePhoneNumberRequestDto.java
│ │ └── WithdrawAccountRequestDto.java
│ └── service/
│ ├── MyInfoService.java
│ ├── ProfileImageService.java
│ ├── ResetPasswordService.java
│ ├── UpdatePhoneNumberService.java
│ └── WithdrawAccountService.java
│
├── requestfollow/
│ ├── controller/
│ │ └── RequestFollowController.java
│ ├── dto/
│ │ ├── ReadMyRequestResponseDto.java
│ │ ├── ReadRequestFollowUsersDto.java
│ │ └── RequestFollowResponseDto.java
│ ├── entity/
│ │ └── RequestFollows.java
│ ├── repository/
│ │ └── RequestFollowRepository.java
│ └── service/
│ └── RequestFollowService.java
│
└── users/
├── controller/
│ └── UsersController.java
├── dto/
│ └── LikesInfoDto.java
├── entity/
│ ├── AccessAble.java
│ └── Users.java
├── repository/
│ └── UsersRepository.java
└── service/
└── UsersService.java