검수요청.png검수요청.png

파이어버드

위키원
(Fire Bird에서 넘어옴)
이동: 둘러보기, 검색
파이어버드(Firebird)
파이어버드(Firebird)

파이어버드(Firebird)는 인터베이스(InterBase)를 기반으로 만든 무료 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. 용량이 매우 작고, 메모리 소모도 작은 가벼운 데이터베이스 관리 시스템(DBMS)이다. 리눅스(Linux), 윈도우(Windows), 아이오에스(iOS), 유닉스(UNIX) 등 다양한 운영체제(OS)에서 작동한다. 파이어버드(Firebird)의 로고는 불새이다.

개요[편집]

파이어버드(Firebird)는 볼랜드의 관계형 데이터베이스 관리 시스템(RDBMS) 인 인터베이스(Interbase)가 2000년에 소스 공개된 이후 공개된 소스를 기반으로 새로이 시작된 오픈 소스 RDBMS 프로젝트이다. 2004년 2월에 1.5 Version(버전)이 발표되었고 2006년 2월 초 현재 2.0 버전이 공개 베타 테스트 중이다. 파이어버드의 대표적인 특징은, 트랜잭션 등 완전한 RDBMS의 기능을 갖추고 있으면서도 설치 크기가 수 메가바이트(MB) 정도로 대단히 작고 빠르며, 메모리도 수십 MB 정도로 적게 소모하는 가벼운(lightweight) RDBMS라는 것이다. 또한 마이크로소프트 윈도우, 리눅스, 솔라리스, FreeBSD, 맥OS 등 다양한 플랫폼을 지원한다. 볼랜드의 인버테이스 소스로부터 분기한 만큼 볼랜드의 개발 툴인 델파이나 C++빌더와는 연동이 쉽지만, 그 외에 닷넷 프레임워크 환경이나 비주얼 씨플플(C++), 피에이치피(PHP), 에이에스피(ASP), 자바(JAVA)와도 연동이 가능하다. 파이어버드의 라이선스는 MPL(Mozilla Public License) 변형으로, GPL 기반인 마이에스큐엘(MySQL)과는 달리 상용 목적의 사용이 가능하다. 이 라이선스는 대부분의 상업 목적 사용에도 제한을 받지 않는다. RDBMS 서버가 아닌 로컬 데이터베이스 형태로 다른 프로그램에 임 베드(embed) 되는 파이어버드 임베디드 서버(Firebird Embedded Server)도 존재한다. 한국에서 파이어버드 관련 정보를 찾아보기 위해서는 폴란드포럼에서 파이어버드 포럼을 찾아볼 수 있다.[1]

등장배경[편집]

