ADO.NET에는 기본적으로 SQL Server, Oracle, OLE DB, ODBC를 위한 데이터 공급자(Data Provider)를 제공하고 있습니다. 불행하게도 여기에는 PostgreSQL을 위한 데이터 공급자는 없습니다. PostgreSQL을 사용하려면 선택을 해야합니다. 기본으로 제공되는 ODBC 또는 OLE DB를 통해 연결을 하는 방법과 이 글에서 설명할 PostgreSQL을 위한 데이터 공급자를 사용하는 것입니다.

PostgreSQL을 위한 데이터 공급자는 상용으로도 판매되고 있습니다. 구글에서 "Data Provider for PostgreSQL"로 검색을 하시면 여러가지 제품을 보실 수 있습니다. 이 글에서는 무료로 사용할 수 있는 Npgsql을 사용합니다. (라이선스에 대한 자세한 내용은 여기에서 확인하세요)

Npgsql 홈페이지를 방문하면 알 수 있지만 100% C#으로 쓰여졌다고 합니다. 소스도 공개돼 있으니 참고하실 분은 참고하세요. 한가지 아쉬운 점은 지금까지는 DDEX를 제공하지 않기 때문에 몇가지 안 되는 기능들이 있습니다. DDEX는 쉽게 말하자면 Visual Studio에서 코딩할 때(Design Time) 사용할 수 있는 기능을 제공하는 것을 말합니다. 자세한 내용은 MSDN 페이지에서 잘 살펴 보세요.

Npgsql 을 사용하기 위해서 필요한 파일을 다운로드 합니다. 다운로드는 여기에서 할 수 있습니다. 여기서는 Npgsql2.0.4-bin-ms.net3.5.zip을 사용하겠습니다. 다운로드한 파일을 적당한 곳에 압축을 풉니다. C:\PostgreSQL\Npgsql2.0.4-bin-ms.net3.5에 풀었다고 생각하고 설명하겠습니다.

압축을 풀었으면 GAC(Global Assembly Cache)에 등록을 해야합니다. Visual Studio 메뉴에 있는 "Visual Studio 2008 명령 프롬프트"에서 압축을 푼 곳에 있는 bin 디렉토리로 이동한 후에 다음 명령을 입력합니다.
gacutil -i Npgsql.dll
설치는 여기까지 입니다.

이제 잘 되는지 테스트 해 보겠습니다. Visual Studio를 실행합니다. 새로운 콘솔 응용 프로그램을 작성합니다. 솔루션 탐색기에서 참조를 추가합니다. 참조 추가 대화상자의 찾아보기 탭에서 위에서 압축을 푼 디렉토리에 있는 bin 폴더로 이동하고 Npgsql.dll 파일을 선택하고 확인 버튼을 클릭합니다.
사용자 삽입 이미지
 참조에 Npgsql이 추가 되어 있는 것을 볼 수 있습니다.
사용자 삽입 이미지
참고로 위 참고 추가 대화상자에 .NET 탭에서 Npgsql을 볼 수 있으려면 C# 참조 추가 다이얼로그에 추가하기를 보시기 바랍니다. 한번 등록하면 새로운 프로젝트마다 매번 Npgsql.dll 위치를 찾아가지 않아도 쉽게 참조를 추가할 수 있습니다.

아래 코드를 입력합니다.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Npgsql;

namespace SangkleTestNpgsql

{

class Program

{

static void Main(string[] args)

{

NpgsqlConnectionStringBuilder csb = new NpgsqlConnectionStringBuilder();

csb.UserName = "로그인 롤 이름(아이디)";

csb.Password = "비밀번호";

csb.Host = "PostgreSQL 서버가 설치된 서버의 IP 또는 이름";

csb.Database = "데이터 베이스 이름";

csb.Port = 5432;

Console.WriteLine("ConnectionString : {0}", csb.ToString());

NpgsqlConnection conn = new NpgsqlConnection(csb.ToString());

conn.Open();

NpgsqlCommand cmd = new NpgsqlCommand("Select Version();", conn);

Console.WriteLine("PostgreSQL Version : {0}", cmd.ExecuteScalar());

conn.Close();

Console.ReadKey();

}

}

}


