시스템 아키텍처 (System Architecture)
본 2FA 스마트 도어락 시스템은 하드웨어 제어, 백엔드 로직, 데이터 저장소 및 Vision AI 모듈이 유기적으로 결합된 구조로 설계되었다.
아키텍처 개요 (Architecture Overview)
전체 시스템은 크게 사용자 인터페이스를 담당하는 하드웨어 레이어, 인증 로직을 처리하는 백엔드 서버 레이어, 그리고 상태를 모니터링하는 웹 대시보드로 구성된다.
구성 요소별 역할 (Component Responsibilities)
| 모듈 | 역할 및 책임 | 주요 기술 |
|---|---|---|
| 마이크로컨트롤러 | NFC 및 키패드 하드웨어 상태를 폴링(Polling)하고, 원시 입력을 Serial 통신으로 백엔드에 전달한다. 서버의 명령에 따라 릴레이를 제어한다. | Arduino Uno/Nano, C++ |
| 백엔드 API | 전체 인증 흐름을 제어한다. 1차 인증(NFC/PIN) 확인 후 Vision 모듈을 호출하며, 최종 승인 시 Arduino에 잠금 해제 명령을 전송한다. | Python, FastAPI, PySerial |
| Vision 모듈 | 카메라로부터 프레임을 캡처하여 얼굴을 탐지하고, 등록된 사용자 프로필과 비교하여 2차 인증을 수행한다. YOLOv8 모델을 사용하여 실시간 추론을 수행한다. | OpenCV, YOLOv8 |
| 데이터베이스 | 사용자 자격 증명(해싱된 PIN, NFC UID) 및 수정 불가능한(Immutable) 출입 로그를 안전하게 저장한다. | SQLite |
| 웹 프런트엔드 | 시스템의 현재 상태, 인증 결과 요약 및 실시간 헬스 체크 지표를 시각화하여 제공한다. | React, Docusaurus |
데이터 및 제어 흐름 (Data vs Control Flow)
데이터 흐름 (Data Flow):
- 입력 데이터: 하드웨어에서 발생한 원시 데이터(UID, 키 입력)가 Arduino를 거쳐 백엔드로 전달된다.
- 이미지 처리: 백엔드는 1차 인증 성공 시 Vision 모듈을 활성화한다. Vision 모듈은 서버 내부에서 카메라 프레임을 처리하며, YOLOv8을 통해 얼굴의 특징점을 추출하고 저장된 데이터와 대조한다.
- 결과 기록: 인증의 모든 성공 및 실패 결과는 SQLite 데이터베이스에 로그 형태로 영구 저장된다.
제어 흐름 (Control Flow):
- 중앙 집중식 의사결정: Arduino는 독자적인 출입 결정 권한이 없으며, 모든 결정은 백엔드 서버에서 수행된다.
- 명령 하사: 모든 인증 단계가 통과된 경우에만 백엔드에서
UNLOCKSerial 명령을 Arduino에 전송한다. - 하드웨어 실행: Arduino는 수신된 명령에 따라 물리적 릴레이 스위치를 작동시킨다. 이는 소프트웨어 장애 시에도 잠금 상태를 유지하는 Fail-Secure 설계를 보장한다.