대학생들의 더욱 효율적인 의사소통을 위한 공지 서비스 (PWA)
goormnotification.vercel.app
'공지사항'에 있어, 대학생들의 다양한 불편함을 접하였습니다.
니즈를 충족하고자, 이를 해소하는 '문제점 → 해결방안'을 바탕으로 한 서비스를 기획하게 되었습니다.
- 언제든지 다시 읽을 수 있기에 "흘려 읽을 가능성" → 열람 기간 제한을 걸어두는 "제한성"
- 누가 읽었는지 알 수 없는 "익명성" → 공지 확인/미확인 인원을 보여주는 "실명성"
- "업무와 일상의 분리"를 위한 서비스 필요 → 일상 중 "실시간 PWA 웹푸시 알림"을 통한 "공지용 서비스"
실시간 PWA 웹푸시 알림 전 | 실시간 PWA 웹푸시 알림 후 |
---|---|
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
├── .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
- Git-Flow 전략
- 반드시 "develop"에서 뻗어나와 develop으로 "merge" 되어야한다.
main
: 실제 배포 CI/CD용 branchdevelop
: 개발 CI/CD용 branchfeature
: 기능 구현용 branchIssue_종류/Issue_번호
: branch 생성
종류 | 내용 |
---|---|
chore | gradle 의존성 주입 및 yml 설정 등 프로젝트 기본 세팅 |
feature | 기능 구현 |
fix | 버그 수정 |
refactor | 코드 리팩토링 |
reconstruct | 프로젝트 구성 변경 |
test | 테스트 코드 |
- Pull Request만 날리고, 중요 Approve는 reviewer가 한다.
[Issue_종류] 구현_내용 #Issue_번호
- config : security, aws 등 설정 정보
- domain : entity
- enums
- common : BaseEntity
- mapping : 다대다 맵핑
- converter : entity ↔ dto
- payload : 응답에 실을 내용
- repository
- service
- web
- dto
- controller
김지은 | 전세원 | 최재영 | 고민지 | 사현진 | 김지민 |
---|---|---|---|---|---|
Project Manager | Designer | Frontend Developer | Frontend Developer | Backend Developer | Backend Developer |