Skip to content

πŸ“œ 가정톡신문 λ°±μ—”λ“œ λ ˆν¬μ§€ν† λ¦¬ πŸ“œ

Notifications You must be signed in to change notification settings

zzimnii/2024_BEOTKKOTTHON_TEAM_15_BE

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

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

πŸ“œ 가정톡신문 λ°±μ—”λ“œ λ ˆν¬μ§€ν† λ¦¬ πŸ“œ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.8%
  • Other 0.2%