Skip to content

wafflestudio/22-5-team3-android

Repository files navigation

22-5-team3-android

🗳️ 스누보트(SNUvote)는 어떤 서비스인가요?

  • 학내 자체적으로 전자 투표를 진행할 수 있는 시스템 구축을 제안하고자 합니다.
  • 학생들이 자유롭게 의견을 나눌 수 있는 커뮤니티 기능도 포함합니다.

기획 의도

  • 우리 학교 학생회의 대표자 선거(총학생회 선거, 단과대 학생회 선거 등)는 오프라인 투표 방식과 온라인 투표 방식을 병행하여 진행하고 있습니다.
  • 이 중 온라인 투표는 Univote와 같은 학외 전자 투표 시스템 업체에 비용을 지불하여 진행하고 있습니다.
  • 매해마다 이루어지는 학생회 선거의 특성상 이는 학생회비 중 일정 비용이 학외 업체에 매년 반복적으로 지출되는 결과로 이어지고 있습니다.
  • 또한 여론 조사를 위한 공식적인 커뮤니티가 없어 학내 중요 사안에 대한 공신력 있는 여론 수합이 어렵다는 문제를 느꼈습니다.
  • 이와 같은 문제 상황을 해결하기 위해 학생회와의 협의를 통해 학내 자체적으로 전자 투표를 진행할 수 있는 시스템 구축을 기획했습니다.

🧩 워크플로우

workflow

👨‍💻 프로젝트 참여자

signup signup signup signup
김재민(odumag99) - 팀장 김동규(morecleverer) 오정윤(nyunn2) 정희우(huiwoo1010)
FastAPI FastAPI Android Android
  • 김재민
    • 팀장 역할 수행 및 일정 관리
    • 데이터베이스 총 관리
    • 소셜 로그인 구현
    • 투표 참여 및 댓글 api 구현
  • 김동규
    • 앱 디자인 설계 및 CI/CD 설계
    • 사용자 로그인 api 구현
    • 투표 리스트 조회, 유저 페이지 api 구현
  • 오정윤
    • 회원 가입 구현
    • 투표 리스트 조회 기능 구현
    • 투표 생성 및 참여, 회원 페이지 구현
    • 댓글 기능 구현
  • 정희우
    • 사용자 로그인 페이지 및 자동 로그인 구현
    • 소셜 계정 연동 및 로그인, 로그아웃 구현
    • 투표 리스트 페이지네이션 구현

기술 스택

🖥️ 백엔드

💻 개발 언어

  • python

fastapi = "^0.115.0"  // Python 기반 비동기 웹 프레임워크
uvicorn = "^0.30.6"  // ASGI 서버 (FastAPI 실행용)
sqlalchemy = "^2.0.35"  // ORM (Object Relational Mapper)
alembic = "^1.13.3"  // 데이터베이스 마이그레이션 도구
email-validator = "^2.2.0"  // 이메일 형식 검증 라이브러리
pydantic-settings = "^2.5.2"  // 환경 변수 및 설정 관리
cryptography = "^43.0.1"  // 암호화 및 보안 관련 기능 제공
python-jose = "^3.3.0"  // JWT 및 JOSE(JSON Object Signing and Encryption) 구현
python-multipart = "^0.0.17"  // 멀티파트 폼 데이터 처리 (파일 업로드 등)
social-auth-core = "^4.5.4"  // 소셜 로그인 및 인증 기능 제공
aiomysql = "^0.2.0"  // MySQL 비동기 드라이버
python-dotenv = "^1.0.1"  // .env 파일을 사용한 환경 변수 로드
boto3 = "^1.36.2"  // AWS SDK for Python (S3 등 AWS 서비스 연동)
bcrypt = "^4.2.1"  // 비밀번호 해싱 라이브러리
httpx = "^0.28.1"  // 비동기 HTTP 클라이언트 (Requests 대체)

API 문서 보기

API 문서


📱 안드로이드

💻 개발 언어

  • Kotlin

프레임워크, 라이브러리

  • Android SDK & Jetpack
`androidx.core:core-ktx` (`1.15.0`) // Kotlin 확장 기능 제공
`androidx.appcompat:appcompat` (`1.7.0`) // 구형 버전과의 호환성 유지
`androidx.swiperefreshlayout:swiperefreshlayout` (`1.1.0`) // 새로고침
  • Jetpack 아키텍처 컴포넌트
`androidx.lifecycle:lifecycle-livedata-ktx` (`2.6.1`) // LiveData를 통한 데이터 관리
`androidx.navigation:navigation-fragment-ktx` (`2.8.3`) // Jetpack Navigation (Fragment 간 이동)
`androidx.navigation:navigation-runtime-ktx` (`2.8.5`)
`androidx.navigation:navigation-ui-ktx` (`2.5.3`)
  • 네트워크 통신
