사전 사물인터넷
개념

사물인터넷

gabury1고친 사람 github-actions[bot]

사물인터넷은 기계가 사람 손을 거치지 않고 스스로 데이터를 주고받게 해 줍니다. 온도계나 전기 계량기 같은 물건에 작은 컴퓨터와 통신 장치를 붙입니다. 그러면 물건이 잰 값을 네트워크 너머 서버로 보냅니다. 서버가 보낸 명령을 받아 물건이 움직이기도 합니다.

쉽고 빠른 이해

무슨 일을 하나 — 물건이 자기 상태를 스스로 재서 서버에 알려 줍니다. 창고 온도계가 1분마다 온도를 보내면 사람이 창고에 가 보지 않아도 서버에서 온도를 봅니다.

왜 이렇게 하나 — 사람이 돌아다니며 읽고 적는 방식은 느리고 빠뜨립니다. 물건이 수백 곳에 흩어져 있으면 사람을 보내는 일 자체가 감당이 안 됩니다.

어떻게 도나

  1. 물건에 붙은 장치가 값을 잽니다
  2. 값을 작은 메시지로 만들어 네트워크로 보냅니다
  3. 서버가 메시지를 모아 저장합니다
  4. 필요하면 서버가 물건에 명령을 돌려보냅니다

대가 — 관리할 기계가 수천 대로 늘어납니다. 기계마다 배터리·보안·소프트웨어 업데이트를 챙겨야 합니다. 하나라도 뚫리면 내 네트워크로 들어오는 문이 됩니다. 값을 가끔만 알면 되는 곳에서는 이 비용이 얻는 것보다 큽니다.

상세

큰 건물의 관리인이 아침마다 층을 돌며 계량기 숫자를 수첩에 적는다고 해 봅시다. 어느 날부터 계량기가 스스로 관리실에 전화를 걸어 숫자를 불러 줍니다. 관리인은 관리실에 앉아 전화로 받은 숫자만 봅니다.

IoT(Internet of Things, 사물인터넷)는 이렇게 물건이 스스로 알리게 만드는 일을 통틀어 부르는 말입니다. 여기서 사물은 사람이 앞에 앉아 쓰는 컴퓨터가 아닙니다. 온도계·전등·문 잠금장치·공장 설비처럼 원래 네트워크와 상관없던 물건입니다. 이 물건들이 인터넷에 붙어 데이터를 주고받으면 사물인터넷이 됩니다.

이 절은 백엔드 개발자가 이 물건들을 상대할 때 만나는 것을 차례로 봅니다. 물건 안에 무엇이 들었나, 데이터가 어떤 길로 서버까지 오나, 서버가 어떻게 받고 명령을 돌려보내나, 무엇이 까다로운가 순서입니다.

사물 안에 들어가는 부품

사물인터넷 기기는 대개 세 부품으로 이루어집니다. 재거나 움직이는 부품, 계산하는 부품, 통신하는 부품입니다. 계산하는 부품 위에서는 프로그램이 돕니다.

재는 부품은 센서입니다. 센서는 온도·습도·빛·움직임 같은 물리량을 전기 신호로 바꿉니다. 창고 온도계라면 온도를 재는 센서 하나가 들어 있습니다.

센서와 반대 방향으로 일하는 부품도 있습니다. 전기 신호를 받아 밸브를 열거나 모터를 돌리는 부품입니다. 이것을 액추에이터라고 합니다. 서버가 보낸 명령으로 물건이 실제로 움직이려면 이 부품이 있어야 합니다.

계산하는 부품은 마이크로컨트롤러입니다. 프로세서·메모리·입출력 핀을 칩 하나에 담은 아주 작은 컴퓨터입니다. 센서 값을 읽어 메시지로 묶습니다. 그 메시지를 통신 부품에 넘깁니다.

마이크로컨트롤러처럼 물건 안에 들어가 정해진 일 하나만 하는 컴퓨터를 임베디드 시스템이라고 부릅니다. 노트북처럼 이것저것 다 하는 컴퓨터와 달리 맡은 일 하나에 맞춰 작고 싸게 만듭니다.

통신하는 부품은 대개 무선 칩입니다. 마이크로컨트롤러가 넘긴 메시지를 전파에 실어 내보냅니다. 어떤 무선 방식을 쓰는지는 다음 절 「데이터가 서버까지 오는 길」에서 봅니다.

마이크로컨트롤러에서 도는 프로그램을 펌웨어라고 합니다. 기기 전원을 켜면 바로 이 프로그램이 돕니다. 메모리가 작아서 범용 운영체제를 못 올리는 경우가 많습니다. 그래서 운영체제 없이 펌웨어만 돌리기도 합니다.

