2010년 1월 28일 추가
최근 정보에 따르면, 델파이에서의 아이폰 개발 지원은 장기적으로 밀릴 것 같습니다.
기술적이거나 업체간 협조 문제 때문인 것으로 보이는데... 어쨌든 많이 아쉽네요.

반면, 맥OS 버전과 리눅스 버전은 순조롭게 개발되어가고 있고 올해 출시에 아무 문제도 없을 것이라고 합니다.

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

며칠전에 디지털데일리의 기자들과 식사를 할 일이 있었는데... 그 자리에서 델파이에서 아이폰 개발을 지원하게 될 것이라고 귀띔을 했었습니다. 그런데 역시 기자라 그런지 뜰만한 이슈에 빠르더군요. 그다지 구체적인 정보를 준 것도 아닌데, 바로 다음날에 간단한 기사를 올렸더라구요.

아이폰 앱 개발, 오브젝티브-C의 대안은?
http://www.ddaily.co.kr/news/news_view.php?uid=57847

그런데.. 볼랜드포럼에 이 기사를 보고 글을 써주신 분이 있어서, 좀더 자세한 내용으로 답변을 썼습니다. 그 내용을 여기 블로그에도 올려봅니다.


델파이(그리고 C++빌더)의 미래 비전에서 가장 큰 것이 바로 크로스플랫폼입니다. 그래서 현재 엠바카데로의 델파이 관련 슬로건이 바로 Delphi Everywhere, C++Builder Everywhere 입니다. 여기서 'where'가 플랫폼들입니다. 내년에 나올 델파이는 윈도우 버전 외에, MacOSX, 리눅스를 지원하고, MacOSX 지원의 다시 연장으로서 아이폰이 지원됩니다.

모바일 쪽으로는 아이폰 외에 윈도우 모바일과 안드로이드도 본사의 내부 장기 로드맵에 포함되어 있는데, 윈도우 모바일은 드랍될 가능성이 큰 상태입니다. (최근 1~2년 사이에 윈도우 모바일의 추락 경향이 너무 커져서 지원 계획이 드랍될 분위기입니다)

현재 진행중인 상황에서는, 이 다른 플랫폼 용 델파이의 컴파일 방식은 해당 플랫폼에서 직접 개발을 하는 과거의 카일릭스 방식이 아니고, 윈도우에서 해당 타겟으로 컴파일하는 크로스컴파일 방식으로 됩니다. 그러니까 윈도우에서 MacOSX나 아이폰 애플리케이션을 개발하는 겁니다.

이렇게 다른 플랫폼들을 지원하는 델파이가, 현재의 윈도우 델파이 개발툴의 차기 버전에 모두 포함되기보다는, 별도의 개발툴 제품으로 나올 가능성이 커 보입니다. 일단 시장 자체가 다르니까요.

제 개인적인 예상으로는, 아마도 현재 델파이/C++빌더에서 공유하고 있는 IDE(정확한 명칭은 갈릴레오 IDE 입니다)를 빈껍데기 IDE로 독립시키고, 델파이와 C++빌더가 퍼스낼리티인것처럼, 델파이 for MacOSX나 델파이 for 리눅스, 델파이 for 아이폰 등이 이 껍데기 IDE와 함께 설치되는 제품으로 판매될 것으로 생각합니다. 어디까지나 제 개인적인 생각입니다. 그런 방식이 기술적으로나 시장 면에서나 가장 리즈너블해서입니다.

이미 작업은 상당히 진행되었고, 지난 8월의 진도 상황이 MacOSX와 아이폰용 컴파일러 코어는 기본적으로 개발 완료되었고(물론 출시 전까지는 개선을 해나가겠지만), VCL을 제외한 RTL 부분도 MacOSX와 리눅스로 포팅이 다 되어있습니다. 이를 위해 델파이 2007/2009에서 RTL 소스에서 사라졌던 리눅스 지원 코드들이 당장 현재 버전인 2010 버전의 RTL에는 다시 추가되었고, MacOSX까지 추가되어 있습니다.

컴파일러와 RTL 부분은 작업이 거의 끝나있고, 크로스컴파일 방식인 관계로 맥이나 리눅스를 위한 전용 IDE를 별도로 개발하지 않으니, 현재 엠바카데로 본사에서 진행중이거나 남아있는 작업은 VCL의 크로스플랫폼화 작업과 크로스컴파일 이후의 테스팅이나 디버깅 등의 작업일 것입니다.

RTL과는 별개로, VCL은 윈도우를 위해 완전히 최적화된 라이브러리이므로, 과거의 카일릭스 때 VCL과 별개의 CLX를 새로 개발했던 방식과 유사하게 진행할 것입니다. 이건 거의 확실하구요. VCL과 CLX가 별개의 평행 라이브러리이기는 하지만, VCL로 개발된 소스의 대부분이 CLX로 포팅이 가능했었습니다. 윈도우 OS에 의존적인 코드들만 제외하면요.

