728x90
반응형
Dart에서 운영체제(OS) 기능을 직접 다루고 싶을 때 가장 먼저 만나게 되는 표준 라이브러리가 바로 dart:io입니다.
파일을 읽고 쓰거나, HTTP 서버를 열거나, 소켓 통신을 하거나, 외부 프로세스를 실행하는 등 시스템 레벨 작업을 맡는 핵심 모듈이에요.
dart:io 한 줄 정의
dart:io는 Dart VM 환경에서 파일/디렉터리, 네트워크(HTTP·Socket), 프로세스, 환경/플랫폼 정보 등을 제공하는 표준 라이브러리입니다.
어디에서 쓸 수 있나? (중요 포인트)
dart:io는 브라우저(Web)에서는 사용할 수 없습니다.
브라우저는 보안상 로컬 파일 시스템/소켓/프로세스에 직접 접근이 제한되기 때문이에요.
실행 환경dart:io 사용
| Dart 서버 (Dart VM) | ✅ 가능 |
| Flutter Android/iOS | ✅ 가능 |
| Flutter Desktop (Windows/macOS/Linux) | ✅ 가능 |
| Flutter Web | ❌ 불가 |
dart:io로 할 수 있는 대표 기능 5가지
1) 파일/디렉터리 다루기
- File, Directory로 생성/읽기/쓰기/삭제
- 로그 파일 처리, 설정 파일 저장, 캐시 파일 관리 등
import 'dart:io';
void main() {
final file = File('test.txt');
file.writeAsStringSync('Hello Dart');
print(file.readAsStringSync());
}
2) HTTP 서버 열기 (HttpServer)
간단한 API 서버/웹훅 수신기 등을 만들 때 활용합니다.
import 'dart:io';
Future<void> main() async {
final server = await HttpServer.bind('0.0.0.0', 8080);
await for (final req in server) {
req.response
..write('OK')
..close();
}
}
3) HTTP 요청 보내기 (HttpClient)
외부 API 호출, 내부 통신 등에 사용합니다.
import 'dart:io';
Future<void> main() async {
final client = HttpClient();
final request = await client.getUrl(Uri.parse('https://example.com'));
final response = await request.close();
print(response.statusCode);
client.close();
}
4) 소켓 통신 (TCP/UDP)
실시간 통신, 커스텀 프로토콜, 장비 연동 등에서 사용합니다.
import 'dart:io';
Future<void> main() async {
final socket = await Socket.connect('127.0.0.1', 3000);
socket.write('hello');
await socket.flush();
socket.destroy();
}
5) 프로세스 실행 (Process)
서버 운영 자동화, 시스템 명령 실행, 외부 도구 호출 등에 좋습니다.
import 'dart:io';
Future<void> main() async {
final result = await Process.run('ls', ['-l']);
print(result.stdout);
}
dart:io vs dart:html 차이 (혼동 방지)
구분dart:iodart:html
| 주 사용처 | 서버/모바일/데스크톱 | 웹(브라우저) |
| 파일 시스템 접근 | ✅ | ❌ |
| 소켓(TCP) | ✅ | ❌ |
| DOM 조작 | ❌ | ✅ |
| 실행 엔진 | Dart VM | 브라우저 |
실무에서 자주 쓰는 클래스/키워드 모음
영역자주 쓰는 것
| 파일 | File, Directory, FileSystemEntity |
| HTTP | HttpServer, HttpClient, HttpRequest, HttpResponse |
| 소켓 | Socket, ServerSocket, RawDatagramSocket |
| OS/환경 | Platform, stdin/stdout/stderr |
| 프로세스 | Process, ProcessStartMode |
마무리: dart:io를 언제 선택하면 좋을까?
- 서버 개발(Dart 백엔드), 콘솔 앱, 데스크톱 앱, 모바일에서 로컬 파일 저장/네트워크 처리가 필요하면 → dart:io
- 웹 앱(Flutter Web 포함) 에서 브라우저에서 돌릴 거면 → dart:io는 사용 불가, 다른 방식으로 접근해야 함
728x90
반응형