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.
'Dart > Dart Server' 카테고리의 다른 글
[중급] Dart 서버 비동기 프로그래밍 심화 / 비동기 API 호출 처리 및 병렬 작업 관리 (0) | 2024.09.11 |
---|---|
[중급] Dart 서버 비동기 프로그래밍 심화/ Dart의 비동기 프로그래밍 심화 개념 (async/await, Future) (0) | 2024.09.11 |
[중급] Dart 서버 데이터베이스 연동/ ORM(Object-Relational Mapping) 도구 사용법 (Aqueduct ORM 등) (0) | 2024.09.11 |
[중급] Dart 서버 데이터베이스 연동/ Dart와 관계형 데이터베이스 연결 (PostgreSQL, MySQL 등) (0) | 2024.09.11 |
[중급] Dart 서버 프레임워크 이해하기/ 프레임워크를 이용한 구조화된 서버 개발 (2) | 2024.09.09 |