2000년 7월 25일볼랜드에서 파이어버드 프로젝트에서 만든 인버테이스 6.0 소스가 발표되었다. 파이어버드(Firebird) 1.0은 2002년 3월 11일 리눅스(Linux), 마이크로소프트 윈도(Microsoft Windows) 및 맥 오에스엑스(Mac OSX) 용으로 출시되었으며 향후 2개월 동안 솔라리스(Solaris), 프리비에스디(FreeBSD) 4, 에이치피유엑스(HP-UX) 포트가 제공되었다. C에서 씨플플(C ++)로코드 베이스를 포팅하는 작업은 2000년에 시작되었다. 2004 년 2월 23일, 파이어버드 1.5가 릴리스 되었다. 파이어버드 1.5는 새 코드 베이스의 첫 번째 안정적인 릴리스이다. 버전 1.5에는 개선된 쿼리 최적화 프로그램, SQL -92 조건식, SQL : 1999 저장 점 및 명시적 잠금 지원 기능이 있다. 파이어버드 2.0은 2006년 11월 12일에 릴리스 되었으며 64비트 아키텍처, 프롬 절에 중첩된 테이블 및 트랜잭션 차단 시 프로그래밍 가능한 잠금 시간 초과에 대한 지원이 추가되었다. 이전의 안정적인 릴리스는 버전 2.1.6으로 절차 트리거, 재귀 쿼리 및 SQL : 2003 MERGE 문 지원을 포함한 새로운 기능을 추가했다. 파이어버드 2.5에는 향상된 멀티 스레딩, 정규 표 현실표현식 구문 및 원격 데이터베이스를 질의 하는쿼리하는 기능과 같은 새로운 기능이 도입되었다. 가장 안정적인 버전은 2016년 4월 19일에 출시된 파이어버드 3.0이며 성능과 보안에 중점을 둔다. 코드의 주요 구조는 슈퍼 서버(Super Server) 버전을 사용할 때 에스앰피(SMP) 시스템을 완벽하게 지원할 수 있다. 구글 써머 코드(Google Summer of Code) 2013을 통해 리브레오피스(LibreOffice)의 HSQLDB 를 대신하여 파이어버드를 통합하는 작업이 시작되었다. 2003 년 4월 모질라 는 파이어버드와 상표 분쟁 후 웹 브라우저에서 피닉스 테크놀로지(Phoenix Technologies)라고 이름을 변경 발표했다. 이 결정은 사용자와 인터넷 검색 엔진이 파이어버드라는 이름을 사용하는 데이터베이스와 웹 브라우저에 의해 혼동될 것이라는 가정으로 인해 파이어버드 데이터베이스 프로젝트 내에서 문제를 일으켰다. 모질라 개발자가 자신의 소프트웨어 패키지가 "모질라 파이어버드(Mozilla Firebird)"가 아닌 "파이어버드"라고 했다. 또한 이 성명서에서는 모질라 파이어버드(Mozilla Firebird) 이름은 프로젝트 코드명이라고 말했다. 이 분쟁은 2004년 2월 9일에 모질라가 브라우저 이름을 모질라 파이어폭스(Mozilla Firefox)로 변경하여 충돌을 끝내면서 해결되었다.[2]

특징[편집]

관련 용어[편집]

  • 스키마(Schema) : 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다. 데이터베이스를 구성하는 데이터 개체, 속성, 관계 및 데이터 조작 시 데이터값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다. 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다. 데이터 사전에 저장되며, 다름 이름으로 메타데이터라고도 한다. 현실 세계의 특정한 한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어진다. 시간에 따라 불변인 특성을 가지고, 데이터 구조적 특성을 의미하며, 인스턴스에 의에 규정된다.[3]
  • 에스큐엘쿼리(SQL Query) : 데이터베이스에 정보를 요청하는 것이다. 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청에 의한 처리이다. 쿼리는 대게 데이터베이스로부터 특정한 주제어나 어귀를 찾기 위해 사용된다. 주제어가 검색엔진의 검색 필드 내에 입력된 다음, 그 내용이 웹 서버로 넘겨진다. 관계형 DBMS를 사용하는 전용 질의언어이다. 대소문자 가리지 않고 인터프레터(Interpreter) 언어를 쓴다.[4]
  • 기본키(Primary Key: PK) : 테이블에서 하나의 레코드를 지정할 수 있는 하나 이상의 칼럼 집합이다. 주키 또는 프라이머리 키라고 하며, 관계형 데이터베이스에서 조(레코드)의 식별자로 이용하기에 가장 적합한 것을 관계(테이블)마다 단 한 설계자에 의해 선택, 정의된 후보 키를 말한다. 유일 키는 0~1개 이상의 속성 집합으로 볼 수 있다. 즉, 관계에 저장된 레코드를 고유하게 식별하는 후보 키 (=속성 또는 속성의 집합) 가운데, 설계자가 일반적으로 이용되어야 한다고 정해 놓은 것을 가리킨다.[5]
  • 외래키(Foreign key : FK) : 어떤 테이블의 기본 키가 다른 테이블의 칼럼에 들어 있는 경우 쓴다. 다른 테이블의 기본 키 필드를 가리키는 데이터의 참조 무결성(referential integrity)을 확인하기 위하여 사용된다. 즉, 허용된 데이터 값만 데이터베이스에 저장되는 것이다.[6]
  • 테이블(Table) : 가장 기본적인 데이타 저장 단위로 칼럼들로 구성된 레코드들의 집합이며 정보들의 묶음단위 이다. 종류로는 메모리 테이블과 디스크 테이블, 시스템 테이블과 일반 사용자 테이블, 메모리 테이블, 분할된 테이블 등이 있다.[7]
  • 컬럼(Column) : 테이블을 구성하는 정보들이다. 관계형 데이터베이스 테이블에서 특정한 단순 자료형의 일련의 데이터값과 테이블에서의 각 열을 말한다. 컬럼은 열이 어떻게 구성되어야 할 지에 대한 구조를 제공한다. 관계형 데이터베이스 용어에서 컬럼과 같은 의미로 사용되는 것은 속성(attribute)이다. 필드(field)라는 용어가 종종 컬럼의 대용으로 동일한 의미로 사용되지만, 필드와 필드값은 한 열이나 한 컬럼 사이의 교차로 존재하는 단일 항목을 특정할 때 언급하는 것이다.[8]
  • 레코드(Record) : 테이블에 들어 있는 여러가지 인스턴스 하나하나를 지정 한다. 컴퓨터 과학에서 기본적인 자료 구조이다. 데이터베이스나 스프레드시트의 레코드는 보통 로우(row)라고 부른다. 각기 다른 자료형에 속할 수 있는 필드의 모임이며, 보통 고정 숫자나 시퀀스로 이루어져 있다. 레코드의 필드들은 특히 객체 지향 프로그래밍에서 멤버(member)로도 부른다.[9]

