주요 특징
1. 사용자 인증
이 앱은 승인된 직원만 출석 기능에 액세스할 수 있도록 보장합니다.
로그인 시스템: 사용자는 이메일과 비밀번호 또는 생체 인식 확인을 포함할 수 있는 자격 증명을 사용하여 로그인합니다.
역할 기반 액세스: 관리자, 관리자 및 직원은 자신의 역할에 따라 데이터 및 기능에 대한 맞춤형 액세스 권한을 갖습니다.
2. 펀치인 및 펀치아웃 시스템
직원은 다음을 통해 근무 시간을 기록할 수 있습니다.
펀치인(Punch-In): 근무 시작 시 사용자는 출석을 표시할 수 있습니다.
펀치아웃: 근무가 끝나면 사용자는 출발을 기록합니다.
오프라인 모드: 네트워크 문제가 있는 경우 앱은 출석 데이터를 로컬에 저장하고 연결이 복원되면 서버와 동기화합니다.
3. 위치 추적
앱은 출석이 정확하게 기록되도록 펀치 인 및 펀치 아웃 중에 사용자의 실시간 위치를 가져옵니다.
위치 정확도: GPS 및 API(예: Google 지도 또는 Ola API)를 사용하여 정확한 위치 좌표를 가져옵니다.
지오펜싱: 출석 기록을 시도할 때 허용된 위치 밖에 있는 경우 사용자에게 경고합니다.
4. 이미지 캡처
대리 참석을 방지하려면:
이 앱은 펀치 인 및 펀치 아웃 중에 셀카를 찍습니다.
이미지는 사용자 기록과 연결되어 안전하게 저장됩니다.
5. 날짜 및 시간 기록
앱은 펀치 이벤트 날짜와 시간을 자동으로 기록합니다.
작업 일정 준수를 보장합니다.
각 출석 항목에 대한 타임스탬프를 제공합니다.
6. 데이터 관리
캡처된 모든 데이터는 안전하게 저장됩니다.
데이터베이스 디자인: 사용자, 출석 기록, 위치 데이터에 대한 테이블을 포함합니다.
보안 저장소: 사용자 이미지 및 위치와 같은 민감한 정보를 보호하기 위해 암호화를 구현합니다.
7. 관리자를 위한 대시보드
이 앱에는 관리자가 다음을 수행할 수 있는 대시보드가 있습니다.
출석 기록을 봅니다.
보고서를 생성합니다(일일, 주간 또는 월간).
급여 및 규정 준수 목적으로 데이터를 내보냅니다.
작업 흐름
1. 사용자 로그인
사용자는 앱을 열고 로그인 자격 증명을 입력합니다.
인증에 성공하면 펀치인 및 펀치아웃 옵션이 표시되는 홈 화면으로 이동됩니다.
2. 펀치인 공정
1단계: 사용자가 "펀치인" 버튼을 탭합니다.
2단계: 앱은 기기의 GPS 또는 API를 사용하여 현재 위치를 가져옵니다.
3단계: 사용자의 존재를 확인하기 위해 셀카를 촬영합니다.
4단계: 현재 날짜와 시간이 자동으로 기록됩니다.
5단계: 수집된 모든 데이터(위치, 이미지, 날짜, 시간)는 로컬 데이터베이스에 저장되거나 서버로 전송됩니다.
3. 펀치아웃 과정
펀치아웃 프로세스는 출발 시간을 기록한다는 점을 제외하면 펀치인과 동일합니다.
4. 데이터 동기화
오프라인일 때 출석 기록은 SQLite 또는 Hive와 같은 기술을 사용하여 로컬에 저장됩니다.
인터넷 연결이 복원되면 앱은 데이터를 원격 서버와 동기화합니다.
5. 관리 대시보드 액세스
관리자는 별도의 포털에 로그인하여 출석 데이터를 관리하고 분석할 수 있습니다.
데이터 필터를 사용하면 특정 직원 기록을 보거나 보고서를 생성할 수 있습니다.
기술 아키텍처
프런트엔드
프레임워크: 크로스 플랫폼 개발을 위한 Flutter.
UI: 직원과 관리자를 위한 직관적이고 간단한 인터페이스.
오프라인 기능: 오프라인 데이터 저장을 위해 Hive 또는 SharedPreferences와 통합됩니다.
백엔드
프레임워크: API 구축을 위한 FastAPI 또는 Node.js.
데이터베이스: 사용자 및 출석 데이터를 저장하는 PostgreSQL 또는 MongoDB.
스토리지: 이미지 및 암호화된 민감한 데이터를 위한 클라우드 스토리지(예: AWS S3).
아피스
인증 API: 로그인 및 사용자 확인을 처리합니다.
Punch-In/Out API: 출석 데이터를 기록하고 데이터베이스에 저장합니다.
동기화 API: 온라인일 때 오프라인 데이터가 서버에 업로드되도록 합니다.
보안 조치
데이터 암호화: 이미지, GPS 좌표 등 민감한 정보를 암호화합니다.
토큰 기반 인증: API에 대한 보안 액세스를 위해 JWT를 사용합니다.
역할 관리: 사용자가 자신의 역할과 관련된 데이터 및 기능에만 액세스할 수 있도록 합니다.