ASP에서 VB 구성 요소의 설계 지침 |
- Active Server Pages, included with: Microsoft Internet Information Server 4.0
- Windows용 Microsoft Visual Basic Learning, Professional 및 Enterprise Editions versions 5.0, 6.0
요약
본 문서에서는 Active Server Pages(ASP)에서 성능과 확장성을 향상시키기 위해 Visual Basic COM 구성 요소를 설계할 때 유념해야 할 여러 가지 지침과 제안 사항을 설명합니다.
추가 정보
일반적으로, 다음 제안은 Active Server Pages(ASP)에서 Visual Basic 구성 요소의 확장성과 성능을 최적화할 뿐만 아니라 많은 문제를 해결한다고 증명되었습니다.
- Visual Basic Aparttment-Threaded [Single-Threaded Apartment(STA)] 개체를 세션이나 응용 프로그램 범위에 저장하지 마십시오. 세션 범위에서 이들 개체를 저장하면 이후의 세션에 의한 개체 요청이 개체에서 작성된 동일한 스레드에서 처리될 수 있습니다.
- 상태 없는(Stateless) 구성 요소를 설계하십시오. 상태 정보는 데이터베이스에서 저장되고 검색되어야 합니다. 다른 방법으로, 상태 정보를 쿠키 또는 ASP 요청을 통해 전달할 수 있습니다.
- .bas 모듈에서는 공용(Public) 변수를 사용하지 마십시오. 그러면 예측할 수 없는 동작과 메모리 손상 가능성이 발생하는데, 같은 스레드의 요청이 같은 변수를 공유할 때 각 스레드에 별도의 변수 복사본이 있기 때문입니다. 자세한 내용은 다음 리소스를 참고하십시오.
- Visual Basic 설명서의 "멀티스레드"
- Visual Basic 설명서의 "멀티스레드"
- ASP에서 단일 스레드 Visual Basic 개체를 사용하지 마십시오.
- 사용자 인터페이스 요소에 종속되는 구성 요소를 사용하지 마십시오.
- 데스크톱과 레지스트리 액세스 문제를 방지하기 위해 구성 요소는 실행 중인 사용자에 관해 어떤 전제도 하지 않아야 합니다. 시스템 데스크톱에서 구성 요소가 실행되기 때문에 HKEY_CURRENT_USER에 저장된 레지스트리 키에 종속되지 않아야 합니다. 레지스트리를 사용해야 할 경우에는 HKEY_LOCAL_MACHINE에 값을 저장하십시오. 이 문제의 공통적인 예는 ASP에서 인쇄하려고 할 때입니다.
- 서버쪽 스크립트에 VBScript 함수 CreateObject와 GetObject를 사용하지 마십시오. ASP가 개체 인스턴스를 추적할 수 있도록 대신 Server.CreateObject를 사용하십시오. CreateObject 또는 GetObject가 만든 개체는 ASP 내장(Built-in) 개체를 액세스할 수 없고 트랜잭션에 참여할 수 없습니다.
- 개체나 해당 컨텍스트 개체를 액세스하려고 하는 MTS(Microsoft Transaction Server) 구성 요소의 Class_Initialize와 Class_Terminate 이벤트에 코드를 넣지 않아야 합니다. Visual Basic 런타임 환경은 개체와 그 컨텍스트가 활성화되기 전에 Class_Initialize를 호출하므로 Class_Initialize가 개체나 개체 컨텍스트에서 수행하려고 하는 모든 작업은 실패합니다. 마찬가지로, 개체와 그 컨텍스트는 Class_Terminate가 호출되기 전에 비활성화되므로 이 메서드가 개체와 그 컨텍스트에서 시도하는 작업도 실패합니다. MTS 구성 요소의 Class_Terminate 이벤트에서는 중단점(Breakpoint)을 설정하지 않아야 합니다. 디버거가 중단점에 이르면 개체를 활성화하려고 시도하고 시도가 실패하면 그로 인해 Visual Basic이 중단됩니다.
- ByVal 매개 변수는 특정 데이터 형식일 수 있는 반면 ByRef 매개 변수는 Variant로 전달되어야 합니다.
- 트랜잭션이 필요하지 않을 경우에는 구성 요소를 MTS로 등록하지 마십시오. ObjectContext는 성능 면에서 비용이 많이 들 수 있습니다.
- OnStartPage와 OnEndPage 메서드를 사용하여 ASP의 본질적인 부분을 액세스하지 마십시오. 이 메서드는 Internet Information Server(IIS) 3에 레거시 지원을 위해 제공됩니다. ObjectContext를 사용하십시오. 그러나, ActiveX EXE가 있으면 ObjectContext를 사용할 수 없고 OnStartPage를 사용해야 합니다.
- 라이브러리 패키지에서 구성 요소를 실행하는 동안 별도의 메모리 공간에서 웹 응용 프로그램을 실행하십시오. 이렇게 하면 마샬링의 오버헤드를 최소화 하는 한편 내결함성(Fault Tolerance)에 유용합니다.
- 시스템이나 프로세스에서 매개 변수 ByVal을 Visual Basic 구성 요소로 전달하십시오. 이렇게 하면 마샬링 오버헤드를 최소화합니다.
- 모든 메서드에 강력한 오류 처리 기능을 포함시키십시오. 오류가 발생하면 Visual Basic의 App.LogEvent를 사용하여 다음 정보를 EventLog에 기록하십시오.
- 오류 번호, 오류 설명, 오류 원인
- 현재 사용자(GetUserName() API 사용)
- 스레드 ID(GetCurrentThreadId() API 사용)
- 오류가 발생한 메서드 이름
- 메서드에 있는 모든 인자 값
- 오류가 발생한 시간(GetTickCount() API 사용)
- ERL을 사용한 원본 코드 행 번호. 다음을 참고하십시오
- 오류 번호, 오류 설명, 오류 원인
- ActiveX EXE와 DLL 모두에 무인 실행이 설정되었는지 확인하십시오. ActiveX DLL에서는 스레딩 모델이 Apartment Threaded로 설정되어야 합니다.
- 개발 중에는 프로젝트 호환성을 사용하고 릴리스를 위해 이진 호환성을 선택하십시오.
'WEB > HTML/Css/Script' 카테고리의 다른 글
| HTTP 버전 1.1 상태 코드와 해당 의미 (0) | 2007/06/07 |
|---|---|
| 윈도우 코드페이지 값 표 (0) | 2007/06/07 |
| ASP에서 VB 구성 요소의 설계 지침 (0) | 2007/06/07 |
| Base64 인코딩 및 디코딩 (0) | 2007/06/07 |
| [css] 사진 테두리 만들기 (0) | 2007/06/07 |
| 테이블 고정 - 옆으로 스크롤 생성 (0) | 2007/06/07 |
TAG ASP
0 Trackback,
0 Comment,
:




최근에 달린 댓글
링크
최근에 받은 트랙백
태그목록