본문 바로가기
TYLER SONG2026
블로그 목록
computer science

파일 입출력: 영구적인 데이터 저장과 접근의 기본

파일 입출력은 프로그램이 데이터를 디스크와 같은 외부 저장 장치에 기록하고 읽어들이는 과정이다. 이 과정을 통해 프로그램은 실행 종료 후에도 데이터를 보존하고, 필요할 때 다시 활용할 수 있다. 파일 입출력을 이해하는 것은 모든 프로그래머에게 필수적인 기본 역량이며, 다양한 응용 프로그램 개발의 기반이 된다.

송민성4분 읽기

1. 개념

파일 입출력(File Input/Output, I/O)은 프로그램이 운영체제를 거쳐 파일을 읽고 쓰는 일이다. 여기서 '파일'은 데이터를 담은, 이름이 붙은 저장 공간이다. 파일에서 프로그램으로 데이터를 가져오면 입력(Input), 프로그램에서 파일로 데이터를 쓰면 출력(Output)이다.

2. 왜 사용하는가

프로그램 실행 중에 만들어진 데이터를 메모리에만 담아두면 부족하다. 프로그램이 종료되는 순간 메모리의 데이터는 사라진다. 파일 입출력을 쓰면 이런 이점이 생긴다.

  • 데이터 영속성: 프로그램 종료 후에도 데이터 보존
  • 데이터 공유: 다른 프로그램 또는 사용자 간의 데이터 교환
  • 대용량 데이터 처리: 메모리 크기의 제약 없이 대용량 데이터 저장 및 처리
  • 백업 및 복구: 데이터 손실에 대비한 백업 및 복구

3. 동작 원리

파일 입출력은 운영체제의 파일 시스템이 처리한다. 프로그램이 파일을 읽거나 쓰겠다고 요청하면 운영체제가 그 파일의 위치를 찾아 데이터를 메모리로 올리거나 메모리의 데이터를 파일에 저장한다. 이때 다음 세 가지가 관여한다.

  • 파일 디스크립터(File Descriptor): 운영체제가 파일을 식별하는 정수 값.
  • 스트림(Stream): 데이터의 흐름을 나타내는 추상적인 개념 (예: 표준 입력, 표준 출력).
  • 버퍼(Buffer): 데이터를 임시로 저장하는 메모리 공간. 파일 입출력 성능을 높이는 데 쓴다.

4. 코드 예제

다음은 Python으로 파일을 열고 데이터를 쓰고 읽는 기본 예제이다.

python
# 파일 쓰기 try: with open("my_file.txt", "w") as f: # 'w' 모드는 쓰기(write)를 의미하며, 기존 내용이 있다면 덮어쓴다. f.write("Hello, world!\n") f.write("This is a test file.\n") except Exception as e: print(f"파일 쓰기 오류: {e}") # 파일 읽기 try: with open("my_file.txt", "r") as f: # 'r' 모드는 읽기(read)를 의미한다. content = f.read() print(content) except FileNotFoundError: print("파일을 찾을 수 없습니다.") except Exception as e: print(f"파일 읽기 오류: {e}")

5. 시간 복잡도 또는 성능 특성

파일 입출력의 성능은 여러 요인에 따라 달라진다.

  • 파일 크기: 파일이 클수록 더 많은 시간이 든다.
  • 접근 방식: 순차 접근(Sequential Access)은 처음부터 끝까지 데이터를 읽는 방식이고, 랜덤 접근(Random Access)은 특정 위치의 데이터만 읽는 방식이다. 디스크 탐색(seek) 비용과 OS의 readahead 최적화 때문에 일반적으로 순차 접근이 랜덤 접근보다 빠르다.
  • 버퍼링: 버퍼링을 쓰면 I/O 요청 횟수가 줄어 성능이 올라간다.
  • 디스크 속도: 하드 디스크 드라이브(HDD)보다 솔리드 스테이트 드라이브(SSD)가 더 빠르다.

시간 복잡도는 파일 크기에 비례해 대략 O(n)이다(n은 파일 크기). 다만 버퍼링과 접근 방식, 디스크 속도에 따라 실제 성능은 크게 벌어진다.

6. 실무 사용 사례

  • 로그 기록: 프로그램 실행 과정에서 나온 정보를 로그 파일에 남겨 오류 분석과 시스템 모니터링에 쓴다.
  • 설정 파일 관리: 프로그램의 동작 방식을 제어하는 설정을 설정 파일(예: JSON, YAML)에 저장하고 읽어들인다.
  • 데이터베이스 연동: 데이터베이스와 파일을 함께 써서 데이터를 영구적으로 저장하고 관리한다.
  • 이미지/비디오 처리: 이미지나 비디오 파일을 읽고 쓰고 편집해 멀티미디어 응용 프로그램을 만든다.

7. 주의할 점

  • 파일 닫기: 파일을 사용한 후에는 반드시 close() 메서드를 호출해 파일을 닫아야 한다. 닫지 않으면 데이터가 손실되거나 시스템 리소스가 누수된다. with open(...) as f: 구문을 쓰면 파일이 자동으로 닫히므로 편리하다.
  • 예외 처리: 파일 입출력 과정에서 예외(FileNotFoundError, IOError 등)가 발생하므로 try-except 블록으로 처리한다.
  • 파일 모드: 파일을 열 때 올바른 모드를 지정해야 한다 (예: 'r', 'w', 'a', 'b'). 잘못된 모드를 쓰면 예상치 못한 결과가 나온다.
  • 보안: 사용자 입력으로 파일 이름을 만들거나 외부에서 받은 파일을 읽을 때는 보안을 신경 써야 한다. 악성 코드가 섞여 있을 가능성을 염두에 두고 검증과 필터링을 거친다.

8. 핵심 정리

파일 입출력은 프로그램이 데이터를 영구적으로 저장하고 관리하는 가장 기본적인 방법이다. 파일 시스템과 파일 디스크립터, 스트림, 버퍼가 무엇인지 이해한 뒤 코드 예제로 실제 사용법까지 익히면 된다. 예외 처리와 보안을 함께 챙겨야 안전하고 효율적인 파일 입출력 프로그램이 나온다.

© 2026 Tyler Song