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 Columns 5187 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5187
PostgreSQL vs MySQL
작성자
정재익(advance)
작성일
2004-02-04 01:10
조회수
50,839

오픈소스 데이터베이스의 양대산맥 MySQL vs PostgreSQL
작성일: 2003/03/25
토픽: Developer's Guide


박훈성 | hspark@hancom.com
김정웅 | jwkim@desk.hancom.com

이 글은 오픈소스 데이터베이스의 양대산맥으로 불리는 MySQL과 PosGSQL에 관해 다룬 글이다.
인터넷의 발전 속에서 오픈소스는 기술의 평준화에 분명히 기여하고 있다. 그 안에 MySQL이라는 DBMS가 있으며, 점점 사용자를 늘려가고 있다. MySQL은 사용자 관리, 게시판 등의 빠른 속도를 요하는 곳에서는 충분한 강점을 가지고 있다. 반면에 PostgreSQL(PGSQL)은 좀더 DBMS 본연의 기능에 충실한 제품으로, 두 제품에 대한 특징을 가지고 각 업무에 적합하게 적용하면 될 것이다. PGSQL은 데이터베이스에 많은 작업을 적용하고 싶을 때, 혹은 데이터베이스 자체를 공부하고 싶은 사람들에게 적합한 제품이라면, MySQL은 빠른 속도를 요하는 곳에서 적합한 제품이라고 볼 수 있다.

MySQL

MySQL에 대해 알고 싶은가? 그럼 이글을 읽어보자.
MySQL은 1995년 마이클 몬티 위데니우스와 데이비드 애스마크 두 사람과 알랜 라르슨이 도와 시작되었고, 저가로서 최상의 소프트웨어를 제공하기위해 개발되었다. 또한 2001년에 MySQL AB가 설립되면서 마르텐 미코스가 CEO로서 합류했다. 이렇게 시작된 MySQL은 자유소프트웨어의 대표적인 소프트웨어가 되었으며. 현재는 가장 유명한 오픈소스데이터베이스가 되었다.

MySQL 데이터베이스는 최고의 속도와 유연성으로 디자인되었고, 단일 모듈디자인으로 인해 사용하기 쉽고 빠르다. MySQL의 내부구조는 웹과 비즈니스에 없어서는 안 될 트랜젝션(transaction)이나 하위레벨 로킹(low-level locking)과 같은 애플리케이션들을 위해 가장 중요한 요소들을 포함하고 있다. 대규모 데이터셋(dataset)과 다양한 프로그래밍 언어 및 대부분의 하드웨어 플랫폼을 지원하며 수백만의 오픈소스 커뮤니티가 현업에 적용하여 엄격하게 테스트되어 왔기 때문에 사실상 버그가 없다고 할 수 있다.

MySQL의 사용범위는 웹 데이터베이스, 전자상거래, 데이터 웨어하우징, 로깅 프로그램과 분산 프로그램 등 다양하다. 또한 서드파티 소프트웨어와 다른 기술들에 포함되어 사용이 점점 늘어나고 있다. MySQL은 GPL(General Public License)를 채용하여 무료 사용가능하며, GPL에 구애받지 않고자 하는 상용제품을 개발하고자 하는 사용자를 위해 상용버전으로 구입이 가능하다. 많이 듣는 얘기겠지만 자세한 내용은 GPL을 살펴보기 바란다. 테이블 핸들러와 코어서버의 독특한 독립적 구조로, 엄격한 트랜젝션 컨트롤 하에서 엄청나게 빠른 디스크 접근 속도로 동작하는 것이 가능하다.

1. MySQL