장점 및 단점[편집]

장점

먼저 파이어버드의 가장 큰 장점은 완전히 무료이다. 둘째, 용량이 적다. 설치를 위해 필요한 파일도 불과 2~3메가 정도로 작고, 메모리를 차지하는 용량도 적다. 필요하면 다른 애플리케이션을 배포할 때 설치 프로그램에 같이 넣어서 배포하기도 쉽다. 또 데이터가 RLE 압축이 되기 때문에 데이터 파일도 작다. 셋째, 빠르다. 외국 마이에스큐엘(MySQL) 사용자들이 트랜잭션 지원을 위해 MySQL에서 이노데이터베이스(InnoDB)를 사용하게 되면 파이어버드가 더 빠르다고 한다. 그리고 로컬 디바인 액세스보다도 빠르다는 것은 일반적으로 인정되는 사실이다. 넷째, 필요하다면 로컬 데이터베이스로 쓸 수 있다. 파이어버드 임베디드 서버라는 걸 쓰면 된다. 임베디드 서버의 기능이나 성능은 일반 파이어버드 서버와 완전히 똑같고, 배포도 가볍게 할 수 있다. 다섯째, UDF라고 하여 사용자 정의 함수를 DLL로 만들어 쓸 수 있다. 이건 델파이나 C++ 빌더, 비주얼 C++로 할 수 있고 어렵지 않다. 여섯째, MySQL만큼 다양한 플랫폼 버전이 나와 있다. 마지막으로는 백업 이 정말 간편하다. 파이어버드 데이터베이스로 일반 서비스를 하는 동안에도 백업해도 되고, 그 경우에도 그렇게 큰 부하가 추가되지 않음으로 아주 러시아워 시간대만 피하면 백업은 수시로 해도 된다.[10]

단점

