Skip to content

9oormthon-univ/2024_BEOTKKOTTHON_TEAM_15_BE

Repository files navigation

📜 효율적인 공지 서비스, 가정통신문 📜

메인 타이틀 이미지

대학생들의 더욱 효율적인 의사소통을 위한 공지 서비스 (PWA)
goormnotification.vercel.app


🔍 Introduction

기획 배경 & 특징

'공지사항'에 있어, 대학생들의 다양한 불편함을 접하였습니다.
니즈를 충족하고자, 이를 해소하는 '문제점 → 해결방안'을 바탕으로 한 서비스를 기획하게 되었습니다.

  • 언제든지 다시 읽을 수 있기에 "흘려 읽을 가능성"  →  열람 기간 제한을 걸어두는 "제한성"
  • 누가 읽었는지 알 수 없는 "익명성"  →  공지 확인/미확인 인원을 보여주는 "실명성"
  • "업무와 일상의 분리"를 위한 서비스 필요  →  일상 중 "실시간 PWA 웹푸시 알림"을 통한 "공지용 서비스"

📹 Demo

서비스 소개

기능

실시간 PWA 웹푸시 알림 전 실시간 PWA 웹푸시 알림 후

💻 Architecture

newsletter_architecture drawio

💡 Tech Stack

Frontend Backend Deployment Other









- Frontend : Next.js, Recoil, TypeScript
- Backend : Spring Boot, Java, Spring Security, JSON Web Token
- Database : MySQL
- Deployment : Vercel, AWS Elastic Beanstalk, Github Actions
- API Documentation : Swagger
- Notification : Firebase Cloud Messaging

🗂️ Database

DB ERD

📂 Directory Structure

Backend