1.1 기능성
1.1.1 MySQL은 다음과 같은 기술에 대해 API를 가지고 있다.
ADA
C / C
Common Lisp
Delphi
Dylan
Guile
MathLab
PHP
Pike
Python
TCL
ODBC
JDBC
기타 등등..
* 참고: C API (http://www.mysql.com/documentation/mysql /index.html)

1.1.2 MySQL이 지원하는 Storage Engine을 알아보자.
- MyISAM 기존 ISAM을 대치하는 새로운 Storage Engine으로 static,dynamic과 compressed (read-only) row 포맷을 지원한다. 그러나 트랜잭션은 지원하지 않는다. Text와 compressed index를 지원 Data와 index의 파일이 분리되어 있다. 매우 빠른 읽기/쓰기 성능을 가지고 있으나 낮은 읽기/쓰기 동기성(concurrency)을 갖는다. Log와 같은 select 와 insert에서는 매우 훌륭한 동기화(concurrency)를 갖는다. 체크 및 복구 프로그램으로 myisamchk 가 있다. 특히 웹사이트와 logging 처리에 우수하다.

- InnoDB
InnoBase Oy로부터 활발하게 개발된 코드이다. row level locking과 함께 완벽한 트랜잭션(ACID) 처리가 된다. 같은 테이블에서 읽기/쓰기에 대해 MyISAM보다 좋은 동기화(concurrency) 처리를 한다.

무결성(consistency) 읽기를 수행한다(Oracle-style MVCC). 개개의 파일에 적재되는 것이 아니라 tablespace를 사용한다. MySQL AB가 제작자/개발자로서 계약을 통해 지원을 제공한다. MySQL 4와 MySQL Max에 포함되어 있다. 과부하상태에서도 안정적인 동작을 수행한다.

- Merge
MySQL AB가 개발한 하나의 테이블과처럼 사용되는 MyISAM 같은 테이블 모음(collection)이다. 어떤 테이블들은 압축(compressed) 되어 사용할 수 있다. ALTER TABLE로 테이블의 설정을 변경할 수 있으며, Insert/Delete/Update/Select 가 사용가능하다. Logging 시스템 제작에 매우 유용하다.

- In-Memory Hash Tables
메모리에서 동작하는 Hash 기반의 인덱싱 테이블이다. Insert/Delete/Update/Select가 사용가능하며, Temporary table 이나 Lookup table에 유용하다. 제한적이며 특수화되었다.

- BerkeleyDB
Sleepycat Software Inc에서 개발되고 지원된다. Page level locking으로 완벽한 트랜잭션(ACID)을 지원한다. 같은 테이블에 읽기/쓰기를 할 경우에 MyISAM보다 좋은 동기화(concurrency)를 지원한다. Primary key 찾는데 MyISAM 보다 빠르다. 테이블당 하나의 파일에 데이터와 인덱스가 저장된다. 바이너리로 제공되는 MySQL Max 에 포함되어 있다. 보다 낮은 레벨에서 MySQL과 독립적으로 동작한다.

1.1.3 Replication 기술
하나의 Master가 업데이트되는 데이터의 SQL 명령어를 기록하여 가지고 있는 기술. Slave들은 업데이트를 읽거나 재수행하기 위해 master나 다른 slave에 접속한다. MySQL 4.0에서 slave는 모든 질의를 읽기위한 쓰레드와 실제 업데이트를 수행하는 것 두개의 쓰레드를 사용한다. Slave가 오랜 질의를 수행하는 동안 master가 다운되더라도 모든 slave가 완벽한 데이터를 갖도록 보장한다.

1.1.4 MySQL Control Center
MySql의 클라이언트로 MySQL Control Center가 있다. GPL 라이선스로 제공되는 Control Center는 Qt library로 제작되어 DB 관리기능을 GUI로 작업할 수 있다. 쿼리문을 하일라이팅하여 보여주며, 테이블의 데이터를 직접 수정가능하며, 로컬과 리모트 서버관리를 동시에 제공한다. 콘솔명령이 익숙하지 않은 사용자가 사용하기 매우 편리하게 되어 있다.


화면1 MySQL Control Center

1.1.5 MySQL Connector drivers
MySQL은 다음과 같은 고성능의 서버연결 드라이버들을 제공한다.

1) MySQL Connector/J: JDBC-3.0 API를 지원하는 Type4 JDBC 드라이버이다.
2) MySQL Connector/ODBC: MyODBC라고 하며, ODBC API를 지원한다.
* 참고: http://www.mysql.com/downloads/api-myodbc-3.51.html
3) MySQL Connector/C : Standard C template libraries (STL)로 제공된다.

1.1.6 MySQL의 성능 Benchmark
1) Throughput
2002년 2월 eWeek의 Benchmark Test에 의하면 Oracle과 MySQL이 1000명의 동시접속 사용자환경에서 최고의 성능을 보인다고 보고된 적이 있다.


그림1

2) Response Time
Oracle9i Enterprise 와 MySQL이 가장 빠른 응답속도를 내고 있다.


그림2

데이터베이스의 Banchmark는 시스템의 사양과 질의 내용 및 적용환경에 따라 매우 다르게 반영될 수 있음을 상기하자. 위의 벤치마크는 일반적인 질의 환경과 SMP 서버에서의 결과이다.
* 참고: http://www.mysql.com/information/benchmarks.html

3) Connection에 사용되는 메모리 사용률

Database Concurrent connection 당 메모리 사용량
Oracle9i 400kB
DB2 117kB
MySQL4.0.1 50kB
MSSQL 50kB
ASE 50kB

1.2 안정성
MySQL AB는 MySQL 사용을 고려하고 있는 수많은 사용자들에게 다음과 같은 안정성에 대한 등급 기준을 제공한다.

Replication -- Gamma

Repllication을 사용하는 대규모 서버 클러스터로 사용될 경우 좋은 결과를 보이고 있으며, MySQL 4.x에서 계속 향상되고 있다.

InnoDB tables -- Stable (in 3.23 from 3.23.49)

3.23.49버전부터 대규모와 과중한 로드가 필요한 시스템에서 안정성을 보장한다.

BDB tables -- Gamma

Berkeley DB 코드는 매우 안정적이다. MySQL AB는 MySQL 서버의 엔진 인터페이스를 게속 향상시켜가고 있다. 다른 안정적인 테이블 포맷과같이 완전히 테스테되어지기 까지 시간이 필요할 것이다.

FULLTEXT -- Beta

Full-text 검색은 잘 동작한다. 하지만 아직은 폭넓게 사용되어지지 않고 있으며, MySQL 4.0에서 향상되어져 왔다.

