« Prev : 1 : 2 : 3 : 4 : 5 : ... 7 : Next »
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 이 작성.

전역 어셈블리 케시(Global Assembly Cache - GAC)에 추가를 해도
Visual Stduio 2008에 참조 추가 대화상자에는 리스트가 바로 나오지 않습니다.
이를 해결하려면 레지스트리를 수정해야 합니다.
수정할 레지스트리 위치는 다음과 같습니다.

32비트 운영체제인 경우
HKEY_LOCAL_MACHINE
  - SOFTWARE
    - Microsoft
      - .NETFramework
        - AssemblyFolders

64비트 운영체제인 경우
HKEY_LOCAL_MACHINE
  - SOFTWARE
    - Wow6432Node
      - Microsoft
        - .NETFramework
          - AssemblyFolders

여기에서 새로운 키를 만들고
이름을 추가할 어셈블리 파일 이름(확장자 dll을 제외하고)과 동일하게 추가하고
키 안에 있는 기본값에 어셈블리의 위치를 입력하면 됩니다.

예를들면 다음과 같습니다.
C:\Program Files (x86)\FirebirdClient 2.0 에 추가할 어셈블리가
FirebirdSql.Data.FirebirdClient.dll 인 경우에

키 이름을 FirebirdSql.Data.FirebirdClient로 하고
기본값을 C:\Program Files (x86)\FirebirdClient 2.0으로 합니다.
사용자 삽입 이미지


비주얼 스튜디오를 종료하고 다시 실행합니다.
참조 추가 다이얼로그에 위에서 추가한 어셈블리가 추가되서 나타나는 것을 알 수 있습니다.


2009/03/20 17:40 2009/03/20 17:40
Sangkle 이 작성.

Vim을 사용할때 입력모드에서 한글을 입력하다가 ESC키를 누르고 명령 모드로 변경하서 명령을 내리기 위해서는 귀찮게시리 다시 영문으로 입력을 바꿔야 합니다. 다른 버전의 Vim에서는 어느정도 이 귀찮음을 해결하는 방법이 있는데, MacVim은 아직까지 이 방법이 안 됩니다. 이유는 일단 MacVim의 IM이 문제가 있기 때문입니다. 고수님들은 소스를 직접 변경해서 사용할 수도 있지만 저처럼 부족한 능력을 가진 사람은 너무나 먼 길입니다.

그래서 이 문제를 해결해 보고자 열심히 이것 저것 해 봤습니다. 그러다가 어설프게나마 해결(?!)을 해서 이렇게 글을 남겨 둡니다.


최근 공개된 MacVim snapshot 40에서는 imdisable 옵션이 기본으로 설정돼 있습니다. 아무래도 문제가 많은가 봅니다. 한글입력 상태에서 imd를 끄고 입력을 하면 맥빔 아이콘 하나가 더 생기고 독(Dock)에서 통통 튀는 좀비 MacVim이 생깁니다. 그래서 이전에도 MacVim에 관한 포스팅을 할 때 imd를 켜는 방법을 설명했습니다. 이전에 OS X를 위한 Vim. MacVim에서 말했지만 imd를 끈 상태가 정상적으로 작동하게 되면 한영 전환의 귀찮음이 쉽게 해결이 됩니다. 그러나! 안 된다는게 아쉽울 따름입니다.

서론이 길어서 죄송합니다.
해결 방법은  한글 입력일 때 ESC를 치면 영문으로 변경해는 AppleScript를 작성하는 것입니다.

우선 AppleScript를 작성해 보겠습니다. AppleScript는 Vi와 같은 텍스트 편집기를 사용하셔도 되지만 스크립트 편집기(Script Editor.app)를 사용하는 것이 편합니다. 그래서 저는 스크립트 편집기를 사용했습니다.

사용자 삽입 이미지

스크립트 에디터에서 위와 같이 입력하시면 됩니다.
간딘히 소스를 설명하자면, 현재 입력기의 상태를 알아보기 위해서 com.apple.HIToolbox 도메인에 AppleSelectedInputSources를 가져와서 content에 저장합니다.

if content contains "hangul" or content contains "korea" then
 ...