운영체제가 필요하면 작게 만든 실시간 운영체제를 올립니다. 실시간 운영체제는 정해진 시간 안에 반응하는 것을 보장하는 작은 운영체제입니다. 모터를 멈춰야 하는 순간에 늦지 않고 멈추려면 이 보장이 필요합니다.

데이터가 서버까지 오는 길

기기가 늘 인터넷에 바로 붙는 것은 아닙니다. 배터리로 몇 년을 버텨야 하는 기기는 전력을 아끼려고 근거리 무선만 씁니다. 근거리 무선은 몇 미터에서 수십 미터 안의 상대와만 통신하는 방식입니다. 블루투스 저전력이나 지그비가 그런 방식입니다.

근거리 무선만 쓰는 기기는 인터넷까지 혼자 못 갑니다. 그래서 중간에 게이트웨이를 둡니다. 게이트웨이는 주변 기기들의 근거리 무선 신호를 받아 인터넷 쪽으로 넘겨 주는 중계 장치입니다. 집 안의 허브 장치가 흔한 게이트웨이입니다.

flowchart TD
    S["센서가 붙은 기기"] -->|근거리 무선| G["게이트웨이"]
    W["인터넷에 바로 붙는 기기"] -->|와이파이 · 이동통신| B
    G -->|인터넷| B["브로커 · 수집 서버"]
    B --> D["저장소"]
    B --> A["백엔드 애플리케이션"]

그림의 위쪽이 기기 쪽이고 아래쪽이 백엔드 쪽입니다. 와이파이나 이동통신 모듈을 단 기기는 게이트웨이 없이 바로 인터넷으로 나갑니다. 어느 길로 오든 데이터는 결국 서버 쪽의 한 입구로 모입니다.

그 입구가 브로커나 수집 서버입니다. 둘 다 여러 기기가 보낸 메시지를 한곳에서 받아 저장소와 애플리케이션으로 넘겨 주는 서버입니다. 브로커는 아래 「브로커를 사이에 둔 발행과 구독」에서 따로 봅니다.

백엔드가 받는 메시지

기기가 보내는 데이터를 텔레메트리라고 부릅니다. 떨어져 있는 기계가 자기 상태를 재서 보내 주는 기록이라는 뜻입니다. 텔레메트리 메시지 하나는 대개 작습니다. 누가 보냈는지, 언제 쟀는지, 무엇을 쟀는지 정도만 담습니다.

창고 온도계 하나가 보내는 메시지를 JSON(JavaScript Object Notation) 으로 적으면 이런 꼴입니다.

JSON
{"device": "temp-07",
 "ts": "2026-10-16T09:00:00Z",
 "temp": 4.2}

device 는 기기 이름, ts 는 잰 시각, temp 는 잰 온도입니다. 이 기기는 같은 꼴의 메시지를 1분마다 하나씩 보냅니다. 창고에 이런 기기가 300대 있으면 서버는 하루에 메시지 수십만 개를 받습니다.

메시지마다 시각과 값이 짝지어 있습니다. 같은 기기의 값을 시각 순으로 이으면 한 줄의 시계열이 됩니다. 그래서 사물인터넷 데이터는 시계열을 다루는 데 맞춘 저장소에 쌓는 경우가 많습니다.

연결을 기기가 먼저 연다

백엔드 개발자에게 익숙한 방식은 클라이언트가 요청하고 서버가 응답하는 것입니다. 그런데 사물인터넷에서는 서버가 기기에 먼저 말을 걸기 어렵습니다. 기기는 대개 공유기나 이동통신망 뒤에 숨어 있어서 바깥에서 그 기기의 주소로 바로 들어갈 수 없기 때문입니다.

이렇게 기기를 가리는 장치가 NAT(Network Address Translation, 네트워크 주소 변환)입니다. 안쪽 기기 여러 대가 바깥으로 나갈 때 공인 주소 하나를 같이 쓰게 해 줍니다. 안에서 밖으로 나가는 연결은 통과시킵니다. 밖에서 먼저 들어오는 연결은 어느 기기로 보낼지 몰라 막힙니다.

그래서 기기가 먼저 서버 쪽으로 연결을 엽니다. 그 연결을 계속 열어 둡니다. 서버가 기기에 보낼 명령이 생기면 이미 열려 있는 그 연결로 내려보냅니다.

기기가 매번 「보낼 것 있나」를 묻는 폴링보다 명령이 늦지 않게 닿습니다. 묻느라 쓰는 전력도 아낍니다.

연결을 늘 열어 두는 것은 전원이 늘 들어오는 기기의 방식입니다. 배터리로 도는 기기는 잠든 동안 연결을 닫아 둡니다. 깨어날 때만 연결을 다시 엽니다. 이 경우는 아래 「기기가 지는 제약」에서 봅니다.