CLX에서 개발자들의 반발을 받았던 QT 문제를 어떻게 하느냐의 이슈가 있는데요. 과거의 CLX는 QT를 기반으로 했었는데(제 기억으로는 2.4 버전), 당시 이 QT의 성능이 상당히 크게 떨어지는 데다가 덩치도 크고 둔해서 개발자들 상당수가 많은 불만을 가졌었습니다.

지난 9월에 델파이/++빌더 2010 발표회 때 본사 부사장인 데이비드 아이 씨가 방문했을 때, 과거 카일릭스에서 사용했던 QT를 다시 사용할 계획이냐고 살짝 물어봤었습니다. 데이비드 씨의 대답은 대략 다음과 같았습니다.

1. 우리도 QT 문제를 심각하게 생각하고 있다.
2. 하지만 최근 버전의 QT는 과거와 달리 성능에서 크게 개선되었다.
3. 만약 최신 버전의 QT가 충분한 성능이 나온다면, QT를 사용함으로써 델파이에서 더 단기간에 더 많은 플랫폼을 지원할 수 있다.
4. 그래서 QT 기반으로 개발하는 방식과, 각각의 플랫폼에 대해 완전히 네이티브로 프레임워크를 재개발하는 방식을 두고 내부적으로 성능 비교 중에 있다.

MacOSX와 리눅스 버전은 내년에 출시될 것이 거의 확정적이고, 아이폰 버전은 좀 덜 확정적인데, MacOSX 버전과 함께 나올 가능성이 아주 높습니다.

제가 알고 있는 정보는 현재로서는 대략 이런 정도입니다.
(사실 본사에서 대외적으로 공개할 수 있도록 허용한 수준을 좀 많이 넘어섰습니다)

아마도 내년 봄 정도에 각 크로스플랫폼 버전에 대해 베타테스팅이 시작될 것이고, 그러면 저도 당연히 참여해야 하기 때문에, 그것 때문에라도 아이폰은 꼭 구입해야 하는 상황인데 요즘 너무 바빠 아직 아이폰 구매를 못한...

2009/12/30 16:22 2009/12/30 16:22

trackback :: http://blog.devgear.co.kr/imp/trackback/124

Delphi/C++Builder 2007은 공식적으로 Windows Vista까지만 지원하며, Windows 7은 지원하지 않습니다. Windows Vista와 Windows 7은 기술적으로 대단히 유사하기 때문에 일반적으로는 Windows Vista를 지원하는 애플리케이션은 Windows 7도 지원하는 경우가 대부분입니다.

하지만 반드시 그렇지는 않아서, Vista에서는 아무 문제가 없었던 것이 Windows 7에서 오동작하는 경우도 간혹 있습니다. 따라서 저희 데브기어와 본사인 엠바카데로의 공식적인 입장은, Windows 7에서의 정상 동작을 보장하려면 Delphi/C++Builder의 2010을 사용하여 개발하라는 것입니다.

바로 이번에 알려드리는 핫픽스가 이런 경우의 문제인데.. Delphi/C++Builder 2007 버전은 물론 Vista에서 제대로 동작하지만, Windows 7에서는 몇가지 부분에서 오동작을 합니다. 특히 문제가 되는 것이 디버거인데요. 이번에 공개된 비공식 패치가 이 Windows 7에서의 디버거 오작동을 패치하는 것입니다.

RAD Studio 2007 Debugger Fix for Windows 7
http://cc.embarcadero.com/item/27521

비공식 패치이기 때문에, 자동 업데이트로 제공되지 않으며 알려주지도 않습니다. 반드시 수작업으로 다운로드하여 직접 파일을 덮어씌워야 합니다.

이와 동일한 문제에 대해 Delphi/C++Builder 2009 버전에 대해서는 지난 12월 7일에 공식 핫픽스 소식을 알려드렸었습니다.
http://blog.devgear.co.kr/imp/entry/DelphiCBuilder-2009-핫픽스-2

Delphi와 C++Builder의 2007 버전은, 아직 정상적으로 판매되고는 있으나 공식 지원은 종료된 상태입니다. 정확하게 따지면 디서포트(De-Supported) 상태입니다. 이번 패치가 '비공식'인 이유도 지원 기간이 끝났기 때문이구요. (반면 2009 버전은 현재 패시브 상태에 있어서, 핫픽스나 서비스 팩은 제공되지 않지만 기술지원은 되고 있습니다)

물론, Windows 7을 공식적으로 지원하는 Delphi/C++Builder 2010에서는 아무 해당 사항이 없는 얘기죠.
2009/12/24 18:41 2009/12/24 18:41

trackback :: http://blog.devgear.co.kr/imp/trackback/120

볼랜드/엠바카데로 개발툴들에 대해, 원칙적으로 기술지원이라고 하는 것은 원래는 본사에서 제공하는 기술지원을 말합니다. 그런데 현실적으로 한국 지사(지금은 데브기어)에서 본사의 딱딱한 기술지원만 제공할 수는 없기 때문에, 지사 차원의 기술 지원을 추가로 제공하고 있습니다.

