피드로 돌아가기
Building a Smart Parking IoT App
Dev.toDev.to
Backend

SmartPark이 마이크로서비스 대신 헥사고날 아키텍처를 도입해 IoT 기반 주차 관리 시스템의 센서 이상을 실시간으로 감지

Building a Smart Parking IoT App

Schat Carino2026년 3월 29일10intermediate

Context

기존 도시 주차 시스템은 지면에 매설된 500개 센서 중 하나가 고장 나도 72시간 동안 감지하지 못했다. 그 사이 대시보드에는 점유 상태로 표시되어 있고 현장 요원이 허수 문제로 출동했으며 시민들이 주차 공간을 찾지 못했다.

Technical Solution

  • 헥사고날 아키텍처(Ports & Adapters) 채택: 단일 애플리케이션으로 설계해 마이크로서비스의 분산 시스템 복잡성(Kubernetes, 서비스 메시 등) 제거
  • IoT 스택 구성: 500개의 LoRaWAN 자기 센서, 실내 주차장용 초음파 센서, MQTT 프로토콜(EMQX 브로커)을 어댑터로 매핑해 센서 포트와 자연스럽게 통합
  • 의존성 주입 패턴으로 도메인 분리: ParkingPlaceRepository 같은 포트 인터페이스를 정의해 도메인이 프레임워크나 데이터베이스에 무관하게 비즈니스 로직 구현
  • NestJS 프레임워크 활용: @Injectable, @Module 데코레이터로 PostgreSQL, PostGIS 같은 어댑터를 자동으로 주입해 포트-어댑터 패턴을 자연스럽게 구현
  • 계층형·클린 아키텍처와 비교 검증: 5가지 아키텍처 패턴(Layered, Clean, Onion, Hexagonal, Microservices)의 도메인 격리, 테스트 용이성, 기술 교체 난이도, IoT 실시간 적합성을 비교해 헥사고날이 단일 앱에 최적임을 입증

Key Takeaway

마이크로서비스는 분산 시스템을 위해 설계된 패턴이므로 단일 IoT 애플리케이션에는 과도하다. 헥사고날 아키텍처에서는 MQTT 리스너가 구동 어댑터, PostgreSQL 저장소가 구동 어댑터가 되어 도메인은 비즈니스 규칙에만 집중하고 기술 교체는 어댑터 변경으로 해결 가능하다.


IoT 실시간 데이터 처리 시스템을 구축하는 팀에서 헥사고날 아키텍처 + NestJS 조합을 적용하면 도메인 폴더가 프레임워크에 무관하게 유지되어 PostgreSQL에서 MongoDB로 또는 MQTT에서 Kafka로 기술 변경 시 어댑터만 수정하고 비즈니스 로직 수정을 최소화할 수 있다.

원문 읽기