브로커를 사이에 둔 발행과 구독

기기와 백엔드가 서로 직접 연결하지 않고 가운데 중계 서버를 두는 구조가 흔합니다. 이 중계 서버를 메시지 브로커라고 합니다. 기기와 백엔드는 둘 다 브로커에만 연결합니다.

브로커를 지나는 메시지에는 토픽이라는 이름표를 붙입니다. 창고1/temp-07/온도 처럼 경로 모양으로 짓는 경우가 많습니다. 브로커는 이 이름표를 보고 메시지를 누구에게 넘길지 정합니다.

메시지를 토픽에 올리는 일을 발행이라고 합니다. 어떤 토픽의 메시지를 받겠다고 브로커에 알려 두는 일은 구독입니다. 보내는 쪽과 받는 쪽이 이렇게 토픽만 보고 만나는 방식을 발행-구독이라고 부릅니다.

sequenceDiagram
    participant 기기
    participant 브로커
    participant 백엔드
    기기->>브로커: 연결을 열고 자기 명령 토픽을 구독
    백엔드->>브로커: 창고1 온도 토픽을 구독
    기기->>브로커: 온도 4.2 를 발행
    브로커->>백엔드: 온도 토픽 구독자에게 전달
    백엔드->>브로커: 냉각기 켜기 명령을 발행
    브로커->>기기: 명령 토픽 구독자에게 전달

그림은 메시지 한 번이 오가는 순서입니다. 기기도 자기에게 올 명령 토픽을 구독해 둡니다. 백엔드가 그 토픽에 명령을 발행하면 브로커가 기기의 열린 연결로 넘깁니다.

기기는 백엔드의 주소를 모릅니다. 백엔드도 기기의 주소를 모릅니다. 둘 다 브로커 주소와 토픽 이름만 압니다. 기기를 더 붙이거나 백엔드 서버를 늘려도 서로 설정을 바꾸지 않아도 됩니다.

사물인터넷에서 자주 쓰는 발행-구독 프로토콜로 MQTT(Message Queuing Telemetry Transport)가 있습니다. 메시지마다 붙는 헤더가 몇 바이트에 그칩니다. 연결 하나를 오래 열어 두는 것을 전제로 만들었습니다.

웹에서 쓰는 HTTP(HyperText Transfer Protocol)는 요청마다 글자로 적은 헤더 여러 줄이 붙습니다. 이 헤더만 수백 바이트가 되기 쉽습니다. 서버가 먼저 보내는 길도 없습니다. 작은 메시지를 자주 주고받는 기기에는 이 두 가지가 부담이 됩니다.

기기가 지는 제약

사물인터넷 기기는 서버와 사정이 다릅니다. 백엔드를 짤 때 이 차이를 알아야 이상한 데이터를 보고 놀라지 않습니다.

첫째는 전력입니다. 배터리로 도는 기기는 대부분의 시간을 잠들어 지냅니다. 정해진 때에 깨어나 값을 잽니다. 값을 보내고 나면 다시 잡니다.

stateDiagram-v2
    [*] --> 잠듦
    잠듦 --> 깨어남: 타이머가 울림
    깨어남 --> 측정
    측정 --> 전송
    전송 --> 잠듦: 보내고 나면

그림의 잠듦 상태에서는 연결도 닫혀 있습니다. 그래서 기기는 깨어 있는 동안에만 메시지를 받을 수 있습니다. 백엔드가 보낸 명령이 기기에 닿기까지 다음 깨어남을 기다려야 할 수 있습니다. 브로커가 명령을 잠시 들고 있다가 기기가 깨어나면 넘겨 주게 합니다.

둘째는 연결입니다. 무선 신호는 자주 끊깁니다. 기기는 못 보낸 메시지를 쌓아 두었다가 연결이 돌아오면 한꺼번에 보냅니다.

그러면 서버에는 몇 시간 전 값이 지금 도착합니다. 같은 메시지가 두 번 오기도 합니다.

같은 메시지가 두 번 와도 결과가 한 번 받은 것과 같게 처리해야 합니다. 이 성질을 멱등성이라고 합니다. 메시지 안의 기기 이름과 잰 시각으로 중복을 거르는 방법이 흔합니다. 도착 시각이 아니라 메시지 안의 잰 시각을 기준으로 정렬해야 순서도 맞습니다.

셋째는 계산 능력입니다. 마이크로컨트롤러는 메모리가 작습니다. 프로세서도 단순합니다. 계산이 많은 암호 처리나 큰 메시지를 다루기가 버겁습니다. 메시지 형식과 보안 방식을 고를 때 기기 쪽이 감당할 수 있는지부터 따져야 합니다.

