Binary Journey

I/O 란 무엇인가? 본문

daily/CS QnA

I/O 란 무엇인가?

binaryJournalist 2025. 1. 29. 21:54
반응형

 

 

최근 자격증 시험을 준비하면서 SQLP 교재에서 "디스크 I/O, 파일 단위 I/O, 블록 단위 I/O"라는 개념을 접했다. 사실 CS 관련 서적을 보면 I/O라는 용어는 흔히 등장하지만, 나는 그동안 "I/O"라고 읽고 그냥 지나쳤다. 하지만 정확히 무엇을 의미하는지 제대로 이해하고 싶어졌다. 이제라도 확실히 알아두는 게 중요할 것 같아 블로그에 정리해 보려고 한다.

 

 

"기억보다는 기록을!"

 

 

I/O의 기본 개념

 

컴퓨터는 내부적으로 연산을 수행하는 CPU(중앙처리장치)와 데이터를 저장하는 메모리(RAM, HDD, SSD)로 이루어져 있다. 하지만 이 내부 시스템만으로는 외부 세계와 정보를 주고받을 수 없기 때문에 입출력 장치(I/O 장치)가 필요하다.

 

I/O란?

I/O(Input/Output, 입출력)은 데이터를 입력받고 출력하는 과정을 의미한다.

 

  • 입력(Input): 사용자가 데이터를 입력하거나 외부에서 데이터를 가져오는 작업
    • 예: 키보드 입력, 마우스 클릭, 센서 데이터, 파일 읽기, 네트워크 수신 등
  • 출력(Output): 입력된 데이터를 가공하여 사용자나 다른 시스템으로 보내는 작업
    • 예: 화면 출력, 프린터 인쇄, 스피커 소리 출력, 파일 저장, 네트워크 전송 등

 

I/O 장치

컴퓨터와 데이터를 주고받는 장치는 모두 I/O 장치라고 부른다.

 

입력 장치 (Input) 출력 장치 (Output)
보드, 마우스, 마이크, 터치스크린, 카메라, 스캐너 모니터, 프린터, 스피커, LED 디스플레이

 

I/O의 동작 방식

컴퓨터에서 I/O는 CPU메모리 사이에서 데이터를 주고받는 방식으로 작동한다.
CPU가 직접 I/O 장치와 데이터를 주고받을 수도 있지만, 버퍼(Buffer)를 활용하여 데이터를 저장하고 처리하는 방식이 일반적이다.

 

I/O 작업은 속도가 느려 CPU가 직접 처리하면 비효율적이므로, DMA(Direct Memory Access) 같은 기법을 사용해 CPU 개입을 줄이기도 한다.

 

 

 


 

 

I/O 의 종류

I/O는 단순한 입력과 출력이 아니라 다양한 방식과 최적화 기법이 존재한다.
디스크, 파일, 네트워크, 메모리 등 여러 I/O 타입이 있으며, 각기 다른 방식으로 최적화된다.

 

 

1. 디스크 I/O

HDD나 SSD에서 데이터를 읽고 쓰는 작업을 의미한다.

  • 예: 파일 저장, 데이터베이스 읽기/쓰기, OS 페이징
  • 최적화 방법: SSD 사용, 캐싱, 버퍼링, RAID, 압축 등

 

💡 RAID(Redundant Array of Independent Disks)란?

RAID는 여러 개의 디스크를 하나의 논리적 장치로 묶어 성능을 향상하거나 데이터 보호를 강화하는 기술이다.

속도를 높이거나 장애 발생 시 데이터를 보호하기 위해 여러 개의 디스크를 조합하는 방법이라고 생각하면 된다.

주로 더 빠른 읽기/쓰기 속도의 성능 향상, 하드디스크 고장 시 데이터 손실 방지의 장애 대비(데이터 보호), 디스크를 하나처럼 사용 가능한 스토리지 용량 확장이 목적이다.

 

 

 


 

 

 

2. 파일 I/O

파일을 열고, 읽고, 쓰고, 닫는 작업을 의미한다.

  • 예: 로그 파일 기록, 설정 파일 읽기, CSV 파일 저장
  • 최적화 방법: 비동기 처리, 파일 압축, 메모리 매핑(mmap)

 

