728x90
iBatis.net 을 사용하면 확실히 닷넷 코드 레벨에서 데이터베이스 관련하여 고민할 것이 많이 줄어들기 때문에 무척 좋습니다. Entity Framework 를 쓰면 얻을 수 있는 더 많은 잇점들이 있지만 간단하게 데이터베이스 엑세스에 대한 부분을 정리하고 간편화하는데에는 iBatis.net 이 훨씬 투입 공수가 적은 장점이 있습니다.

다만 iBatis.net 단에서 문제가 발생했을 때는 트러블 슈팅이 쉽지 않은편입니다. 오픈소스기 때문에 누가 책임을 져주는 것도 아니고 한번 내부적으로 처리된 에러 메세지들이 나오기 때문에 더 상세한 오류 원인을 찾으려 삽질하기 일쑤지요. 이번에 개발된 내용물을 클라우드 서버에 포팅하면서 겪은 문제 역시 마찬가지였습니다. 기록 차원에서 블로그에 정리해 둡니다.

에러의 시작, " Unable to open connection to ... "

로컬에서 MS-SQL 을 가지고 작업을 할때 아무런 문제가 없었던 로직. iBatis.net 의 장점을 십분 활용해 실서버 환경에서 provider.config 를 오라클에 맞추어 조정하면 가볍게 끝날것으로 생각했던 작업은 만 하루가 넘게 걸리고서야 해결될 수 있었습니다. 오래걸린 주요한 이유 중 하나가 바로 iBatis.net 가 추상적으로 던진 에러의 원인을 찾기 위함이었네요.

로컬은 32bit 개발환경이고 공교롭게도 처음 포팅했던 서버는 Windows Server 2003 32bit 버전이어서 더욱 오래 걸렸던 이번 에러. 두번째 포팅한 서버가 Windows Server 2008 R2 64bit 환경이었고, 여기에서 System.Data.OracleClient 네임스페이스에 매핑된 라이브러리가 32bit 냐 64bit 냐 때문에 발생하는 것이었습니다.  

참조링크 : OTN 의 OracleClient 64bit 모드 관련 Forum 글 참조 [바로가기]


비주얼 스튜디오로 빌드를 하면서 특별히 빌드 환경을 지정하지 않고 Any CPU 로 하고 있던게 화근이었습니다. iBatis.net 이 계속 에러를 토하는 과정에서 내부 에러를 살펴보니 아래와 같은 메세지를 내놓고 있었습니다. 기본적으로 iBatis.net 이 던져주는 Exception 의 Message 로는 확인이 되지 않는 부분이었습니다.


여러가지 해결 방법들이 제시되었고 가장 많은 것이 Oracle Client 를 환경에 맞게 재설치 하는 것이었는데 제가 전담하는 서버도 아니고 해서 그 방법을 쓰는건 너무 위험해 보였습니다. 그래서 x86 과 x64 로 빌드후 포팅을 해보기로 했는데, x86 으로 재빌드 하고 나서 아무런 문제가 없이 잘 수행되는게 확인 되었습니다.

혹시 비슷한 오류를 겪으시는 분들은 서버 환경에 따라 빌드 옵션을 다르게 주고 빌드한 다음 테스트를 해보시는 것을 추천해 드립니다. 이것 때문에 하루를 넘게 소비했다는 것이 참 어이가 없을 뿐입니다. 아무쪼록 누군가에게 도움이 되고 스스로에게도 언젠가 레퍼런스로 활용할 수 있도록 블로그에 글 남겨둡니다.

- NoPD -
 
728x90
728x90
개인적인 용도로 오라클 리모트 쿼리를 하기 위한 간단한 웹서비스를 만드는데 엉뚱한 문제에 봉착을 했습니다. 로컬에 설치된 Toad, Aqua Data Studio 할 것 없이 오라클 서버에 아주 잘 접속하는 환경에서, 개발 작업을 진행하고 있었는데, 계속 " ORA-12154 : TNS:could not resolve the connect identifier specified " 에러가 발생하더군요.

일반적으로 오라클을 DB로 사용하는 개발업무 초기 / 환경설정 작업시에 늘 겪는 것과 마찬가지로 tnsnames.ora 파일등의 설정이 잘못된건가 싶어 확인을 해봤습니다. 아무런 이상이 없더군요. (Toad, Aqua가 도니 당연하겠네요;;;) 한참을 헤메인 끝에 원인을 엉뚱한 곳에서 찾았네요. (참고 URL : http://hoons.kr/Board.aspx?Name=Free&Mode=2&BoardIdx=14754&Key=&Value=)

처음 프로젝트를 생성했던 경로 이름에 "한글"이 포함되어 있는 것이 원인이었습니다. OracleClient 가 왜 프로젝트의 경로명에 영향을 받는지 까지는 정확히 원인을 모르지만 (사실 알고 싶지도 않고 ;;;) 따지지도 말고 묻지도 말고 이름이 영문으로만 구성된 경로로 이동시키니 아주 깔끔하게 오라클 DB에 엑세스를 하기 시작했습니다.

가끔 업무 편의를 위해서 간단한 프로그램을 만들다가 본의 아니게 이번 경우처럼 삼천포로 빠져서 색다른 사실들을 접하는 경우가 있습니다. 우리나라 개발자 여러분들의 생산성 향상! 을 위해서 이런 말도 안되는 팁은 적극적으로 공유를 해야할 것 같습니다. 되도 않는 네이뇬의 지식인보다 훈스 닷넷의 게시판에서 더 주옥같은 정보를 얻게 되서 나름 기쁜 마음을 감추기가 힘들군요. (경훈님께 막 아부하고 막이래?) 비슷한 원인불명의 오류로 고생하시는 분들, tnsnames.ora 파일 탓하지 마시고 경로 한번 확인해 보세요!

- NoPD -
728x90

+ Recent posts