알고 계시겠지만 위 코드에서 UserName, Password, Host, Database, Port 값은 자신의 환경에 맞게 설정 하셔야 합니다. 코드에서 using Npgsql;에서 Npgsql이 Npgsql을 위한 네임스페이스입니다. NpgsqlConnectionStringBuilder나 NpgsqlConnection에서 알 수 있듯이 Npgsql은 Npgsql을 접두어로 사용하고 있습니다.

Npgsql에 대한 자세한 내용은 Npgsql 홈페이지, Npgsql 문서 페이지다운로드 페이지에 있는 CHM 파일을 참고하세요.
2009/03/23 05:07 2009/03/23 05:07
Sangkle 이 작성.

OSX에서 Servlet/JSP 개발 환경 만들기
  1. Tomcat 설치
  2. Eclipse 설치
  3. PostreSQL 설치

3. PostgreSQL 설치

  왜 MySQL이 아니고 PostgreSQL 이냐고 하시는 분들은 MySQL 설치하시면 되겠습니다. 별 다른 이유는 없습니다. 그냥 어색한(?) DB를 사용하고 싶을 뿐입니다.

 PostgreSQL을 설치하는 방법은 직접 소스를 다운 받아서 컴파일 하는 방법 Port를 이용해여 다운 받고 설치하는 방법 컴파일된 바이너리를 설치하는 방법이 있습니다. 여기서는 가장 쉬운 방법인 컴파일된 바이너리를 내려 받아서 설치했습니다. 그래서 다운 받는 곳과 간단한 설치 화면만 보여 드리겠습니다.

 PostgreSQL 설치 바이너리는 구글에서 검색을 하면 여러(?) 곳에서 만들고 있습니다. 저는 개인적으로 인스톨러까지 갖춰져 있고 나름 관리가 잘 되는 듯한 곳인 EnterpriseDB 라는 곳에서 다운로드하고 설치하여 사용합니다. 이 페이지에서 다운로드 할 수 있습니다. 알고 계시겠지만 Mac OS X용으로 다운로드 받으세요. 제가 설치한 버전은 8.3.5-2 버전으로 다운로드한 파일은 파일명이 postgresql-8.3.5-2-osx.dmg인 이미지 파일입니다. 이 이미지를 마운트 하면 설치 파일이 있습니다. 이 파일로 PostgreSQL을 설치하면 되겠습니다.

사용자 삽입 이미지

인스톨러를 실행하면 위 그림과 같은 설치 화면이 나타납니다. Shared memory에 대한 설정이 없다고 리부팅하라는 메시지가 나타나기도 합니다. 하라는대로 리부팅하고 다시 인스톨러를 실행하면 설치가 됩니다.

 설치 프로그램에서는 특별히 설정할것이 없기 때문에속 해서 Next 버튼을 누르시면 됩니다. 단, 중간에 설치할 경로가 나타나는데, 다른 곳에 설치하시려면 변경하면 되겠습니다. PostgreSQL 설치가 끝나면 Stack Builder라는 것을 설치할 것인지 물어봅니다. 이 Stack Builder에는 다양한 PostgreSQL관련 응용/웹 프로그램, 데이터베이스 드라이버 등을 쉽게 다운로드 받고 설치할 수 있습니다. 우리의 주 목적이 JSP에서 사용하기 위해서 설치하는 것이기 때문에 JDBC가 필요합니다. 그래서 Yes를 선택해서 StackBuilder 설치를 시작합니다. 설치 화면은 아래 그림과 같고 저는 Database Drivers에서 pgJDBC v8.3.603을 체크했습니다. 

사용자 삽입 이미지

Next 버튼을 클릭하면 선택한 각각의 설치 프로그램을 다운 받고, (이 경우에는 JDBC 드라이버만 다운을 받겠지요) 설치 프로그램을 시작합니다.

사용자 삽입 이미지