첫째, 아직 대중화가 덜 되어 기술 자료가 적은 편이다. 하지만 최근 들어 파이어버드가 급속도로 전파되고 있다. 올해 초 에번스 데이터 그룹의 조사에 따르면, 파이어버드가 급성장해서 마이에스큐엘을 위협하는 정도라고 한다. 이렇게 성장세를 이어가면 자료의 부족은 계속 나아질 것으로 생각된다. 둘째, 사소할 수도 있고 심각할 수도 있는 문제지만, 스토어드 프로시저 안에서 트랜잭션을 쓸 수 없다. 트랜잭션은 무조건 프로시저를 호출하는 클라이언트 프로그램 쪽에서 시작하고 커밋해야 한다. 셋째, 이건 어떤 데이터베이스든 주력 데이터베이스를 바꾸려면 어쩔 수 없는 부분이긴 하지만 현실적인 부분이다. 다른 RDBMS와 표준 안이 에스큐엘 문법 외의 다른 문법들이 꽤 다르다. 물론 엠에스 에스큐엘(MS SQL)과 오라클 도 이 정도로 다르고, 마이에스큐엘(MySQL)도 마찬가지다. 엠에스 에스큐엘을 쓰셨다면 스토어드 프로시저에서 쓰는 문법이 아주 달라서 특히 불편을 많이 느낄 수 있다.[10]

지원 플랫폼[편집]

운영체제
  • 에이아이엑스(AIX) : IBM의 파워(POWER) 제품군에서 실행되는 개방형 표준 기반의 유닉스(UNIX) 운영 체제이다. 주요 특징은 시스템 V(System V)을 기반으로 비에스디(BSD)가 통합된 형태이며, ODM(Object Data Management)이라는 자원 관리를 위한 객체 데이터베이스엠에스(DBMS)를 통해, 드라이버(Driver), 패키지(Package), 속성(Attribute) 등을 관리하고 있다는 것이다. 운영체제로서 다른 유닉스 계열과 큰 차이를 보이는 것은 패깅(Paging) 가능한 커널 메모리(kernel Memory)며, 패깅 된 공간을 파일 캐시로 사용하기 때문에 브이엠스텟(vmstat)나, SAR -r 등으로 메모리(Memory)를 모니터링할 경우 거의 98% 이상의 사용률을 보인다. 따라서 일반적인 메모리 모니터링은 의미가 없고, 페이지인(Page In), 아웃 블록(Out Block) 등을 같이 모니터링해야 한다. 아이비엠(IBM) 전용의 운영체제(OS)로 아이비엠 파워 시스템즈(IBM POWER Systems) 메인프레임을 위한 유닉스 운영체제라서 주로 대기업, 금융권 등의 대형 서버용으로 이용된다. 2016년 12월 현재 에이치피(HP), 오라클(Oracle), IBM의 최상위 하이앤드유닉스(High end UNIX) 시스템 중 파워 시스템즈(POWER Systems) 장비가 연산 처리 성과(Performance)가 가장 좋다.[11]
  • 프리비에스디(FreeBSD) : 넷비에스디(NetBSD), 오픈비에스디(OpenBSD), 비에스디아이(BSDI)와 함께 버클리 CSRG(Computer Systems Research Group)의 마지막 작품인 4.4 BSD-Lite 2에 기반한 정통 유닉스 운영체제로써, 비에스디(BSD) 시스템의 전통을 계승한다. 현재 프리비에스디(FreeBSD)는 x86(i386 이상)과 알파 기종에서 운용 가능하며, 더욱 다양한 기종을 지원하기 위해 노력하고 있다. 프리비에스디는 자발적 참여로 구성된 팀에 의해 오픈 소스 개발 모델을 기반으로 전 세계의 수많은 프로그래머에 의해 개발되며, 에프티피(FTP), 더블유더블유더블유(WWW), 씨브이에스(CVS) 시스템을 통해 모든 소스와 관련 문서가 공개된다. 오픈 소스 개발 모델을 따르는 운영체제의 두 양대 산맥인 프리비에스디와 리눅스는 그 개발 모델과 인터페이스가 유사하지만, 프리비에스디 라이센스는 리눅스의 지피엘(GPL)에 비해 자유롭고, 같은 사양의 시스템에서 20-30% 향상된 성능을 보이며, 동기화 IO를 기본으로 하기 때문에 데이터베이스와 같은 트랜잭션 기반 응용에서도 안정성이 보장된다.[12]
  • 리눅스(Linux) : 유닉스(UNIX)와 유사하게 설계되었으나 발전을 거듭하며 전화기에서 슈퍼컴퓨터에 이르는 다양한 하드웨어에서 실행되고 있다. 모든 리눅스(Linux) 기반 운영체제(OS)에는 하드웨어 리소스를 관리하는 리눅스 커널과 운영체제의 나머지를 구성하는 일련의 소프트웨어 패키지가 포함되어 있다. 운영체제에는 지엔유(GNU) 툴과 같은 일부 공통 핵심 구성 요소가 포함되어 있다. 이러한 툴을 사용하여 커널에서 제공하는 리소스를 관리하고 추가 소프트웨어를 설치하여 성능 및 보안 환경을 설정할 수 있다. 이러한 모든 툴이 결합되어 기능적인 운영 체제를 구성한다. 리눅스는 오픈소스 운영체제이므로 소프트웨어 조합은 리눅스 배포판마다 다를 수 있다.[13]
  • 맥 오에스(Mac OS) : 애플(Apple)이 유닉스 및 다윈을 기반으로 개발한 맥(Mac) 전용 운영 체제이다. 2001년 3월 24일에 처음 출시하였다. 2016년 6월 13일, 더블유더블유디씨(WWDC)에서 다음 버전 운영체제 시에라를 발표하며 명칭이 오에스엑스(OS X)에서 맥 오에스(mac OS)로 바뀌었다. 이전 명칭이었던 '오에스 엑스'의 '텐' 문자는 알파벳의 엑스가 아닌 10을 뜻하는 로마 숫자를 의미하는 단어라서 "오에스 엑스"가 아니라 "오에스 텐"이라고 읽었다. 맥 오에스 엑스 10.7 라이언 출시 이후를 기점으로 서서히 바꾸다가 오에스 엑스 10.8 마운틴 라이언에서 완전히 오에스 엑스으로 변경했고, 2016년 WWDC에서 맥 오에스로 이름을 바꿨다. 맥 오에스의 가장 큰 특징이자 까임과 찬양을 동시에 받고 있는 부분은, 대부분의 사용자 레벨 아래 작업을 운영 체제나 프로그램이 적절히 처리한다는 것이다. 이로 인하여 사용자가 쾌적한 환경을 유지하기 위해 시스템 관리에 많은 시간을 투자할 필요성이 없는 점은 장점이지만, 갑자기 시스템 파일 권한이 꼬인다거나 하는 식으로 자기 혼자 문제를 일으킬 수도 있어서 "시한부적 시스템"이라고도 한다.[14]

