본문 바로가기
Dart/Dart Server

[중급] Dart 서버 데이터베이스 연동/ 간단한 데이터 모델링 및 쿼리 작성

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

 

Dart를 사용한 서버 사이드 개발에서는 데이터베이스와의 연동이 중요합니다.

이 블로그에서는 간단한 데이터 모델링과 쿼리 작성 방법을 소개하여 데이터베이스와 상호작용하는 기본적인 방법을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.

1. 데이터 모델링이란?

데이터 모델링은 데이터베이스의 구조를 설계하는 과정입니다.

데이터 모델링을 통해 데이터베이스에 저장될 데이터의 형식과 관계를 정의할 수 있습니다. Dart에서 데이터 모델링을 할 때는 데이터베이스 테이블과 매핑되는 클래스를 정의합니다.

2. Dart에서 데이터베이스와 연결하기

Dart에서는 다양한 패키지를 사용하여 데이터베이스와 연결할 수 있습니다. 이번 예제에서는 PostgreSQL을 사용하여 데이터베이스와 연결하는 방법을 설명하겠습니다.

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

2.1 패키지 설치

먼저 pubspec.yaml 파일에 postgres 패키지를 추가합니다.

dependencies:
  postgres: ^2.5.0

터미널에서 다음 명령어를 실행하여 패키지를 설치합니다.

pub get

2.2 데이터베이스 연결

PostgreSQL에 연결하기 위해 다음과 같은 코드를 작성합니다.

import 'package:postgres/postgres.dart';

Future<void> main() async {
  // PostgreSQL 데이터베이스 연결
  final connection = PostgreSQLConnection(
    'localhost', // 데이터베이스 서버 주소
    5432,        // 포트 번호
    'my_database', // 데이터베이스 이름
    username: 'my_user',  // 사용자 이름
    password: 'my_password' // 비밀번호
  );

  // 연결
  await connection.open();
  print('Connected to database');

  // 데이터베이스 작업을 여기에 추가

  // 연결 종료
  await connection.close();
}
  • PostgreSQLConnection
    PostgreSQL 데이터베이스와 연결하는 클래스입니다. 서버 주소, 포트 번호, 데이터베이스 이름, 사용자 이름, 비밀번호를 입력합니다.
  • connection.open()
    데이터베이스에 연결합니다.
  • connection.close()
    데이터베이스 연결을 종료합니다.

3. 간단한 데이터 모델링

3.1 모델 정의

데이터 모델링의 첫 번째 단계는 데이터베이스 테이블에 해당하는 Dart 클래스를 정의하는 것입니다.

예를 들어, 사용자 정보를 저장하는 User 모델을 정의해 보겠습니다.

class User {
  int id;
  String name;
  String email;

  User({this.id, this.name, this.email});

  // 객체를 데이터베이스에 삽입하기 위한 메서드
  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
      'email': email,
    };
  }

  // 데이터베이스에서 가져온 데이터를 객체로 변환하기 위한 메서드
  User.fromMap(Map<String, dynamic> map) {
    id = map['id'];
    name = map['name'];
    email = map['email'];
  }
}
  • User 클래스는 사용자 정보를 저장합니다.
  • toMap() 메서드는 객체를 데이터베이스에 삽입하기 위해 맵 형태로 변환합니다.
  • fromMap() 메서드는 데이터베이스에서 가져온 데이터를 객체로 변환합니다.

4. 데이터베이스 쿼리 작성

4.1 데이터 삽입

다음은 User 객체를 데이터베이스에 삽입하는 예제입니다.

Future<void> insertUser(PostgreSQLConnection connection, User user) async {
  await connection.query(
    'INSERT INTO users (name, email) VALUES (@name, @email)',
    substitutionValues: {
      'name': user.name,
      'email': user.email
    }
  );
  print('User inserted');
}
  • connection.query(): SQL 쿼리를 실행합니다. substitutionValues를 사용하여 쿼리에 변수를 삽입합니다.

4.2 데이터 조회

다음은 데이터베이스에서 사용자 정보를 조회하는 예제입니다.

Future<List<User>> getUsers(PostgreSQLConnection connection) async {
  final results = await connection.query('SELECT * FROM users');
  List<User> users = [];
  
  for (final row in results) {
    users.add(User.fromMap({
      'id': row[0],
      'name': row[1],
      'email': row[2]
    }));
  }
  
  return users;
}
  • connection.query('SELECT * FROM users'): 모든 사용자 정보를 조회하는 쿼리입니다.
  • User.fromMap(): 데이터베이스에서 가져온 데이터를 User 객체로 변환합니다.

5. 전체 예제 코드

전체 예제를 통합하면 다음과 같습니다.

import 'package:postgres/postgres.dart';

class User {
  int id;
  String name;
  String email;

  User({this.id, this.name, this.email});

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
      'email': email,
    };
  }

  User.fromMap(Map<String, dynamic> map) {
    id = map['id'];
    name = map['name'];
    email = map['email'];
  }
}

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

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

  // 데이터 삽입
  final user = User(name: 'Alice', email: 'alice@example.com');
  await connection.query(
    'INSERT INTO users (name, email) VALUES (@name, @email)',
    substitutionValues: {
      'name': user.name,
      'email': user.email
    }
  );
  print('User inserted');

  // 데이터 조회
  final results = await connection.query('SELECT * FROM users');
  for (final row in results) {
    final user = User.fromMap({
      'id': row[0],
      'name': row[1],
      'email': row[2]
    });
    print('User: ${user.id}, ${user.name}, ${user.email}');
  }

  await connection.close();
}

 

Dart에서 데이터베이스와 연동하여 간단한 데이터 모델링과 쿼리 작성하는 방법을 살펴보았습니다.

데이터베이스 모델을 정의하고, SQL 쿼리를 사용하여 데이터를 삽입하고 조회하는 기본적인 과정을 통해 Dart에서 데이터베이스 작업을 쉽게 처리할 수 있습니다.

 

이 블로그가 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

 

 

728x90
반응형