
연세대학교 RMR — 터널 막장면 암반등급 평가 시스템
연세대학교 건설환경공학과의 산학협력 연구과제로 개발한 터널 막장면(Tunnel Face) 암반등급 자동 평가 시스템입니다. 터널 굴착 현장에서 막장면 사진을 촬영하면, PyTorch 기반 딥러닝 모델이 RMR(Rock Mass Rating) 5개 인자(R1~R5)를 자동으로 평가합니다. iOS, Android 네이티브 앱과 SvelteKit 웹 애플리케이션, Flask ML 추론 API로 구성된 멀티플랫폼 시스템입니다.
RMR(Rock Mass Rating)이란?
RMR(Rock Mass Rating)은 Bieniawski(1989)가 제안한 암반 분류 체계로, 터널 굴착 시 암반의 안정성을 정량적으로 평가하는 국제 표준 기법입니다. 5개 인자를 합산하여 0~100점 범위의 등급을 산정합니다.
| 인자 | 평가 항목 | 설명 |
|---|---|---|
| R1 | 암석 강도 (UCS) | 일축압축강도 — 암석의 기본 강도 |
| R2 | RQD | Rock Quality Designation — 코어 회수율 기반 암반 품질 |
| R3 | 절리 간격 | 불연속면 간의 간격 — 암반 블록 크기 |
| R4 | 절리 상태 | 불연속면의 거칠기·충전물·풍화도 |
| R5 | 지하수 조건 | 유입수량·수압 — 터널 내 용수 상태 |
기존에는 현장 기술자가 육안으로 막장면을 관찰하고 수기로 평가하는 방식이었으나, 딥러닝 모델이 막장면 사진에서 R1~R5 인자를 자동 추론하여 평가의 객관성과 일관성을 크게 향상시킵니다. 이를 Smart RMR이라 합니다.
시스템 아키텍처
모바일 클라이언트(iOS/Android), 웹 애플리케이션(SvelteKit), ML 추론 API(Flask/PyTorch), 클라우드 인프라(Supabase/AWS S3)로 구성된 분산 시스템입니다.
Smart RMR — AI 자동 평가 파이프라인
터널 막장면 사진 한 장으로 RMR 5개 인자를 자동 평가하는 딥러닝 추론 파이프라인입니다.
ML API는 단일 인자 모델 5개(R1~R5)와 복합 모델 2개(R1234, R12345)를 동시에 실행하여, 개별 인자 점수와 종합 점수를 함께 반환합니다. GPU 가속(CUDA)을 지원하며, CPU 환경에서도 동작합니다.
기술 스택
| 구성 요소 | 기술 스택 | 역할 |
|---|---|---|
| iOS App | Swift 5, UIKit, Realm, Supabase SDK, AWS S3 SDK | iOS 네이티브 현장 기록 앱 |
| iOS 아키텍처 | Repository 패턴, Extension 라이브러리, Fastlane CI/CD | 로컬/서버 이중 저장 + 충돌 해결 |
| Android App | Kotlin 1.9, Jetpack Compose, Hilt 2.50, Room DB | Android 네이티브 현장 기록 앱 |
| Android 아키텍처 | MVVM + Clean Architecture, CameraX, Glide, Navigation | 인앱 촬영 + 오프라인 지원 |
| Web App | SvelteKit 2, Svelte 4, Tailwind CSS 3, DaisyUI 3 | 관리자 + 사용자 웹 인터페이스 |
| Web ORM/인증 | Prisma 4, Supabase Auth, AWS S3 SDK v3 | 데이터 관리 + 인증 + 파일 저장 |
| Web 기능 | pdf-lib, CropperJS, D3-scale, zod | PDF 보고서 생성, 이미지 편집, 차트 |
| ML API | Python 3.8, Flask 2.3, PyTorch 2.0, TorchVision | 딥러닝 추론 서버 |
| ML 모델 | 사전학습 CNN 모델 7개 (R1~R5 단일 + R1234/R12345 복합) | 막장면 이미지 → RMR 점수 추론 |
| Backend | Supabase (PostgreSQL) | 사용자·프로젝트·스테이션 데이터 |
| Storage | AWS S3 | 터널 막장면 이미지 클라우드 저장 |
| 배포 | Netlify (Web), Flask standalone (API) | 웹 배포 + ML 서버 운영 |
데이터 모델 — 스테이션과 막장면
터널 측량의 핵심 데이터 단위인 스테이션(Station)과 막장면(Face)의 구조입니다. 하나의 스테이션은 터널 내 특정 측점을 나타내며, 6가지 촬영 방향의 이미지를 관리합니다.
{km}k+{m}.{decimal} (예: 1k+234.5)주요 화면
로그인
Supabase Auth 기반 로그인 화면입니다. iOS와 Android 모두 동일한 백엔드 인증을 사용합니다.
공구 선택 & 프로젝트 관리
터널 공사의 공구(施工區)를 선택하여 해당 구간의 스테이션 데이터를 관리합니다. 하나의 프로젝트에 여러 공구가 포함될 수 있으며, 공구별로 독립적인 스테이션 목록을 유지합니다.
스테이션 목록
터널 내 측정 스테이션을 목록으로 조회합니다. 각 스테이션의 이름(거리 표기), 촬영 이미지 수, 동기화 상태를 한눈에 파악할 수 있습니다. 로컬 저장 후 서버 동기화 방식으로 오프라인 환경에서도 사용 가능합니다.

