Skip to content
HoSeon Yoo edited this page Sep 10, 2024 · 33 revisions

1. 팀 소개

1.1 팀원

팀원 소개

Frontend

김지현 박준석

Backend

유호선

2. 프로젝트 소개

2.1 기획 및 주요 기능

배경 및 동기

참고 : 새로운 개인 개발자 계정의 앱 테스트 요구사항

2023년 11월 13일 이후에 구글 플레이에 가입한 개발자는 구글 플레이에 앱을 배포하기 위해서 반드시 20명의 테스터를 모집하여 20일 동안 비공개 테스트를 진행해야 한다.

현재는 비공개 테스터를 모집하는 플랫폼 부재로 안드로이드 커뮤니티나 카카오톡 오픈채팅방에서 테스터를 모집해야 한다.

카카오톡 오픈채팅방에 수십 개의 비공개 테스터 구인 글이 올라올 정도로 비공개 테스터 구인에 대한 수요가 높다.

안드로이드 커뮤니티 카카오톡 오픈채팅

주요 기능

구글 로그인

  • 사용자는 구글 계정으로 로그인 및 회원가입을 진행한다.

앱 등록

  • 사용자는 앱을 등록하여 비공개 테스터를 모집할 수 있다.

앱 찾기

  • 사용자는 비공개 테스터를 모집하는 앱을 확인할 수 있다.

마이앱

  • 사용자가 등록한 앱을 상태별로 확인할 수 있다.

마이테스터

  • 사용자가 비공 테스터로 지원한 앱을 상태별로 확인할 수 있다.

2.2 기술 스택 및 아키텍처

기술 스택

서비스 아키텍처

image

2.3 ERD

2.4 API 명세서

회원

Method URI Description
GET /auth/google 회원 구글 로그인 페이지 리다이렉트
POST /auth/reissue 회원 액세스/리프레시 토큰 재발급
GET /members/apps 회원이 등록한 앱 조회
GET /members/testers/apps 회원이 테스터로 지원한 앱 조회

Method URI Description
POST /apps 앱 등록
PATCH /apps/{appId} 앱 수정
DELETE /apps{appId} 앱 삭제
GET /apps/{appId} 앱 상세정보 조회
GET /apps?page={page} 앱 조회
POST /apps/{appId}/members 앱 테스터 지원
PATCH /apps/{appId}/testers/{testerId} 앱 테스터 등록

3. 협업 및 컨벤션

3.1 스프린트

0차 스프린트 (2024.02.05 ~ 2024.02.11)

  1. 팀 결성
  2. 프로젝트 기획
  3. 도메인 이름, 프로젝트 이름 결정
  4. 깃허브 설정
    • 레포지토리 생성
    • 프로젝트 생성
      • 칸반 보드, 스프린트 보드
    • 브랜치 전략, 커밋 메세지 컨벤션 결정
    • 이슈 설정
      • 템플릿 생성
      • 라벨 생성
      • 마일스톤 생성
    • PR 설정
      • 템플릿 생성
      • 병합된 브랜치 자동 삭제

1차 스프린트 (2024.02.12 ~ 2024.02.18)

  1. 유스케이스 작성
  2. 프로젝트 초기 개발환경 구축
  3. 도메인 설계 (1)
    • ERD 설계

2차 스프린트 (2024.02.19 ~ 2024.02.25)

  1. 깃 서브모듈 적용
  2. IntelliJ, Nginx, MySQL 개발환경 구축
    • Docker
    • Dev Containers

3차 스프린트 (2024.02.26 ~ 2024.03.03)

  1. 도메인 설계 (2)
    • 엔티티 설계
      • 회원 엔티티
      • 앱 엔티티
      • 테스터 엔티티
    • 테스트
      • 회원 CRUD
      • 앱 CRUD
      • 테스터 CRUD
  2. API 명세서 작성
  3. 구글 로그인 구현 (1)
    • OAuth 2.0
    • JWT 발급 및 검증
  4. 프로젝트 배포환경 구축 (1)
    • AWS EC2
      • Docker(Nginx, Certbot)
    • AWS RDS

4차 스프린트 (2024.03.04 ~ 2024.03.10)

  1. API 구현
    • 회원 API
      • 회원 구글 로그인 페이지 리다이렉트
      • 회원이 등록한 앱 조회
      • 회원이 테스터 지원한 앱 조회
    • 앱 API
      • 앱 등록, 수정, 삭제, 조회
      • 앱 상세정보 조회
      • 앱 테스터 지원
      • 앱 테스터 등록
  2. 프로젝트 배포환경 구축 (2)
    • Docker(Spring Boot)
    • Docker(Nginx) Reverse Proxy

5차 스프린트 (2024.03.11 ~ 2024.03.12)

  1. 프로젝트 최종 문서 작성
    • PPT
    • GitHub Wiki
    • README.md

