학습
Lua 파일 및 네트워크 I/O
Lua 파일 및 네트워크 I/O — 중급
파일 및 네트워크 I/O
1. 도입 (왜 배워야 하는가)
파일 및 네트워크 I/O는 현대 소프트웨어 개발에서 필수적인 요소입니다. 데이터 저장 및 전송은 모든 프로그램의 핵심 기능으로, 사용자 데이터를 안전하게 저장하고, 서버와 클라이언트 간에 정보를 주고받는 데 필수적입니다. 이 기술을 이해하지 못하면, 예를 들어 웹 애플리케이션에서 사용자 정보를 불러오거나, 게임에서 저장된 게임 데이터를 읽어오지 못하는 등의 문제가 발생할 수 있습니다. 즉, 파일 및 네트워크 I/O를 제대로 활용하지 못하면 프로그램의 기능이 제한되고, 사용자 경험이 저하될 수 있습니다.
2. 핵심 개념 설명
파일 I/O
파일 I/O는 프로그래밍에서 파일을 읽고 쓰는 과정을 의미합니다. 이를 통해 프로그램이 데이터를 영구적으로 저장하거나 불러올 수 있습니다.
- 읽기(read): 파일에서 데이터를 가져오는 과정
- 쓰기(write): 데이터를 파일에 저장하는 과정
- 소켓(Socket): 네트워크 통신의 기본 단위로, 클라이언트와 서버가 서로 데이터를 주고받는 통로
- HTTP 요청: 웹 서버에 정보를 요청하는 방법
네트워크 I/O
네트워크 I/O는 클라이언트와 서버 간의 데이터 전송을 의미합니다. 이는 API 호출이나 데이터베이스와의 통신 등 다양한 상황에서 사용됩니다.
| 용어 | 설명 |
|---|---|
| 파일 I/O | 파일의 내용을 읽고 쓰는 기능 |
| 네트워크 I/O | 네트워크를 통해 데이터를 송수신하는 기능 |
3. 기본 코드 예제
파일 읽기 및 쓰기 예제
-- 파일에 문자열 쓰기
local file = io.open("example.txt", "w") -- "w" 모드로 파일 열기
file:write("안녕하세요, Lua!") -- 파일에 문자열 쓰기
file:close() -- 파일 닫기
-- 파일에서 문자열 읽기
local file = io.open("example.txt", "r") -- "r" 모드로 파일 열기
local content = file:read("*a") -- 파일의 모든 내용을 읽기
file:close() -- 파일 닫기
print(content) -- 읽은 내용을 출력
실행 결과:
안녕하세요, Lua!
content 변수에 저장합니다.네트워크 통신 예제
local socket = require("socket")
local client = socket.tcp() -- TCP 소켓 생성
client:connect("www.example.com", 80) -- 호스트와 포트에 연결
client:send("GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n") -- HTTP GET 요청 보내기
local response = client:receive('*a') -- 응답을 모두 읽기
client:close() -- 소켓 닫기
print(response) -- 응답 내용 출력
실행 결과: (HTTP 응답 내용이 출력됨)
response 변수에 저장합니다.4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 구현
장바구니에 담긴 상품 정보를 파일에 저장하고, 웹 애플리케이션에서 읽어오는 경우입니다.
-- 장바구니에 상품 추가
local cart = {"사과", "바나나", "오렌지"}
local file = io.open("cart.txt", "w")
for _, item in ipairs(cart) do
file:write(item .. "\n") -- 각 상품을 새로운 줄에 씁니다.
end
file:close()
-- 장바구니 내용 읽기
local file = io.open("cart.txt", "r")
local items = {}
for line in file:lines() do
table.insert(items, line) -- 파일에서 읽은 각 줄을 테이블에 추가
end
file:close()
print(table.concat(items, ", ")) -- 장바구니 내용 출력
예제 2: 서버에서 사용자 데이터 가져오기
서버에 사용자 정보를 요청하고, 결과를 파일로 저장하는 예제입니다.
local socket = require("socket")
local client = socket.tcp()
client:connect("api.example.com", 80)
client:send("GET /users HTTP/1.1\r\nHost: api.example.com\r\n\r\n")
local response = client:receive('*a')
client:close()
local file = io.open("users.json", "w")
file:write(response) -- 사용자 정보를 파일에 저장
file:close()
5. 흔한 실수와 주의사항
흔한 실수 1: 파일 모드 실수
local file = io.open("example.txt", "r") -- 파일을 읽기 모드로 열었지만 존재하지 않으면 오류 발생
local file = io.open("example.txt", "r") or io.open("example.txt", "w") -- 파일이 없으면 새로 생성
흔한 실수 2: 소켓 연결 오류
client:connect("invalid.host", 80) -- 잘못된 호스트
local success, err = client:connect("valid.host", 80)
if not success then
print("연결 오류: " .. err) -- 오류 처리
end