스테이션 정보 — 막장면 이미지 & RMR 평가
스테이션의 상세 정보를 확인합니다. 6방위 촬영 이미지(천단 좌/우, 천단부, 좌측벽, 우측벽, 막장면)를 한 화면에서 조회하고, 수동 RMR 입력값과 Smart RMR 자동 평가 결과를 비교할 수 있습니다.
스테이션 추가 & 수정
새 스테이션을 등록하거나 기존 스테이션 정보를 수정합니다. 스테이션명(거리 표기), 막장면 방향(시점/종점), 촬영 이미지를 입력합니다. 카메라로 직접 촬영하거나 갤러리에서 이미지를 선택할 수 있습니다.
사진 촬영 & 업로드
Android 앱은 CameraX를 활용한 인앱 카메라를 제공합니다. 촬영한 사진을 미리보기하고, 6방위 중 해당하는 촬영 방향을 지정하여 업로드합니다. 촬영 후 AWS S3에 자동 업로드되며, 로컬 Room DB에도 캐싱하여 오프라인 환경을 지원합니다.
마이페이지 & 웹 연동
사용자 정보 관리와 웹 앱 연동 화면입니다. iOS 앱에서는 웹 기반 Smart RMR 분석 화면을 외부 프로그램으로 연동하여 사용할 수 있습니다.

오프라인 동기화 아키텍처
터널 내부는 네트워크가 불안정한 환경입니다. iOS(Realm)와 Android(Room)는 로컬 데이터베이스에 먼저 저장한 뒤, 네트워크가 가용할 때 Supabase 서버와 동기화합니다. 편집 충돌(Conflict) 감지 및 해결 메커니즘을 내장하여 데이터 무결성을 보장합니다.
플랫폼별 모듈 구조
프로젝트 규모
| 구성 요소 | 언어 | 소스 파일 | 코드 라인 | 비고 |
|---|---|---|---|---|
| iOS App | Swift | 110개 | – | iOS 13.0+ · Realm · Fastlane CI/CD |
| Android App | Kotlin | 99개 | ~7,900 | API 24+ · Jetpack Compose · MVVM |
| Web App | JS/TS/Svelte | 82개 | ~7,200 | SvelteKit 2 · Prisma · DaisyUI |
| ML API | Python | 1개 | 173 | PyTorch 모델 7개 (총 ~500MB) |
| 합계 | – | 292개 | ~15,300+ | 4개 플랫폼 동시 개발 |
























