기본 콘텐츠로 건너뛰기

[Oracle] Oracle Schemas Metadata…

역시나 이번 프로젝트에서 새롭게 추가할 항목이 Oracle Database에 대한 Code Generator (C#) 이다. 어떻게 하면 쉽고, 간편하게(?) 스키마 정보를 가져올 수 있을까 생각하고 있던 중에 예전에 잠시 보았던 DbConnection 개체의 GetSchema 메서드를 활용해 보기로 했다. 별도의 코드 작성 없이도 구성할 수 있는 부분이 매력적이다. Tool 로 구성하기 위해서는 범용적인 부분을 염두에 두어야 하지만, 당장은 프로젝트에 적용해야 하는 문제로 Oracle에 대해서만 정리해 놓도록 한다. GetSchema() 를 이용하면 일반적인 DBMS 의 각종 스키마들을 모두 또는 지정한 것들만 DataTable 형식으로 받아서 처리할 수 있다. 물론 Oracle 도 DbConnection을 구현한 것이기 때문에 다른 DBMS도 동일하게 적용될 수 있다. 사용 방법 public virtual abstract DataTable GetSchema(); public virtual abstract DataTable GetSchema(string collectionName); public virtual abstract DataTable GetSchema(string collectionName, string[] restrictionValues); collectionName 은 찾고자 하는 스키마의 종류를 의미하고, restrictionValues 는 스키마 정보를 조회할 때 사용할 제약정보들을 지정하면 된다. 자세한 부분은 참고와 샘플로 확인한다. 참고 사항 collectionName 은 다음과 같은 것들을 지정할 수 있다. Collection Name Number of restrictions Remarks MetaDataCollections 0 Returns this list. Same as using GetSchema() method without parameters. ReservedWords 0 ...

[Oracle] Oracle Client 설치 없이 접속하기

이번 프로젝트는 여러 가지로 상당한 제약이 존재한다. 그 중에서 가장 큰 문제가 시스템에 뭘 설치하려면 요청 > 승인 > 설치 과정을 거쳐야 하고, 국외의 담당자와 연계되기 때문에 시간이 많이 걸린다는 것이다. Oracle Client도 역시 미 설치 상태가 요청되기 때문에 여러 가지 자료들을 조사해서 정리를 해 놓도록 한다. 우선 필요한 라이브러리와 어셈블리들은 다음과 같다. (다른 PC에 설치를 하고 어셈블리들을 가져와야 한다) oci.dll Oracle.DataAccess.dll oraociicus11.dll OraOps11w.dll orannzsbb11.dll oraocci11.dll ociw32.dll 물론 기본 설치 파일은 여기 로 가서 환경에 맞는 버전을 다운로드 해야 한다. ODAC 32bit ODAC 64bit 실제 사용은 Client가 설치되지 않았으므로 TNSNames를 이용하는 것이 아니라 Raw한 ConnectionString을 이용하는 것이다. "user id=사용자ID;password=사용자비밀번호;data source=TNSNames에 지정한 것과 동일한 포맷의 연결정보;" 기타 더 필요한 부분은 다음을 검토해 보도록 한다. http://www.oracle.com/technetwork/database/windows/downloads/index.html http://www.splinter.com.au/connecting-to-oracle-from-c-winforms-aspnet-w/ http://www.splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c/ http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&wid=822 http://stackoverflow.com/questions/11366695/how-do...

등록 과정(Registry) 없이 OCX 사용하는 방법

현재 진행 중인 프로젝트가 외국계 증권사이다보니 시스템에 뭘 설치할 수가 없다. 외부에서 리포트 솔루션을 도입해서 사용을 하여야 하는데, 제공되는 뷰어가 OCX 버전이라서 무설치로 .NET Window Forms에서 적용하여야 한다. 여러 가지 방법을 찾던 중에 다음과 같은 방법을 이용하여 적용할 수 있었다. 단, 이게 최선의 방법일지?? 문제가 없을지는 이후에도 검토를 해 보아야 하겠지만, 기본적인 작동은 하고 있기 때문에 아래의 방법을 정리해 놓도록 한다. 기본적으로 OCX 만 제공받은 상태라고 가정한다. 1. Visual Studio Command Prompt 를 실행한다. 2. sn -k Report.snk 를 실행해서 서명 키를 생성하도록 한다. 3. tlbimp viewer.ocx /primary /keyfile:Report.snk /out:ReportViewer.dll /namespace:MyNamespace 를 실행해서 Type Library용 Assembly를 생성한다. 4. aximp viewer.ocx /Source /rcw:ReportViewer.dll 를 실행해서 OCX Wrapper DLL 과 소스를 생성한다. 위와 같이 생성된 DLL을 참조해서 사용하면 된다. 소스도 같이 생성하였으므로 DLL을 쓰던 소스코드를 쓰던 선택하면 된다. 중요한 것은 Type Library DLL 과 Wrapper DLL 또는 소스를 같이 사용해야 한다는 점이다. 이제 구동을 할 때 .NET Assembly 에서 OCX를 Loading하기 위한 정보를 제공해 주어야 한다. 일반적이라면 OCX를 Registry에 등록을 하고 사용하기 때문에 COM Server를 사용하겠지만, Registry 등록없이 사용하는 것이기 때문에 이를 대신할 정보를 생성하는 것이라고 생각하면 된다. 1. Visual Studio에서 시작 프로젝트를 선택하고 "추가 > 어플리케이션 마...

[.NET 일반] BadImageFormatException 오류 처리하기.

주로 많이 발생하는 상황은 64Bit O/S 에서 32Bit 플랫폼으로 개발된 어셈블리를 사용할 경우이다. 물론 소스코드가 존재하는 경우는 플랫폼 대상을 x64로 변경하거나 AnyCPU 로 설정해서 재 컴파일하면 된다. 문제가 되는 것은 외부의 DLL을 가져다 쓰는 경우인데, 지금처럼 Oracle.DataAccess.dll 을 가져다 쓰는 경우처럼 소스가 없는 경우는 대략 난감한 상황에 빠지게 된다. 아래와 같이 개발 또는 수행 환경에 따라서 적절하게 적용하면 된다. IIS 에서 운영되는 웹 어플리케이션 인 경우 IIS 사이트의 Application Pool 의 고급 설정에서 “Enable 32 Bit Applications” 설정을 true 로 변경해 주면 된다. 윈도우 어플리케이션인 경우 현재까지 파악된 것으로는 32Bit Solution으로 처리하고  64Bit Machine 에서 동작하는 경우를 생각하거나 그렇지 못할 경우는 32Bit DLL을 COM으로 Wrapping해서 사용하는 것의 2가지 방법 뿐이 없는 것 같다. 결국은 Oracle 사이트에서 64Bit 용 ODAC를 받아서 64Bit 용 DLL을 사용하는 것으로 적용하는 것으로 결정하였다.  

[ORACLE] 11g XE 버전 설치 후에 샘플 사용자/DB 설정하기

9월에 시작된 프로젝트가 Oracle 11g를 사용하고 있다. 당장 투입이 되어 개발에 필요한 검증과 기본 구조를 생성해야 하는데 시스템 접근 권한을 준비하는데 최대 1개월까지 걸린다고 한다. ;;;; 뭐.. 회사마다 보안정책이 있기는 하지만… 어차피 진행할 것이라면 한달 전부터 접근권한 등을 준비하시던지.. –_–.. 일단 로컬 PC에 Oracle 11g R2 Express 버전이라도 깔아서 진행을 하려고 한다.  한달 동안 놀고 있을 수는 없으니 말이다. 그런데 일단 설치를 하고 사용하는데 무거움이 느껴진다. (그냥 느낌상으로.. MSSQL 보다는 훨씬 더…) 그리고 또 하나는  막상 작업을 하려니 scott 계정으로 로그인이 되지 않는다.. 이건 뭐.. 계정이 없다네… ㅠㅠ 기본 계정 생성은 다음과 같이 작업을 하면 된다. 1. System 계정으로 로그인해서 “scott” 계정을 생성하도록 한다. CREATE USER scott IDENTIFIED BY tiger DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; 2. 계정 권한 설정과 관련된 예제 DB는 다음의 경로에 존재하므로 이 파일을 이용해서 수동으로 생성하여 사용하면 된다. 관리자 콘솔을 실해하고 C:\oraclexe\app\orcle\product\<설치버전>\server\rdbms\ admin 경로로 이동해서 sqlplus를 실행한다.   SQL > @scott.sql 3. 계정도 샘플 데이터도 생성이 되었지만 로그인은 아직 허용되지 않는다. 아래의 문장을 추가로 실행하도록 한다. ALTER USER scott IDENTIFIED BY tiger ACCOUNT UNLOCK; 쩝.. 일단 작업은 하지만… 좀 그렇다.. –_– 작업이 완료된 후에 ODP.NET을 설치하고 연결을 하려고 하니 ORA-12560 : TN...

[Visual Studio] Project / Item Template, Extension 위치

요즘 다시 예전에 하고 싶었지만 하지 못했던 Visual studio Extension에 관심을 가지고 접근하고 있다. 주된 관심은 물론 프레임워크를 구성하는 것이기는 하지만 프레임워크라는 것이 실제 사용되지 않으면 그냥 라이브러리와 읽지도 않는 문서들만 존재하는 것이라서 프레임워크가 Visual Studio에 통합되어 약간(?)의 강제성과 유용한 사용이 될 수 있도록 하여야 한다는 것이 내가 하고 싶은 주 목적이기도 하다. 오늘은 Project / Item Template 의 위치와 확장이 설치되면 존재하는 위치에 대해서 정리를 해 놓도록 한다. Visual Studio Project Template Location C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ProjectTemplates\CSharp VIsual Stuidio Item Template Location C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp Visual Studio Custom Template Location C:\Users\Administrator\Documents\Visual Studio 2013\Templates\ProjectTemplates\Visual C# C:\Users\Administrator\Documents\Visual Studio 2013\Templates\ItemTemplates\Visual C# Project Location, Project / Item Template Location 변경하기 Visual Studio Extension Location 대부분의 Visual Studio 확장은 사용자 별로 처리된다. 따라서 “%LocalAppData%\Microsoft\VisualStudio\<Visual Studio Version>\Extensions\” ...

[RequireJS] RequireJS 사용방법

웹 어플리케이션은 점점 더 데스크톱 어플리케이션과 같이 진화를 하고 있으며 많은 부분에서 패턴들이 적용되고 있다. 문제는 이런 과정에서 발생하게 되는 종속성을 어떻게 관리하여야 할지에 대한 문제가 점차 대두되고 있다. 자바스크립트는 이런 종속성을 관리할 수 있는 기능을 제공하지 않기 때문에 여러 가지 방법을 추가적으로 적용하여야 한다. RequireJS 도 이런 종속성을 관리하는 한 가지 방법이다. 대외적으로 많이 언급되고, 사용되는 것으로 판단이 되기 때문에 사용방법을 정리해 보도록 한다. 한 마디로 정리하면 “RequireJS 는 자바스크립트 파일/모듈 로더” 라고 생각하면 된다. 웹 브라우저에서 사용하는데 최적화되어 있지만 Rhino 나 Node 와 같은 다른 환경에서도 사용할 수 있다. RequireJS 를 사용하는 이유는 모듈 방식으로 스크립트를 로딩하므로 웹 어플리케이션의 종속성관리와 품질 및 성능을 향상시킬 수 있다. 언제 써야 할까? 일반적으로 자바스크립트를 하나의 파일로 작성하는 경우가 많다. 그런데 코드가 점점 더 방대해지면 나중에 수정하고 관리하는 것이 쉽지 않게 된다. 이를 위해서 기능이나 용도별로 여러 파일로 분할하는 선택을 하게 된다. 그런데 문제는 이런 상황이 되면 사용해야 하는 페이지에 스크립트 태그들이 증가를 하고 다른 파일에 정의된 기능을 사용하기 위해서 전역변수들도 같이 증가하게 된다. 따라서 페이지에서도 관련된 스크립트들과 변수들도 지저분하게 나열할 수 밖에는 없고, 또한 가장 큰 문제는 이런 스크립트 파일을 다운로드 하기 위해서 HTTP 요청이 네트워크 대역폭을 많이 차지하여 점점 더 페이지의 로딩이 느려지는 상황을 초래하게 된다. 아마도 대부분은 이런 상황에서 대안을 찾게 된다. 특히나 대형 사이즈의 웹 앱의 어플리케이션을 작성한다면 더욱 시급한 대안이 필요할 수 밖에는 없다. 이 때 필요한 부분이 AMD (Asysnchronous Module Definition) 방식의 스크립트 로더다. 즉, 비 동기적으로 ...