---
title: "UART, I2C, SPI 란"
author: "jungsuk lee"
published_at: "2026-09-29T01:50:10.524Z"
updated_at: "2026-09-29T01:50:10.524Z"
tags: ["uart","i2c","spi","통신프로토콜","임베디드","arduino","raspberry pi","하드웨어통신","전자공학","직렬통신"]
canonical_url: "https://ariser.io/@writer_5a76322474a3/%EC%A0%9C%EB%AA%A9-%EC%97%86%EB%8A%94-%EA%B8%80"
ai_assisted: true
---

# UART, I2C, SPI 란

이 글은 AI가 활용됐습니다.

[원문](https://ariser.io/@writer_5a76322474a3/%EC%A0%9C%EB%AA%A9-%EC%97%86%EB%8A%94-%EA%B8%80)



# UART, I2C, SPI: 전자 기기 안에서 데이터를 주고받는 3가지 방법

전자 회로를 공부하거나 아두이노, 라즈베리파이 같은 보드를 다루다 보면 **UART**, **I2C**, **SPI**라는 이름을 자주 보게 됩니다.  
모두 “장치끼리 정보를 주고받는 방법”을 정해 놓은 규칙, 즉 **통신 프로토콜**입니다.

처음에는 이름도 비슷하고 용도도 헷갈릴 수 있지만, 각각의 특징을 알면  
“이 상황에는 뭘 써야 하지?”를 훨씬 쉽게 판단할 수 있습니다.  
이 글에서는 UART, I2C, SPI가 각각 어떤 방식인지, 어디가 다른지 정리해 보겠습니다.

---

## 1. UART: 두 장치가 1:1로 대화하는 가장 단순한 방식

**UART(Universal Asynchronous Receiver/Transmitter)**는  
두 장치 사이에 **한 가닥씩 선을 연결**해서 데이터를 주고받는 방식입니다.

- 보통 **TX(송신 라인)** 와 **RX(수신 라인)** 두 선이 필요합니다.
- 한쪽이 보내면 다른 쪽이 받는 식으로 동작합니다.
- 클록(Clock)을 별도로 맞추지 않는 **비동기(Asynchronous)** 방식이라 더 간단해 보이지만,  
  대신 **보레이트(Baud rate)** 라고 부르는 전송 속도를 미리 맞춰야 합니다. 그리고 서로 속도 관련해서 눈치 싸움(Carrier Sense)를 하다보니 필연적으로 엄청나게 느립니다. 엄청나게요.

### 쉽게 말하면
> “내가 이 속도로 보낼 테니까, 너도 같은 속도로 듣고 있어.”

UART는 구조가 단순해서  
- 시리얼 모니터로 센서 값을 보는 경우
- GPS, 블루투스 모듈, 간단한 센서랑 연결할 때
- 컴퓨터와 보드를 직접 연결할 때

같은 상황에서 자주 쓰입니다.

### 장점
- 연결이 단순하다
- 1:1 연결에는 꽤 직관적이다
- 구현이 비교적 쉽다

### 단점
- 여러 장치를 붙이기에는 선이 늘어나 오히려 I2C 대비 복잡해진다
- 속도나 안정성을 아주 높게 쓰기에는 한계가 있다
- 거리가 길어지면 신호 품질이 문제될 수 있다

---

## 2. I2C: 선은 적게, 장치는 여러 개 연결 가능

**I2C**는 유럽의 Philips 회사에서 만든 방식으로,  
**데이터 선 하나와 클록 선 하나**만으로 여러 장치를 연결할 수 있는 것이 큰 특징입니다.

- 보통 **SDA(데이터 선)** 와 **SCL(클록 선)** 두 줄을 사용합니다.
- “누가 보낼지, 누가 받을지”를 정해주는 **주소(Address)** 개념이 있습니다.
- 마스터-슬레이브 구조를 기본으로, 마스터가 상황을 주도합니다.

### 쉽게 말하면
> “버스에 탑승한 여러 장치 중에서, 내가 호출할 특정 번호의 장치한테만 말한다.”

I2C는 EEPROM, 자이로/가속도 센서, 온도 센서 같은  
**주변 장치 여러 개를 한 버스에 물려 쓰는 경우**에 특히 잘 어울립니다.

### 장점
- 선이 적다 (SDA, SCL 두 개)
- 같은 버스에 여러 장치를 붙일 수 있다 서로 다른 127개 장비까지 이론상 붙일 수 있음.
- 배선이 단순한 편이라 작은 기판에 유리하다

### 단점
- 한 번에 전송할 수 있는 속도나 데이터 양이 제한적이라고 느끼는 경우가 있다
- 장치가 많아지면 주소 충돌 같은 문제를 신경 써야 한다
- 따라서 정보의 대용량 전송보다는 간단한 제어·센서 읽기에 더 어울린다

---

## 3. SPI: 빠르고, 한 번에 많이 보내고 싶을 때

**SPI(Serial Peripheral Interface)**도 I2C와 비슷하게  
여러 장치를 연결할 수 있는 버스 방식이지만,  
성격은 훨씬 더 **빠르고 실용적인 고속 대용량 데이터 전송**에 가깝습니다.

- 보통 **MOSI, MISO, SCK, CS** 같은 선이 필요합니다.
  - MOSI: 마스터가 보내는 데이터
  - MISO: 마스터가 받는 데이터
  - SCK: 클록
  - CS: 어떤 장치를 선택할지 정하는 선
- 클록 신호를 기준으로 CS가 'low'면 나머지 선에서 오는 데이터를 동기적으로 다 주고받는 **전이중화 동기(Synchronous)** 방식입니다.

### 쉽게 말하면
> “정한 리듬(SCK)에 맞춰, 한 장치가 여러 데이터를 빠르게 주면서 받는다.”

SPI는  
- 디스플레이 모듈
- SD 카드나 플래시 메모리
- 고속으로 데이터를 읽거나 써야 하는 센서

같은 경우에 자주 사용됩니다.  
문서나 실습에서 “SPI가 더 빠르다”는 말이 나오는 이유도 여기에 있습니다.

### 장점
- 비교적 빠른 전송이 가능하다
- 데이터를 주고받는 흐름이 단순하고 명확하다
- 여러 장치를 CS 선으로 나눠서 연결할 수 있다

### 단점
- 장치 수가 많아지면 CS 선이나 배선이 늘어날 수 있다
- I2C보다 선이 더 필요한 편이다. 따라서 설계가 엄청나게 복잡하다.

---

## 4. 한 줄로 정리하면

세 방식의 느낌을 아주 간단히 비교해 보면 이렇습니다.

- **UART**: 두 장치가 1:1로, 선은 적어 보여도 장치가 많아지면 선이 늘어나는 방식  
- **I2C**: 선은 적게 쓰면서 여러 장치를 주소 기반으로 연결하는 방식  
- **SPI**: 클록에 맞춰 빠르고 실용적으로 데이터를 주고받는 방식

즉, 무조건 “더 좋은 방식”은 없고,  
**무슨 역할을 할 것인지**에 따라 선택이 달라집니다.

---

## 5. 어떤 상황에서 어떤 걸 떠올리면 좋을까

### UART가 어울릴 때
- 보드와 센서를 1:1로 간단히 연결하고 싶을 때
- 컴퓨터와 보드를 시리얼로 연결해 상태를 확인하고 싶을 때
- 복잡한 배선 없이 기본적인 통신을 해보고 싶을 때

### I2C가 어울릴 때
- 센서 여러 개를 한 버스에 연결해야 할 때
- 배선을 최소화하고 깔끔하게 정리하고 싶을 때
- 느린 대신 단순한 읽기/설정 위주의 통신이면 충분할 때

### SPI가 어울릴 때
- 데이터를 비교적 빠르게 주고받아야 할 때
- 화면 출력, 메모리, 고속 센서처럼 대역폭이 중요한 장치를 다룰 때
- 마스터가 여러 장치를 명확하게 나눠 제어하고 싶을 때

---

## 마무리

UART, I2C, SPI는 전자 회로에서 “데이터를 어떻게 주고받을지”를 정리한 대표적인 규칙들입니다.  
처음에는 용어도 낯설고 차이점도 잘 안 보이지만,  
**UART는 1:1 단순 통신**,  
**I2C는 선을 적게 쓰면서 여러 장치를 주소 기반으로 연결**,  
**SPI는 클록 기반으로 빠르고 실용적으로 전송**  
이라는 큰 그림을 잡아두면 이후 실습이나 회로 설명을 볼 때 훨씬 편해집니다.

실제 프로젝트에서는 “지금은 데이터를 많이 주고받으니까 무조건 SPI를 써야지”보다  
**연결할 장치가 무엇인지, 몇 개인지, 속도나 배선이 어떤지**를 기준으로 고르는 것이 중요합니다.  
필요하다면 각 프로토콜의 기본 핀 배치나 동작 타이밍을 간단한 보드 예제부터 하나씩 확인해 보는 것도 좋은 공부 방법입니다.
