소소한 일상과 잡다한 정보

IT/Dart

Dart_14일차 (PostgreSQL 버전): Dart에서 PostgreSQL 연동 및 데이터 CRUD

pandada 2025. 3. 31. 15:04
반응형

이번에는  PostgreSQL 기준으로 DB 연동 부분을 진행해보자.

( 원래는 MSSQL 부분을 진행하려고 했지만, MAC에서는 제한이 있기 때문에 우선 Dart 코드상으로 테스트를 위해서 포스트그레SQL로 진행해보겠다.. )

PostgreSQL 연동을 위해 postgres 패키지를 사용.

 

✔ 준비 사항

  1. PostgreSQL 설치 완료됨
  2. test_db 데이터베이스 생성
  3. users 테이블 생성:
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

✅ 1. postgres 패키지 설치

📌 pubspec.yaml에 다음 내용 추가:

dependencies:
  postgres: ^2.6.3

📌 터미널에서 설치:

dart pub get

✅ 2. PostgreSQL 연결 코드 (SELECT 예제)

import 'package:postgres/postgres.dart';

void main() async {
  final conn = PostgreSQLConnection(
    "localhost", // 호스트
    5432,        // 포트
    "test_db",   // 데이터베이스 이름
    username: "postgres", // 사용자 이름
    password: "your_password", // 비밀번호
  );

  await conn.open();
  print("✅ PostgreSQL 연결 성공!");

  // SELECT
  List<List<dynamic>> results = await conn.query('SELECT id, name, email FROM users');
  for (final row in results) {
    print("🧑 ID: ${row[0]}, 이름: ${row[1]}, 이메일: ${row[2]}");
  }

  await conn.close();
  print("❌ 연결 종료");
}

 


✅ 3. CRUD 예시 코드

📌 INSERT

await conn.query(
  'INSERT INTO users (name, email) VALUES (@name, @email)',
  substitutionValues: {'name': '홍길동', 'email': 'hong@example.com'},
);
print("✅ 사용자 추가 완료!");

 

📌 UPDATE

await conn.query(
  'UPDATE users SET email = @email WHERE name = @name',
  substitutionValues: {'email': 'new@example.com', 'name': '홍길동'},
);
print("✅ 사용자 이메일 수정 완료!");

📌 DELETE

await conn.query(
  'DELETE FROM users WHERE name = @name',
  substitutionValues: {'name': '홍길동'},
);
print("✅ 사용자 삭제 완료!");

 

이번에는 Main에서  진행하지 말고 코드를 별도의 파일로 분리하여 진행하자.

매번 소스 파일별로 connection 부분이 있을 경우 효율적이지 않기 때문에 효율적인 코드를 위해서 코드를 분리하는 것이 좋다.

구조도 깔끔!


✅ 1. 구조 예시

📁 프로젝트 구조

lib/
├── db_connection.dart    ← 연결 관리용 파일
main.dart                 ← 실제 실행 파일

✅ 2. db_connection.dart 생성

// lib/db_connection.dart
import 'package:postgres/postgres.dart';

class DBConnection {
  static final PostgreSQLConnection _conn = PostgreSQLConnection(
    "localhost",
    5432,
    "test_db",
    username: "postgres",
    password: "your_password",
  );

  static Future<PostgreSQLConnection> open() async {
    if (_conn.isClosed) {
      await _conn.open();
      print("✅ PostgreSQL 연결됨");
    }
    return _conn;
  }

  static Future<void> close() async {
    if (!_conn.isClosed) {
      await _conn.close();
      print("❌ PostgreSQL 연결 종료됨");
    }
  }
}

 


✅ 3. main.dart에서 사용하는 방법

// main.dart
import 'package:your_project/lib/db_connection.dart';

void main() async {
  final conn = await DBConnection.open();

  final results = await conn.query('SELECT name, email FROM users');
  for (final row in results) {
    print("이름: ${row[0]}, 이메일: ${row[1]}");
  }

  await DBConnection.close();
}
📌 your_project 부분은 pubspec.yaml 기준으로 맞게 경로 수정해야함. 샘플 이미지 참고


💡 장점

  • 연결 로직을 여러 파일에서 공통으로 쓸 수 있음
  • open() 과 close()를 통해 연결 제어도 깔끔하게 됨

 이렇게 Dart에서 PostgreSQL 연동 및 데이터 CRUD에 대해서 알아보았다. 추가 적인 내용이 필요한 경우에는 댓글을 요청드리고, 틀린 부분이 있다면 이것 또한 댓글로 알려주시면 수정하도록 하겠습니다!

 

반응형