안녕하세요! 오늘은 Dart로 간단한 웹 서버를 만드는 방법을 소개하겠습니다. Dart의 강력한 웹 서버 프레임워크 중 하나인 Shelf 패키지를 사용하여 웹 서버를 구축하고 다양한 옵션을 살펴보겠습니다.
Shelf 패키지란?
Shelf는 간단하고 유연한 HTTP 서버와 미들웨어를 작성할 수 있는 Dart 패키지입니다. 이 패키지를 사용하면 웹 애플리케이션을 구축하는 것이 매우 쉬워집니다. Shelf는 요청과 응답을 처리하기 위한 모듈형 미들웨어 시스템을 제공합니다.
시작하기
먼저, Shelf 패키지를 사용하기 위해 Dart 프로젝트를 생성하고 pubspec.yaml 파일에 Shelf 패키지를 추가합니다.
name: my_shelf_server
description: A simple server using Shelf.
dependencies:
shelf: ^1.2.0
shelf_router: ^1.0.0
shelf_static: ^1.0.0
패키지를 추가한 후, pub get 명령어를 실행하여 패키지를 설치합니다.
기본 웹 서버 만들기
이제 기본적인 웹 서버를 만들어보겠습니다. bin 폴더에 server.dart 파일을 생성하고 아래와 같이 코드를 작성합니다.
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as io;
void main() async {
// 요청을 처리하는 핸들러
var handler = Pipeline().addMiddleware(logRequests()).addHandler(_echoRequest);
// 서버 실행
var server = await io.serve(handler, 'localhost', 8080);
print('Server listening on port ${server.port}');
}
// 요청을 처리하고 응답을 반환하는 함수
Response _echoRequest(Request request) =>
Response.ok('Request for "${request.url}"');
이 코드는 기본적인 HTTP 요청을 처리하고 요청된 URL을 반환하는 웹 서버를 만듭니다. 서버는 localhost의 8080 포트에서 실행됩니다.
라우팅 추가
더 복잡한 애플리케이션을 만들기 위해 라우팅을 추가할 수 있습니다. 이를 위해 shelf_router 패키지를 사용합니다.
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_router/shelf_router.dart';
void main() async {
// 라우터 생성
final router = Router();
// 라우트 핸들러 추가
router.get('/', _rootHandler);
router.get('/hello/<name>', _helloHandler);
// 요청을 처리하는 핸들러
var handler = Pipeline().addMiddleware(logRequests()).addHandler(router);
// 서버 실행
var server = await io.serve(handler, 'localhost', 8080);
print('Server listening on port ${server.port}');
}
Response _rootHandler(Request request) => Response.ok('Hello, World!');
Response _helloHandler(Request request) {
final name = params(request, 'name');
return Response.ok('Hello, $name!');
}
이 코드는 두 개의 라우트를 추가합니다. 기본 라우트(/)는 "Hello, World!" 메시지를 반환하고, /hello/<name> 라우트는 URL에서 이름을 추출하여 인사말을 반환합니다.
정적 파일 제공
정적 파일을 제공하기 위해 shelf_static 패키지를 사용할 수 있습니다. 예를 들어, public 폴더에 있는 파일을 제공하려면 다음과 같이 설정할 수 있습니다.
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_static/shelf_static.dart';
void main() async {
final router = Router();
router.get('/', _rootHandler);
router.get('/hello/<name>', _helloHandler);
// 정적 파일 제공 미들웨어 추가
var staticHandler = createStaticHandler('public', defaultDocument: 'index.html');
var handler = Pipeline()
.addMiddleware(logRequests())
.addMiddleware((innerHandler) {
return (request) async {
// 정적 파일 처리
var staticResponse = await staticHandler(request);
if (staticResponse.statusCode != 404) {
return staticResponse;
}
// 정적 파일이 없으면 다른 라우트 처리
return innerHandler(request);
};
})
.addHandler(router);
var server = await io.serve(handler, 'localhost', 8080);
print('Server listening on port ${server.port}');
}
Response _rootHandler(Request request) => Response.ok('Hello, World!');
Response _helloHandler(Request request) {
final name = params(request, 'name');
return Response.ok('Hello, $name!');
}
이 코드는 public 폴더에서 정적 파일을 제공하며, 기본 문서로 index.html을 설정합니다.
결론
Shelf 패키지를 사용하면 Dart로 간단하면서도 강력한 웹 서버를 쉽게 구축할 수 있습니다.
라우팅, 정적 파일 제공, 미들웨어 등을 활용하여 다양한 기능을 구현할 수 있습니다.
이제 Shelf를 사용하여 나만의 웹 애플리케이션을 만들어 보세요!
'Dart > Study' 카테고리의 다른 글
DartPad: 웹에서 직접 Dart 프로그래밍을 체험해 보세요.[ IDE ] (0) | 2024.07.27 |
---|---|
Dart로 서버 개발하기 (0) | 2024.07.13 |
Dart에서 어노테이션 심화 학습: 초보자를 위한 가이드 (0) | 2024.07.12 |
Dart에서 어노테이션 알아보기: 초보자를 위한 가이드 (0) | 2024.07.12 |
Dart에서 클래스 상속 심화 학습: 상속의 모든 것을 다루는 가이드 (0) | 2024.07.12 |