동시성 제어[편집]

파이어버드(Firebird)는 다중 버전 동시성 제어라고 도하는 다중 세대아키텍처를 사용한다. 이 아키텍처는 읽기 및 쓰기 잠금 및 트랜잭션 로그 대신 레코드 버전을 사용하여 외부 동시성 및 일관성을 제공한다. 파이어버드 는 하나 이상의 트랜잭션에 필요한 한 수정 된 모든 레코드의 이전 버전을 유지한다. 각 레코드 버전은 해당 레코드를 생성한 트랜잭션에 의해 서명되며 각 트랜잭션은 현재 활성화된 다른 트랜잭션을 알고 있다. 트랜잭션은 최신 버전이 커밋되지 않은 레코드를 수정할 수 없으며 트랜잭션은 활성 트랜잭션으로 만든 레코드 버전을 읽을 수 없다. 이를 통해 활성 트랜잭션이 항상 데이터베이스의 일관된 뷰를 볼 수 있다. 독자는 일반적으로 동일한 데이터에 액세스할 때 작성자를 차단하지 않기 때문에 화이트 락(With lock)기능을 통해 제한된 명시적 비관적 잠금을 사용할 수 있다. 그러나 파이어버드는 사용자에게 명시적인 잠금이 거의 필요하지 않으며 전문가를 위한 것이라고 경고한다. 파이어버드는 디스크 구조의 일관성 제어를 위해 자체 잠금 관리자와 운영 체제 잠금을 모두 사용한다.[15]