💡 메모리 매핑(Memory-Mapped Files, mmap)이란?

파일을 디스크에서 직접 읽지 않고 메모리(RAM)에 매핑하여 빠르게 접근하는 방식이다.

- 대용량 파일을 한 번에 로드하지 않고 필요한 부분만 로드할 수 있다. (Lazy Loading)
- OS가 자동으로 캐싱하여 속도가 빠르다.
- 다만 RAM을 많이 사용하므로 주의가 필요하다.

데이터베이스, IPC(프로세스 간 통신), 영상 스트리밍 등에 활용된다.

 

 

 

 


 

 

 

 

3. 네트워크 I/O

네트워크를 통해 데이터를 송수신하는 작업을 의미한다.

  • 예: 웹 API 호출, FTP 파일 전송, 채팅 메시지 송수신
  • 최적화 방법: 비동기 I/O, Keep-Alive, 로드 밸런싱, 캐싱

 

💡 Keep-Alive란?

네트워크 연결을 일정 시간 동안 유지하여 TCP 연결을 재사용하는 방식이다.

- HTTP 요청 시 새로운 TCP 연결을 만들면 오버헤드가 크다.
- Keep-Alive를 사용하면 웹사이트 로딩 속도와 API 응답 시간이 빨라진다.
- Connection: keep-alive 헤더를 추가하여 활성화할 수 있다. (HTTP/1.1부터 기본 활성화)

 

 

 

 


 

 

 

 

4. 메모리 I/O

CPU와 RAM 간 데이터 이동을 의미하며, 휘발성 메모리(RAM)는 데이터를 디스크로 이동할 수도 있다.

  • 예: CPU 연산 처리, OS 페이지 캐시, 데이터 버퍼링
  • 최적화 방법: 메모리 캐시, DMA(Direct Memory Access)

 

 

 

 


 

 

 

 

5. 장치 I/O

입출력 장치(키보드, 마우스, 모니터, 프린터 등)와의 데이터 교환을 의미한다.

  • 예: 키보드 입력, 마우스 이벤트, 프린터 출력
  • 최적화 방법: 버퍼링, 인터럽트 기반 처리, DMA

 

 

 

 

 

 


 

 

 

 

 

 

 

6. 그래픽 I/O

GPU(Graphics Processing Unit)와 데이터를 주고받는 작업을 의미한다.

  • 예: 게임 렌더링, 3D 그래픽, 동영상 재생
  • 최적화 방법: GPU 가속, VRAM(비디오 메모리) 활용, 다이렉트 렌더링

 

 

 

 

 


 

 

 

I/O 의 세부 개념

 

 

 

직렬 I/O & 병렬 I/O

구분 직렬 I/O (Serial I/O) 병렬 I/O (Parallel I/O)
특징 데이터를 한 비트씩 순차적으로 전송 데이터를 여러 비트씩 동시에 전송
예시 UART(시리얼 통신), USB, 블루투스 프린터 포트(구형), PCI Express, 메모리 버스

 

 

 


 

 

 

블록 I/O & 문자 I/O

구분 블록 I/O (Block I/O) 블록 I/O (Block I/O)
특징 데이터를 고정된 크기 블록 단위로 읽고 씀 데이터를 한 글자(바이트) 단위로 처리
예시 디스크 I/O, 데이터베이스 터미널 입력, 키보드 타이핑

 

 

 

 


 

 

 

동기 I/O & 비동기 I/O

 

 

구분 동기 I/O (Synchronous I/O) 비동기 I/O (Asynchronous I/O)
특징 작업이 끝날 때까지 기다림 요청 후 다른 작업을 수행 가능
예시 일반적인 파일 읽기/쓰기 (read(), write()) async/await 기반 네트워크 요청, DB 비동기 처리

 

 

 

 

 


 

 

 

마치며

 

그동안 막연하게 지나쳤던 I/O 개념을 정리해 보았다.
파일, 네트워크, 디스크 등 다양한 I/O 방식이 있으며,
최적화 방법도 각기 다르다는 점이 흥미롭다.

이제 CS 서적에서 I/O가 나오면 가볍게 지나치지 않고, 좀 더 깊이 있게 이해할 수 있을 것 같다. 🚀

반응형