위 그림은 JDBC 드라이버 설치 화면입니다. Next를 클릭하면 JDBC를 설치할 경로를 설정하는 화면이 나타납니다. 여기서 Next버튼을 누르면 JDBC를 설치하게 됩니다.
 이제 PostgreSQL 설치가 끝났습니다. Finder를 열고, 응용 프로그램에 보시면 PostgreSQL 8.3 폴더와 PostgreSQL 폴더가 만들어져 있습니다. PostgreSQL 폴더에는 PostgreSQL JDBC Driver 홈페이지로 가는 링크 파일만 있고 PostgreSQL 8.3 폴더에 몇가지 응용 프로그램이 설치된 것을 볼 수 있습니다. 

  •  Application Stack Builder는 위에서 살펴본거 처럼 추가 프로그램의 설치를 도와주는 프로그램입니다. 실행하시면 위에서 Stack Builder를 수행했을 때와 동일한 과정을 다시 할 수 있습니다.
  •  pgAdmin III는 PostgreSQL의 GUI 클라이언트 프로그램이라고 생각하시면 됩니다. 데이터베이스를 관리 할 수도 있고 로그인할 사용자를 관리하거나 PostgreSQL 전반적인 기능을 수행할 수 있습니다. 
  • Restart Server, Start Server, Stop Server는 말그대로 PostgreSQL서버를 재시작하고, 시작하고, 중단 시키는 프로그램(스크립트 실행)입니다. 
  • SQL Shell (psql)은 터미널에서 psql을 시작하게 해 줍니다.

 이제 설치도 끝났고 마지막으로 JDBC가 잘 설치 됐는지를 확인하겠습니다.
이를 위해서 Eclipse에서 PostgreSQL에 연결해서 간단한 쿼리문을 실행하는 간단한 테스트 프로그램을 만들어서 수행해 보겠습니다. 이 예제에서는 sangkle이라는 Database를 사용하고, 로그인 롤로 sangkle 이라는 사용자를 사용합니다.

 예제 프로그램을 위한 간단한 테이블을 만들어 보겠습니다. 예제에서 사용할 테이블은 mytable이고 이름(name)과 나이(age) 컬럼을 가지고 있습니다. 그리고 예제를 위해서 세개의 레코드를 삽입합니다.


CREATE TABLE mytable ( 
	name varchar(80) PRIMARY KEY,
	age int 
); 
INSERT INTO mytable (name, age) VALUES ('홍길동', 34);
INSERT INTO mytable (name, age) VALUES ('영구', 44);
INSERT INTO mytable (name, age) VALUES ('맹구', 32);

이클립스를 실행하고 새로운 프로젝트를 생성합니다. JDBC 드라이버를 사용하기 위해서 프로젝트의 Build Path에 JDBC 드라이버 파일(jar)를 추가합니다. 위 JDBC 드라이버 설치 프로그램으로 설치했으면 /Library/PostgreSQL/pgJDBC에  PostgreSQL를 위한 JDBC 드라이버 파일들이 있습니다.
JDK 버전에 맞는 드라이버 파일을 추가합니다. (JDK 버전에 따른 PostgreSQL JDBC 드라이버 파일은 PostgreSQL JDBC 홈페이지에서 확인할 수 있습니다.) OS X에 기본으로 설치된 Java의 버전이 1.5이기 때문에 이 예제에서는 postgresql-8.3-603.jdbc3.jar을 선택했습니다.
그리고 이 프로젝트에 다음과 같은 클래스 하나를 추가합니다.


import java.sql.*;
public class ConnectToPostgreSQL {
	public static void testPg() {
		Connection conn;
		
		try{
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException cnfe){
			System.out.println("JDBC driver를 찾을 수 없습니다.");
			System.exit(1);
		}
		try {
			conn = DriverManager.getConnection
					("jdbc:postgresql://localhost/sangkle", "sangkle", "비밀번호");
		
			Statement st = conn.createStatement();
			ResultSet rs = st.executeQuery("Select * From mytable");
			while(rs.next()) {
				System.out.printf("Name : %s , Age : %d\n", rs.getString(1), rs.getInt(2));
			}
			rs.close();
			st.close();
			conn.close();
		} catch (SQLException sqle) {
			 System.out.println("연결할 수 없습니다.");
			 System.out.println(sqle.toString());
			 System.exit(1);
		}
	}
	
	public static void main(String args[]) {
		ConnectToPostgreSQL.testPg();
	}
}

위 코드 14행에 데이터베이스명, 사용자 ID, 비밀번호는 알맞게 수정하시기 바랍니다. 위에서 설명했지만 이 예제에서는 데이터베이스 명이 sangkle이고 사용자도 sangkle을 사용합니다.
이 코드를 수행하면 다은과 같은 결과가 나타납니다.


Name : 홍길동 , Age : 34
Name : 영구 , Age : 44
Name : 맹구 , Age : 32
2008/12/16 02:31 2008/12/16 02:31
Sangkle 이 작성.