책에 빠져 때로는 미소로 때로는 참는 울음으로 책을 읽었던 때가 언제인지......간만에 독서인지 여행인지 모를 시간이 휙하고 지나갔습니다. "서명숙"이라는 저자에게 감사의 인사도 전하고 싶고 그녀의 글 재주와 품성이 무한히도 부럽기도한 시간이었습니다. 이 책을 만난 것은 대학로 헌책방이었습니다. 최근 헌책방은 예전 청계천 헌책방과는 다르게 일반서점 처럼 책이 잘 진열되어 있고 책의 상태에 따라서 같은 책이라도 값의 차이가 있기 때문에 충동 구매의 유혹이 지갑을 괴롭히는 장소입니다. 이 책 앞에서는 한참을 책을 뒤적거렸습니다. 약간 두꺼운 책이지만 중간 중간 천연색 사진이 함께하고 있어서 지루하지 않고 현장감있게 저자의 이야기에 동행할 수 있는 장점이 있습니다. 책을 모두 읽고나니 표지 사진에 "바람"이..
C#이나 VB.Net에서 파이어버드 데이터베이스에 접속하기 위해서는 ADO.NET Data Provider를 사용하면 됩니다. 드라이버 자체가 C#으로 제작되었기 때문에 클라이언트 시스템에 부가적으로 설치할 것은 없고 드라이버 DLL 파일만 같이 배포하면 됩니다. 파이어버드 ADO.NET Data Provider를 내려받기 위한 주소는 다음과 같습니다.http://www.firebirdsql.org/en/additional-downloads/ 필자의 경우 응용을 닷넷 4.0으로 맞추었기 때문에 "ADO.NET Provider - .NET 4.0"을 다운로드 받았습니다.7-Zip 파일이므로 7-Zip이 설치 되어 있지 않다면 기업에서도 사용할 수 있는 압축 프로그램 7-Zip를 참조하여 프로그램을 설치합니..
파이어버드 DBMS를 사용하면서 다른 DBMS와 차이가 있는 몇가지를 메모해 둡니다. 파이어버드 또한 SQL 표준을 준수하고 있으므로 핵심적인 SQL 문법은 비슷하지만 차이가 나는 몇가지를 다루어 보겠습니다. ■ 테이블/컬럼 스키마 조회하기MySQL이나 SQL Server에서 지원하는 INFORMATION_SCHEMA나 오라클의 ALL_TABLES, ALL_TAB_COLUMNS를 통한 테이블 및 컬럼 정보 조회는 파이어버드에서는 다른 형태로 지원합니다.SQL> show table RDB$RELATIONS;RDB$VIEW_BLR (RDB$VIEW_BLR) BLOB segment 80, subtype BLR NullableRDB$VIEW_SOURCE (RDB$SOURCE) BLOB segment 80, su..
파이어버드를 C#이나 VB.Net등에서 간편하게 접속하려면 Firebird ADO.NET Data Provider를 사용하면 됩니다.(http://www.firebirdsql.org/en/net-provider/) 파이어버드 닷넷 드라이버를 성공적으로 붙여서 사용하다보면 오류는 아닌데 비주얼스튜디오 콘솔창에 지속적으로 나타나는 것이 있습니다. "FirebirdSql.Data.FirebirdClient Information: 0"으로 쿼리의 실행 결과는 정상이지만 실행 과정의 모든 질의 내용을 트레이스(trace)하는 것입니다. 쏟아지는 질의 로그 때문에 확인해야할 예외(Exception)를 보지 못할 수도 있고 트레이스 하는 만큼의 성능 낭비 요소도 있으므로 닷넷 드라이버의 트레이스에 대한 조치는 필요해..
파이어버드(Firebird) DBMS(Database Management System)의 설치와(파이어버드(Firebird) 데이터베이스 설치하기 참조) 사용 환경 준비(파이어버드 사용 환경 준비하기 참조)에 이어 이번 포스팅은 본격적으로 데이터베이스를 만들고 접속하여 쿼리를 수행하는 과정을 다룰까 합니다. MySQL이나 오라클과 같은 다른 DBMS처럼 파이어버드도 콘솔기반으로 SQL을 사용할 수 있는 isql 도구를 제공합니다. isql을 콘솔 인터페이스에서 사용할 경우에는 "isql -u 사용자아이디 -p 비밀번호 데이터베이스" 형식으로 특정 데이터베이스에 직접 접속 할 수도 있고 아래와 같은 옵션으로 다양한 기능을 사용할 수 있습니다. 데이터베이스를 생성하고 다양한 SQL을 실행할 수 있는 isql..
데이터베이스를 처음 사용하시는 분들은 DBMS(데이터베이스 관리 시스템)를 설치하고서도 무엇부터 해야하나? 하면서 막막한 느낌이 들수 있습니다. 오라클이나 SQL 서버와 같은 상용 DBMS의 경우에도 마찬가지여서 비싸지만 범접하기 어려운 경외의(?) 대상이라는 느낌까지 받을 수 있습니다. 그렇지만, 아무리 수많은 고급 기술이 포함되어 있는 제품이고, 듣도 보지도 못한 전문 용어가 난무하더라도 사용자 입장에서는 단순하게 대할 필요가 있습니다. DBMS를 하나의 냉장고 처럼 대할 필요가 있습니다. 냉장고 전원을 넣고 빼듯이 DBMS를 가동시키고 중단시키는 방법을 찾아 직접 해봅니다. 그 다음에는 냉장고 문을 열고 물건을 집어넣거나 가져오듯이 DBMS에 접속하는 방법을 찾아 데이터를 넣고 조회하는 작업을 해보..
오라클, SQL 서버, MySQL과 같은 인기있는 DBMS의 틈바구니에서도 끈질긴 생명력으로 10년이 넘는 세월을 버텨온 DBMS가 있습니다. 바로 파이어버드(Firebird) 입니다. "불새" 예전 독수리5형제가 불새로 변해서 악당을 물리치는 모습을 상상케하는 로고도 있습니다. 사실 오픈소스 DBMS의 대명사라 하면 APM, LAMP 패키지로 인해 그영역을 확장하고 Sun사를 거쳐 결국 오라클의 품에 들어간 MySQL일 것입니다. 초기 MySQL은 무료로 DBMS를 사용할 수 있다는 매력이 있었지만 DBMS의 2PC 커밋등 주요 핵심 기능을 갖추지 못해서 일부 개발자는 터부시 했던 것도 사실입니다. 지금의 MySQL이 그때의 모습과는 달리 미션 크리티컬한 업무에도 적용할 정도의 성능과 기능을 갖추었음에..
토터스깃을 사용하면서 여러 저장소를 관리하다보면 이 프로젝트를 손댄적이 있는지, 수정했다면 어떻게 손을 대었는지, 저장소를 복제한 원격 저장소의 주소는 무엇인지, 이 소스 코드는 누구에 의해 어떻게 변경되어 왔는지 등을 확인할 필요가 생깁니다. 토터스깃 저장소의 정보 확인은 윈도우 탐색기에 적용하는 아이콘 오버레이 기능으로 시작할 수 있습니다.(토터스깃(TortoiseGit) 돌아보기 참조) 윈도우 탐색기에 표시하는 원래의 아이콘에 토터스깃의 아이콘 오버레이가 적용되어 있다면 해당 폴더 또는 파일은 토터스깃의 형상 관리 대상이라는 의미이고 아이콘의 종류에 따라 기본적인 상태를 확인할 수 있습니다. 위의 그림은 "plagfind"라는 프로젝트에 변경 파일이 생겼다는 의미인 것입니다. 아이콘을 통한 상태확인..
윈도우 폼 기반으로 단순한 데이터베이스 처리 위주로 동작하는 프로그램이나 대부분의 업무용 프로그램에서는 사용 빈도가 많지 않지만 닷넷에서 제공하는 그래픽 기능을 비주얼베이직 닷넷(이하 비베닷넷)을 통해서 활용하는 방법을 알아두면 유용하게 사용할 경우가 있습니다. 비주얼스튜디오에서 제공하는 기본 컨트롤에서 지원하지 않는 인터페이스를 별도로 제작하거나 여러 프로그램에서 사용할 수 있는 공통 라이브러리를 제작하는 등에 여러모로 활용 가능성이 있습니다. 닷넷의 그래픽 기능을 최대한 활용하는 프로그램은 뭐니뭐니해도 그래픽 편집 도구가 아닐까 싶습니다. 대표적인 예로 페인트닷넷을(가볍고 빠른 이미지 편집툴 페인트닷넷 참조) 예로 들수 있습니다. 페인트 닷넷은 가로, 세로 크기를 지정한 캔버스 위에 다양한 도형을 그..
웹 서비스가 다양화되고 클라이언트/서버 구조의 프로그램에서 조차 "검색"은 일반화된 기능이다보니 프로그래머의 입장에서 검색 결과의 일부분을 체계적으로 보여주는 페이징은 필수 불가결한 기능이라 할 수 있습니다. 그런데, 페이징 기능을 수행하려면 검색 결과의 개수를 먼저 파악해야하고 그중에 특정 부분의 행들을 추출할 수 있어야 합니다. 그런데 조건에 해당하는 모든 행의 개수를 파악하는 것도 테이블 전체를 스캔하므로 데이터베이스 시스템에 부담을 주지만 검색 결과를 특정 조건에 따라 정렬한 다음에 일부분을 뽑아내는 것은 개수를 파악하는 것보다 더 심한 부담을 주는 것이 사실입니다. 그렇다고 데이터베이스 수준에서 페이징을 수행하지 않고 클라이언트로 모든 데이터를 가져온다면 트래픽도 감당하기 어려울 뿐만 아니라 클..
비주얼베이직 닷넷(이하 비베닷넷)에서 인쇄를 구현하는 것이 그리 쉽지만은 않은 작업입니다. 웹 페이지 처럼 화면에 HTML을 통해서 그림과 도표, 텍스트로 페이지를 출력하고 CSS를 이용해서 인쇄시점에 포함해야될 내용과 제외할 것을 지정해 놓으면 웹브라우저가 알아서 출력해 주는 것처럼 윈도우 폼에서도 자동으로 인쇄해 준다면 프로그래머는 편하겠지만 화면의 동작방식과 크기는 프린터의 동작 방식과 크기와 차이가 크기 때문에 인쇄용 양식과 내용을 별도로 구성해 주어야 합니다. 다만 화면 출력에 사용하는 클래스나 함수를 그대로 프린터 출력에도 동일하게 사용할 수 있으며 시스템에서 제공하는 몇가지 컴포넌트와 클래스를 잘 활용하면 프린터의 종류와 관계없이 다양한 기종의 프린터에 동일한 페이지 내용을 간편하게 출력할 ..
이기종 데이터베이스를 사용하더라도 데이터베이스 간의 주요 데이터 타입은 유사하게 지원하는 것이 보통입니다. 대표적인 것이 문자열, 정수와 함께 일자시간 타입입니다. 위의 스키마는 3개의 컬럼을 가지고 있는 테이블로 tagname과 dt를 기준으로 주키(Primary key)를 설정한 것입니다. 위의 스키마를 각 데이터베이스 별 CREATE 문으로 작성하면 아래와 같습니다. 오라클만 DATE 타입을 사용하고 MySQL과 SQL Server는 DATETIME 타입을 사용합니다.== MySQL ==CREATE TABLE tags (tagname VARCHAR(16), dt DATETIME, val INT, PRIMARY KEY(tagname, dt));== SQL Server ==CREATE TABLE tag..
오라클 데이터베이스를 무료로 사용할 수 있는 개발자 버전 XE를 사용하다보면 갑자기 아래와 같은 메시지를 뿌리면서 접속이 않되는 경우가 있습니다.ORA-28001: the password has expiredCause: The user’s account has expired and the password needs to be changed 이유는 비밀번호의 유효 기간이 실제로 만료되어서 발생하는 현상으로 보안을 위해서 사용자가 주기적으로 비밀번호를 바꾸도록 유도하기 위한 장치입니다. PASSWORD_LIFE_TIME 변수를 통해서 비밀번호 유효 기간을 시스템레벨로 관리하는데 오라클 10g 버전 까지는 기본값이 무제한 이었지만 11g부터는 아래의 그림과 같이 기본값이 180일로 설정되어 있습니다. PASS..
프린터는 모니터가 일반화 되기 이전의 컴퓨터 시스템에서는 컴퓨팅 결과를 확인할 수 있는 거의 유일한 출력 장치라 해도 과언이 아니었습니다. 프로그래머가 프로그램을 작성해서 펀치카드 리더기등의 입력장치로 프로그램을 로딩시켜 실행한 결과는 양쪽에 구멍이 송송 뚫린 연속용지에 출력되어 프로그램의 실행 결과를 확인할 수 있었습니다. 초기의 프린터는 수동 타자기를 대신하는 방식으로 글자가 새겨진 자판이 먹지를 때려 종이에 글자가 찍히게 하거나, 글자가 볼록하게 새겨진 철판 밴드가 회전하는 과정에 메인 컴퓨터에서 전송된 신호에 따라 헤머가 먹지를 때려 종이에 글자를 출력하는 방식을 사용했습니다. 한번에 한줄 단위로 인쇄하기 때문에 라인 프린터라(Line printer) 불렀습니다. 해머가 먹지(리본)를 때리는 방식..
지리산 둘레길과 구룡폭포의 환상적 조합(1)에 이어진 글입니다. 지리산 둘레길을 다녀온 경험이 너무 좋았던 이유는 뭐니뭐니해도 계획에 없던 구룡 계곡과의 만남 때문이 아니었나 싶습니다. 필자의 경우에도 마찬가지이지만 청년시절부터 지리산 곳곳을 다녔지만 대부분은 정상인 천왕봉을 목표로 삼거나 가볍게 다녀오는 경우에도 노고단 정도를 목표로 했기 때문에 정작 구룡 계곡을 찾아 멀리서 오는 경우는 드물것입니다. 저희가 구룡 계곡을 따라 내려가는 도중에 만난 사람들도 대부분 가족 단위로 가볍게 다니러 오는 경우가 대부분이었습니다. 여름이면 계곡이 사람으로 넘쳐나겠구나 싶을 정도로 가까운 도시인들의(대부분 남원근처에 사시는 분들이겠지만) 좋은 쉼터가 될것으로 보였습니다. 아무튼 구룡 폭포로 가는 방법은 구룡 폭포 ..