PostgreSQL - Perl Interface: A Beginner's Guide

안녕하세요, 미래의 데이터베이스 마법사 여러분! PostgreSQL과 Perl의 세상으로의 흥미로운 여정을 안내해 드리게 되어 기쁩니다. 컴퓨터 과학을 가르쳐온 지 오래된 저는 이 조합이 마치 펜타치와 젤리처럼 잘 어울린다고 말씀드릴 수 있습니다. 그럼 손을 비벼서 시작해 보겠습니다!

PostgreSQL - Perl

설치

데이터베이스 마법을 시작하기 전에 우리의 주방(을) 준비해야 합니다. 걱정하지 마세요, 이 작업은 IKEA 가구 조립보다 쉽습니다!

  1. 먼저 시스템에 PostgreSQL이 설치되어 있는지 확인하세요. 설치되지 않았다면 공식 PostgreSQL 웹사이트로 이동하여 설치 가이드를 따라해 주세요.

  2. 그다음, Perl DBI 모듈과 DBD::Pg 드라이버를 설치해야 합니다. 터미널을 엽니다 و 다음과 같이 입력합니다:

cpan install DBI DBD::Pg

윈도우 사용자는 ppm을 사용해야 할 수 있습니다. 많은 텍스트가 스크롤되는 것을 보고 당황하지 마세요 - 그것은 단지 컴퓨터가 작업을 수행하고 있기 때문입니다!

DBI 인터페이스 API

이제 도구가 준비되었으니, DBI(데이터베이스 인터페이스) API에 대해 이야기해 보겠습니다. 이 것들은 데이터베이스와 소통하기 위해 알아야 할 비밀 손인사입니다.

다음은 가장 일반적으로 사용할 방법들의 표입니다:

메서드 설명
connect() 데이터베이스에 연결합니다
prepare() SQL 문을 준비합니다
execute() 준비된 문을 실행합니다
fetch() 데이터 행을 검색합니다
finish() 문 핸들을 사용을 종료합니다
disconnect() 데이터베이스 연결을 종료합니다

이제 이 것들이 알파벳 스튜프 looks처럼 보일 수 있습니다. 하지만 우리의 예제에서 각각의 방법을 사용할 때, 당신이 이 것들을 마치 좋아하는 이모지만큼 친숙하게 여길 것입니다!

데이터베이스 연결

우선 데이터베이스에 "안녕하세요"라고 말하겠습니다. 이렇게 합니다:

use DBI;

my $dbname = "mydb";
my $host = "localhost";
my $port = "5432";
my $username = "postgres";
my $password = "password";

my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$host;port=$port",
$username,
$password,
{ AutoCommit => 1, RaiseError => 1 });

print "데이터베이스에 성공적으로 연결되었습니다!\n";

이를 분해해 보겠습니다:

  • 우리는 앞서 설치한 DBI 모듈을 사용하고 있습니다.
  • 우리는 연결 세부 정보(데이터베이스 이름, 호스트, 포트, 사용자 이름, 비밀번호)를 설정합니다.
  • connect() 메서드는 연결을 설정합니다.
  • AutoCommit => 1은 우리의 각 데이터베이스 연산이 자동으로 커밋된다는 것을 의미합니다.
  • RaiseError => 1은 오류가 발생하면 Perl이 예외를 발생시킨다는 것을 의미합니다.

이를 실행하고 "데이터베이스에 성공적으로 연결되었습니다!"라는 메시지를 본다면, 자신에게 박수를 주세요!

테이블 생성

이제 연결이 되었으니 테이블을 생성해 보겠습니다. 우리는 간단한 도서관 시스템을 구축하고 있습니다:

my $sql = "CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
publication_year INTEGER
)";

$dbh->do($sql);
print "테이블 'books'이 성공적으로 생성되었습니다!\n";

이 작업에서는 다음이 일어납니다:

  • 우리는 'books' 테이블을 생성하는 SQL 문을 정의합니다.
  • do() 메서드는 SQL 문을 직접 실행합니다.
  • 오류가 발생하지 않으면 테이블이 생성됩니다!

INSERT 연산

우리의 도서관에 몇 권의 책을 추가해 보겠습니다:

my $sth = $dbh->prepare("INSERT INTO books (title, author, publication_year) VALUES (?, ?, ?)");

my @books = (
["The Hitchhiker's Guide to the Galaxy", "Douglas Adams", 1979],
["1984", "George Orwell", 1949],
["To Kill a Mockingbird", "Harper Lee", 1960]
);

foreach my $book (@books) {
$sth->execute(@$book);
}

print "책들이 성공적으로 추가되었습니다!\n";

이 작업의 분해는 다음과 같습니다:

  • 우리는 占位시를 포함한 SQL 문을 준비합니다.
  • 우리는 추가할 책들의 배열을 만듭니다.
  • 우리는 배열을 순회하면서 각 책에 대해 준비된 문을 실행합니다.
  • execute() 메서드는 占位시를 데이터로 채웁니다.

SELECT 연산

이제 도서 목록을 검색해 보겠습니다:

$sth = $dbh->prepare("SELECT * FROM books");
$sth->execute();

while (my $row = $sth->fetchrow_hashref()) {
print "제목: $row->{title}, 저자: $row->{author}, 연도: $row->{publication_year}\n";
}

여기서 일어나는 일은 다음과 같습니다:

  • 우리는 SELECT 문을 준비하고 실행합니다.
  • 우리는 fetchrow_hashref()를 사용하여 각 행을 순회합니다.
  • 우리는 각 책의 세부 정보를 출력합니다.

UPDATE 연산

오류가 발생했습니다. "1984"는 실제로 1948년에 출판되었습니다. 이를 수정해 보겠습니다:

$sth = $dbh->prepare("UPDATE books SET publication_year = ? WHERE title = ?");
$sth->execute(1948, "1984");

print "책이 성공적으로 업데이트되었습니다!\n";

우리가 한 일은 다음과 같습니다:

  • 우리는 占位시를 포함한 UPDATE 문을 준비합니다.
  • 우리는 올바른 연도와 책 제목으로 문을 실행합니다.

DELETE 연산

마지막으로, 데이터베이스에서 책을 제거해 보겠습니다:

$sth = $dbh->prepare("DELETE FROM books WHERE title = ?");
$sth->execute("The Hitchhiker's Guide to the Galaxy");

print "책이 성공적으로 제거되었습니다!\n";

이 작업에서는 다음이 일어납니다:

  • 우리는 占位시를 포함한 DELETE 문을 준비합니다.
  • 우리는 제거하고 싶은 책 제목으로 문을 실행합니다.

이제 PostgreSQL을 사용하여 Perl로 데이터베이스를 상호작용하는 기초를 배웠습니다. 연습이 완벽을 만들어 준다는 것을 기억하고, 이 명령어를 실험해 보지 마세요. 당신이 잠들기 전에 데이터베이스 코드를 작성할 수 있을 것입니다(하지만 이는 추천하지 않습니다 - 키보드는 좋은 베개가 되지 않습니다).

행복하게 코딩하세요, 그리고 당신의 쿼리가 항상 기대하는 결과를 반환하길 바랍니다!

Credits: Image by storyset