또, 본사의 기술지원 기준에서는, 개발툴 제품만 구입한 경우에는 기술지원이 제공되지 않습니다. SA(메인터넌스라고도 합니다)를 함께 구입한 경우에만 기술지원이 제공되죠. 하지만 데브기어에서는 지사 차원에서 자체적인 추가 기준을 마련하여 기술지원을 제공하고 있습니다. (물론 SA를 함께 구입하신 경우에는 더 많은 지원과 교육을 받을 수 있습니다)

아래 링크의 글은, 현재 정식 기술지원이 제공되는 Delphi, C++Builder의 버전들에 대한 내용입니다. (조금 전에 번역해놨습니다)

Delphi/C++Builder/JBuilder/InterBase 지원 버전들
http://support.embarcadero.com/article/40286

델파이와 C++빌더에 대한 부분만 발췌하면 다음과 같습니다.

Delphi

제품

Active

Passive

De-Supported

Delphi 2010 2009년 8월    
Delphi 2009 2008년 9월 2009년 9월  
Delphi 2007 for Win32 2007년 4월 2008년 12월 2009년 12월
Delphi 2006 2005년 12월 2008년 4월 2009년 8월
Delphi 2005 2004년 10월 2006년 1월 2008년 12월
Delphi 8 for Microsoft .NET 2003년 12월 2005년 12월 2008년 12월
Delphi 7 2002년 8월 2005년 12월 2008년 12월
Delphi 6 및 이전 버전들 2001년 5월 2002년 8월 2003년 8월

C++Builder

제품

Active

Passive

De-Supported

C++Builder 2010 2009년 8월    
C++Builder 2009 2008년 9월 2009년 9월  
C++Builder 2007 2007년 6월 2008년 12월  
C++Builder 2006 2005년 12월 2008년 4월 2009년 8월
C++BuilderX 1.x 2003년 9월 2006년 1월 2007년 1월
C++Builder 6.0 2002년 2월 2004년 10월 2008년 12월
C++Builder 5.0 및 이전 버전들 2001년 10월 2002년 2월 2003년 2월

액티브 지원 / 패시브 지원 / 디서포트에 대해 간략히 설명하자면.. 액티브 지원 상태인 경우에만 서비스팩이나 핫픽스 등을 제공합니다. 그리고 액티브에서 패시브 상태까지는 본사에서 기술지원을 접수받고 처리하고요. 디서포트로 넘어가면 접수는 하지만 답변을 할 의무가 없습니다.

각 버전에 대해 시기별로 액티브 지원, 패시브 지원, 디서포트 등이 명시되어 있는데요. 요약해서 말하자면, 델파이와 C++빌더의 2010은 현재 액티브 지원 상태이며, 2009는 패시브 지원, 2007 버전은 디서포트 상태입니다.

델파이 7과 C++빌더 6의 경우 단종되었다가 다시 판매하고 있습니다만 이 두 버전은 모두 2008년 12월부로 디서포트 상태로 넘어가 있습니다. (이 두 버전은 통상적인 경우보다 패시브까지의 지원 기간이 많이 연장되었었는데, 이 두 버전에만 적용되었던 예외적인 경우이고 일반적이지 않습니다)

통상적으로는, 현재 최신 버전은 액티브 지원 상태, 그 이전 버전은 패시브 지원 상태(2년 이내일 경우), 그리고 2년이 지나고 나면 디서포트로 넘어갑니다.

제품 릴리즈와 버전, 기술지원의 용어에 대한 설명은 아래 글에서 자세히 설명되어 있습니다.
http://support.embarcadero.com/article/39984

물론 이건 본사의 기준이구요. 데브기어에서는 구버전이라고 해도 최대한의 기술지원을 제공하고 있습니다. 다만 서비스팩이나 핫픽스의 경우는 데브기어 자체적으로 만들어서 배포할 수는 없는 것이므로(간혹 긴급 패치는 만들어 제공하기도 합니다) 알고는 계셔야 하겠네요.
2009/12/23 16:26 2009/12/23 16:26

trackback :: http://blog.devgear.co.kr/imp/trackback/121

올해 말, 그러니까 2주 정도 지나고 나면 델파이 2005를 비롯한 그 이하 버전들은 델파이/C++빌더 2010으로 업그레이드 할인을 받을 수 없게 됩니다. 구버전이 있어도 신규사용자용(New User) 제품을 구입해야 하죠. 이미 여러 차례 뉴스레터가 나갔기 때문에 대부분 아실 겁니다. 10월 말에 여기 블로그에도 썼었구요.
http://blog.devgear.co.kr/imp/entry/DelphiCBuilder-2005-이하-업그레이드-할인은-연말까지만

엔터프라이즈 에디션을 기준으로 할 때, 업그레이드 할인 가격은 신규사용자용 제품 가격의 70% 정도입니다. 그러니까, 구버전을 가지고 있으면서 내년에 델파이/C++빌더 2010을 구입할 계획이라면 빨리 서둘러야 합니다.

