본문 바로가기
Dart/Dart Server

[초급] Dart로 간단한 서버 구축하기/기본적인 GET, POST 요청 처리 방법

by Maccrey Coding 2024. 9. 5.
728x90
반응형

1. HTTP 서버 기본 설정

우선, 기본적인 HTTP 서버를 설정하고, GET 및 POST 요청을 처리할 수 있도록 합니다. 아래의 코드는 Dart의 dart:io 라이브러리를 사용하여 간단한 HTTP 서버를 설정하고, GET 및 POST 요청을 처리하는 예제입니다.

1.1. 프로젝트 설정

프로젝트 디렉토리에서 다음 파일을 생성합니다.

  • lib/server.dart

1.2. HTTP 서버 코드

server.dart 파일에 다음 코드를 작성합니다.

import 'dart:convert'; // JSON 디코딩을 위해 필요
import 'dart:io';

void main() async {
  final address = InternetAddress.loopbackIPv4;
  final port = 8080;

  final server = await HttpServer.bind(address, port);
  print('Listening on http://${address.host}:$port/');

  await for (HttpRequest request in server) {
    // 요청 메서드에 따라 처리
    if (request.method == 'GET') {
      await handleGetRequest(request);
    } else if (request.method == 'POST') {
      await handlePostRequest(request);
    } else {
      // 지원하지 않는 메서드에 대해 405 응답
      request.response
        ..statusCode = HttpStatus.methodNotAllowed
        ..headers.contentType = ContentType.text
        ..write('405 Method Not Allowed')
        ..close();
    }
  }
}

// GET 요청 처리
Future<void> handleGetRequest(HttpRequest request) async {
  final path = request.uri.path;
  
  if (path == '/') {
    request.response
      ..statusCode = HttpStatus.ok
      ..headers.contentType = ContentType.text
      ..write('Welcome to the Dart HTTP Server!')
      ..close();
  } else if (path == '/info') {
    request.response
      ..statusCode = HttpStatus.ok
      ..headers.contentType = ContentType.json
      ..write(jsonEncode({'message': 'This is a GET request response'}))
      ..close();
  } else {
    request.response
      ..statusCode = HttpStatus.notFound
      ..headers.contentType = ContentType.text
      ..write('404 Not Found')
      ..close();
  }
}

// POST 요청 처리
Future<void> handlePostRequest(HttpRequest request) async {
  // POST 요청의 바디를 읽어들입니다.
  final content = await utf8.decoder.bind(request).join();
  final data = jsonDecode(content);

  // 요청의 바디 내용 출력
  print('Received POST data: $data');

  request.response
    ..statusCode = HttpStatus.ok
    ..headers.contentType = ContentType.json
    ..write(jsonEncode({'message': 'POST request received', 'data': data}))
    ..close();
}

2. 코드 설명

  • 서버 설정: HttpServer.bind 메서드를 사용하여 IP와 포트를 지정하고, 서버를 바인딩합니다.
  • 요청 처리: await for (HttpRequest request in server) 구문을 사용하여 클라이언트의 요청을 비동기적으로 처리합니다.
  • GET 요청 처리:
    • 루트 경로(/)에 대해 "Welcome to the Dart HTTP Server!"라는 응답을 보냅니다.
    • /info 경로에 대해 JSON 형식의 응답을 보냅니다.
    • 다른 경로에 대해서는 404 Not Found 응답을 보냅니다.
  • POST 요청 처리:
    • 요청의 바디를 읽고, JSON 디코딩을 통해 내용을 파싱합니다.
    • 수신한 데이터는 콘솔에 출력하고, JSON 형식의 응답을 클라이언트에 반환합니다.

3. 서버 실행 및 테스트

서버를 실행하려면 터미널에서 다음 명령어를 입력합니다.

dart run lib/server.dart

서버가 실행된 후, 다음 방법으로 GET과 POST 요청을 테스트할 수 있습니다:

  • GET 요청 테스트:
    • 웹 브라우저를 열고 http://localhost:8080/에 접속하면 "Welcome to the Dart HTTP Server!" 메시지를 확인할 수 있습니다.
    • http://localhost:8080/info에 접속하면 JSON 형식의 응답을 확인할 수 있습니다.
  • POST 요청 테스트:
    • Postman이나 curl 명령어를 사용하여 POST 요청을 보낼 수 있습니다.
    • 예를 들어, curl 명령어를 사용하여 POST 요청을 보내려면 다음과 같이 입력합니다.
curl -X POST http://localhost:8080/ -H "Content-Type: application/json" -d '{"key": "value"}'

이 요청에 대해 서버는 JSON 형식으로 응답을 반환합니다.

4. 요약

  • GET 요청 처리: 요청 경로에 따라 다른 응답을 생성하고, 기본적인 응답을 반환합니다.
  • POST 요청 처리: 요청의 바디를 읽어 JSON 데이터를 파싱하고, 이를 기반으로 응답을 생성합니다.
  • 서버 실행 및 테스트: 서버를 실행하고, 웹 브라우저 또는 도구를 사용하여 GET 및 POST 요청을 테스트합니다.

이 포스트가 Dart를 사용하여 GET과 POST 요청을 처리하는 데 도움이 되기를 바랍니다. Dart의 dart:io 라이브러리를 활용하여 간단하면서도 유용한 HTTP 서버를 구축할 수 있습니다.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

728x90
반응형