database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL News 5814 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5814
나름대로 쓰는 8.0 이야기
작성자
김상기(ioseph)
작성일
2005-01-20 00:54ⓒ
2005-01-26 00:43ⓜ
조회수
10,407

거의 1년을 넘게 준비한 버전이었습니다. 그만큼 많은 기능들이 포함되었으며, 많은 부분들이 개선되었습니다.

 

이 글은 http://www.postgresql.org/docs/8.0/static/release.html#RELEASE-8-0

페이지의 장황하고 기술적인 이야기를 나름대로 쉽게 풀어쓰면서, 한국어 환경에서의 바뀐 점 등을 함께 살펴보는 글입니다.

 

이번 버전에서 새롭게 도입된 부분은 다음과 같습니다.

  1. 마이크로소프트 윈도우즈 기반에서 실행되는 서버
    이전 버전까지는 M$ 계열 OS에서 PostgreSQL 서버를 운영하려면, cygwin 이라는 유닉스 이뮬레이터 패키지를 이용해야했었습니다. 문제는 cygwin 패키지의 fork 방식의 하위 프로세스 만드는 루틴과 그외 여러가지 부분에서 이뮬레이터이기 때문에 발생하는 손실이 많았습니다. 이것은 곧 서버의 성능에 직접적인 영향을 주었고요. 이 부분 때문에, 2004년부터 본격적으로 cygwin 기반을 벗어난 OS에서 제공하는 기본 API로만 움직일 수 있는 서버를 개발하기 시작했습니다. 그 출발점을 MinGW 라는 win32 기반 gcc 컴파일러와 그 계열 패키지인 msys 기반으로 정하게 되었습니다.

    즉, 현재 버전의 소스를 가지고, win32 기반 바이너리 파일을 만드려면, MinGW - msys 기반 환경에서 가능합니다. 현재로써는 vc++이나, bcc 같은 일반적인 컴파일러 환경에서는 불가능합니다.

    win32 포팅이 이번 버전 첫번째 이야기 거리이기는 하지만, 조금 더 깊게 살펴본다면, 아직도 풀어야할 숙제는 많이 남아있습니다. M$ 계열 OS에서는 다중 사용자 환경의 서버를 구현할 때, fork 방식의 하위프로세스를 만드는 방식을 사용하지 않고, 쓰레드 방식을 사용합니다. 이는 하위프로세스를 만드는 비용이 쓰레드를 만드는 비용보다 크기 때문입니다. 그렇기 때문에, M$ OS에서의 서버 프로그램이라 함은 당연히 쓰레드 기반인 것이 일반적인데, 이번 PostgreSQL 8.0 버전은 정통 유닉스에서 사용되는 fork 방식의 하위 프로세스 방식을 사용합니다.

    이것은 다음과 같은 단점들이 있습니다.
    꽤 많은 동시 접속자가 발생했을 때, 서버 성능은 급격히 떨어질 것이다는 - 구체적으로 테스트를 해보질 않은 단지 추측일 뿐입니다. 이부분에 대한 구체적인 벤치마킹이 필요할 듯 싶습니다.
    접속, 연결해제가 동시에 많이 일어날 경우, 멀티 쓰레드 기반환경 보다 많은 OS 자원을 사용할 것이다는 것. 연결 끊김부분에서 하위 프로세스 정리할 때, 분명 자원낭비가 일어날 것입니다.
    이런 문제점들은 멀티쓰레드 기반으로 바뀌지 않는다면, 계속 안고가야할 부분들입니다.
  2. Savepoint 기능
    이 기능은 SQL 명령어 중에, SAVEPOINT 라는 명령어가 새로 등장했다고 이해하면 됩니다. 자세한 것은 이 명령어의 도움말을 살펴보면 되겠지요.

    여기서 간단히 살펴보면, 트랜젝션 안에서 특정 위치(point)를 기억했다가 ROLLBACK TO SAVEPOINT 명령으로 그 저장된 위치 다음부터 지금까지 작업된 모든 것을 무시하고, 그 특정 위치의 상태 값으로 바꾸는 기능을 합니다.
    즉, 트랜젝션 안에서의 undo 기능입니다.
  3. Point-In-Time 복구 기능
    흔히 백업 이야기에서 나오는 변경된 내용만 보관하고 있다가, 최초 전체 백업에서 계속 그 백업 내용들로 최신의 상태로 복구하는 기능입니다.

    이 부분에 대한 이야기는 이곳 tutorials 에서 구체적으로 따로 다루워야할 할 만큼 이야기가 많을 것 같네요. 이부분을 실무에서 직접 사용해 보질 않아서 어떤 장단점이 있는지 언급할 수가 없습니다. 다른 분들의 사용기도 부탁드립니다.

  4. 테이블스페이스
    이 이야기는 이미 tutorials에서 기본적으로 언급했습니다.
    http://database.sarang.net/?inc=read&aid=5759&criteria=pgsql&subcrit=tutorials
    기존 사용자라면, db location의 다른이다는 정도로만 이해하고 넘어가도 될 만큼 포장만 예쁘게된 기능입니다. 이 부분에 대한 진정한 기능 확장은 아마도, 9.x 버전이 넘어가야 되지 않을까싶네요.

    테이블스페이스 이야기만 나오면 늘 아쉽습니다. 아직까지 많이 미흡합니다. 하지만, 일단 SQL 구분이 생겨, 그것으로 물리적인 자료위치를 지정할 수 있는 길이 생겼다는 것으로 만족해야지요.
  5. 버퍼 내부 처리 방식이 개선되었답니다.
    늘 말 많았던 checkpoint 작업과 vacuum 작업에서 서버가 느려졌던 문제를 어느 정도 해소했다고는 하는데, 이 부분에 대한 것은 실무자의 실무환경에서의 소리를 들어봐야지 정확하게 알 수 있을 것 같네요.
  6. ALTER TABLE 명령으로 칼럼의 자료형을 바꿀 수 있습니다.
    RDBMS 개발자 입장에서는 참 자부심이 생길 만한 이야기인데, 실무자 입장에서 본다면, 당연히 되어야할 기능이 이제서야 구현되었습니다. :) varchar -> text 로는 되고, text -> varchar 로는 안되고, 이런 몇몇 상식적인 수준에서 제약점들이 제법 있습니다. 이 부분은 일단 이런 기능이 있다는 것만 기억하고 있다가 실무에서 이런 일이 생기면 그때 해보면서 어떤 것들이 안되는지 기억해 두면 될 것 같네요.
  7. 서버 프로시주얼 언어로 사용되는 plperl 이 완벽하게 바뀌었습니다.
    perl 언어를 자주 쓰는 사용자에게는 반가운 소리입니다. 드디어 plpgsql 언어에서 제공하는 거의 모든 기능을 plperl 에서도 그대로 지원합니다. 제가 perl을 거의 쓰지 않는지라, 실무에서 어떤 문제점들이 있는지 파악된 것이 전혀 없습니다. 이 부분에 대한 구체적인 이야기도 다른 분이 해 주셔야할 듯싶네요.
  8. COPY 명령에서 CSV 파일 포멧을 지원합니다.
    이부분은 M$ 사용자들을 위한 배려인듯. 유닉스 기반에서 늘 사용해 왔던 사람들에게 있어서는 CSV 포멧을 지원한다는 것이 굵직한 뉴스거리가 못되는 듯한데, 아무튼 크게 바뀌는 부분에서 언급하고 있네요. 이 부분도 실무쪽에서는 어떤 문제점이 있는지는 아직 보고된 것이 없습니다.