그런데, 2010 버전이 아니라 만약 내년에 출시될 차기 버전을 기다리는 경우라면? 참고로 말씀드리면, 올해의 경우 델파이/C++빌더 2010은 8월 말에 발표되었는데요. 차기 버전에서는 MacOSX, 리눅스, 아이폰 버전까지 같이 개발중이기 때문에 올해 발표 시기보다는 조금 정도는 늦어질 가능성이 높습니다. 그래서 빠르면 2010년 가을, 늦으면 2010년 말 정도에 발표된다고 보고 있습니다. (더 늦어져서 해를 넘길 가능성은 거의 없습니다)

참고로, MacOSX, 리눅스, 아이폰 버전의 경우, 본사의 전략에 따라, 현재의 윈도우 버전 델파이/C++빌더와 통합 패키징되어 판매될 수도 있고 아니면 별도 제품으로 분리될 수도 있습니다. 이건 완전히 전략 상의 문제인데... 제 개인적으로는 별도 제품으로 분리될 가능성이 좀 더 높지 않을까 생각됩니다.

어쨌든... 내년에 발표될 2011 버전에서 개선될 기능들도 많을 것이기 때문에, 내년으로 제품 구입을 미루는 것은 뭐 있을 수 있는 일입니다. 그런데, 구버전 업그레이드 할인이 올해 말로 종료되기 때문에, 구입 전략을 바꿀 필요가 있습니다.

개발툴 구입과 함께 구입할 수 있는 옵션으로, SA, 혹은 메인터넌스가 있습니다. 이 메인터넌스를 구입했을 때의 혜택은 두가지인데요. 첫째는 기술 지원을 제공한다는 것이구요. (원래 미국과 유럽 등 해외에서는 개발툴 구입에 대해 기술지원이 제공되지 않지만 저희 데브기어에서는 개발툴 구입만 해도 기술지원을 제공하기 때문에 이 첫번째는 큰 의미가 없습니다) 두번째는 지정한 기간 동안(통상 1년) 출시되는 신규 버전을 무료로 업그레이드를 제공한다는 것입니다. 다시 말해, 지금 메인터넌스를 함께 구입하면 내년 2011 버전도 무료로 받을 수 있습니다.

이 메인터넌스 옵션은 1년 기준으로 할 때 가격이 신규사용자용 제품 가격의 30% 정도입니다. 30%라는 가격 설정은 본사에서 한 것인데, 아주 전략적이죠. 업그레이드의 할인 가격이 70% 가격이니까, 개발업체가 매 2년마다 한번씩 업그레이드를 하려고 한다면, 30%+30%니까 60%가 되죠. 그러니까 업그레이드 단품을 구입하는 것보다 10% 싸면서도 중간의 한 버전도 빼지 않고 다 사요할 수 있게 되는 겁니다. 다시 말해, 2년마다 업그레이드하려고 한다면 메인터넌스 옵션이 가격면에서도 혜택 면에서도 더 유리합니다.

그런데, 올해 말까지로 구버전의 업그레이드가 종료되기 때문에, 여기서 재미있는 부작용이 생겼습니다. 구버전으로부터의 업그레이드 할인을 적용받을 때 가격이 신규사용자용 제품의 70%인데, 메인터넌스 옵션의 가격이 30%이므로, 합치면 신규사용자용 가격과 같아지는 겁니다. 만약 업그레이드를 내년의 2011 버전 출시 이후로 미룬다면 그냥 그때 신규사용자용만 사용하게 되는 거고, 반면 지금 업그레이드하면 같은 가격으로 메인터넌스까지 포함해서 당장 2010 버전을 사용하고 또 2011 버전도 사용할 수 있게 됩니다.

그러니, 지금 2010 버전으로 업그레이드를 망설이다가 내년 2011 버전으로 미루려고 한다면, 그럴 필요가 전혀 없습니다. 지금 구입하면 같은 금액으로 두배의 혜택을 받을 수 있으니까요.

2009/12/18 14:55 2009/12/18 14:55

trackback :: http://blog.devgear.co.kr/imp/trackback/119

제 업무 특성상 하루에도 아주 많은 도움 요청을 받습니다. 가급적 답변에 하루를 넘기지 않으려고 노력하지만, 요즘은 일주일에 두차례씩 외부 개발 컨설팅을 나가고 있어서 보통은 하루나 이틀 정도가 흐른 다음에야 답변을 하고 있습니다. 양해를 부탁드립니다.

오늘 질문받은 건 중에, 현재 데이터베이스 연결에 BDE를 사용중인 프로젝트가 있는데 BDE를 마이그레이션하는 데 대한 조언을 요청한 건이 있어서, 이에 대한 내용을 써볼까 합니다.

왜 BDE를 제거해야 하는가