end if
이 content에 hangul이나 korea가 있으면 현재 입력 상태가 한글 상태라는 뜻입니다. OS X에 내장된 한글 입력기를 사용하시는 분은 korea가 나타날 것이고 바람 입력기를 사용하시는 분은 hangul이라고 나옵니다. 직접 입력 상태를 바꿔가면서 터미널에서 com.apple.HIToolbox 도메인을 읽어 보시면 알 수 있습니다.

keystroke " " using shift down
 한글 상태이면 시스템에 Shift+스페이스키 이벤트를 전달합니다. 이건 사용하시는 분에 따라 알아서 적당한 키를 쓰시면 됩니다. 영문으로 가게만 하면 됩니다.

AppleScript는 이게 전부입니다. 이 파일을 저장하고 적당한 위치로 이동 시킵니다. 저는 toEng.scpt로 저장하고 /usr/AppleScript라는 곳으로 이동시켰습니다.

이제 MacVim을 설정해 보겠습니다. .gvimrc 파일을 열고 다음을 추가합니다.
inoremap <silent> <ESC> <ESC>:call ToEng()<CR>
function! ToEng()
:silent exe "!osascript /usr/AppleScript/toEng.scpt"
endfunction

이제 맥빔을 시작하시고 테스트를 하면 됩니다. 입력모드에서 한글을 입력하다가 ESC키를 눌러서 명령모드로 빠져나와 보시면 자동으로 영문으로 변경 되는 것을 보실 수 있습니다.

이 방법의 단점은 입력기를 직접 바꾸지 않고 키 입력 이벤트로 처리해서인지, 스크립트여서인지는 모르겠지만 살짝 느린거 같은 느낌을 준다는 것이고, 위와 같은 과정을 해 줘야 하는 번거로움이 있다는 것입니다. 뭐. 그래도 나름 쓸만 하다고 생각합니다. 더 좋은 방법이 있으신 분은 알려주세요~

애플스크립트 파일 :
2008/12/31 07:59 2008/12/31 07:59
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 이 작성.

Leopard와 키패드

2008/11/21 06:20 / 분류없음
 HHKB(해피해킹키보드) Pro 2를 사용하고 있습니다. HHKB Pro 2는 HHKB Lite와는 다르게 화살표 키가 없습니다. 이 키보드에서는 FN키 조합을 사용해서 화살표를 사용해야 합니다. FN 키가 왼쪽에도 있었으면 사용하기 편할텐데 아쉽게도 오른쪽에 하나가 달려 있습니다. 그래서 이 약간의 불편함을 없애기 위해 싸구려 숫자 키패드 하나를 구입했습니다.

문제는 이 키패드가 Leopard에서 작동을 안 하는 겁니다. 그래서 구글링을 열심히 했습니다. 결론은 드라이버가 없는 싸구려라서 맥북용 키 리맵 응용프로그램인 KeyRemap4MacBook을 사용하는 것입니다. KeyRemap4MacBook은 여기에서 다운 받을 수 있습니다.
KeyRemap4MacBook을 써 보셨던 분들은 아시겠지만 이 프로그램도 맥의 제어판인 "시스템환경설정"에 Pane으로 등록됩니다. 설정화면은 아래 그림을 참고하십시오.
 
사용자 삽입 이미지
위와 같이 설정하면 키패드를 사용할 수 있습니다.

조금 버그가 있긴 합니다. 제 키패드는 NumLock키가 달려 있습니다. 대부분 NumLock을 켜면 숫자가 입력되야 하는데 반대로 화살표키로 작동을 하고, 반대로 NumLock을 끄면 숫자키로 작동합니다. 프로그램이 버그인지 키패드가 불량인것인지는 모르겠네요 :-)
2008/11/21 06:20 2008/11/21 06:20
Sangkle 이 작성.

Visual Control Type Notation을 정리한 PDF 문서입니다.
내용은 여기를 참조하였습니다.
2008/11/21 06:00 2008/11/21 06:00
Sangkle 이 작성.

« Prev : 1 : 2 : 3 : 4 : 5 : ... 7 : Next »