세이프벨 프론트엔드 리포지토리입니다
SafeBell은 범죄자 사전 정보 알림, 원터치 긴급 신고, 안심 동행 매칭 서비스를 통해 사용자의 일상 안전을 책임지는 모바일 애플리케이션입니다. 예측할 수 없는 위험으로부터 소중한 사람들을 보호하고, 긴급 상황에 신속하게 대응하며, 귀가 시 안심할 수 있는 동행 환경을 제공하는 것을 목표로 합니다.
프로젝트의 상세한 진행 상황과 업데이트는 아래 Notion 페이지에서 확인하실 수 있습니다.
➡️ **[Notion에서 자세한 진행사항 보러가기]([Notion 페이지 링크])**
저희 셀프벨 프로젝트는 다음과 같은 열정적인 팀원들로 구성되어 있습니다:
- 곽은재
- 권유진
- 김성혁
- 박승원
- 김신희
- 전혜린
- 추교준
셀프벨 프로젝트의 구현을 위해 다음과 같은 기술 스택과 라이브러리 의존성을 사용합니다.
| 이름 | 설명 |
|---|---|
| Kotlin | 프로그래밍 언어 |
| Jetpack Compose | 인-코드 선언형 앱 설계 |
| Git | 체계적인 코드 관리 및 협업 |
| 이름 | 버전 | 설명 |
|---|---|---|
| Jetpack Navigation | 2.0.21 | 화면 전환 관리를 위한 라이브러리 |
| Hilt | 2.51.1 | 의존성 주입을 위한 라이브러리 |
| Retrofit2 | 2.11.0 | HTTP 통신을 위한 라이브러리 |
| DataStore | 1.1.7 | 로컬 데이터 저장을 위한 라이브러리 |
| Room | 2.6.1 | 로컬 데이터베이스 라이브러리 |
| Naver Map SDK | 3.20.0 | 네이버 지도 사용을 위한 SDK |
| KakaoSDK | 2.20.6 | 카카오 로그인을 위한 SDK |
| Android JUnit | 1.2.1 | 단위 테스트를 위한 라이브러리 |
본 프로젝트는 클린 아키텍처를 기반으로, 뷰모델(ViewModel)을 사용한 MVVM 디자인 패턴으로 구성됩니다.
셀프벨 프로젝트에 기여하고자 하는 모든 개발자분들은 다음 컨벤션을 준수하여 효율적이고 체계적인 협업을 지향합니다.
본 프로젝트는 Gitflow 브랜치 전략을 따릅니다.
main: 배포 가능한 단위의 브랜치release: 배포 전 테스트가 가능한 단위의 브랜치develop: 개발 중인 브랜치feature/#issue_number: 개발 단위별 브랜치hotfix:master브랜치의 긴급 버그 수정 브랜치
모든 기능 개발은 다음 흐름을 따릅니다:
- 개발하고자 하는 기능에 대한 이슈를 등록하여 번호를 발급합니다.
develop브랜치로부터 분기하여 이슈 번호를 사용해 이름을 붙인feature브랜치를 만든 후 작업합니다.- 작업이 완료되면
develop브랜치에 풀 요청(Pull Request)을 작성하고, 팀원의 동의를 얻으면 병합합니다.
다음은 본 프로젝트의 커밋 형식입니다. 각 줄 사이에는 빈 줄이 추가로 있음에 주의해주세요.
[헤더]
[본문]
[이슈 번호 참조(선택)]
| 헤더 | 내용 |
|---|---|
| feat | 새로운 기능에 대한 커밋 |
| fix | 버그 수정에 대한 커밋 |
| build | 빌드 관련 파일 수정 / 모듈 설치 또는 삭제에 대한 커밋 |
| chore | 그 외 자잘한 수정에 대한 커밋 |
| ci | ci 관련 설정 수정에 대한 커밋 |
| docs | 문서 수정에 대한 커밋 |
| style | 코드 스타일 혹은 포맷 등에 관한 커밋 |
| refactor | 코드 리팩토링에 대한 커밋 |
| test | 테스트 코드 수정에 대한 커밋 |
| perf | 성능 개선에 대한 커밋 |
예시:
git commit -m "fix: Safari에서 모달을 띄웠을 때 스크롤 이슈 수정
모바일 사파리에서 Carousel 모달을 띄웠을 때,
모달 밖의 상하 스크롤이 움직이는 이슈 수정.
관련 이슈 번호: #113
이슈는 본 리포지토리에 등록된 목적에 맞는 이슈 템플릿을 사용하여 작성합니다.
- Feature Template: 기능 추가를 위한 이슈에 사용
- Bug Template: 버그 수정을 위한 이슈에 사용
풀 요청은 본 리포지토리에 등록된 템플릿을 사용하여 작성합니다.
- 코틀린 파일의 이름은
PascalCase를 사용 - 패키지 이름은 소문자 사용
- 컴포저블 함수의 이름은
PascalCase, 그 외 함수의 이름은 동사로 시작하는camelCase를 사용하며, 변수명은camelCase를 사용. (람다식을 저장하는 변수도camelCase를 사용) - 변수명은 한국어 발음대로 표기 금지
- 상수의 경우 대문자
snake_case사용 - 콜백 함수를 전달하는 변수일 경우
on으로 시작. ex)onButtonClicked,onDataLoaded - State 변수: 접두사
is,has로 시작 ex)isLoading,hasError
- 한 줄에 한 문장
- 체이닝할 경우에는 각 요소를 한 줄씩 개행
- Widget의 소괄호, 중괄호를 사용할 경우 괄호의 시작 후 개행으로 구분
- modifier은 항상 맨 마지막 파라미터로 선언
다음은 본 프로젝트의 안드로이드 개발 환경입니다.
- targetSDK: 35, minSDK: 26
- 안드로이드 스튜디오 버전: Ladybug | 2024.2.1 또는 그 이상
- 테스트 환경: 안드로이드 스튜디오 제공 에뮬레이터(AVD)
- 기기명: Pixel 8
- API: 35 (Android 15.0, x86_64)
- 해상도: 1080 x 2400 px (412 x 915 dp)
궁금한 점이 있으시거나 프로젝트 참여에 관심이 있으시다면 언제든지 문의해주세요!