MyODBC 2.50 (uses ODBC SDK 2.5) -- Gamma

폭넓게 사용되며, ODBC 드라이버에 독립적인 데이터베이스 응용프로그램에 폭넓게 사용되며 향상되고 있다.

Automatic recovery of MyISAM tables -- Gamma

MyISAM 엔진에서 테이블이 사용된 뒤 정상적으로 닫혔을 경우 자동으로 체크하고 회복하는 하는 기능이 정상적으로 동작하지 않았을 경우에 복구한다.

Bulk-insert -- Alpha

MySQL 4.0의 MyISAM 테이블에서 고속으로 대량의 데이타 INSERT를 한다.

Locking -- Gamma

파일 기술자(file dsceripter)를 조작하는 시스템 기본 함수(fcntl())를 사용하여 매우 시스템에 의존성이 높은 기능이다. NFS를 사용하는 일부 시스템의 경우 mysqld 실행시 --skip-external-locking 옵션을 주어 실행할 것을 권고 하고 있다.

이상으로 보는 바와 같이 주요기능에 대해 안정성을 alpha, beta, gamma, stable 순의 기준을 제공하며, MySQL의 대부분 기술이 InnoDB 엔진의 stable을 포함하여 Gamma 이상의 안정성을 보이고 있다.

1.3 확장성

다양한 기업 IT환경에 사용되는 거의 모든 시스템에 이식이 가능하다.

