본문 바로가기
Dart/Dart Server

[중급] Dart 서버 데이터베이스 연동/ ORM(Object-Relational Mapping) 도구 사용법 (Aqueduct ORM 등)

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

 

Dart는 주로 프론트엔드 개발에 많이 사용되지만, 서버 사이드 개발에서도 강력한 기능을 제공합니다.

서버와 데이터베이스를 연동할 때 ORM(Object-Relational Mapping) 도구를 사용하면 데이터베이스 작업을 더 쉽고 효율적으로 처리할 수 있습니다.

이번 블로그에서는 Dart의 Aqueduct ORM을 사용하여 데이터베이스와 연동하는 방법을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.

1. Aqueduct ORM이란?

Aqueduct는 Dart 언어로 작성된 서버 사이드 프레임워크로, ORM 기능을 제공하여 데이터베이스와 객체 간의 매핑을 쉽게 처리할 수 있게 해줍니다.

Aqueduct는 데이터베이스와의 상호작용을 단순화하고, RESTful API를 쉽게 구축할 수 있도록 돕습니다.

2. Aqueduct ORM 설치 및 설정

2.1 Aqueduct 설치

Aqueduct를 사용하려면 먼저 Aqueduct 패키지를 설치해야 합니다. 다음 명령어를 터미널에 입력하여 Aqueduct를 설치합니다.

pub global activate aqueduct

설치가 완료되면 aqueduct 명령어를 사용할 수 있습니다.

2.2 프로젝트 생성

Aqueduct를 사용하여 새로운 프로젝트를 생성합니다.

aqueduct create my_project
cd my_project

위 명령어는 my_project라는 새 Aqueduct 프로젝트를 생성하고, 해당 프로젝트 디렉터리로 이동합니다.

2.3 데이터베이스 설정

프로젝트의 config.yaml 파일을 열어 데이터베이스 설정을 구성합니다. PostgreSQL을 예로 들면 다음과 같습니다.

database:
  host: localhost
  port: 5432
  username: my_user
  password: my_password
  databaseName: my_database
  • host: 데이터베이스 서버 주소
  • port: 포트 번호
  • username: 데이터베이스 사용자 이름
  • password: 데이터베이스 비밀번호
  • databaseName: 데이터베이스 이름

3. Aqueduct ORM 사용하기

3.1 모델 정의

모델은 데이터베이스 테이블과 매핑되는 Dart 클래스를 정의합니다.

예를 들어, User 모델을 정의해 보겠습니다.

 

lib/model/user.dart 파일을 생성하고 다음과 같이 작성합니다.

import 'package:aqueduct/aqueduct.dart';

class User extends ManagedObject<_User> implements _User {}

class _User {
  @primaryKey
  int id;

  String name;
  String email;
}
  • ManagedObject: Aqueduct의 기본 데이터베이스 모델 클래스입니다.
  • @primaryKey: 데이터베이스의 기본 키를 나타냅니다.

3.2 컨트롤러 작성

컨트롤러는 HTTP 요청을 처리하고 데이터베이스와 상호작용하는 역할을 합니다.

 

lib/controller/user_controller.dart 파일을 생성하고 다음과 같이 작성합니다.

import 'package:aqueduct/aqueduct.dart';
import '../model/user.dart';

class UserController extends ResourceController {
  UserController(this.context);
  final ManagedContext context;

  @Operation.get()
  Future<Response> getAllUsers() async {
    final userQuery = Query<User>(context);
    final users = await userQuery.fetch();
    return Response.ok(users);
  }

  @Operation.post()
  Future<Response> createUser() async {
    final user = User()
      ..read(await request.body.decode(), ignore: ["id"]);

    final query = Query<User>(context)
      ..values = user;

    final insertedUser = await query.insert();
    return Response.ok(insertedUser);
  }
}
  • ResourceController: Aqueduct의 기본 컨트롤러 클래스를 상속합니다.
  • context: 데이터베이스와 상호작용할 수 있는 ManagedContext 인스턴스입니다.
  • @Operation.get(): HTTP GET 요청을 처리합니다.
  • @Operation.post(): HTTP POST 요청을 처리합니다.

3.3 라우트 설정

lib/channel.dart 파일을 열어 컨트롤러를 라우트에 등록합니다.

import 'package:aqueduct/aqueduct.dart';
import 'controller/user_controller.dart';

class Channel extends ApplicationChannel {
  ManagedContext context;

  @override
  Future prepare() async {
    final config = AppConfig(options['configFile'] as String, Environment.dev);
    context = ManagedContext(
      ManagedDataModel.fromCurrentMirrorSystem(),
      PostgreSQLPersistentStore.fromConnectionInfo(
        config.dbUsername,
        config.dbPassword,
        config.dbHost,
        config.dbPort,
        config.dbName,
      ),
    );
  }

  @override
  Controller get entryPoint {
    final router = Router();

    router.route('/users').link(() => UserController(context));

    return router;
  }
}
  • Router: Aqueduct의 라우팅 기능을 제공합니다.
  • router.route('/users'): /users 경로에 UserController를 연결합니다.

4. 애플리케이션 실행 및 테스트

애플리케이션을 실행하려면 다음 명령어를 입력합니다.

aqueduct db upgrade
aqueduct serve
  • aqueduct db upgrade: 데이터베이스 스키마를 최신 상태로 업데이트합니다.
  • aqueduct serve: 서버를 시작합니다.

서버가 시작되면, http://localhost:8888/users 경로에서 사용자 데이터를 조회하거나 추가할 수 있습니다.

 

Dart에서 Aqueduct ORM을 사용하면 데이터베이스와의 상호작용을 쉽게 처리할 수 있습니다.

Aqueduct는 데이터베이스 모델을 정의하고, 컨트롤러를 통해 HTTP 요청을 처리하며, 라우팅을 통해 API 엔드포인트를 설정할 수 있도록 도와줍니다.

이 블로그가 Dart에서 Aqueduct ORM을 사용하는 데 도움이 되었기를 바랍니다.

추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!

 

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

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
반응형