여기에서 하나 더 추가 되어야하는 부분이 한국어 사용자들을 위한 이야기

  1. OS 공통으로 클라이언트, 서버 프로그램의 각종 메시지를 한글로 볼 수 있습니다.
    소스를 컴파일 해서 사용한다면, configure 명령을 실행 할 때, --enable-nls=ko 옵션을 추가해 주면 되고,
    win32 기반 바이너리를 설치해서 사용한다면, native language support 부분을 체크해 주면 됩니다.

    번역작업은, 번역 들어가기 전에 도와달라고 여러분들에게 꽤 많이 요청을 했으나, 다들 연락이 없어 저 혼자 다 했습니다. :(
    서버 메시지(postgres.mo)만 도저히 저 혼자 힘으로는 불가능해서, 이곳 정재익, 신기배, 이상호님이 도와주셨습니다. 현재 약 80% 번역된 서버 메시지 파일이 사용되고 있으며 나머지는 다음 버전에 마무리 될 듯싶습니다.
    최신 한국어 .po 파일은 http://www.postgresql.or.kr/wiki.php/i18n_ko/PostgreSQL 페이지에서 구하실 수 있습니다.

    이 메시지의 문자셋은 모든 클라이언트는 euc-kr로 서버는 utf-8로 되어있습니다. 서버의 메시지를 한글로 보길 원한다면, postgresql.conf 파일에서 lc_messages 값이 'ko_KR.UTF-8' 이런 형태이고, 이 값은 서버를 실행시킬 당시 쉘의 LANG 값과 동일해야합니다. 물론 OS에 따라서 이 값이 ko.utf8, ko_KR.UTF8, korean_KOREA.utf-8 등 다양할 수 있습니다. 자세한 것은 해당 OS에서의 한국어 utf-8 환경을 어떻게 만드는지 살펴보세요.

    *주의* win32 기반에서는 서버 메시지를 한글로 볼 수는 없습니다. 왜 볼 수 없는가에 대한 이야기는 너무 길어서 여기서는 생략합니다. 아무튼 win32 기반에서의 한글을 제대로 쓰기위한 자세한 설정 이야기는 http://database.sarang.net/?inc=read&aid=5748&criteria=pgsql&subcrit=news
    페이지를 참고하세요.

 

기존 사용자들을 위한 변경 사항들은 다음과 같습니다.

  1. 일단 기존 자료를 새 버전에서 사용하려면, pg_dump 명령을 이용해서 전체 백업 받고, 다시 새 버전에 복구시켜야합니다. 메이져 버전이 틀려지면 늘 그래왔듯이.
  2. 기존 문서의 셋 단락, READ COMMITTED 이야기, STABLE, IMMUTABLE 지정한 함수 이야기, AFTER 트리거 이야기에 대한 부분은 영어를 우리말로 옮기는 실력이 딸려서 포기합니다. 직접 읽으세요. 오역으로 잘못되게 전달하는 것보다 나을 듯.
  3. 이하 쭈~욱 이번에 바뀐 postgresql.conf 파일의 설정값들에 대한 설명을 이야기하는데, 이부분은
    http://database.sarang.net/?inc=read&aid=5766&criteria=pgsql&subcrit=tutorials
    페이지를 참조하세요.
  4. length() 함수가 이제는 char(n)에서 자료 뒷부분에 오는 공백까지 계산하지 않습니다.
  5. bit(n) 함수의 형변환 규칙이 기존과 반대로 작동합니다. bit string 자료형을 사용한 곳이 있다면, 잘 살펴보세요. 새 버전에서 오동작할 여지가 큽니다.
  6. 배열 자료형 처리에 있어 몇가지 버그들과 잘못된 처리 방식등을 보다 엄격하게 바로 잡았습니다. 배열자료형을 쓰는 것이 있다면, 꼼꼼하게 다시 살펴보세요.
  7. 정수형 산술 연산에서 그 결과 값이 overflow 되는 것을 허용하지 않고 오류를 냅니다. - 중요한 부분입니다. 큰 산술 연산이 있는 부분은 반드시 살펴보세요.
  8. 단일바이트 "char" 자료형에 관계된 산술연산이 없어졌습니다.
  9. EXTRACT(YEAR FROM TIMESTAMP ...)에서 BC 일 경우, 해당 년도가 바르게 표현됩니다. - 이부분의 '바르다'는 정책적인 부분인지라, 아무튼 이렇게 바뀌었습니다. 테스트 해보시면 이해 가실겝니다. 실무에서는 별로 쓰일 일이 없는 부분인지라, 테스트 결과는 생략
  10. CIDR 자료형 표현에서 범위를 정할 수 없는 표현은 허용하지 않습니다.
  11. EXECUTE now returns a completion tag that matches the executed statement. <= 뭔 말인지 전혀 감도 못잡고 있음. 설명 부탁드립니다.

  12. psql의 \COPY 명령에서 stdin,stdout,pstdin,pstdout 입출력 방향이 좀 더 다양해 졌다는데, 뭐가 달려졌는지 못느끼겠음. :(

  13. JDBC, TCL 인터페이스 API들은 배포판 소스코드에 빠졌습니다. 각 해당 개발 페이지를 개별적으로 방문해서 최신 소스를 구해야합니다.

  14. 이번 버전부터 timezone 정보를 OS 비의존적으로 독자적으로 계산합니다. 이를 위해서 share/timezone 디렉토리는 지우거나 이동시켜서는 안됩니다.

  15. configure 에서 thread 관련 옵션은 자동으로 처리합니다. 이제 추가안해도 됩니다.

  16. 테이블스페이스 기능이 추가 되면서 initlocation 명령이 없어졌습니다.

  17. 중요한 이야기: libpq에서 호스트를 지정하지 않으면 로컬호스트나, PGHOST 환경 변수에 지정된 호스트로 접속합니다. 여기서 8.0 이전까지는 로컬호스트일 경우, unix domain socket 을 이용했었는데, 이제는 127.0.0.1 tcp/ip 연결을 이용합니다. 아시다시피, 127.0.0.1 연결보다 unix 소켓 연결이 당연히 비용이 적게 들고 빠릅니다. 그래서, 로컬 DB로 연결할 경우 예전에는 그냥 host= 값을 빼면 되었던 것을 이제는 host=/tmp 로 지정하셔야합니다. 이 표현이 /tmp/.s.PGSQL.5432=  소켓파일을 이용해서 DB에 연결하겠다는 소리입니다.

 

이하 상세 릴리즈 정보들에 대한 것은 개별적으로 시간 날 때 틈틈히 읽어보세요. 제법 괜찮은 것들이 많습니다. plpgsql 에서 함수 인자로 이름을 지정할 수 있는 것, 달러($) 기호로 함수 본문을 지정 함으로 작은 따옴표 표기가 한결 간편해 진 것들, 엄청나게 확장된 ALTER TABLE 명령 구문 등등.

 

그외, autovacuum, 서버 로그 관련등도 있습니다. 이부분들에 대한 것은 급한 부분이 아닌지라, 여기서는 생략합니다.

 

-------------

 

이야기가 꽤 길었는데, 아무튼 꽤 오래간 만에 이렇게 길게 릴리즈 이야기를 하네요.

[Top]
No.
제목
작성자
작성일
조회
5860PostgreSQL 8.0.1 Released [1]
김상기
2005-02-01
6623
5852pgEdit 1.0 Released
신기배
2005-01-29
7018
5851EMS PostgreSQL Manager 2.8 Released
신기배
2005-01-29
6311
5814나름대로 쓰는 8.0 이야기
김상기
2005-01-20
10407
5813PostgreSQL 8.0.0 Released [1]
신기배
2005-01-19
7620
5805Announcing PG Lightning Admin for PostgreSQL 8.x (beta)
신기배
2005-01-17
6676
5797Mammoth PostgreSQL Replicator 1.4 released
신기배
2005-01-13
6359
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다