수천 대를 굴리는 일

기기가 몇 대일 때와 수천 대일 때는 일의 성격이 바뀝니다. 기기를 하나하나 손으로 설정할 수 없게 되기 때문입니다.

먼저 기기마다 신원이 필요합니다. 브로커는 연결해 온 기기가 진짜 그 기기인지 알아야 합니다. 그래서 기기마다 고유한 인증서나 키를 공장에서 넣어 내보냅니다. 연결할 때 그것으로 신원을 확인합니다. 모든 기기가 같은 비밀번호를 쓰면 하나만 털려도 전체가 열립니다.

다음은 업데이트입니다. 펌웨어에 버그나 보안 구멍이 나오면 흩어진 기기를 다 고쳐야 합니다. 그래서 네트워크로 새 펌웨어를 내려보내 기기가 스스로 바꿔 끼우게 합니다. 이것을 OTA(Over-The-Air, 무선 업데이트)라고 부릅니다. 업데이트가 중간에 끊겨도 기기가 죽지 않도록 이전 펌웨어로 돌아가는 길을 남겨 둡니다.

기기가 많을수록 넓어지는 위협

기기 수가 늘면 관리할 일만 느는 것이 아닙니다. 공격자가 노릴 곳도 함께 늡니다. 이 절은 그 위험을 낱말 셋으로 봅니다.

보안에서 사물인터넷 기기는 엔드포인트로 다룹니다. 엔드포인트는 네트워크 끝에 붙어 데이터를 주고받는 기기를 말합니다. 노트북이나 휴대폰과 같은 줄에 놓고 지켜야 한다는 뜻입니다.

기기가 늘어날수록 공격자가 노릴 수 있는 입구도 넓어집니다. 이 입구 전체를 공격 표면이라고 합니다. 기기 하나를 더 붙이면 지켜야 할 문이 하나 더 생깁니다.

보안 관리가 허술한 기기가 수천 대 모이면 더 큰 일이 납니다. 공격자가 그 기기들을 빼앗아 한꺼번에 부릴 수 있습니다. 이렇게 공격자 손에 묶인 기기 무리를 봇넷이라고 합니다.

쓰는 곳과 안 쓰는 곳

사물인터넷이 쓸모 있는 곳은 공통점이 있습니다. 상태를 계속 알아야 하는 곳, 그러면서 사람이 가서 보기 어려운 곳입니다. 대표적인 분야는 아래와 같습니다.

분야 무엇을 재나 무엇을 하나
집 문 열림 · 온도 · 전력 밖에서 전등과 난방을 켜고 끈다
공장 설비의 진동 · 온도 고장 나기 전에 정비 시점을 잡는다
물류 화물의 위치 · 냉장 온도 어디쯤 왔는지, 상하지 않았는지 본다
농업 흙의 수분 · 날씨 필요한 때에만 물을 준다
몸 심박 · 걸음 손목 기기가 건강 기록을 쌓는다

반대로 값을 가끔만 알면 되는 곳에는 맞지 않습니다. 한 달에 한 번 사람이 가서 보면 충분한 값이라면 기기 가격과 배터리, 보안 관리 비용이 얻는 것보다 큽니다. 사람이 직접 입력하는 편이 쉬운 데이터도 마찬가지입니다.

관련 항목

사물인터넷 기기를 이루는 부품

센서 · 액추에이터 · 마이크로컨트롤러 · 펌웨어 · 임베디드 · 실시간 운영체제 · Zephyr

기기가 네트워크에 붙는 무선 통신 방식

블루투스 저전력 · 지그비 · 와이파이 · LoRa · 이동통신 · 근거리 무선 통신

데이터가 서버까지 오가는 데 쓰는 프로토콜

MQTT · CoAP · HTTP · TCP · UDP · 발행-구독 · 메시지 브로커 · 토픽

데이터가 지나는 중간 장비와 서버

게이트웨이 · NAT · 엣지 컴퓨팅 · 클라우드 · AWS IoT Core

기기가 보내는 데이터를 다루는 방법

텔레메트리 · 시계열 · 시계열 데이터베이스 · 멱등성 · JSON · 폴링

수천 대 기기를 관리하는 수단

OTA 업데이트 · 인증서 · 공개키 기반구조 · 기기 프로비저닝 · 디바이스 관리

사물인터넷 기기를 노리는 위협

엔드포인트 · 공격 표면 · 봇넷 · 기본 비밀번호 · 엔드포인트 탐지 및 대응

사물인터넷이 쓰이는 분야

스마트 홈 · 산업용 사물인터넷 · 웨어러블 · 스마트 시티 · 디지털 트윈 · 사이버물리시스템

다른 이름: IoT · Internet of Things · 인터넷 오브 띵스