Native Threads(Multi CPU)
Sun Solaris 2.5 
Linux(All arch's)
HP UX11 
IBM AIX4 
Apple MacOS X
DEC (Tru64) UNIX
BSDI3 
FreeBSD3 
IBM OS/2
SCO Unixware7
SGI Irix 6.x
Windows95,98,NT,2k,XP
Emulated threads(Single CPU)
BSDI2.x
FreeBSD 2.x
HP HPUX 10.20
NetBSD Intel/Alpha
OpenBSD 2.x
Sun SunOS4
SCO Openserver
AmigaOS
Future: QNX&Novell

2. 앞으로의 발전방향

MySQL의 개발자들은 기능을 위해 스피드를 희생하지 않는다는 전제하에 기본전략을 수립하고 있다. 처리량을 늘리기 위한 최선의 솔루션을 찾아 간다는 것이며, 모든 서버 코드들은 두 사람 마이클 몬티 위데니우스와 데이비드 애스마크가 최선의 솔루션을 확인한 후에 포함된다. MySQL은 MySQL AB에 직원들이 개발하고 있으나 PostgreSQL의 경우 많은 사람들이 커널 개발에 참여하고 있다.

다음은 MySQL TODO 목록이다. 보는 바와 같이 사용자 편리성과 상용DB에 많은 기능들을 포함하고 하는 의지가 엿보인다.

- MySQL TODO 목록

  • 안정적인 OpenSSL 지원 (MySQL 4.0이 지원하고 있지만 완벽하지 않다).
  • 다중언어 데이터 지원
  • 모든 client 명령어에 대한 Help 지원
  • Stored procedure 지원
  • 모든 테이블 타입에서 Foreign Key 지원
  • 다중 결과 Set 지원
  • INSERT/DELETE/UPDATE 사용시 임시 Key버퍼 캐쉬
  • 다른 디스크에 심보릭 링크된 테이블에 대한 ALTER TABLE 수행시 해당 디스크에 임시 테이블 생성기능
  • DATE/DATETIME에 Time zone정보 추가
  • FreeBSD, MIT-pthreads
  • Locked threads의 CPU time 개선.
  • Thread 사용없이 모든 라이브러를 컴파일 할 수 있도록 configure 수정
  • 오랫동안 사용되지 않는 지연된 Key flush 스케줄러 추가
  • Key 관련 JOIN 최적화
  • Read-lock상태의 파일에 INSERT SQL_CONCURRENT와 mysqld 사용
  • Server-side cursors.
  • LIMIT사용에 변수 기능 추가(LIMIT @a,@b)
  • UPDATE문에 변수사용 추가 (ex UPDATE TABLE foo SET @a=a b,a=@a, b=@a c)
  • 기타 변수 관련 사용기능 추가
  • DEFAULT값 사용 개선
  • Fix `libmysql.c' to allow two mysql_query() commands in a row without reading results or give a nice error message when one does this.
  • MIT Thread 완벽지원
  • LOAD DATE INFILE의 기능개선

    아직 릴리즈되지 않은 MySQL 3.23.56의 개선사항을 살펴보자.

  • BLOB NOT NULL 컬럼에서 IS NULL을 함께 사용하도록 수정.
  • MERGE 테이블에서 MAX()함수의 최적화 오류수정
  • 새로운 접속에 대한 RAND() 초기화함수 향상
  • 파일기술자(file descripter)에서 이벤트를 기다리는 시스템 함수(poll()) 사용시 connect timeout 버그수정.
  • SELECT * FROM table WHERE datetime1 IS NULL OR datetime2 IS NULL. 버그 수정
  • INTERVAL, CASE, FIELD, CONCAT_WS, ELT and MAKE_SET에 사용되는 aggregate 함수 버그 수정.
  • --lower-case-table-names (default on windows) 사용으로 인한 테이블명 에러(Errcode 13) 버그 수정
  • Binary log 버그 수정
  • mysqladmin --relative 버그 수정
  • 일부 64 bit 시스템에서 SHOW STATUS 명령시 버그 수정

    3. 무엇을 선택할 것인가?

    - MySQL의 장점
  • MySQL서버는 일반적으로 PostgreSQL보다 빠르다. MySQL 4.0.1은 쿼리캐쉬 기술을 통해 read-only site에 대해 최선의 성능을 발휘한다.
  • 많은 사용자를 가지고 있다.
  • 많은 API를 개발언어에 제공하고 있다.
  • Replication은 거의 완벽하게 테스트되어졌다.
  • 풍부한 문서
  • Multi-Thread: Context switching과 공용자원 접근 속도가 빠르다.
  • Backup이 편리하다(InnoDB 제외): 테이블당 파일하나의 storage를 갖는다.
  • 디스크의 물리적 결함에 의한 손실을 대부분 복구할 수 있는 툴을 제공한다.
  • 업그레이드시 데이터의 덤프 및 리스토어가 불필요하다.

    - MySQL의 단점

  • 트랜잭션 지원이 완벽하지 않다(MyISAM의 경우 Table locking을 사용한다).
  • 사용자정의 함수(UDF)의 사용이 쉽지 않고 유연하지 못하다.
  • 다중 테이블에 update가 쉽지 않다(4.0.2에서 수정).
  • SUB SELECT가 지원되지 않는다(4.1-alpha버전에서 지원).

    MySQL의 장단점을 살펴보면, MySQL의 최대 단점인 완벽한 트랜잭션을 지원하지 못하고 복잡한 다중질의를 사용할 수 없다는 것으로 인해 MySQL의 많은 장점들을 무시되는 경향이 있다. 이는 기업용 솔루션이나 mission critcal한 솔루션 제작에 MySQL의 사용을 주저하게 하는 부분인 것이 사실이다. 그러나 일반적인 솔루션이나 솔루션 제작시 MySQL의 단점을 보완해 개발한다면 충분히 기업용 솔루션 제작에 사용될 수 있는 명실상부한 오픈소스의 데이터베이스가 될 것이다.

    4. 튜닝에 대한 짧은 견해

    자동차의 튜닝과 마찬가지로 DB역시 튜닝을 얼마나 할 수 있을까 하는 것이 DBA들의 재미일 것이다 간략하게 말하자면 튜닝에는 시스템(CPU, 메모리,디스크I/O)튜닝, OS튜닝, 스키마와 쿼리튜닝의 세 가지로 볼 수 있겠는데, MySQL은 my.cnf 파일의 수정으로 DBMS의 기본적인 튜팅이 가능하여 다른 DB에 비해서 기본적인 튜닝이 쉬운 편이다.

    5. 문서의 지원

    기술문서의 지원은 향후 사용자와 개발자의 발전을 위해 매우 중요하다. 아래 사이트를 한번 방문해보자, MySQL의 사용에 필요한 모든 것을 발견할 것이다.
    http://www.mysql.com/documentation/mysql/bychapter/index.html

    위 문서를 통해 살펴볼 수 있는 것은 다음과 같다.

    1 General Information : 본 매뉴얼에 대한 기본적 설명 및 MySQL에 기본정보
    2 MySQL Installation : 각 OS별 MySQL 설치 방법 및 Patch 방법
    3 Tutorial Introduction : 기본사용법 설명
    4 Database Administration : MySQL의 설정 및 관리자가 알아야 할 정보
    5 MySQL Optimisation : 성능향상을 위한 정보
    6 MySQL Language Reference : MySQL 사용에 필요한 기본 문법
    7 MySQL Table Types : MySQL에서 사용하는 Table 포멧들의 정보
    8 MySQL APIs : 개발 언어와 관련된 API 설명
    9 Extending MySQL : 사용자 정의 함수와 같은 확장방법과 설명.
    
    A Problems and Common Errors : 발견된 에러 설명
    B Contributed Programs : Add-on 및 기타 도움을 받은 프로그램들
    C Credits : 개발자, 공헌자, 지원자들에 대한 설명
    D MySQL Change History : MySQL이 발전해온 과정
    E Porting to Other Systems : 새로운 시스템으로 포팅하는 방법
    F Environment Variables : 사용되는 환경변수 목록과 설명.
    G MySQL Regular Expressions : MySQL에서 정규식 사용법
    H GNU General Public License : GPL 라이선스 
    I GNU Lesser General Public License : LGPL 라이선스 
    SQL command, type and function index : SQL명령어와 함수 인덱스 목록
    Concept Index : 용어 인덱스 목록
    

    6. 마치며

    인터넷의 발전은 그와 관련된 소프트웨어기술의 평준화를 가져왔고, 인터넷의 발전 속에서 오픈소스는 기술의 평준화에 분명히 기여하고 있다. 그 안에 MySQL이라는 DBMS가 있으며, 점점 사용자를 늘려가고 있다. 이 즈음에 오픈소스의 핵심축에 있는 APM의 M을 알아보는 기회가 되었길 바라며, 선택은 사용자의 몫이지만 그 선택이 기여로 이어질 때 오픈소스의 발전이 꾸준히 이루어지지 않을까 생각해본다.

    PostgreSQL

    오픈 소스 데이터베이스의 또다른 제품인 PostgreSQL의 자세한 설명에 앞서 왜? 저자가 PGSQL을 선택해서 사용하고 있는지에 대한 설명을 먼저 시작한다. 익숙하지 않은 제품이라는 이유만으로 너무나 많이 들어본 질문이다. 왜? MySQL을 사용하지 않고, PostgreSQL를 사용하고 있는 것일까?

    저자의 경우, 98~99년경 온라인 사용자 설문 조사를 위해서 간단하게 MySQL을 이용해서 일반적인 데이터베이스 프로그램들처럼 사용자 정보, 설문 문항, 설문 결과 등으로 나누어서 테이블 구성했으며, 일정 기간 사용자 설문을 진행해서 원하는 결과에 대한 레포트 프로그램을 작성했다. 당연히 일정기간동안 설문을 진행하면 전혀 문제가 없었으나, 최종 완료후 설문 결과를 레포트 형태로 만들어야 할 때, 골치아픈 난관에 다다랐는데 그전까지는 상용 제품에만 익숙했진 관계로 당연히 있다고 생각한 서브쿼리 및 조인에 대한 기능들을 제공하지 않는 것이었다. 물론 기간내의 프로그램을 완료하기 위해서 다중 for(;;) 루프를 통해서 이 문제를 해결했으나, 이때의 악몽으로 인해 저자의 머릿속에서 MySQL을 잊어버리게 되었다. - 물론 최근의 MySQL에서는 위와 같은 기능을 어느 정도는 지원한다. - 좀더 심하게 얘기하면 PostgreSQL을 만나기 전까지는 오픈데이터베이스의 성능 자체 및 한계를 의심하고 있었다.

    1. PostgreSQL 개요

    PostgreSQL은 postgres에서 출발한다.
    postgres는 캘리포니아 버클리(UCB) 대학의 Michael Stonbraker 교수의 주도로 시작된 데이터베이스 연구 프로젝트였다. 처음에는 교육과 연구를 목적으로 개발되었으나 사용자 수의 증가에 따라 지원 부담이 커져서 4.2 버전을 마지막으로 postgres 프로젝트는 종료하게 된다. postgres 프로젝트는 그대로 끝나지 않고 postgres95와 Illustra 데이터베이스라는 두 개의 제품으로 탄생하게 된다. Illustra 데이터베이스를 postgres를 시작한 Michael Stonbraker 교수에 의해 상업용 버전으로 제품화한 것이다. 이후 Illustra는 Informix사에 인수되어 Informix Universal Server 제품과 통합되었다. postgres95는 postgres 프로젝트에 참가하고 있던 당시 UCB의 대학원생 Andrew Yu와 Jolly Chen에 의해 개발되었다. Postgres는 postgres95로 오면서 몇 가지 수정돼 특징을 갖는다.

    ANSI C를 따르도록 소스코드가 수정되어서 프로그램 크기가 25%로 작아지고 보기가 쉬워졌으며 질의 언어를 PostQuel에서 표준 SQL로 변경되었다. 기존 Postgres에 비해 30~50%정도의 성능 향상을 가져 왔고 라이선스를 수정해 상용화가 가능해 졌다.

    그러나 Andrew Yu와 Jolly Chen가 졸업하면서 또 한번의 개발이 멈추는 위기를 맞게 되지만 캐나다의 Marc G. Fournier씨가 주관하는 현재의 개발팀이 인수받아 계속 이루어지고 있다. 1997년 1월에 나온 6.0 버전부터는 Postgres95라는 이름이 적절하지 않아 PostgreSQL로 이름이 바뀌었으며, 최근까지 7.3.x 버전이 발표되었다.

    1.1 특징
    1.1.1 관계형 모델
    Postgres 프로젝트 리서치의 최초의 목적 중의 하나는 복합객체(complex object), 규칙(rule) 등을 다룰 수 있으며, 고수준으로 확장 가능한 관계형 DBMS를 제작하려던 것이었다. 따라서 PostgreSQL은 관계형 DBMS가 가지고 있는 거의 모든 기능을 가지고 있다. 예를 들면 SQL에서 서술적인 질의어의 사용과 질의 최적화, 동시성제어, 트랜잭션처리, 멀티 유저기능 등을 제공하고 있다.

    1.1.2 객체지향
    PostgreSQL은 상속, 객체와 같은 객체지향개념에서 볼 수 있는 여러 특징을 초보적이나마 구현하고 있다. 이러한 특징때문에 어떤 사람들은 PostgreSQL을 설명할 때 ORDBMS라고 말하기도 한다. - 객체지향이라고 해서 반드시 PGSQL을 객체 지향적인 디자인을 이용해서 디자인하고, 이용할 필요없이 일반적인 관계형 데이터베이스(RDBMS)로 이용할 수 있다.

    1.1.3 고수준 확장성
    PostgreSQL은 사용자 정의 오퍼레이터와 타입, 함수, 엑세스 메소드를 지원한다.

    1.2 PostgreSQL 저작권
    PostgreSQL 저작권은 기본적으로 소스코드까지 공개되어 있으며, GPL과 다른 공유 성격을 가진 Berkeyly 라이선스를 기반으로 배포되고 있으며, 임의의 목적에 사용과 복사, 수정, 및 배포에 대해서 자유로우며, 관련된 어떤 보증도 제공하지는 않고 있다.

    1.3 지원 플랫폼 및 API
    PostgreSQL은 C/C , Tcl, Perl, Python 등에 대한 API를 제공하고 있으며, ODBC, JDBC, PHP, ESQL/C 등 일반적인 개발 환경에서 필요로 하는 다양한 툴셋을 제공하며, 다음의 플랫폼에서 동작한다.

    OS Processor Version Reported Remarks
    AIX 4.3.2 RS6000 v7.0 2000-04-05 Andreas Zeugswetter
    BSDI 4.01 x86 v7.0 2000-04-04 Bruce Momjian
    Compaq Tru64 5.0 Alpha v7.0 2000-04-11 Andrew McMurry
    FreeBSD 4.0 x86 v7.0 2000-04-04 Marc Fournier
    HPUX PA-RISC v7.0 2000-04-12 Both 9.0x and 10.20. Tom Lane
    IRIX 6.5.6f MIPS v6.5.3 2000-02-18 MIPSPro 7.3.1.1m N32 build. Kevin Wheatley
    Linux 2.0.x Alpha v7.0 2000-04-05 With published patches. Ryan Kirkpatrick
    Linux 2.2.x armv4l v7.0 2000-04-17 Regression test needs work. Mark Knox
    Linux 2.2.x x86 v7.0 2000-03-26 Lamar Owens
    Linux 2.0.x MIPS v7.0 2000-04-13 Cobalt Qube. Tatsuo Ishii
    Linux 2.2.5 Sparc v7.0 2000-04-02 Tom Szybist
    LinuxPPC R4 PPC603e v7.0 2000-04-13 Tatsuo Ishii
    Mklinux PPC750 v7.0 2000-04-13 Tatsuo Ishii
    NetBSD 1.4 arm32 v7.0 2000-04-08 Patrick Welche
    NetBSD 1.4U x86 v7.0 2000-03-26 Patrick Welche
    NetBSD m68k v7.0 2000-04-10 Mac 8xx. Henry B. Hotz
    NetBSD/sparc Sparc v7.0 2000-04-13 Tom I Helbekkmo
    QNX 4.25 x86 v7.0 2000-04-01 Dr. Andreas Kardos
    SCO OpenServer 5 x86 v6.5 1999-05-25 Andrew Merrill
    SCO UnixWare 7 x86 v7.0 2000-04-18 Billy G. Allie
    Solaris x86 v7.0 2000-04-12 Marc Fournier
    Solaris 2.5.1-2.7 Sparc v7.0 2000-04-12 Peter Eisentraut, Marc Fournier
    SunOS 4.1.4 Sparc v7.0 2000-04-13 Tatsuo Ishii
    Windows/Win32 x86 v7.0 2000-04-02 Client-side libraries or ODBC/JDBC. No server-side. Magnus Hagander
    WinNT/Cygwin x86 v7.0 2000-03-30 Uses Cygwin library. Daniel Horak
    * Windows NT의 경우 아직은 지원이 미약하며 빠른 시일동안 발전되고 있다.

    1.4 성능 및 안정성

    TPC 자료의 다양한 성능 차트를 제공하는 것 보다는 본 저자의 경험 및 일반적인 커뮤니티 사이트에서 얘기하는 것이 도움된다 라는 판단에 PostgreSQL 성능을 얘기해보면, 일반적인 상용제품인 Oracle 등에서 엔터프라이즈 환경에서 이용할 때에는 약 10 ~ 20% 정도 성능이 떨어지며, MySQL에 비해서는 단순 쿼리의 경우 MySQL이 성능이 앞서나 복잡한 중첩 쿼리에서는 빠른 성능을 보여준다. 단 상용제품와의 비교할 경우, 동일한 H/W 스팩상에서라면, 일반적인 중소기업에서 사용되는 펜티엄 4급 싱글 CPU, 256M 이하의 메모리상에서는 동일하거나 빠른 성능을 보인다.

    1.5 설치 및 성능 향상

    PostgreSQL에 대한 설치는 본 기사의 범위를 넘는 것이라 생각되며, 설치 및 성능향상은 한동훈님이 작성한 문서 5번 및 문서 2에서 제공되는 내용을 참고하기 바라며, 한컴리눅스 OS 3.0이나 레드햇 7.0 이상의 버전의 경우 인스톨 전용 RPM 환경을 제공하고 있기 때문에 특별한 인스톨상의 어려움은 없다.

    2. PostgreSQL 장단점

    PostgreSQL의 장단점을 얘기할 때 타 DBMS 제품과의 비교를 빠트릴 수 없다 라고 생각되는데, 앞의 내용에서도 다루었지만, PostgreSQL 제품의 가장 큰 장점은 거의 상용 제품에 준하는 SQL 문 및 개발 환경에 대한 지원과 제품 사용에 일절 비용이 발생하지 않는다 라는 것이라면, 단점은 약간의 늦은 성능 및 DBMS 관련 유틸리티 제공의 미약과 다른 공개 소스 제품이 그렇듯이 제품에 대한 체계적인 지원을 받을 수 없다 라는 점이라고 생각된다.

    3. 지원문서

    문서 1: PostgreSQL 공식 홈페이지
    문서 2: 공식 홈페이지내 각종 기술문서들
    문서 3: PostgreSQL을 선택하게 된 이유
    문서 4: 국내 데이터베이스 전문 사이트
    문서5: 한동훈님의 PostgreSQL 강좌
    문서 6: 효식님의 관련 강좌
    문서 7: PGSQL 과 MySQL 비교 자료
    문서 8:PostgreSQL의 FAQ

    4. 마치며

    최근의 MySQL에서는 저자가 처음 얘기한 문제들은 어느 정도 해결되었으며, 미션크리티컬한 작업을 위한 로우 단위별 멀티 트랜잭션, 유니언 및 좀더 섬세한 서브 쿼리 등에 대한 지원은 미약하나, 이와 같은 경우가 아닌 단순한 사용자 관리, 게시판 등의 빠른 속도를 요하는 곳에서는 충분한 강점을 가지고 있으며, 반면에 PGSQL은 좀더 DBMS 본연의 기능에 충실한 제품이라고 생각하며, 두 제품에 대한 특징을 가지고 각 업무에 적합하게 적용하면 된다고 생각한다.

    정리하면 PGSQL은 데이터베이스에 많은 작업을 적용하고 싶을 때, 혹은 데이터베이스 자체를 공부하고 싶은 사람들에게 적합한 제품이라면, MySQL은 빠른 속도를 요하는 곳에서 적합한 제품이라고 생각한다.

    소스 : http://www.linuzine.com/modules.php?name=News&file=print&sid=80

  • 이 글에 대한 댓글이 총 6건 있습니다.

    여기서 한가지 꼭 짚어야할 부분이

    PostgreSQL 놈의 오해입니다.

     

    대표적인 오해가 '느리다' 인데, 이놈에 대한 설명은 이곳 database.sarang.net(DSN) 에서 '아니다'고 설명하고 있지요. (DSN은 apache + php + postgresql 로 움직입니다)

     

    다음 오해가 '무겁다' 인데, 그 기준을 어디에 두어서 그런 결론이 나왔는지는 모르겠지요. 요즘의 범용 PC 수준이라면, 이 오해도 풀릴 것같습니다. CPU 1GHz 이상 메모리 512MB 이상이면 대부분의 업무, 서비스에 지장이 전혀 없을 것같습니다.

     

    다음 오해가 '사용자 층이 두껍지 않아서 다음 유지 보수에 힘들다' 인데, 이놈은 처음 설계할 때 범용성을 고려해서 SQL 표준으로만 구현한다면, 문제가 되지 않는다고 봅니다. - 개인적인 생각으로는 SQL 표준 너머 PostgreSQL 고유의 장점들이 너무 많아서 이런 기능들을 안쓴다는 것이 너무 아깝지요.

     

    요즘은 이런 사람은 없겠지만, 사람들과 이야기 하다가 보면, PostgreSQL 놈은 버그가 많고, 안정성이 미덥지 못해 못쓰겠다고 말하는 이도 있습니다.

    이놈은 DB 서버 관리자, 그 서버가 돌아가고 있는 시스템 관리자가 얼마나 부지런하냐에 달려있는 것같습니다. 관리만 꼼꼼히 한다면, 별 문제가 되지 않을 것같습니다. PostgreSQL 서버의 안정성과 관계된 문제들은 대부분 DB 서버의 안정성과 관계된 것이 아니라, 시스템 안정성과 관계되는 것들이었습니다. 물론 이런 외부의 문제들에 대해서도 깔끔하게 대처할 수 있는 서버면 좋겠지만, 오라클과 같이 완벽하게 마치 독자적인 OS 밑에 돌아가는 또 다른 하나의 OS 처럼 움직이지 않는다면, 다른 RDBMS도 이 문제는 마찬가지로 안고 있는 것입니다.

     

    이곳 사이트 통계를 보고 있노라면, 늘 씁쓸한 생각이 듭니다. 나쁜 표현으로 마치 죽을 쑤어 개 준 것처럼 말이지요. '이 만큼 참한 놈인데, 일반인들에게는 그게 매력으로 다가가지 못하나보다' 이렇게...

     

    참, 또 있습니다.

    PostgreSQL 프로젝트는 GNU의 부분 프로젝트도 아니며, 라이센스도 GPL이 아니라는 것!

    아주 중요한 사실입니다.

    김상기(ioseph)님이 2004-02-04 01:42에 작성한 댓글입니다.
    이 댓글은 2004-02-04 01:59에 마지막으로 수정되었습니다.

    상기님 생각에 전적으로 동감합니다.

    개인적으로 DBMS 는 PostgreSQL 에 훨씬 더 큰 무게를 실어 주고 있습니다. 그만큼 기능이 좋고, 무료 DBMS 라고 보기에는 너무 안정적이라는 것이죠.

    사실 왠만한 사이트라면 오라클과 같은 비싼 상용 DBMS 가 필요없을것이라는 생각도 많이 해 봅니다.

    아마도 언젠가는 PostgreSQL 의 가치를 아는 사람이 많아 지는 날이 오지 않을까 생각해 봅니다.

    정재익(advance)님이 2004-02-04 10:10에 작성한 댓글입니다.

    저는 업무용으로 지난 4년간 사용하고 있습니다.

    ODBC를 통해서 C/S환경으로 사용하고 있습니다.

     

    이보더 더 좋을순 없다 입니다.

     

    mysql도 생각해 보고 직접사용도 해보았는데요.

    Postgresql이 짱입니다.

    롱다리님이 2004-02-04 16:10에 작성한 댓글입니다. Edit

    제가 서버호스팅 하는 경우에는 postgresql 을 디비로 쓰지만 호스팅을 받는 경우에는 쓰고 싶어도 못쓰게 되더군요. mysql 아니면 mssql 이라...

     

    mysql 을 디비로 쓴 코드를 보면 한숨만 나옵니다. 트리거 걸거나 함수 만들어서 하면 정말 코드 깔끔해질텐데 이걸 자바 코드 상에서 처리하려니 답답해 죽겠네요.

     

    postgresql 의 우수성이 많이 알려지고 사용자층이 늘어서 호스팅 업체에서도 지원을 해주면 좋겠다는 생각은 하지만... 먼 미래의 이야기겠죠.. -_-

    최연석님이 2004-02-04 19:36에 작성한 댓글입니다. Edit

    이 글 전에 한컴사이트서 봤는데 조금 어이가 없었음.. -.-;

    마치 mysql 광고글이 아닐까 하는 의심까지 들 정도로 --;

    pgsql이 짱인데 쩝~

    ㅋㅋㅋ

    신기배(nonun)님이 2004-02-05 10:05에 작성한 댓글입니다.

    저도 pgsql을 더 선호하는 입장입니다. 하지만 분명한 것은 mysql이 더 사람들에게 신뢰를 준다는 것인데 제 생각에 이 차이는 mysql이 시작부터 상업적인 목적으로 개발 되었다는 것 때문 아닌가 합니다.

    비록 많이 개선되고 있어도 mysql은 기능이 부족한 부분이 심하게 많이 있는데 이건 첨부터 의도된 것인 만큼... 단점이라고 말하기 보다는 특징이라고 말 해야 할 것이라고 생각합니다. 마케팅 용어로 타겟팅을 한거죠... 메유얼에 나온 것 처럼... 몇가지 기능을 뺀 대신에 속도를 반대 급부로 얻겠다는... 틈새 시장을 노린 것이라고 생각합니다.

    결국 mysql은 비록 기능이 부족하지만 첨부터 돈 벌려는 생각에 만든 것이라서 상용 S/W들이 가지고 있어야 할 메뉴얼, 지원 서비스, 안정성등이 높은 수준으로 제공 되었습니다.

    그런데 pgsql은 개발자가 바뀌는 어려운 과정도 거치고 해서 pgsql이 좀 쓸만해졌을 때에는 - 제 생각에는 8k 제한이 해결된 시점 - mysql은 이미 성공한 상태였던 점도 있구요. 결정적으로 상용을 만들겠다는 마인드가 상대적으로 부족해서 여러 부차적인 (품질 test 같은 것) 부분이 상대적으로 미진했다고 생각합니다.

    제가 기대하는 것은 www.pgsql.com이 성공해야 한다는 것인데, 이 회사가 계속 open source를 전략적으로 지향하기만 한다면 반드시 성공해야 합니다.

    박성철님이 2004-02-20 10:39에 작성한 댓글입니다. Edit
    [Top]
    No.
    제목
    작성자
    작성일
    조회
    7053나름대로 쓰는 PostgreSQL 약사 [1]
    김상기
    2007-02-21
    13964
    5953비정상적인 시스템 종료에 따른 postmaster의 반응 (7.1 이상에서)
    김상기
    2005-03-08
    14807
    5472PostgreSQL8.0.0 beta1 리눅스 VS 윈도우 [7]
    신기배
    2004-08-14
    15816
    5187PostgreSQL vs MySQL [6]
    정재익
    2004-02-04
    50839
    5139tsearch2 한국어 파서 사전 개발안 [8]
    김상기
    2004-01-04
    16056
    4939DSN 개발 뒷 이야기 [4]
    김상기
    2003-09-13
    11980
    4860PostgreSQL을 얼마나 오래 사용하고 있나요?
    김상기
    2003-08-24
    11801
    Valid XHTML 1.0!
    All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
    작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다