먼저, 왜 BDE를 들어내야 하는지에 대해 써보죠. 아시다시피 BDE는 2002년 델파이 7이 출시되면서 RDBMS에 대한 연결 지원이 중단되었습니다. 쉽게 말해서 오라클, MS SQL, 사이베이스, DB2 등의 데이터베이스로 연결할 수 없게 되었다는 것입니다. BDE의 SQLLinks가 바로 이런 RDBMS로의 연결을 담당하는 부분인데, 델파이 7 버전부터는 이 SQLLinks가 제거되었습니다.

이에 대해서는 2002년에 볼랜드포럼의 주요 뉴스로 올린 적이 있으니 자세한 내용은 링크를 참고하실 수 있습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=news&no=93

물론 굳이 사용하려면 편법은 있습니다. 델파이 6까지의 BDE에는 여전히 SQLLinks가 포함되어 있으므로, 구버전 라이선스가 있다면 구버전을 먼저 설치하고 그 이후에 신버전을 설치하면 구버전의 SQLLinks를 그대로 사용하여 BDE로 RDBMS를 그대로 연결할 수 있습니다.

구버전 라이선스가 없을 경우에 BDE의 SQLLinks를 따로 복사하여 쓰는 것이 기술적으로는 가능하지만 라이선스 위반이 됩니다. 이런 경우에는 반드시 제게 연락하여 사전 양해를 받아야 하며 그렇지 않은 경우 불법이 됩니다.

그러면, 이런 방식으로 BDE를 계속 사용할 수 있는 것일까요? 그래도 여전히 문제들이 남습니다.

1. 데이터베이스 버전 문제
BDE는 1999년에 마지막으로 버전업이 되었고, 2001년 델파이 6 버전에서 마지막으로 지원되었던 만큼, 당연히 각 데이터베이스들의 지원 버전도 1999년 당시로 그대로 머물러 있습니다. 오라클의 경우를 보자면 오라클 8 버전까지만 지원하고, SQL 서버도 2000 버전까지만 지원합니다. 당연히 사이베이스나 DB2의 경우도 당시 버전까지만 지원하죠.

새로운 데이터베이스 버전에는 새로운 데이터 타입이 많이 추가됩니다. 오라클에서도 MS SQL에서도 각 버전마다 중요한 새로운 타입들이 많이 추가되어 있습니다. 만약 오라클 데이터베이스에 오라클 9 이후로 추가된 필드 타입이 있다면, BDE에는 그 타입에 대응하는 내부 처리가 되어 있지 않으므로 BDE에서 처리할 수 없게 됩니다. (아마 친숙한 Access Violation이 뜨게 될 겁니다)
그러면, 이런 새로운 타입을 가진 필드들을 아예 사용하지 않으면 되지 않겠느냐, 물론 그렇습니다만, 그렇게 새로운 필드 타입들을 피해간다면 새로운 버전의 데이터베이스를 사용하는 효과도 반감될 것입니다. 또 델파이나 C++빌더로 개발된 이외의 웹 같은 다른 시스템들도 있어서 그쪽에서도 데이터베이스를 다루어야 하는 경우, 그쪽 시스템 담당자들은 왜 구닥다리 버전의 델파이나 C++빌더 시스템 때문에 우리 시스템이 피해를 봐야 하느냐고 불평하거나 반발할 것입니다.

2. 윈도우 버전 문제
BDE는 그 마지막 버전 조차도 윈도우 XP 이상의 버전에 대해서는 아무런 동작 보장을 하지 않습니다. 볼랜드/엠바카데로에서 BDE의 마지막 버전을 내놓은 것이 2001년이므로 당연히 윈도우 비스타와 윈도우 7, 윈도우 2003 서버 등에 대해서는 테스트 자체가 안되었습니다. 따라서 윈도우 비스타와 윈도우 7에 대해서는 아직 알려지지 않은 문제가 발생할 수도 있습니다.

예를 들면 BDE에서는 비스타 이상의 보안 구조를 전혀 고려하지 않고 개발되어 있는데, 그런 이유로 BDE를 사용하기 위해 프로그램을 구버전 델파이로 개발한 개발자가 사용자에게 UAC를 끄라고 조언하는 경우가 종종 있습니다. 이건 아주 위험한 시도인데요, 심각한 문제로 비화될 수 있습니다. 개발자가 사용자에게 UAC를 끄라고 조언한 경우, 그로 인해 비전문가인 사용자가 바이러스나 해킹에 노출되어 피해를 입었다면, 개발자를 대상으로 법적으로 고소하는 것이 충분히 가능합니다. 이게 한두 명의 개인 사용자가 아니라 수십, 수백, 수천명의 기업 사용자가 사용하는 업무 시스템이라면 어마어마한 손해배상을 해야 할 수도 있겠지요.

3. 64비트 문제
특히 BDE는 64비트에서는 전혀 사용이 불가능합니다. BDE는 최초 버전이 16비트로 개발되었고, 32비트로 포팅된 후에도 마지막 버전까지도 16비트 코드가 상당히 남아있습니다. 16비트 코드는 64비트 OS에서 전혀 운영이 안됩니다. 따라서 윈도우 7 64비트 버전에서는 운영이 전혀 불가능합니다. 이런 경우라면 BDE를 무조건 다른 기술로 마이그레이션해야 합니다.

개발자 여러분이 BDE를 사용하여 개발해서 내놓은 소프트웨어를 사용자가 64비트 윈도우에서 사용하려 한다면 당연히 제대로 동작하지 않습니다. 패키지/솔루션 소프트웨어이든 혹은 SI 성격의 업무개발 시스템이든 그 사용자는 강하게 반발할 것입니다. 현재 버전의 델파이는 32비트 개발툴이기는 하지만 개발된 소프트웨어는 64비트 윈도우에서 아무 문제 없이 실행되는데, BDE를 사용하게 되면 문제가 생기게 되는 거죠.

그럼 대안은?

볼랜드에서도 그랬고, 지금 엠바카데로에서도 BDE의 공식적인 대안으로 dbExpress를 강력하게 추천하고 있습니다. 그리고, 그 외에 또다른 범용 데이터베이스 연결 방법으로 ADO가 있죠.

아무래도 ADO를 조금이라도 써본 분이 적지 않을 것이기 때문에, BDE를 들어내려면 ADO가 먼저 대안으로 떠오르는 것이 당연할 것입니다. 그런데 ADO나 dbExpress나 BDE로부터 마이그레이션하는 데 드는 노력은 별 차이가 없습니다. 그리고 지원하는 데이터베이스 면에서는 둘다 약간 차이는 있지만 메이저 데이터베이스는 두루 다 지원한다는 면에서는 별 차이가 없습니다.

그럼, 아무래도 더 친숙한 ADO를 선택해도 되지 않을까요? 하지만 여기에는 몇가지 고려해야 할 점들이 있습니다.

1. 멀티티어로의 전환 문제
최근 버전인 델파이 2009와 델파이 2010에서, 델파이와 C++빌더의 멀티티어 기술인 DataSnap이 전면 재개발되면서, 이전의 COM 의존의 무겁고 기능성이 부족하던 방식에서 가볍고 강력한 멀티티어로 탈바꿈되었습니다. 당장 저 자신부터, 이전에는 MIDAS/DataSnap이 너무 무겁고 기능도 떨어져서 대안으로 서드파티 멀티티어 기술을 사용했었지만, 이제는 새로운 DataSnap 2010을 사용하고 있는데, 아주 만족스럽습니다.

그런데 이 새로운 DataSnap 2010이 강력하기만 할 뿐 아니라, dbExpress를 너무나 멋지게 활용해서, 기존에 dbExpress를 사용하던 프로젝트라면 DataSnap 2010 기반의 멀티티어 방식으로의 전환이 아주 쉬워졌습니다. 어디까지가 dbExpress이고 어디부터가 DataSnap 2010인지 잘 구별조차 안될 정도로 빈틈없이 잘 통합되었답니다.

2. ADO 자체에 대한 의존성의 문제
ADO를 사용하게 되면 당연히 MS 기술에 대한 의존성이 생깁니다. ADO 자체적으로는 SQL 서버나 액세스 외에 다른 데이터베이스도 지원을 하기는 합니다만, 아무래도 ADO로 오라클이나 DB2 등 다른 DB로 연결하면 특정 경향을 타거나 오작동할 우려가 있습니다. ADO 자체가 MS의 DB만을 고려하여 최적화된 엔진이기 때문입니다.

예를 들면, 지난 6월에 MS는 오라클에 대한 ADO.NET 드라이버 지원을 아예 끊겠다고 일방적으로 발표한 바 있습니다.
http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx

3. 윈도우에 대한 의존성의 문제
당연하지만 ADO는 플랫폼 의존성이 있습니다. (물론 BDE도 그랬습니다) 윈도우 이외의 OS는 전혀 꿈도 꿀 수 없게 됩니다. 반면 dbExpress는 플랫폼 독립적으로 만들어졌습니다. 지금은 단종되었지만 리눅스용 델파이인 카일릭스가 dbExpress로 델파이와 거의 완벽하게 호환되었었습니다. 물론 카일릭스는 지금 단종되었지만...
 
아시다시피 내년이면 델파이가 크로스플랫폼으로 갑니다. 리눅스 버전이 다시 나오고, MacOSX, 아이폰까지 지원합니다. 그 이후로 줄줄이 다른 OS 버전들이 계속 개발될 것입니다.
http://blog.devgear.co.kr/imp/entry/MacOSX와-Linux를-위한-Delphi와-CBuilder

당연하게도, dbExpress로 마이그레이션 하면 지금까지 개발한 소스들을 이런 플랫폼으로 쉽게 옮길 수 있지만, ADO로 작업하면 다시 또 dbExpress로 마이그레이션해야 합니다. 또, 당장 델파이의 형제 툴로서 닷넷용 개발툴인 델파이 프리즘에서도 dbExpress를 이용하고 있습니다.
 
개발자 여러분이 일하고 있는 업계에 따라 당장 리눅스와 MacOSX, 아이폰에 대해 큰 수요가 없을 거라고 생각하실 수도 있지만, 최근 3~4년 사이에 리눅스도 약진했고 Mac의 점유율은 더욱 크게 급등했습니다. 아직 우리나라에서는 크게 느끼기 힘든 수준이지만, 글로벌 시장에서는 MS의 윈도우 점유율이 상당히 크게 떨어지고 있습니다. 이미 일본 등 해외쪽으로 소프트웨어를 수출하는 업체들에서는 윈도우 버전밖에 없다는 이유로 거절당하는 사례도 종종 나오고 있습니다.
 
이런 여러가지 면들을 고려하면...
굳이 dbExpresss 대신 ADO를 사용해서 크로스플랫폼으로 쉽게 갈 수 있는 기회를 스스로 차단할 필요가 있을까요...?

2009/12/18 14:42 2009/12/18 14:42

trackback :: http://blog.devgear.co.kr/imp/trackback/118

데브기어에서는 내년 1월, 2월 각 1개월간에 걸쳐 졸업 예정인 대학생들을 대상으로 델파이 무료 교육 과정을 진행합니다. 이 1개월 과정에 대해 비용은 전액 무료이며, 정상 수료 이후에는 델파이를 사용하는 우수 기업들로 전원 취업 알선까지 실시합니다.

이번 델파이 개발자 양성 대학생 교육 과정은 현재 극도로 부족한 초중급 Delphi 개발자를 양성하여 Delphi 사용 기업들의 수요를 맞추고, 동시에 의욕 있는 젊은 대학생들의 취업 활동을 지원하여 조금이나마 사회에 기여하기 위한 것입니다.

대학생 분들은 첨부한 공문을 프린트하여 소속 학교 전산 계열 학과에 전달하여 학과 사무실 등에 게시할 수 있도록 해주시면 좋겠습니다. 전국의 모든 대학교, 대학의 전산 계열 학과 대상이므로, 많이 알려지면 많이 알려질 수록 좋습니다.

2009/12/17 10:14 2009/12/17 10:14

trackback :: http://blog.devgear.co.kr/imp/trackback/117

지난 밤 사이에 Delphi/C++Builder 2010의 업데이트 4와 업데이트 5, 그리고 부스트 업데이트가 공개되었습니다. Delphi/C++Builder 2010 프로그램 그룹의 Check for Update를 클릭하여 업데이트를 바로 진행할 수 있구요.

사용자 삽입 이미지

혹은, 아래 링크를 통해 업데이트 파일을 다운받아 직접 설치할 수도 있습니다. (116MB)
업데이트4/5, 부스트 업데이트 다운로드 : http://cc.embarcadero.com/item/27492

사용자 삽입 이미지

업데이트 적용 이후에 빌드 넘버는, 보시다시피 14.0.3615.26342 입니다. 업데이트 이전의 빌드 넘버는 14.0.3513.24210 이었구요. 뭐 굳이 빌드 넘버를 찾아보지 않아도, 그 아래에 설치된 업데이트 리스트가 나오니까 알아보기 쉽죠.

난데없이 갑자기 왜 업데이트 4, 5인지 난감하실텐데, 몇주 전에 업데이트 2, 3가 잠깐 공개되었다가, 등록 문제 때문에 삭제되었기 때문입니다. 이번 업데이트 4, 5는 물론 이전의 업데이트 2, 3의 내용을 모두 포함하고 있습니다.

참고로, 업데이트 1은 지난 9월에 공개되었는데, 라이선스 등록 관련의 심각하지 않은 업데이트였기 때문에 자동 업데이트로 제공되지 않았었습니다. 아래는 당시에 썼던 블로그 글 링크...
http://blog.devgear.co.kr/imp/entry/DelphiCBuilder-2010-업데이트-1-발표

이번에도, 업데이트 4는 일반 업데이트이며 업데이트 5는 데이터베이스 업데이트로 구성되었습니다. 따라서 개별적으로 따로 설치할 수는 있지만, 업데이트 5의 내용이 업데이트 4에 의존하므로 반드시 업데이트 4는 설치해야 합니다. 또한 부스트 업데이트의 경우, 업데이트 4에 의존하므로(C++ 컴파일러가 업데이트되었습니다) 반드시 업데이트 4를 설치한 후에 설치해야 합니다.

아래는 이번 업데이트들에서 픽스된 버그 리스트입니다.
Delphi 버그 픽스 : http://dn.embarcadero.com/article/40204
C++Builder 버그 픽스 : http://edn.embarcadero.com/article/40205/

이번 업데이트들에 대한 자세한 내용은 아래 readme에서 보실 수 있습니다.
http://dn.embarcadero.com/article/40174

아래 글에서는 업데이트 4의 내용에 대해 좀 더 간략하고 친절하게(?) 설명해주고 있습니다.
http://blogs.embarcadero.com/chrishesik/2009/12/14/35072
2009/12/15 11:38 2009/12/15 11:38

trackback :: http://blog.devgear.co.kr/imp/trackback/115

TEdit나 TMemo 등의 컴포넌트에서 현재 한글이 조합중인지 확인하려고 하니 마땅한 함수가 없더군요. 그래서 Win32 SDK의 IME 관련 함수들을 뒤져서 이 목적으로 적당히 쓸만한 함수를 하나 만들어봤습니다. (윈도우 IME의 버그를 추적하면서 이것저것 테스트해보느라 만들었습니다)

아래 IsInComposition 함수를 호출하면서 인자로 해당 에디트나 메모의 핸들을 넘겨주면 됩니다. 조합중일 경우 true, 조합중이 아닌 경우 false를 리턴합니다.

아래 함수의 핵심은 IME 관련 Win32 함수인 Imm32GetCompositionString 함수인데, 이 함수는 원래는 조합중인 글자를 알아내는 함수이구요. 이 함수의 리턴 값이 조합중인 글자의 길이입니다. 따라서 조합중인 글자가 없을 경우 당연히 0이 리턴되겠죠.

uses imm;

function IsInComposition(hWnd: HWND): boolean;
var
  H: HIMC;
  buff: array[0..1] of char;
  len: integer;
begin
  result := false;
  H := Imm32GetContext(hWnd);
  if H <> 0 then
  begin
    len := Imm32GetCompositionString(H, GCS_COMPSTR, @buff, 2);
    result := len > 0;
    Imm32ReleaseContext(hWnd, H);
  end;
end;

델파이 2010과 2009에서만 테스트해봤는데, 뭐 코드로 봐서는 그 이전 버전이라도 제대로 동작하지 않을 이유는 없을 거 같네요.

저처럼 IME 기능을 추적하는 용도 이외에 이런 함수를 쓸 일이 있을지는 잘 모르겠지만... ^^;;;;

2009/12/15 03:26 2009/12/15 03:26

trackback :: http://blog.devgear.co.kr/imp/trackback/113

저희 데브기어에서 무료 데이터 모델링 교육이 있는데... 12월 22일, 23일 이틀간입니다.
어제 오후에 안내 메일이 나갔는데요. 발송된 메일 내용은 아래와 같습니다.
http://www.devgear.co.kr/newsletter/20091210_data_modeling_lecture.html

근데... 어마어마하게 교육 신청이 들어와서, 불과 몇시간만에 인원이 다 차버렸습니다. 그래서 수십 명이 접수가 안되었는데요. 이거 뭐.. 로또 아파트 청약 현장도 아니고... -.-;;;;

데이터 모델링이 그렇게 인기가 좋은가... 아님 무료라서 그런가... ㅎㅎ
어쨌든, 제가 직접 담당하는 업무는 아닙니다만 저희 회사에서 하는 일인데 잘 되는거 같으니까 뭐 기분이 좋기는 하네요.

그래서... 데이터 모델링 추가 교육 일정을 잡는다고 합니다. 이건 공지 메일은 안보내고요, 회신이 늦어서 접수가 안된 분들께만 따로 개인 메일을 보내서 교육을 진행하는데요. 설마 다 들어오시지는 않겠지요. 몇명 정도는 여유가 생길 수 있겠지요.

그래서, 이 2차분 교육 건에 대해서는 따로 공지는 하지 않고, 제 블로그를 방문해주시는 분들께만 살짝 따로 알려드리는 겁니다. 2차분 교육은 12월 29일, 30일 양일간입니다. 이번에도 금방 인원이 다 찰 수도 있으니, 관심있으신 분은 빨리 접수하시기 바랍니다.
2009/12/11 16:54 2009/12/11 16:54

trackback :: http://blog.devgear.co.kr/imp/trackback/112

델파이나 C++빌더의 IDE 안에서 프로젝트를 Run으로 실행시킨 경우인지 여부를 코드에서 확인해야 할 경우가 있습니다. 물론, 컴파일된 모드가 디버그 모드인지 릴리즈 모드인지를 확인하기 위해서는 컴파일러 디렉티브 _DEBUG를 쓰면 되는데요.

디버그 모드로 컴파일되어있는지가 아니라 IDE 안에서 Run으로 실행된 경우, 즉 현재 디버깅 진행중인지를 알아내려면 전역변수 DebugHook의 값을 검사하면 됩니다. 이 DebugHook의 값이 0보다 크면 디버깅 중인 것입니다.

델파이라면...
procedure TForm1.Button1Click(Sender: TObject);
begin
  if DebugHook>0 then
    ShowMessage('디버깅 중입니다.');
end;

C++빌더라면...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(DebugHook>0)
    ShowMessage("디버깅 중입니다.");
}

참고로 이 DebugHook 전역변수는 System.pas에 정의되어 있습니다. 델파이3와 C++빌더3 이상의 모든 버전에서 사용하실 수 있습니다.

2009/12/11 13:33 2009/12/11 13:33

trackback :: http://blog.devgear.co.kr/imp/trackback/111