본문 바로가기
Dart/Study

Dart로 데이터베이스 서버 구축하기: 완벽 가이드

by Maccrey Coding 2024. 8. 6.
반응형

 

오늘은 Dart 언어를 사용하여 데이터베이스 서버를 구축하는 방법에 대해 알아보겠습니다.

Dart는 주로 모바일 애플리케이션 개발에 사용되지만, 서버 사이드 및 데이터베이스 작업에서도 강력한 성능을 발휘할 수 있습니다.

이 포스팅에서는 Dart를 사용하여 다양한 데이터베이스를 설정하고 관리하는 방법을 다루겠습니다.

1. Dart에서 데이터베이스 서버 구축: 개요

Dart는 서버 사이드 개발을 위한 강력한 도구들을 제공합니다.

데이터베이스와의 통합을 위해 여러 패키지를 사용할 수 있으며, 가장 일반적인 데이터베이스로는 PostgreSQL과 MongoDB가 있습니다.

이 포스팅에서는 이 두 가지 데이터베이스를 Dart에서 사용하는 방법을 자세히 설명하겠습니다.

2. PostgreSQL과 Dart: 관계형 데이터베이스 설정

PostgreSQL은 강력한 오픈 소스 관계형 데이터베이스입니다.

Dart에서는 postgres 패키지를 사용하여 PostgreSQL 데이터베이스와 상호작용할 수 있습니다.

2.1. 프로젝트 설정

먼저, Dart 프로젝트를 설정하고 postgres 패키지를 추가합니다.

name: my_postgres_server
dependencies:
  postgres: ^2.3.2

패키지를 설치합니다.

dart pub get

2.2. PostgreSQL 데이터베이스 연결

Dart 코드에서 PostgreSQL 데이터베이스에 연결하는 방법을 살펴보겠습니다.

import 'package:postgres/postgres.dart';

Future<void> main() async {
  final connection = PostgreSQLConnection(
    'localhost', 
    5432, 
    'my_database',
    username: 'user',
    password: 'password',
  );

  await connection.open();
  print('Connected to PostgreSQL database');

  // 데이터 조회 예제
  var results = await connection.query('SELECT name FROM users');
  for (var row in results) {
    print('Name: ${row[0]}');
  }

  await connection.close();
}

이 코드는 PostgreSQL 데이터베이스에 연결하여 users 테이블의 name 컬럼에서 데이터를 조회합니다.

2.3. 데이터베이스 쿼리 및 트랜잭션

데이터를 삽입하거나 업데이트하려면 쿼리를 작성하고 트랜잭션을 처리할 수 있습니다.

Future<void> insertData(PostgreSQLConnection connection) async {
  await connection.query(
    'INSERT INTO users (name, age) VALUES (@name, @age)',
    substitutionValues: {
      'name': 'John Doe',
      'age': 30,
    },
  );
}

Future<void> main() async {
  final connection = PostgreSQLConnection(
    'localhost', 
    5432, 
    'my_database',
    username: 'user',
    password: 'password',
  );

  await connection.open();
  print('Connected to PostgreSQL database');

  await insertData(connection);

  await connection.close();
}

3. MongoDB와 Dart: NoSQL 데이터베이스 설정

MongoDB는 유연한 스키마를 제공하는 NoSQL 데이터베이스입니다. Dart에서 MongoDB를 사용하려면 mongo_dart 패키지를 사용할 수 있습니다.

3.1. 프로젝트 설정

Dart 프로젝트를 설정하고 mongo_dart 패키지를 추가합니다.

name: my_mongodb_server
dependencies:
  mongo_dart: ^0.7.0

패키지를 설치합니다.

dart pub get

3.2. MongoDB 데이터베이스 연결

Dart 코드에서 MongoDB 데이터베이스에 연결하는 방법을 살펴보겠습니다.

import 'package:mongo_dart/mongo_dart.dart';

Future<void> main() async {
  final db = Db('mongodb://localhost:27017/my_database');
  await db.open();
  print('Connected to MongoDB database');

  final collection = db.collection('users');

  // 데이터 삽입 예제
  await collection.insertAll([
    {'name': 'John Doe', 'age': 30},
    {'name': 'Jane Smith', 'age': 25}
  ]);

  // 데이터 조회 예제
  final users = await collection.find().toList();
  for (var user in users) {
    print('User: ${user}');
  }

  await db.close();
}

이 코드는 MongoDB 데이터베이스에 연결하여 users 컬렉션에 데이터를 삽입하고 조회합니다.

3.3. 데이터베이스 쿼리 및 업데이트

MongoDB에서는 쿼리를 작성하고 데이터를 업데이트할 수 있습니다.

Future<void> updateUser(Db db) async {
  final collection = db.collection('users');
  await collection.update(
    where.eq('name', 'John Doe'),
    modify.set('age', 31),
  );
}

Future<void> main() async {
  final db = Db('mongodb://localhost:27017/my_database');
  await db.open();
  print('Connected to MongoDB database');

  await updateUser(db);

  await db.close();
}

4. 서버와 데이터베이스 통합

서버와 데이터베이스를 통합하여 API를 구축할 수 있습니다. Dart의 shelf 패키지를 사용하여 REST API 서버를 구축하고 데이터베이스와 연동할 수 있습니다.

4.1. 서버와 데이터베이스 연동

다음은 간단한 REST API 서버와 PostgreSQL 데이터베이스 연동 예제입니다.

import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as io;
import 'package:postgres/postgres.dart';

Future<Response> handleRequest(Request request) async {
  final connection = PostgreSQLConnection(
    'localhost',
    5432,
    'my_database',
    username: 'user',
    password: 'password',
  );

  await connection.open();
  final results = await connection.query('SELECT name FROM users');
  await connection.close();

  final names = results.map((row) => row[0]).join(', ');
  return Response.ok('Users: $names');
}

void main() async {
  final handler = const Pipeline().addHandler(handleRequest);
  final server = await io.serve(handler, 'localhost', 8080);
  print('Server listening on port ${server.port}');
}

이 코드는 localhost:8080에서 간단한 REST API 서버를 실행하며, PostgreSQL 데이터베이스에서 사용자 이름을 조회하여 응답합니다.

5. 데이터베이스 성능 최적화

데이터베이스의 성능을 최적화하여 서버의 응답 속도를 높일 수 있습니다.

5.1. 인덱스 설정

데이터베이스 쿼리 성능을 향상시키기 위해 인덱스를 설정합니다.

CREATE INDEX idx_user_name ON users(name);

5.2. 쿼리 최적화

복잡한 쿼리를 최적화하여 성능을 향상시킵니다.

쿼리 계획을 분석하고 필요한 경우 쿼리를 리팩토링합니다.

결론

Dart를 사용하여 데이터베이스 서버를 구축하는 방법과 관련된 고급 기술을 살펴보았습니다.

PostgreSQL과 MongoDB를 사용하여 데이터베이스와 연동하고, REST API 서버를 구축하며, 성능 최적화 기법을 적용하는 방법을 알아보았습니다.

이 포스팅이 여러분의 Dart 서버 개발에 도움이 되기를 바랍니다.

궁금한 점이나 추가적인 도움이 필요하시면 댓글로 남겨주세요. 감사합니다!

 

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

 

반응형