본문으로 건너뛰기
sanguk
Projects로 돌아가기

Project

Class Manager

위치 기반 QR 출석 서비스

강의 출석을 모바일로 간편하고 정확하게 처리하기 위해 기획부터 개발까지 전담한 개인 프로젝트입니다. QR·딥링크로 출석 UX는 단순화하면서도, 서버에서 시간·위치·유저·디바이스를 다층 검증해 대리·원격 출석을 원천 차단하는 구조를 설계했습니다. 참조 분리형 MongoDB 스키마와 헬스체크·인가·예외 코드 체계로 데이터 무결성과 운영 안정성을 함께 확보했습니다.

형태
개인 프로젝트
주요 기술
React NativeNest.jsMongoDB

Experience

설계와 구현에서 풀어낸 문제

각 모듈은 실서비스에서 마주치는 제약 조건과, 그 안에서 선택한 해결을 기준으로 정리했습니다.

  1. 01

    DB 설계

    참조 분리와 검증으로 맞춘 출석 도메인 무결성

    사용자·수업·출석 기록이 서로 참조하면서도 조회 규칙이 달라, 스키마와 애플리케이션 제약으로 무결성을 맞추는 데 초점을 두었습니다.

    • 수업 문서에 출석 기록을 임베딩하는 대신 별도의 출석 문서로 학생·수업을 참조해, 학생 이력 조회 시 전체 수업 문서 순회를 피하고 양측 필터링·인덱스 활용이 가능하도록 설계
    • MongoDB ObjectId를 참조키로 사용하기 위해 HTTP 요청 시 ValidationPipe 검사로 계층 간 타입 불일치 완화
  2. 02

    위치 기반 QR 출석

    다층 검증으로 부정 출석을 차단하는 QR 출석

    단순 QR 스캔만으로는 대리 출석·원격 출석을 막기 어렵다고 판단했습니다. QR·딥링크로 수업 식별을 단순화하되, 서버에서 시간·위치·유저·디바이스를 다층 검증해 부정 출석을 차단하는 구조를 목표로 했습니다.

    • 정적 QR의 URL 노출·원격 출석 취약점을 보완하기 위해 수업 별 QR 생성 방식을 채택하여 현장 출석 맥락을 강화
    • 서버에서 동일 유저 중복, 출석 가능 시간 window, 거리 기반 허용 반경, 디바이스 식별자 중복을 순차 검증해 대리·부정 출석을 차단
    • 위치 범위 밖·시간 외·중복 출석 등 실패 케이스를 명시적 에러 코드로 구분해 클라이언트에 안내
  3. 03

    운영

    헬스체크·인가·예외 코드로 갖춘 운영 품질

    서비스 장애와 올바르지 않은 접근에 대처하여 운영 품질을 높일 수 있도록 하였습니다.

    • DB ping 헬스체크로 외부 DB 장애를 앱 진입 전에 감지
    • 역할·소유권 검증 기반 인가로 악의적 요청 차단
    • 입력 검증과 도메인 예외 코드로 잘못된 요청·비즈니스 실패를 구분

Writing

관련 글

이 프로젝트를 만들며 정리한 글입니다.

Next

Class Manager처럼, 제품 단위로 끝까지 책임집니다

설계·구현·운영까지 한 흐름으로 다루는 풀스택 협업이 필요하면 편하게 문의해 주세요.