├── .ebextensions-dev
│   ├── 00-makeFiles.config
│   └── 01-set-timezone.config
├── .github
│   └── workflows
│       └── dev_deploy.yml
├── .platform
│   ├── conf.d
│   │   └── client_max_body_size.conf
│   └── nginx.conf
├── Procfile
└── src
    ├── main
    │   ├── .DS_Store
    │   ├── generated
    │   ├── java
    │   │   ├── .DS_Store
    │   │   └── beotkkotthon
    │   │       ├── .DS_Store
    │   │       └── Newsletter_BE
    │   │           ├── .DS_Store
    │   │           ├── NewsletterBeApplication.java
    │   │           ├── config
    │   │           │   ├── AwsConfig.java
    │   │           │   ├── SwaggerConfig.java
    │   │           │   ├── fcm
    │   │           │   │   └── FCMInitializer.java
    │   │           │   ├── multipart
    │   │           │   │   └── MultipartJackson2HttpMessageConverter.java
    │   │           │   └── security
    │   │           │       ├── JwtSecurityConfig.java
    │   │           │       ├── WebSecurityConfig.java
    │   │           │       ├── jwt
    │   │           │       │   ├── CustomUserDetailsService.java
    │   │           │       │   ├── JwtAccessDeniedHandler.java
    │   │           │       │   ├── JwtAuthenticationEntryPoint.java
    │   │           │       │   ├── JwtFilter.java
    │   │           │       │   └── TokenProvider.java
    │   │           │       └── util
    │   │           │           └── SecurityUtil.java
    │   │           ├── converter
    │   │           │   ├── NewsCheckConverter.java
    │   │           │   ├── NewsConverter.java
    │   │           │   └── TeamConverter.java
    │   │           ├── domain
    │   │           │   ├── Member.java
    │   │           │   ├── News.java
    │   │           │   ├── NewsCheck.java
    │   │           │   ├── Notification.java
    │   │           │   ├── Team.java
    │   │           │   ├── common
    │   │           │   │   └── BaseEntity.java
    │   │           │   ├── enums
    │   │           │   │   ├── Authority.java
    │   │           │   │   ├── CheckStatus.java
    │   │           │   │   ├── NoticeStatus.java
    │   │           │   │   ├── RequestRole.java
    │   │           │   │   └── Role.java
    │   │           │   └── mapping
    │   │           │       ├── MemberTeam.java
    │   │           │       └── Participation.java
    │   │           ├── payload
    │   │           │   ├── ApiResponse.java
    │   │           │   ├── BaseCode.java
    │   │           │   ├── BaseErrorCode.java
    │   │           │   ├── dto
    │   │           │   │   ├── ErrorReasonDto.java
    │   │           │   │   └── ReasonDto.java
    │   │           │   ├── exception
    │   │           │   │   ├── ExceptionAdvice.java
    │   │           │   │   └── GeneralException.java
    │   │           │   └── status
    │   │           │       ├── ErrorStatus.java
    │   │           │       └── SuccessStatus.java
    │   │           ├── repository
    │   │           │   ├── MemberRepository.java
    │   │           │   ├── MemberTeamRepository.java
    │   │           │   ├── NewsCheckRepository.java
    │   │           │   ├── NewsRepository.java
    │   │           │   ├── NotificationRepository.java
    │   │           │   ├── ParticipationRepository.java
    │   │           │   └── TeamRepository.java
    │   │           ├── service
    │   │           │   ├── AuthService.java
    │   │           │   ├── ImageUploadService.java
    │   │           │   ├── MemberService.java
    │   │           │   ├── MemberTeamService.java
    │   │           │   ├── NewsCheckService.java
    │   │           │   ├── NewsService.java
    │   │           │   ├── NotificationService.java
    │   │           │   ├── ParticipationService.java
    │   │           │   ├── TeamService.java
    │   │           │   └── impl
    │   │           │       ├── AuthServiceImpl.java
    │   │           │       ├── ImageUploadServiceImpl.java
    │   │           │       ├── MemberServiceImpl.java
    │   │           │       ├── MemberTeamServiceImpl.java
    │   │           │       ├── NewsCheckServiceImpl.java
    │   │           │       ├── NewsServiceImpl.java
    │   │           │       ├── NotificationServiceImpl.java
    │   │           │       ├── ParticipationServiceImpl.java
    │   │           │       └── TeamServiceImpl.java
    │   │           └── web
    │   │               ├── controller
    │   │               │   ├── AuthController.java
    │   │               │   ├── MemberController.java
    │   │               │   ├── MemberTeamController.java
    │   │               │   ├── NewsCheckController.java
    │   │               │   ├── NewsController.java
    │   │               │   ├── NotificationController.java
    │   │               │   ├── ParticipationController.java
    │   │               │   ├── RootController.java
    │   │               │   └── TeamController.java
    │   │               └── dto
    │   │                   ├── request
    │   │                   │   ├── FcmTokenRequestDto.java
    │   │                   │   ├── MemberLoginRequestDto.java
    │   │                   │   ├── MemberSignupRequestDto.java
    │   │                   │   ├── NewsSaveRequestDto.java
    │   │                   │   ├── NotificationAllowRequestDto.java
    │   │                   │   ├── ParticipationRequestDto.java
    │   │                   │   └── TeamSaveRequestDto.java
    │   │                   └── response
    │   │                       ├── MemberListResponseDto.java
    │   │                       ├── MemberResponseDto.java
    │   │                       ├── NewsCheckResponseDto.java
    │   │                       ├── NewsResponseDto.java
    │   │                       ├── NotificationDto.java
    │   │                       ├── ParticipationResponseDto.java
    │   │                       ├── TeamResponseDto.java
    │   │                       └── TokenDto.java
    │   └── resources
    │       ├── application-local.yml
    │       ├── application-prod.yml
    │       ├── application.yml
    │       ├── newsletter-firebase-adminsdk.json
    │       └── static
    │           └── index.html
    └── test
        └── java
            └── beotkkotthon
                └── Newsletter_BE
                    └── NewsletterBeApplicationTests.java

🤝 Convetion - BE

Git Branch

  • Git-Flow 전략
  • 반드시 "develop"에서 뻗어나와 develop으로 "merge" 되어야한다.
  • main : 실제 배포 CI/CD용 branch
  • develop : 개발 CI/CD용 branch
  • feature : 기능 구현용 branch
  • Issue_종류/Issue_번호 : branch 생성

Git Issue

종류 내용
chore gradle 의존성 주입 및 yml 설정 등 프로젝트 기본 세팅
feature 기능 구현
fix 버그 수정
refactor 코드 리팩토링
reconstruct 프로젝트 구성 변경
test 테스트 코드

Git Commit Message

  • Pull Request만 날리고, 중요 Approve는 reviewer가 한다.
[Issue_종류] 구현_내용 #Issue_번호

BE Package Convention

  • config : security, aws 등 설정 정보
  • domain : entity
    • enums
    • common : BaseEntity
    • mapping : 다대다 맵핑
  • converter : entity ↔ dto
  • payload : 응답에 실을 내용
  • repository
  • service
  • web
    • dto
    • controller

👨‍👩‍👧‍👧 Team

김지은 전세원 최재영 고민지 사현진 김지민
Project Manager Designer Frontend Developer Frontend Developer Backend Developer Backend Developer

About

[kakao X goorm] 벚꽃톤 - 가정통신문 BE 📜

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages