Skip to content

Latest commit

 

History

History
317 lines (275 loc) · 19.1 KB

README.md

File metadata and controls

317 lines (275 loc) · 19.1 KB

Banner.png

“하루가 끝나고 사람들이 귀가를 서두를 무렵, 어서오세요 힐링 SNS 심야식당 입니다”

힐링 SNS 심야식당은 10:00 Open - 05:00 Close, 제한적 저장이 가능한 휘발성 데이터와 강한 익명성, 그리고 유저들간 팔로우가 없는 위치기반의 운영과 이를 기반으로 하는 채팅방으로 나와 조금 더 비슷한 사람들과 조금 더 진실 된 소통을 할 수 있는 SNS입니다 힐링 SNS 심야식당을 통해 자극적이고, 나 빼고 모두가 행복해보이는, 사용할 수록 외롭게만 느껴졌던 SNS의 문제점을 해결하고자 합니다.

어떤 사람들을 위한 서비스일까요?

  • SNS 피로를 느끼는 사람들
  • 힐링과 위로가 필요한 사람들
  • 새벽감성을 좋아하는 사람들
  • 나와 비슷한 사람을 찾고 싶은 사람들

주요 기능

👤 회원

  • 회원가입, 탈퇴
  • 로그인, 로그아웃
  • 소셜 로그인 (Kakao)
  • JWT 토큰 인증
  • 멀티 프로필 (한 개의 대표 프로필 지정)

🏠 이야기 집

  • 이야기 집 등록, 수정, 조회, 삭제하기
  • 찜하기/취소 기능, 목록 보기
  • 평점과 리뷰 작성, 조회, 삭제
  • 이야기 집 Open/Close
  • 오늘의 메뉴 선정하기, 바꾸기

💬 채팅

  • 실시간 다중 채팅
  • 전체/특정 손님 채팅창 얼리기
  • 특정 손님
  • 손님 목록, 프로필 정보 조회



🛠️ 개발 환경

프레임워크 SpringBoot
통합 개발 환경 IntelliJ
배포 AWS EC2(Ubuntu), S3, CodeDepoly
데이터베이스 AWS RDS(MySQL)
Project 빌드 관리 도구 Gradle
CI/CD 툴 Github Actions
ERD 다이어그램 툴 ERDCloud, MySQLWorkbench
Java version Java 11
패키지 구조 도메인 패키지 구조
기타 JPA, WebSocket, Redis
버전 관리 Git, Github
협업 툴 Notion, Discord, Figma

시스템 아키텍처

Service Architecture.png

프로젝트 폴더 구조

