IMCAT.DEV
로그인 가입
Ruby 중급 네트워크

Ruby 파일 및 네트워크 I/O

Ruby 파일 및 네트워크 I/O — 중급

파일 및 네트워크 I/O

1. 도입 (왜 배워야 하는가)

파일 및 네트워크 I/O(Input/Output)는 소프트웨어 개발에서 필수적인 요소입니다. 실무에서는 데이터의 저장, 읽기, 전송이 빈번하게 발생하며, 이는 파일 시스템이나 네트워크를 통해 이루어집니다. 예를 들어, 웹 애플리케이션은 사용자의 정보를 데이터베이스에 저장하고, 이를 필요할 때마다 읽어와야 합니다. 이러한 작업이 제대로 이루어지지 않으면 데이터 손실이나 애플리케이션의 비정상적인 동작이 발생할 수 있습니다. 따라서 파일 및 네트워크 I/O에 대한 이해는 안정적이고 효율적인 소프트웨어 개발을 위해 필수적입니다.

2. 핵심 개념 설명

파일 I/O

파일 I/O는 프로그램이 파일을 읽고 쓰는 과정을 말합니다. 이를 통해 프로그램은 데이터를 영구적으로 저장하고 필요할 때마다 접근할 수 있습니다. 예를 들어, 일기장 프로그램을 생각해보세요. 사용자가 일기를 입력하면, 프로그램은 이를 파일에 저장하고, 사용자가 나중에 읽을 수 있도록 합니다.

네트워크 I/O

네트워크 I/O는 프로그램이 인터넷이나 로컬 네트워크를 통해 데이터를 전송하고 수신하는 과정을 말합니다. 이는 웹 페이지를 요청하고, 데이터를 서버와 주고받는 과정과 유사합니다. 친구에게 이메일을 보내는 것처럼, 프로그램도 다른 서버에 요청을 보내고 응답을 받아야 합니다.

용어정의
파일 I/O파일 시스템과의 데이터 읽기 및 쓰기 작업
네트워크 I/O네트워크를 통한 데이터 전송 및 수신 작업

3. 기본 코드 예제

파일 I/O 예제

아래의 코드는 Ruby에서 파일에 데이터를 쓰고, 읽는 기본적인 예제입니다.

# 파일에 데이터 쓰기
File.open('example.txt', 'w') do |file|
  file.puts '안녕하세요, 파일 I/O!'
end

# 파일에서 데이터 읽기
File.open('example.txt', 'r') do |file|
  puts file.read
end

실행 결과

안녕하세요, 파일 I/O!
  • File.open('example.txt', 'w'): 'example.txt'라는 이름의 파일을 쓰기 모드로 엽니다. 만약 파일이 없다면 새로 생성합니다.
  • file.puts '안녕하세요, 파일 I/O!': 파일에 문자열을 추가합니다.
  • File.open('example.txt', 'r'): 'example.txt' 파일을 읽기 모드로 엽니다.
  • puts file.read: 파일의 내용을 읽어와 출력합니다.
  • 네트워크 I/O 예제

    아래는 HTTP GET 요청을 보내는 기본적인 코드입니다.

    require 'net/http'
    require 'uri'
    
    uri = URI.parse('http://www.google.com')
    response = Net::HTTP.get_response(uri)
    
    puts response.body[0..100]  # 응답 본문 중 처음 100자 출력

    실행 결과

    <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ko"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta content="Google" itemprop="name"/>
  • require 'net/http': HTTP 요청을 보내기 위해 필요한 라이브러리를 불러옵니다.
  • URI.parse('http://www.google.com'): 요청할 URL을 URI 객체로 변환합니다.
  • Net::HTTP.get_response(uri): 해당 URL에 GET 요청을 보내고 응답을 받습니다.
  • puts response.body[0..100]: 응답 본문 중 처음 100자를 출력합니다.
  • 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니 구현

    쇼핑몰에서 장바구니를 구현할 때, 사용자가 선택한 상품 정보를 파일에 저장하고, 이 파일을 통해 장바구니 내용을 불러오는 기능을 구현할 수 있습니다.

    # 장바구니에 상품 추가
    File.open('cart.txt', 'a') do |file|
      file.puts '상품A'
    end

    예제 2: 서버와 데이터 통신

    채팅 애플리케이션을 개발할 때, 사용자가 보낸 메시지를 서버에 전송하고, 서버에서 다른 사용자에게 메시지를 전송하는 경우 네트워크 I/O를 사용합니다.

    require 'socket'
    
    socket = TCPSocket.new('localhost', 2000)
    socket.puts '안녕하세요, 친구!'
    response = socket.gets
    puts response
    socket.close

    5. 흔한 실수와 주의사항

    실수 1: 파일 열기 모드 혼동

  • 잘못된 코드:
  • File.open('example.txt', 'r') do |file|
      file.puts '안녕하세요!'
    end
  • 올바른 코드:
  • File.open('example.txt', 'a') do |file|
      file.puts '안녕하세요!'
    end

    파일을 읽기 모드로 열었을 때는 puts를 사용할 수 없습니다. 추가하려면 'a' 모드로 열어야 합니다.

    실수 2: 네트워크 요청 처리

  • 잘못된 코드:
  • response = Net::HTTP.get_response('http://www.google.com')
  • 올바른 코드:
  • response = Net::HTTP.get_response(URI.parse('http://www.google.com'))

    URL을 직접 문자열로 전달하면 오류가 발생할 수 있습니다. 반드시 URI.parse를 사용해야 합니다.

    6. 정리

  • 파일 I/O와 네트워크 I/O는 데이터의 저장 및 전송을 위한 필수 기술입니다.
  • 파일 I/O를 통해 데이터의 영구적 저장이 가능하며, 네트워크 I/O를 통해 원격 서버와 통신할 수 있습니다.
  • 실무에서 이 두 기술은 데이터 관리 및 사용자 경험 향상에 중요한 역할을 합니다.
  • 다음에 학습하면 좋은 주제

  • 비동기 I/O: 효율적인 데이터 처리 방법
  • 파일 및 네트워크 I/O의 오류 처리: 안정성 강화
  • API 통신: RESTful API를 통한 데이터 통신 방법