3.2 이슈 템플릿 & PR 템플릿

참고 : GitHub Docs

이슈 템플릿

<!-- 이슈가 왜 필요한지, 어떤 작업을 수행할 예정인지 간단히 작성 -->

## 📝 개요
- 개요 1

<!-- 이슈 해결에 필요한 작업을 나열 -->

## ✅ 작업 목록
- [ ] 작업 1

PR 템플릿

<!-- PR이 왜 필요한지, 어떤 작업을 수행했는지 간단히 작성 -->

## 📝 개요
- 개요 1

<!-- 이슈에서 지정한 작업 목록의 완료 상태를 표시  -->

## ✅ 작업 목록
- [x] 작업 1

<!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성-->

## 🙏 리뷰어에게(선택)
- 요청 1

3.3 버전 관리

브랜치 전략

참고 : GitHub Flow

  • main : 제품으로 출시될 수 있는 브랜치
  • feature : 버그 수정 및 기능 등을 개발하는 브랜치
    • ex) feature/#(이슈번호)

커밋 메세지 컨벤션

참고 : Udacity Git Commit Message Style Guide

메세지 구조

type : Subject

body

footer

type

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • docs : 문서 변경
  • style : 스타일 수정, 줄 바꿈, 공백, 세미콜론 누락 등; 코드 변경 없음
  • refactor : 프로덕션 코드 리팩터링
  • test : 테스트 추가, 테스트 리팩터링; 프로덕션 코드 변경 없음
  • chore : 빌드 작업, 패키지 매니저 구성 등 업데이트; 프로덕션 코드 변경 없음

Subject

  • 제목은 50자 미만
  • 과거형이 아닌 명령형으로 작성
    • ex) 수정함 -> 수정
  • 마지막 글자는 마침표 및 특수기호 사용금지
  • 간결하고 요점적으로 서술

body

  • 선택사항이며, 최대한 상세히 작성
  • 내용은 어떻게 보단 무엇을 , 변경했는지 작성
  • 글머리 기호도 사용 가능. 하이폰(-), 별표(*)

footer

참고 : GitHub Docs

  • 선택사항이며, 이슈 트래킹을 위해서 사용된다.
  • 유형: #(이슈번호), #(이슈번호) ...

예시

feat : 게시판 API 설계

개발 팀 간의 협업을 용이하게 하고, 새로운 팀원이 프로젝트에 빠르게 적응하도록 돕는다.

 - 참고 : 게시판 API 설계 링크

Resolves : #123, #211
Related to : #112

3.4 패키지 구조

📦backend
 ┣ 📂config
 ┃ ┣ 📜AuditorAwareImpl.java
 ┃ ┣ 📜JpaAuditingConfig.java
 ┃ ┗ 📜SecurityConfig.java
 ┣ 📂controller
 ┃ ┣ 📜AppController.java
 ┃ ┗ 📜MemberController.java
 ┣ 📂domain
 ┃ ┣ 📜App.java
 ┃ ┣ 📜Base.java
 ┃ ┣ 📜Member.java
 ┃ ┗ 📜Tester.java
 ┣ 📂dto
 ┃ ┣ 📂request
 ┃ ┃ ┣ 📜AppRequest.java
 ┃ ┃ ┗ 📜MemberRequest.java
 ┃ ┗ 📂response
 ┃ ┃ ┣ 📜AppResponse.java
 ┃ ┃ ┣ 📜MemberResponse.java
 ┃ ┃ ┗ 📜TesterResponse.java
 ┣ 📂enums
 ┃ ┣ 📜AppStatus.java
 ┃ ┣ 📜AuthorizationType.java
 ┃ ┣ 📜MaxAgeType.java
 ┃ ┣ 📜MemberRole.java
 ┃ ┣ 📜TesterStatus.java
 ┃ ┗ 📜TokenType.java
 ┣ 📂exception
 ┃ ┗ 📜CustomAccessDeniedHandler.java
 ┣ 📂jwt
 ┃ ┣ 📜JwtExceptionFilter.java
 ┃ ┣ 📜JwtFilter.java
 ┃ ┗ 📜JwtUtil.java
 ┣ 📂oauth2
 ┃ ┣ 📜GoogleOAuth2User.java
 ┃ ┣ 📜GoogleOAuth2UserService.java
 ┃ ┗ 📜GoogleOAuth2UserSuccessHandler.java
 ┣ 📂repository
 ┃ ┣ 📜AppRepository.java
 ┃ ┣ 📜MemberRepository.java
 ┃ ┗ 📜TesterRepository.java
 ┣ 📂service
 ┃ ┣ 📜AppService.java
 ┃ ┗ 📜MemberService.java
 ┗ 📜BackendApplication.java