자세히 보기 👈🏻
   src
       ├── main
       │   ├── java
       │   │   └── com
       │   │       └── backend
       │   │           └── simya
       │   │               ├── SimyaApplication.java
       │   │               ├── domain
       │   │               │   ├── chat
       │   │               │   │   ├── controller
       │   │               │   │   │   ├── ChatController.java
       │   │               │   │   │   ├── ChatRoomController.java
       │   │               │   │   │   └── IndexController.java
       │   │               │   │   ├── dto
       │   │               │   │   │   ├── ChatMessage.java
       │   │               │   │   │   ├── ChatMessageCustom.java
       │   │               │   │   │   ├── ChatRoom.java
       │   │               │   │   │   └── ChatRoomProfile.java
       │   │               │   │   ├── repository
       │   │               │   │   │   └── ChatRoomRepository.java
       │   │               │   │   └── service
       │   │               │   │       ├── ChatService.java
       │   │               │   │       ├── RedisPublisher.java
       │   │               │   │       └── RedisSubscriber.java
       │   │               │   ├── favorite
       │   │               │   │   ├── controller
       │   │               │   │   │   └── FavoriteController.java
       │   │               │   │   ├── dto
       │   │               │   │   │   └── MyFavoriteHouseResponseDto.java
       │   │               │   │   ├── entity
       │   │               │   │   │   └── Favorite.java
       │   │               │   │   ├── repository
       │   │               │   │   │   └── FavoriteRepository.java
       │   │               │   │   └── service
       │   │               │   │       └── FavoriteService.java
       │   │               │   ├── house
       │   │               │   │   ├── controller
       │   │               │   │   │   └── HouseController.java
       │   │               │   │   ├── dto
       │   │               │   │   │   ├── request
       │   │               │   │   │   │   ├── HouseCreateRequestDto.java
       │   │               │   │   │   │   ├── HouseOpenRequestDto.java
       │   │               │   │   │   │   ├── HouseUpdateRequestDto.java
       │   │               │   │   │   │   └── TopicRequestDto.java
       │   │               │   │   │   └── response
       │   │               │   │   │       ├── HouseIntroductionResponseDto.java
       │   │               │   │   │       ├── HouseResponseDto.java
       │   │               │   │   │       ├── HouseShowResponseDto.java
       │   │               │   │   │       ├── HouseSignboardResponseDto.java
       │   │               │   │   │       └── TopicResponseDto.java
       │   │               │   │   ├── entity
       │   │               │   │   │   ├── Category.java
       │   │               │   │   │   ├── House.java
       │   │               │   │   │   └── Topic.java
       │   │               │   │   ├── repository
       │   │               │   │   │   ├── HouseRepository.java
       │   │               │   │   │   └── TopicRepository.java
       │   │               │   │   └── service
       │   │               │   │       ├── HouseService.java
       │   │               │   │       └── TopicService.java
       │   │               │   ├── jwt
       │   │               │   │   ├── controller
       │   │               │   │   │   └── AuthController.java
       │   │               │   │   ├── dto
       │   │               │   │   │   ├── request
       │   │               │   │   │   │   └── TokenRequestDto.java
       │   │               │   │   │   └── response
       │   │               │   │   │       ├── RefreshResponseDto.java
       │   │               │   │   │       └── TokenDto.java
       │   │               │   │   ├── entity
       │   │               │   │   │   └── RefreshToken.java
       │   │               │   │   ├── repository
       │   │               │   │   │   └── RefreshTokenRepository.java
       │   │               │   │   └── service
       │   │               │   │       ├── AuthService.java
       │   │               │   │       └── TokenProvider.java
       │   │               │   ├── profile
       │   │               │   │   ├── controller
       │   │               │   │   │   └── ProfileController.java
       │   │               │   │   ├── dto
       │   │               │   │   │   ├── request
       │   │               │   │   │   │   ├── ProfileRequestDto.java
       │   │               │   │   │   │   └── ProfileUpdateDto.java
       │   │               │   │   │   └── response
       │   │               │   │   │       └── ProfileResponseDto.java
       │   │               │   │   ├── entity
       │   │               │   │   │   └── Profile.java
       │   │               │   │   ├── repository
       │   │               │   │   │   └── ProfileRepository.java
       │   │               │   │   └── service
       │   │               │   │       └── ProfileService.java
       │   │               │   ├── review
       │   │               │   │   ├── controller
       │   │               │   │   │   └── ReviewController.java
       │   │               │   │   ├── dto
       │   │               │   │   │   ├── MyReviewResponseDto.java
       │   │               │   │   │   ├── ReviewRequestDto.java
       │   │               │   │   │   └── ReviewResponseDto.java
       │   │               │   │   ├── entity
       │   │               │   │   │   └── Review.java
       │   │               │   │   ├── repository
       │   │               │   │   │   └── ReviewRepository.java
       │   │               │   │   └── service
       │   │               │   │       └── ReviewService.java
       │   │               │   └── user
       │   │               │       ├── controller
       │   │               │       │   ├── OauthController.java
       │   │               │       │   └── UserController.java
       │   │               │       ├── dto
       │   │               │       │   ├── request
       │   │               │       │   │   ├── FormSignupRequestDto.java
       │   │               │       │   │   └── LoginRequestDto.java
       │   │               │       │   └── response
       │   │               │       │       ├── ChatLoginInfo.java
       │   │               │       │       ├── FormLoginResponseDto.java
       │   │               │       │       ├── KakaoAccountDto.java
       │   │               │       │       └── KakaoTokenDto.java
       │   │               │       ├── entity
       │   │               │       │   ├── BaseTimeEntity.java
       │   │               │       │   ├── LoginType.java
       │   │               │       │   ├── Role.java
       │   │               │       │   └── User.java
       │   │               │       ├── repository
       │   │               │       │   └── UserRepository.java
       │   │               │       └── service
       │   │               │           ├── OauthService.java
       │   │               │           └── UserService.java
       │   │               └── global
       │   │                   ├── common
       │   │                   │   ├── BaseException.java
       │   │                   │   ├── BaseResponse.java
       │   │                   │   ├── BaseResponseStatus.java
       │   │                   │   └── ValidErrorDetails.java
       │   │                   ├── config
       │   │                   │   ├── AwsConfig.java
       │   │                   │   ├── CorsConfig.java
       │   │                   │   ├── SecurityConfig.java
       │   │                   │   ├── auth
       │   │                   │   │   └── CustomUserDetailsService.java
       │   │                   │   ├── jwt
       │   │                   │   │   ├── JwtAccessDeniedHandler.java
       │   │                   │   │   ├── JwtAuthenticationEntryPoint.java
       │   │                   │   │   ├── JwtFilter.java
       │   │                   │   │   └── JwtSecurityConfig.java
       │   │                   │   ├── redis
       │   │                   │   │   ├── EmbeddedRedisConfig.java
       │   │                   │   │   └── RedisConfig.java
       │   │                   │   └── websocket
       │   │                   │       ├── EmbeddedRedisConfig.java
       │   │                   │       ├── RedisConfig.java
       │   │                   │       ├── WebSockConfig.java
       │   │                   │       └── handler
       │   │                   │           └── StompHandler.java
       │   │                   └── util
       │   │                       ├── ChatUtils.java
       │   │                       ├── S3Uploader.java
       │   │                       ├── SecurityUtil.java
       │   │                       └── scheduler
       │   │                           ├── ChatCachingInRedisScheduling.java
       │   │                           └── ChatWriteBackScheduling.java
       │   └── resources
       │       ├── application.yml
       └── test

