뭐 결론부터 말하자면, 새로 만든 검색 모듈을 호출하는 과정에서 문제가 있었던 것 같습니다.
그렇다고 제 실수는 아닌 거 같고..
며칠전에 만들어 올린 새 검색 모듈은, 기능 대부분이 파이어버드 스토어드 프로시저로 되어 있어서 ISAPI 모듈에서 하는 일은 기껏해야 파라미터 넘겨주고 결과셋 받아오는 것 뿐인데.. 그렇다고 스토어드 프로시저가 에러가 날 만큼 뭔가 복잡한 것도 없고요. 분명히 어딘가에서 ISAPI 풀링 프로세스가 죽고 있는 걸로 보면 분명히 예외는 예외인데... 또 호출하는 ISAPI 측에서는 겹겹이 예외처리를 했는데도 예외가 하나도 안걸리는 걸 봐서는 일상적인 예외는 아닌 거 같고...
아무래도 제가 스토어드 프로시저를 호출하는 데 쓴 select * from 프로시저(인자들); 이런 형식의 호출이 dbExpress와 잘 맞물리지 않는 듯 합니다. 이게 인터베이스/파이어버드에서만 통하는 문법이라, 범용인 dbExpress에서 100% 다 지원해주지 못해서 한번씩 처리되지 않는 예외로 ISAPI가 날아간다고 해도 이상할 건 없겠죠.
어쨌든.. 문제는, 검색 모듈 ISAPI와 일반 게시판 ISAPI가 같은 쓰레드 풀링 프로세스를 공유하고 있는 바람에, 검색 모듈에서 치명적 예외가 발생해서 프로세스가 날아가면 게시판 ISAPI까지 같이 주인을 잃고 휘릭 날아가버렸던 것 같습니다. 그래서 새 가상 사이트를 만들고 검색 ISAPI의 프로세스를 격리시켜버렸습니다. 검색이야 한번씩 프로세스가 날아가도 별 문제가 없지만, 글을 쓰고 등록 버튼을 눌렀는데 그걸 받아줄 프로세스가 준비된 상태가 아니면 글이 날아가는 황당한 사태가 벌어지니까요.
검색모듈 자체가 스토어드 프로시저를 호출만 할 뿐으로 워낙 단순했기 때문에, 거기서 문제가 발생하고 있을 거라는 생각을 못하고 게시판 관련 소스를 전부 다 뒤졌습니다. 제가 만들어 쓴 웹 관련 컴포넌트들까지요.
뭐 소스를 열심히 뒤진 덕분에, 몇년동안 잡지 못하던 다른 버그 하나도 잡았습니다. 일정 시간 후에 게시판이 죽어버리는 문제의 주요 용의자를 찾아내어서 수정했답니다. 예외처리가 제대로 안되어서 메모리 리크 혹은 오동작이 일어날 수 있는 부분을 찾아냈죠.
이렇게 주저리주저리 써놔봤자 IIS와 ISAPI, 파이어버드에 꽤 익숙한 분이 아니면 다 알아듣기는 힘들겠지만.. --;;
꽤 공을 들인 끝에 문제의 원인을 유추하고, 해결책을 찾아서 기분이 좋아서 써봅니다. ㅎㅎㅎ
utime.김성하 님이 쓰신 글 :
: 음~ 아래 광양님 글에 뎃글 쓰고 입력 하려는데
:
: The RPC server is unavailable.
:
: 이런 에러가 뜹니다~ 헛~ 왜이러나 해서 QnA에 이런 저런 글 보다가
:
: 아야님의 도와주세요.... 글을 보려니 또 위와 같은 에러가 뜹니다~
:
: 다시 읽을 땐 발생하지 않네요~
:
: 항상 그러는 건 아니고 아주 아주 간혈적으로 발생되는 것 같은데요~
:
: 재현 경로를 다시 찾아 보려해도 잘 안되네요~
:
: 브라우져는 Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.1) Gecko/20061010 Firefox/2.0 이렇습니다~
|
흐뭇흐뭇~~ ^^;;