Q&A

  • 이런건 DLL로 만들때 어떻게 처리하시나요?
안녕하세요.
먼저, 제목에 요점이 없어서 죄송합니다. ^^

회사에서 단 한명뿐인 개발자입니다. 중대형급 서점에서 근무하고 있습니다.
환경은 델파이7+오라클9i를 사용하고 있습니다.

사내에서 사용하고 있는 프로그램이 MDI방식이고 내부에 사용되는 메뉴는 약 60여개가 됩니다.
실행파일을 만들면 약 11메가짜리 파일이 나오고, upx등으로 실행파일 압축하면 약 2.5메가짜리
파일이 최종적으로 만들어지죠.

어느날, 각 모듈들을 DLL로 만들면 좋겠다고 생각하고 작업할려고 했는데..
오라클에 붙는 컴포넌트가 ODAC입니다(tcp/ip방식으로 ip주소와 포트로 바로 접속하는 컴포넌트)
공통라이브러리로 DataModule을 빼내고 생성되는 메뉴(DLL)마다 이 DataModule이
붙어야 하는데..
DLL마다 새로 DM이 열리게 되면 오라클 세션을 하나씩 잡아먹을것 같아서요.
사실 아직 확인은 못해봤습니다만, 이 부분에 대해 지식이 있으시면 좀 알려주세요.

폼이 열릴때마다 ODAC 컴포넌트에 연결해서 사용하게 된다면..
서버에 엄청난 세션이 열리지 않나요?
매장내 컴퓨터가 약 30여대 가까이 됩니다. 한 컴퓨터당 적어도 3-4개의 폼을 띄우고 있다고 생각하면
세션은 거의 100여개가 될 것 같네요.

사실 그렇게 되면 서버의 성능에도 영향을 미칠것 같구요.
도움이 필요하네요.. 그럼, 수고하시구요..

**여담으로..
**가끔 내가 알고 있는 지식만으로 승부를 걸고 있는 내 자신을 보면 한없이 답답하다는 생각이 듭니다.
**과거에 가졌었던, 새로운 지식과 새로운 기술에 대한 내 노력이 이젠 사라지고 없나.. 싶기도 하고..
**에효..
**다들 화이팅하세요..
5  COMMENTS
  • Profile
    유응철 2005.09.08 03:44
    말씀하신방식을 지금 강의 하는 곳이 있습니다... 류종택님께서 일주일에 한번 오프라인, 온라인으로 강의를 하고 있습니다... 네이버에서 codeway라고 검색하면 나올 듯 한데.....
    DLL폼을 로드하는 방식으로 하고 있습니다...  

    http://cafe.naver.com/codeway.cafe

    DB 실무 Project라는 메뉴가 따로 마련 되어 있는데.. 참조하세요...  

  • Profile
    주웰 2005.09.07 18:07
    델파이 사이트 가면 데이타 모듈을 공유 하는 방식에 문서가 있습니다
    한개에 데이타 모듈을 여러 DLL이 사용 가능하게 되있습니다.
    예전에 테스트도 해보긴 했는데 잘 되더군요.
    그 문서를 이용하시면 될꺼 같습니다.
    오래되서 정확히 뭐라 말씀은 못드리겠습니다.

  • Profile
    채팅 2005.09.07 06:13
    dll은 메인과는 별도의 메모리 영역을 사용합니다. 그래서 메인에서 객체를 dll에 넘기는 방식으로는 사용이 불가능합니다. 통상 AV에러를 경험할 것입니다.

    하지만 bpl의 경우는 가능합니다. 일반 함수처럼 메인에서 생성된 객체를 dll에 마음대로 넘기고 받을 수 있ㅅ브니다.

  • Profile
    이중철 2005.09.07 20:34
    그놈의 Heap 영역땜시 예전에 무지 고생했는데 그것을 간과하였네요

    님 말씀이 옳습니다.

    그리고 bpl방식 좋습니다. 약점은 다른버전 호환이 안된다는 것(예 B6 만든 것은 D7에서 사용불가)과

    bpl확장자를 다른명칭으로 변경이 안된다는 것(이거 되나요 ㅠㅠ)

    이 정도만 문제있고 다른 문제는 없던것 같아요

  • Profile
    이중철 2005.09.07 01:14
    방법은 여러가지가 있겠지만..
    일단은 생각나는 것만요..
    데이터베이스 모듈은 클래스로 되어 있겠고..
    1. 객체는 메인에서 생성합니다.
    2. 클라이언트 DLL들은 데이터베이스 모듈은 uses절에 추가만 하고 객체는 생성 하지 않습니다.
    3. 클라이언트 DLL에서는 변수만 있으며 해당 변수는 메인에서 객체를 받아서 Assgin 합니다.
    4. 이후부터는 쓰는 것은 똑 같겠죠

    물론 실험은 안했습니다. 그러나 이론적으로는 맞을 거에요

    예상되는 문제점
      - 해당 데이터베이스 모듈의 클래스가 각각의 DLL에 정의가 되므로 해당 DLL의 부피가 좀 늘어날 것임.

    추천하고 싶은 방법
      - 해당 데이터베이스의 상위 클래스를 정의하여 사용한다. 될수 있으면 Database class는 정의되지
        않도록 주의하면서..
      - 인터페이스를 정의해서 사용한다 이경우 Function과 Procedure만 존재하므로(맞나?) 잘 알아서..

    그럼 이만.. (저.. 실험을 하지 않았어요 잘 못 되었다고 판단 되시면 즉각 반론 부탁 드립니다.)