학습
C# 파일 및 네트워크 I/O
C# 파일 및 네트워크 I/O — 중급
C# 파일 및 네트워크 I/O
1. 도입 (왜 배워야 하는가)
파일 및 네트워크 I/O(Input/Output)는 소프트웨어 개발에서 매우 중요한 부분입니다. 대부분의 애플리케이션은 데이터를 저장하고, 읽어오며, 다른 시스템과 통신하는 기능을 필요로 합니다. 예를 들어, 웹 애플리케이션은 사용자의 정보를 데이터베이스에 저장하고, 다른 서비스와 데이터를 주고받아야 합니다. 이러한 기능이 없다면 애플리케이션은 데이터 없이 동작할 수 없고, 사용자는 불편함을 겪게 됩니다.
또한, 파일 및 네트워크 I/O는 성능과 보안 측면에서도 중요한 요소입니다. 데이터를 어떻게 효율적으로 읽고 쓸 것인지, 네트워크 통신을 어떻게 안전하게 처리할 것인지 고민해야 합니다. 이를 모른다면, 애플리케이션의 성능 저하나 보안 취약점이 발생할 수 있습니다.
2. 핵심 개념 설명
- 파일 I/O: 파일을 읽고 쓰는 작업을 말합니다. 마치 책을 읽고 내용을 기록하는 것과 비슷합니다. 책이 없으면 내용을 알 수 없고, 기록하지 않으면 나중에 기억하기 어렵습니다.
- 네트워크 I/O: 다른 시스템과 통신하여 데이터를 주고받는 작업입니다. 이는 사람 간의 대화와 같으며, 정보가 오고 갈 수 있어야 원활한 소통이 이루어집니다.
| 용어 | 설명 |
|---|---|
| Stream | 데이터의 흐름을 나타내며, 파일이나 네트워크에서 데이터를 읽거나 쓰는 통로입니다. |
| FileStream | 파일에서 데이터를 읽고 쓰기 위한 스트림입니다. |
| TcpClient | TCP 네트워크를 통해 다른 컴퓨터와 연결할 수 있게 해주는 클래스입니다. |
3. 기본 코드 예제
파일 I/O의 기본 예제를 살펴보겠습니다. 텍스트 파일을 생성하고 내용을 기록한 후 읽어오는 과정을 보여줍니다.
using System;
using System.IO;
class Program
{
static void Main()
{
// 파일 경로 설정
string filePath = "example.txt";
// 파일에 텍스트 쓰기
File.WriteAllText(filePath, "안녕하세요, C# 파일 I/O!");
// 파일에서 텍스트 읽기
string content = File.ReadAllText(filePath);
Console.WriteLine(content);
}
}
안녕하세요, C# 파일 I/O!
1. using System; using System.IO;: C#에서 필요한 네임스페이스를 포함합니다.
2. string filePath = "example.txt";: 파일의 경로를 설정합니다.
3. File.WriteAllText(filePath, "안녕하세요, C# 파일 I/O!");: 지정된 경로에 텍스트를 기록합니다.
4. string content = File.ReadAllText(filePath);: 파일에서 텍스트를 읽어옵니다.
5. Console.WriteLine(content);: 읽어온 내용을 콘솔에 출력합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
쇼핑몰 애플리케이션에서 장바구니 정보를 파일에 저장하고, 사용자가 다시 방문했을 때 장바구니를 복원하는 기능을 구현할 수 있습니다.
using System;
using System.Collections.Generic;
using System.IO;
class ShoppingCart
{
private List<string> items;
private string filePath = "cart.txt";
public ShoppingCart()
{
items = new List<string>();
LoadCart();
}
public void AddItem(string item)
{
items.Add(item);
SaveCart();
}
private void SaveCart()
{
File.WriteAllLines(filePath, items);
}
private void LoadCart()
{
if (File.Exists(filePath))
{
items.AddRange(File.ReadAllLines(filePath));
}
}
public void ShowCart()
{
Console.WriteLine("장바구니 내용:");
foreach (var item in items)
{
Console.WriteLine(item);
}
}
}
예제 2: 네트워크 데이터 송수신
TCP 클라이언트를 사용하여 서버에 데이터를 전송하고 응답을 받는 기본 구조입니다.
using System;
using System.Net.Sockets;
using System.Text;
class SimpleTcpClient
{
static void Main()
{
TcpClient client = new TcpClient("localhost", 8080);
NetworkStream stream = client.GetStream();
// 서버에 메시지 전송
byte[] data = Encoding.ASCII.GetBytes("안녕하세요, 서버!");
stream.Write(data, 0, data.Length);
// 서버로부터 응답 수신
byte[] responseData = new byte[256];
int bytes = stream.Read(responseData, 0, responseData.Length);
Console.WriteLine("서버 응답: " + Encoding.ASCII.GetString(responseData, 0, bytes));
stream.Close();
client.Close();
}
}
5. 흔한 실수와 주의사항
실수 1: 파일 경로 오류
잘못된 경로를 지정하면 FileNotFoundException이 발생합니다.
File.ReadAllText("wrongPath.txt");
File.ReadAllText("correctPath.txt");
실수 2: 스트림 닫기
스트림을 닫지 않으면 리소스 누수가 발생합니다.
NetworkStream stream = client.GetStream();
// 작업 수행
using (NetworkStream stream = client.GetStream())
{
// 작업 수행
}