API 명세서

📄 API Docs

데이터베이스 ERD

심야식당 ERD.png

👥 Backend Convention

브랜치 운영 방식

master, develop, feat, fix, test, study

master: 최최최최최최종본 - stable all the time

develop: 구현 완료된 코드를 합치는 공간 → 개발자들은 여기로 PR을 날릴 것!

feat: 이슈 별로 기능을 개발하면서 각자가 사용할 브랜치

Git flow 전략에 따라 feat과 fix 하위 → “feat/#이슈번호-구현하려는기능” 형식으로

git checkout -b ‘feat/#{이슈번호}-{기능단위?}’

ex. feat/#3-header, feat/#56-login, feat/#32-profile_info_detail

fix: 이슈 별 수정용 브랜치

test: 개인 연습 브랜치

study : 공부용 브랜치 ex. study/wak

Commit Message

커밋 메시지 앞에 [ feat ] [ fix ].. 붙이기 → [ 태그 ] 제목 의 형태로

  • FEAT : 새로운 기능 추가 ex. [ feat ] design_create
  • ADD: FEAT 이외의 부수적인 코드 추가 및 라이브러리 추가, 새로운 파일 생성
  • FIX : 버그 수정
  • MOD : 코드 수정
  • REFACTOR : 코드 리팩토링
  • DOCS : 문서 수정(README) 또는 주석 관련 작업
  • TEST : 테스트 코드 추가/작성
  • CHORE : gradle 세팅, 기타 작업
  • ETC : 파일명, 폴더명 수정 or 파일, 폴더 삭제 or 디렉토리 구조 변경

커밋 단위:

  • 세부 기능 기준
  • 기능 우선 순위 정리 파일 참고

깃(Git) 커밋 가이드

Code Review

  1. 리뷰 시 확인해보면 좋을 것
    1. 시간복잡도
    2. 잠재적인 오류 케이스
    3. 테스트코드나 구조에 리뷰
    4. 해당 기술의 로직 리뷰
    5. 변수명과 같은 '코드 컨벤션' 대한 리뷰
    6. 이외에.. 추가하면 좋을 것 → 있다면 추가해주세요!
  2. 리뷰 남기기
    1. OO 보다는 XX 가 더 나은 것 같아요.
    2. XX 는 OO 부분을 참고해서 이용하면 되요. ** 키워드로 찾아보시면 좋을 것 같아요.
    3. OO 는 XX 에 의해서 문제되지 않을까요?
    4. 제 생각은 지금 이름보다 이 이름이 더 명확할 것 같은데 어떤가요?
    5. 저 부분은 좀 이상한 것 같아요, 이거 틀렸어요 (X) → 리뷰시 구체적이고 명시적인 피드백을 제공하기
    6. 등등.. 자유롭게 남기기 피드백도 좋고, 좋은 코드에 대한 칭찬도 좋을 것 같다! (아래 링크 참고)

좋은 리뷰, 안좋은 리뷰 예시 :

효과적인 코드리뷰를 위한 리뷰어의 자세

🧑🏻‍💻 Team

왁/위진영 쭈니/박예준
PM, 서버 개발자 서버 개발자
기획
프로젝트 세팅
DB 설계
API 개발
프로젝트 세팅
서버 배포
DB 설계
API 개발