본문 바로가기

Develop

(20)
NHibernate Hibernate 의 .net 버젼으로 NHibernate 가 나왔다. ( 아주 오래 됐다..) NHibernate 를 사용하여 3~4개의 프로젝트를 진행하면서 NHibernate 의 강력함과 매력에 많이 빠져 들게 되었었다. 그리고 프로젝트중에 ORM 으로서의 기능을 다하지 못한 부분들에 대한 아쉬움과 어떻게 하면 저 잘 사용할수 있을지에 대해 많은 고민과 생각을 하게 되었다. 실력이 미흡하나마 조금씩 정리해 나갈려고 한다.
ORM 의 이해 ORM 이란? 객체와 관계형 table 사이의 mapping을 처리해 주는 것을 Object Relational Mapping ( ORM ) 이라고 한다. ORM 이 제공하여야 하는 기능 ORM 은 객체를 table에 저장해 주고, table에 저장된 data로 부터 객체를 생성해 주는 기능을 제공한다. Metadata를 사용하여 object 와 table 사이의 mapping 정보를 지정할 수 있어야 한다. 손쉽게 mapping 정보를 변경할 수 있도록 해야 한다. class 상속, 객체 사이의 연관 등을 객체 modeling을 지원해야 한다. class 와 class의 property를 사용하여 객체를 조회할 수 있어야 한다. 객체 값 변경을 자동으로 database에 반영해야 한다. 상황에 따라 성..
VC# Friend assembly friend assembly 에 대해 불과 몇분전에 알았다. 개별적으로 정의가 가능한 StrongNameIdentityPermission 클래스를 통해서도 공유할 수 있지만 차이점이 있다. MSDN 발췌. 1. friend 어셈블리는 전체 어셈블리에 적용되는 반면 StrongNameIdentityPermission은 개별 형식에 적용됩니다. 2. A 어셈블리에 B 어셈블리와 공유하려는 형식이 매우 많은 경우에는 일일이 StrongNameIdentityPermission을 사용하여 지정해야 하지만, friend 어셈블리를 사용하면 friend 관계를 한 번만 선언하면 됩니다. 3. StrongNameIdentityPermission을 사용하는 경우에는 공유하려는 형식은 public으로 선언되어야 합니다. ..
springframework.net 1.1.2 사용시 PreviousPage 사용문제 Web.config 에서 httpHandlers 에서 *.aspx 파일에 대한 핸들을 다른 객체로 변경했을 경우 아주 당연한 이야기 겠지만 사용이 불가능하다. 기본적으로 설정되지 않으나. springframework.net 사용시 aspx 파일에서 injection 에 대한 관리를 하기 위해서 설정 한다. 설정하지 않았을시 aspx 파일에서는 injection 되지 않는다. 다른 방법으로 사용하여야 하는데 springframework 의 ContextRegistry의 GetContext 를 이용하여 해당 타입을 가져 올수 있다. public CtrlType getSeesionObject(string CtrlTypeName) { IApplicationContext ctx = ContextRegistry.G..
[SpringFramework] 제어 역행의 개념 IOC 제어역행(IoC) 는 스프링 프레임워크의 핵심이다. 제어역행의 의미는 무엇인가? 마틴파울러는 2004년의 글에서 제어의 어떤 측면이 역행되는 것인지에 대한 의문을 제기했다. 그는 의존하는 객체를 역행적으로 취득하는 것이라는 결론을 내렸다. 그는 그와 같은 정의에 기초하여 제어 역행이라는 용어에 좀더 참신한 "의존성 주입(dependency injection)" 이라는 이름을 지어줬다. Ioc 를 적용함으로써 객체들은 시스템 내의 각 객체를 조정하는 어떤 외부의 존재에 의해 생성 시점에서 의존성을 부여 받는다. 즉 의존성이 객체로의 주입(inject) 된다는 말이다. 따라서 IoC는 한 객체가 협업해야 할 다른 객체의 참조를 취득하는 방법에 대한 책임의 역행이라는 이미를 갖는다.
UltraGrid의 Excel Export for Multi Header infragistics의 grid인 UltraGrid의 내용을 Excel로 다운을 받을 수 있습니다. 이건 문제도 아닙니다.. 아주 단순하게 UltraWebGridExcelExporter 를 사용하면 아주 간단하게 처리 됩니다. Asp.net의 Design Page 에서 UltraWebGridExcelExporter 콘트롤을 drag & drop 을 하고 Button을 하나 만들어서 UltraWebGridExcelExporter 클래스의 Export 함수를 호출해서 파라메터로 UltraWebGrid 콘트롤을 넘기면 됩니다. 그러나 이렇게 했을 때 문제는 Grid의 Header가 2줄 이상이었을 때 Export 만으로 Multi Header를 만들어 주지 않습니다. 예를 들어 이런 헤더를 Excel 에서 ..
VS 2005 가상 웹 서버 경로 설정하기 Visual Studio 2005의 강력한 기능들 중 하나인 "가상 웹 서버" 기능을 사용하다 문제가 발생했습니다. 그것은 경로 문제… 배포 되어야 하는 서버의 경로 위치와 가상 웹 서버의 경로가 틀린 것이 문제가 되어 각 이미지 경로를 변경해야 했는데 개발할 때 배포할 때의 문제를 해결하기 위해서 가상 서버의 경로를 변경할 수 있는 방법을 찾아야 했습니다. 열심히 찾아본 결과 webdev.webserver.exe 라는 실행 파일을 찾을 수 있었습니다. 해당 파일의 경로는 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 실행을 하게 되면 해당 옵션이 상세히 들어 납니다. 포트 번호 설정, 물리 경로 설정, 가상 경로를 설정할 수 있습니다. 사용 샘플까지 상세히 나와 사용..
읽기 좋은 코드와 나쁜 코드 읽기 쉬운 코드를 작성하기란 결코 쉬운 작업이 아니다. 컴퓨터가 이해할 수 있는 코드는 어떤 방식이 되든 문법만 맞는다면 전혀 문제 없이 작동하게 된다. 그러나 내가 작성한 것을 다른 사람이 본다면 참 쉽지 않을 것이다. 프로젝트를 여기 저기 다니다 보면 하던 것을 맡을 때도 신규로 새로 할 때도 있다. 대체로 하던 것은 받은 사람은 앞에 작성한 것에 대한 질타와 "왜 이렇게 했지? 무슨 뜻이지?" 등등 자기와의 코딩 방식이 달라서 각종 이야기가 나온다. 왜 그럴까? 공부 해왔던 방법이나 사용하는 방식, 그리고 가장 큰 이유는 프로그래밍 철학이 달라서 일 것이다. 아래의 코드들은 동일한 역할을 하는 코드들이다. 아주 간단하게 숫자 둘 중에 큰 수를 반환하는 함수이다. 예제 1) 예제 2) 어떤 것이 맘에..