Ruby에서 파일 읽기 및 쓰기: 실용적인 예제와 모범 사례

How To Read and Write Files in Ruby (With Examples)

작성자
발행일
2026년 01월 06일

핵심 요약

  • 1 Ruby는 `File` 클래스와 `File.open` 메서드를 통해 간결하고 강력한 파일 I/O 기능을 제공하며, 블록 사용으로 리소스 누수를 방지합니다.
  • 2 `File.read`, `File.readlines`, `File.foreach` 등으로 파일 읽기를, `File.write`와 `File.open` 블록으로 파일 쓰기를 효율적으로 수행할 수 있습니다.
  • 3 블록 사용, 대용량 파일 `foreach` 활용, 인코딩 지정, 오류 처리, `Tempfile`을 통한 안전한 쓰기 등 모범 사례 준수가 중요합니다.

도입

Ruby는 파일 입출력(I/O) 작업을 위한 간결하고 강력한 방법을 제공하며, 개발자 친화적인 문법과 높은 가독성을 특징으로 합니다. 이 가이드는 Ruby의 `File` 클래스와 `File.open` 메서드를 중심으로 파일 작업을 수행하는 가장 일반적이고 관용적인 접근 방식을 다룹니다. 특히, 파일 작업 시 리소스 누수를 방지하고 파일이 적절히 닫히도록 보장하는 블록 사용의 중요성을 강조합니다. 다양한 파일 모드와 함께 파일을 읽고 쓰는 실용적인 예제들을 통해 Ruby 파일 I/O의 기본 개념부터 효율적인 활용법까지 상세히 설명합니다.

Ruby 파일 I/O 기본 개념

Ruby에서 파일 작업은 주로 File 클래스 또는 File.open 메서드를 통해 이루어집니다. 파일은 블록 형태로 열어 사용 후 자동으로 닫히도록 하는 것이 리소스 누수 방지를 위한 권장 방식입니다.

ruby File.open("filename.txt", "r") do |file| # 파일 작업 수행 end # 블록 종료 시 파일 자동 닫힘

블록을 사용하지 않을 경우 file.close를 명시적으로 호출해야 합니다.

파일 모드

File.open 메서드의 두 번째 인자는 파일 모드를 지정합니다.

  • "r": 읽기 전용 (기본값)

  • "w": 쓰기 전용, 파일을 생성하거나 기존 파일 내용을 지움 (truncates).

  • "a": 쓰기 전용, 파일 끝에 내용을 추가 (appends).

  • "r+": 읽기 및 쓰기, 파일 내용 보존.

  • "w+": 읽기 및 쓰기, 파일을 생성하거나 기존 파일 내용을 지움.

  • "a+": 읽기 및 쓰기, 파일 끝에 내용을 추가.

  • Windows 환경에서는 바이너리 모드("rb", "wb")에 "b"를 추가해야 합니다.

Ruby에서 파일 읽기

파일을 읽는 다양한 방법이 있습니다.

  • 파일 전체를 문자열로 읽기: File.read("example.txt")

  • 파일 전체를 라인 배열로 읽기: File.readlines("example.txt")

  • 라인별 읽기 (메모리 효율적): 대용량 파일에 이상적이며, File.open 블록 내에서 file.each_line 또는 File.foreach를 사용합니다. ruby File.foreach("large_file.txt") do |line| puts line.chomp # 각 라인 처리 end

  • 특정 바이트 또는 라인 수 읽기: f.read(16) (16바이트), File.foreach("log.txt").first(5) (첫 5라인).

  • 인코딩 지정: File.read("utf8_file.txt", encoding: "UTF-8") 또는 File.open("file.txt", "r:UTF-8").

Ruby에서 파일 쓰기

파일에 내용을 쓰는 방법 또한 다양합니다.

  • 문자열을 파일에 쓰기 (덮어쓰기): File.write("output.txt", "Hello, Ruby! ")는 가장 간단한 방식입니다.

  • File.open 블록을 사용한 쓰기: file.puts (개행 포함), file.print (개행 없음), file.write (개행 없음), file << (shovel operator) 등의 메서드를 활용합니다. ruby File.open("greeting.txt", "w") do |file| file.puts "Hello World" end

  • 파일에 내용 추가: File.open("log.txt", "a") 또는 File.write("log.txt", "New log entry ", mode: "a").

  • 라인 배열 쓰기: 배열의 각 요소를 파일에 한 줄씩 쓸 수 있습니다.

실용적인 예제 및 모범 사례

  • 파일 복사: File.write(destination, File.read(source))

  • CSV 읽기/쓰기: File.openFile.foreach 활용

  • 안전한 파일 쓰기 (Atomic Write): require 'tempfile'을 사용하여 임시 파일에 먼저 쓰고, File.rename으로 원본 파일을 교체하여 데이터 손상을 방지합니다.

  • 경로 처리: File.expand_path, File.join, Pathname을 사용하여 견고한 경로를 구성합니다.

  • 오류 처리: begin...rescue 블록(Errno::ENOENT, Errno::EACCES 등) 또는 File.exist?를 사용하여 잠재적 오류에 대비해야 합니다.

권장 모범 사례:

  • 가능하면 항상 블록 형태를 사용하여 파일이 자동으로 닫히도록 합니다.

  • 간단한 전체 파일 작업에는 File.read/File.write를 사용합니다.

  • 대용량 파일은 File.foreach를 사용하여 메모리 효율성을 높입니다.

  • 비 ASCII 텍스트 작업 시에는 인코딩을 명시합니다.

  • 프로덕션 코드에서는 예외를 적절히 처리합니다.

결론

Ruby의 파일 I/O 기능은 간결한 문법, 블록 기반의 안전한 리소스 관리, 그리고 `File.read`, `File.write`와 같은 강력한 메서드를 통해 견고하고 유지보수 가능한 애플리케이션 개발을 지원합니다. 설정 파일 처리, 로그 관리, 보고서 생성, 복잡한 데이터 파이프라인 구축 등 다양한 시나리오에서 Ruby는 최소한의 상용구 코드와 최대의 표현력을 제공합니다. RailsCarma와 같은 전문 Ruby on Rails 개발 회사는 이러한 Ruby의 파일 처리 역량을 적극 활용하여 비즈니스 요구에 맞춰 신뢰할 수 있고 고품질의 Rails 애플리케이션을 구축합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!