잠금기법[편집]

잠금(Locking)은 하나의 트랜잭션이 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusive) 기능을 제공하는 기법이다. 하나의 트랜잭션이 데이터 항목에 대하여 잠금(lock)을 설정하면, 잠금을 설정한 트랜잭션이 해제(unlock)할 때까지 데이터를 독점적으로 사용할 수 있다.[16]

종류
  • 공유잠금(S-lock) : 데이터 항목에 대해 읽기 연산만 가능하다. 하나의 데이터 항목에 대해 여러개의 공유잠금이 가능하다. 다른 트랜잭션도 읽기 연산만을 실행할 수 있다.
  • 배타잠금(X-lock) : 설정한 트랜잭션을 데이터 항목에 대해서 읽기 연산과 쓰기 연산 모두 가능하다. 하나의 데이터 항목에 대해서는 하나의 배타잠금만 가능하다. 다른 트랜잭션은 읽기 연산과 쓰기 연산 모두 불가능하다.
규칙

트랜잭션은 데이터 항목에 대해 연산을 실행하기 전에 공유잔금이나공유잠금이나 배타 잠금 중 하나를 실행해야 한다. 라이트(write) 연산을 실행하기 위해서는 배 타 잠금을 실행해야 한다. 그리고 연산 종료 후에는 배타잠금(x-lock) 연산 실행 후에만 언락(unlock) 연산을 실행할 수 있다. 여러 트랜잭션이 하나의 데이터를 동시에 읽을 때는 문제가 되지 않는다. 그러나 한쪽이라도 쓸 때에는 트랜잭션 간의 상호 간섭으로 인해 잘못된 결과가 발생할 수 있다. 읽기 연산을 실행하기 위해 설정하는 공유잠금(S-lock)은 여러 트랜잭션에서 동시에 사용할 수 있지만, 쓰기 연산을 실행하기 위해 설정하는 배타잠금은 동시에 사용할 수 없다.[16]

각주[편집]

  1. 파이어버드(데이터베이스) 위키백과 - https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%84%EB%93%9C_(%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4)
  2. 파이어버드 위키피디아 - https://en.wikipedia.org/wiki/Firebird_(database_server)
  3. 코딩팩토리, 〈(DB기초)스키마란 무엇인가?〉, 《코딩팩토리》, 2018-08-10
  4. 쿼리(QUERY)란?〉, 《티스토리》
  5. 기본 키 위키백과 - https://ko.wikipedia.org/wiki/%EA%B8%B0%EB%B3%B8_%ED%82%A4
  6. (SQL)(DDL)Foreign Key:외래 키〉, 《티스토리》, 2018-01-09
  7. 테이블(Table) 관리〉, 《디비가이드》
  8. 컬럼(데이터베이스) 위키백과 - https://ko.wikipedia.org/wiki/%EC%BB%AC%EB%9F%BC_(%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4)
  9. 레코드 (컴퓨터과학) 위키백과 - https://ko.wikipedia.org/wiki/%EB%A0%88%EC%BD%94%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)
  10. 10.0 10.1 박지훈.임프 , 〈파이어버드의 장단점〉, 《파이어버드포럼》, 2006-01-06
  11. 아이비엠 에이아이엑스 나무위키 - https://namu.wiki/w/IBM%20AIX
  12. 덕근닷컴, 〈(UNIX)FreeBSD란 무엇입니까?〉, 《덕근닷컴》, 2004-07-22
  13. Linux의 구조와 오픈소스 OS의 특징〉, 《레드햇》
  14. 맥오에스 나무위키 - https://namu.wiki/w/macOS
  15. 파이어 버드〉, 《데이터베이스 데이터베이스》
  16. 16.0 16.1 이예원, 〈동시성 제어 기법-잠금(Locking)기법〉, 《피오씨에스》2019-07-30

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 파이어버드 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.