`com.squareup.retrofit2:retrofit` (`2.11.0`) // REST API 요청 처리
`com.squareup.retrofit2:converter-gson` (`2.11.0`) // JSON 파싱 지원
`com.squareup.okhttp3:okhttp` (`4.10.0`) // HTTP 클라이언트
`com.squareup.okhttp3:logging-interceptor` (`4.10.0`) // HTTP 요청 로그 확인
  • 의존성 주입 (Dependency Injection)
`com.google.dagger:hilt-android` (`2.52`) // 구글 공식 DI 라이브러리
`com.google.dagger:hilt-android-compiler` (`2.52`) // Hilt 코드 생성
  • 이미지 로딩
`com.github.bumptech.glide:glide` (`4.16.0`) // 이미지 로딩
  • 소셜 로그인
`com.kakao.sdk:v2-user` (`2.18.0`) // 카카오 로그인
`com.navercorp.nid:oauth` (`5.4.0`) // 네이버 로그인

프로젝트 뷰

1. 회원가입 페이지

signup
  • 회원가입
    • 이미 DB에 동일 ID 또는 이메일을 가진 회원이 있을 경우 회원가입 거부
    • Password의 조건이 충족되지 않을 경우 회원가입 거부

2. 로그인 페이지

signup
  • ID, PW로 로그인을 하거나 소셜계정으로 로그인합니다.
  • ID나 PW가 일치하지 않을 경우 회원가입 거부
  • 회원이 소셜 계정과 연동한 경우 소셜 계정을 통한 로그인도 가능
  • 자동로그인 선택 시 앱 재실행시에도 로그인 상태가 유지됩니다.

3. 진행 중인 투표 페이지

signup
  • 최신 순으로 진행 중인 투표 리스트를 확인할 수 있습니다.
  • 투표 제목, 투표글 썸네일, 투표 종료까지 남은 시간, 투표 참여자 명수가 표시됩니다.
  • 투표글 10개 단위의 페이지네이션이 적용되어 있습니다.

4. HOT 투표 페이지

signup
  • 투표 참여자 수가 5명 이상인 투표 리스트를 확인할 수 있습니다.
  • 투표 제목, 투표글 썸네일, 투표 종료까지 남은 시간, 투표 참여자 명수가 표시됩니다.
  • 투표글 10개 단위의 페이지네이션이 적용되어 있습니다.

5. 종료된 투표 페이지

signup
  • 마감된 투표 리스트를 확인 할 수 있습니다.
  • 투표 제목, 투표글 썸네일, 투표 참여자 명수가 표시됩니다.
  • 투표글 10개 단위의 페이지네이션이 적용되어 있습니다.

6. 투표 상세정보 페이지

signup signup
진행 중인 투표 종료된 투표
  • 투표 제목, 투표 설명, 투표 설정값을 확인할 수 있습니다.

  • 댓글을 작성, 수정, 삭제할 수 있습니다.

  • 진행 중인 투표의 경우 투표 참여가 가능합니다. (참여코드가 필요할 수 있습니다)

    • 중복 선택 가능 투표의 경우 여러 개의 선택지에 투표할 수 있습니다.
    • 참여코드가 필요한 투표의 경우 투표를 위해 참여코드를 입력해야 합니다.
      • 참여코드가 일치하지 않는 경우 투표 참여가 거부됩니다.
    • 투표 마감 시간이 도래한 경우 투표 참여가 거부됩니다.
  • 결과 공개 기능

    • 종료된 투표의 경우 투표 결과를 확인할 수 있습니다.
    • 실시간 결과 공개 투표의 경우, 진행 중인 투표에서도 투표 결과를 확인할 수 있습니다.
    • 익명 투표의 경우 선택지 참여자의 이름은 공개되지 않고, 각 선택지별 선택자 수만 공개됩니다.
    • 중복 투표의 경우, 각 선택지별 선택자 수의 합과 투표 참여자 총 명수가 일치하지 않을 수 있습니다. 이 경우 투표 참여자 총 명수가 중복 선택자 수를 제외한 값입니다.

7. 투표 생성 페이지

signup
  • 사진, 제목, 설명, 투표 선택지, 투표 설정값, 마감 시간을 설정할 수 있습니다.

8. 회원 정보 페이지

signup signup signup signup
회원 페이지 비밀번호 변경 내가 참여한 투표 내가 만든 투표
  • 비밀번호 변경이 가능합니다.
  • 내가 참여한 투표, 내가 만든 투표를 확인할 수 있습니다.
  • 소셜 계정 연동이 가능합니다.
    • 네이버는 현재 네이버측에서 검수 진행중이어서 사전에 등록된 네이버 계정만 연동 가능합니다.
    • 이미 소셜 계정에 연동한 회원의 경우 연동 요청이 거절됩니다.
  • 회원 탈퇴
    • 탈퇴한 회원과 동일한 ID, 이메일로 회원가입을 시도할 경우 거부됩니다.
    • 탈퇴한 회원의 이름은 '탈퇴한 회원'으로 표시됩니다.
  • 로그아웃이 가능합니다.

추가

  • docker + github action으로 CI/CD 구현
  • 소수 정예로 똘똘 뭉친 기획팀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages