전 예전엔 Visual FoxPro(VFP)를 주력으로 썼는데 파워빌더는 다른 프로젝트 때문에 조금 써보다가 VFP에 비해 불편하고 속도도 느려서 별 메리트를 못 느꼈습니다.
솔직히 지금도 DB검색속도만 따진다면 FoxPro가 제일 낫다는 생각입니다.
아무튼. DB개발툴을 쓰다가 C++ Builder를 접하면 맨처음에 오는 거부감인 것 같군요. 저 역시 그랬으니까요.
딱히 '해답'을 말씀드리기는 좀 어려워 보입니다.
VFP의 경우 네이티브 DB를 쓰는 경우 말씀하신 내용처럼 매우 빠르고 간편하게 코딩을 할 수 있지만 BCB의 경우 BDE나 ADO,ODBC등을 거치게 되고 여기서 오는 속도 손실은 만만치 않죠.
처음 BCB로 넘어오는 과정에선 적당한 컴포넌트를 구하는 것이 가장 빠른 방법인 듯 합니다. 레포트 관련 상용 컴포넌트를 구입한다든지..
제가 드릴 수 있는 답변이 도움이 될 지는 모르겠지만 일단 항목별로 답변을 해 보죠.
1. 중복데이터 제거
이건 솔직히 DB설계의 잘못이라고 보는게 맞습니다. 중복데이터가 들어가지 않게 정교한 DB설계로 극복해야 하는 문제죠. DB구조 설계로 커버되지 못하는 경우 DB의 Validation코드나 트리거 코딩, 각종 RI코드나 StoredProc를 총 동원하고 그래도 막을 수 없다면 데이터 입력 프로그램에서 빈틈없이 처리해 줘야 합니다.
실제 중복데이터를 제거하는 작업에서 VFP같은 경우 ODBC/ADO등을 거치지 않고 Locate / Seek / Find / Go 명령 등으로 직접 레코드에 접근할 수 있기 때문에 상대적으로 중복데이터 제거가 빠를 수 밖에 없습니다. 물론 VFP가 이렇게 접근할 수 있는 DB는 로컬DB죠(리모트도 비슷하게 동작하긴 하지만 로컬만큼 속도가 나오진 않습니다)
이런 작업을 위해 하나하나 SQL로 처리하는건 당연히 엄청 느려집니다.
좀 부담이 가더라도 SQL로 중복데이터 판단에 필요한 필드만(데이터 전송량을 줄이기 위해) 몽땅 가져온 다음에 TDataSet에서 위의 명령에 대응하는 메소드(Next(), Prev(), Locate()...)로 레코드 포인터를 이동하면서 처리하는게 오히려 더 빠를겁니다.
만일 접근하는 DB에 대한 로레벨 API가 따로 제공이 된다면 그것을 이용해서 접근하면 더욱 처리할 수 있겠죠.
2. 특정 칼럼의 데이터 변형(다른 칼럼의 데이터를 이용해서)
말씀하신 것 처럼 Calc필드를 쓸 수도 있겠습니다만..
VirtualTreeview와 같은 컴포넌트를 쓸 수도 있습니다.
물론 VirtualTreeview는 DB전용이 아니기 때문에 자체적으로 DB와 연동하는 기능은 없지만 이를 기반으로한 DB관련 컴포넌트들도 있고, 정 안되면 직접 만들면 그만이죠.
VirtualTreeview의 경우 각 셀의 내용을 화면 표시하는 과정에서만 접근하기 땜시.. 이걸로 Calc필드를 구성하면 속도는 어마어마하게 나옵니다.
일단 TDataSet에서 데이터를 퍼 오는 방법을 효율적으로 구성해야 하고 그 다음에 그걸 빠른 속도로 뿌려주는건 각종 컨트롤을 얼마나 잘 활용하느냐에 답이 있을겁니다.
3. 가공한 칼럼 복사
솔직히 이건 무슨 내용인지 잘 모르겠습니다.
가공한 칼럼을 새로 DB에 집어 넣는다는 말씀이신 것 같긴 한데...
DB기반 프로그래머들은 자료구조 대신 DB를 쓰려는 경향이 있습니다. 그래서 BCB를 맨 첨에 쓸 때 좀 당혹스러웠는데.. 요즘엔 DB자체를 솔직히 잘 안쓰죠. ^^ 다른 효율적이고 좋은 방법이 얼마든지 있으니..
4. 디자인 기능
어떤 디자인인지 잘 모르겠습니다. 프로그램화면 디자인인지 아니면 레포트 디자인인지..
레포트 디자인은 어떤 컴포넌트 쓰냐에 따라 천차만별.. 그러니까 별로 상관 없다고 보고
프로그램 디자인 기능이라면.. 과연 빌더를 따라올만한 개발툴이 있는지 모르겠네요.
VCL컴포넌트의 경우 윈도우프로시저까지 다 갈아치울 수 있는 구조이기 때문에 파워빌더나 VFP의 각종 컨트롤과는 비교 대상이 안됩니다. 자신이 원하는 어떤 모습으로라도 다 만들어 줄 수 있죠.
그게 귀찮으면 잘 만들어진 컴포넌트들 구해서 쓰면 되고.
5. 리포트 기능
리포트기능은.. 가장 간편한건 컴포넌트 쓰는거죠.
그렇지만 당연히 C에서는 프린터에 로레벨로 접근도 가능하기 땜시.. 안되면 되게 할 수 있죠.
리포트기능은 저도 많이 안써봐서리.. ^^
단지, 하나만 말씀드리자면.. 윈도우에서의 프린팅은 DC를 사용하죠. 화면에 그림그리듯이 프린터 DC에 그림 그리면 그대로 출력됩니다. 프린터 DC 얻어서 원하는대로 그려주면 되니까 일단 출력 못하는건 없다는 전제를 깔 수 있습니다.
4GL개발툴과는 차이가 나는 부분이죠. 따라서 자신이 원하는 기능을 충실하게 구현하고 있는 컴포넌트를 구입하거나 구해서 쓰면 되고 거기서 안되면 좀 더 로레벨로 접근하시면 됩니다.
정리하자면...
BCB는 파워빌더나 VFP와 같이 특정 분야에 최적화된 개발툴은 아닙니다. 하지만 C++라는 언어가 가진 유연성, 선택성, 그리고 성능! 여기에 덧붙여 툴의 편리함이 더해진 그런 개발툴이기 때문에 각 분야에 최적화된 각종 컴포넌트들이 만들어 질 수 있고, 실제로 많이 제작되어 있습니다.
반대로 얘기하자면 워낙 그런 컴포넌트들이 많기 때문에 실제 개발자들도 자신이 관심있는 분야가 아니라면 다른 분야의 컴포넌트들에 대해 잘 알지 못합니다.
(저도 사실 예전엔 DB프로그래밍에 관심이 많았지만 지금은 별 관심이 없죠.. 그래서 그쪽 관련 컴포넌트들은 잘 모릅니다)
일단 본인이 직접 관련 자료들을 많이 수집해 보셔야 할 것 같구요.. 빌더의 기본 탑재된 컴포넌트나 클래스들도 어떻게 사용하느냐에 따라 성능이 천차만별이기 때문에 (화면표시만이 목적인 경우 데이터셋을 양방향이 아니라 단방향으로 설정하면 훨씬 빨라지죠, dbExpress를 쓰면 또 훨씬 빨라지죠.. 기타등등) 먼저 기본에 충실하게 공부 하시다 보면 자연스럽게 해결책이 쏟아져 나오리라 확신합니다.
아무튼.. DB개발툴에서 BCB로 옮겨온 선험자로서.. 한말씀만 더 드리자면.. 걍 BCB 본격적으로 하시면 정말 재밌을겁니다. '자유'가 뭔지 알게되죠.
즐프하세요
|