학습
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를 사용해야 합니다.