IT 살이/04. 기술 - 프로그래밍 썸네일형 리스트형 개발 프레임워크 만들기 대장정 02- 재사용성 vs. 확장성 개발 프레임워크를 가진 업체가 프로젝트에서 실제로 투입되었을때 고객과의 사이에서 있을 수 있는 갈등중의 하나가 바로 개발 프레임워크의 코드 수정에 대한 것이다. 고객은 프레임워크 코드를 수정해서 자신들이 원하는 기능을 구현해 주길 바란다. 프레임워크 제공 업체에서는 최대한으로 그런 수정을 막아보려 한다. 이 부분은 프레임워크이기 때문에 수정할 수 없다는 것이다. 그러나 프레임워크의 네임스페이스까지도 철저히 수정해주길 원하는 고객을 만나면 끝에 가서는 프레임워크 제공 업체는 어쩔 수 없는 일이다. 물론 이 부분은 두 업체간의 영업적 계약이 어떻게 되었는가에 따라서 이야기가 다분이 달라질 수 있는 측면이 있다. 프로젝트의 재사용성이라는 것을 그런 영업적인 쇼부(쇼부라... 이쯤 되면 이 포스트가 개인적인 것.. 더보기 개발 프레임워크 만들기 대장정 01 - 개발 프레임워크란 SI 프로젝트에 참여하는 개발자들은 대부분 개발 프레임웤에 대한 경험이 있을 것이다. 큰 규모의 프로젝트에서는 나름대로의 개발 프레임워크를 만들어 진행한다. 업무 개발자들이 업무 프로세스를 구현하는데 집중할 수 있도록 잡다한 내용은 모두 블랙 박스로 만들어 놓는 것이다. 개발자들은 블랙박스에서 노출시켜놓은 공개적인 API만을 잘 사용하면 된다는 그런 생각이다. 그러나 프로젝트마다 프레임워크를 설계한 사상이 다르고 구현 또한 달라지기 때문에 업무 개발자들은 프로젝트마다 새로운 프레임워크의 설계와 새로운 API에 익숙해져야만 한다. 업무 개발자들은 피곤한 일이다. 그러다 보니 업무 개발자들은 프레임워크의 내부를 늘 궁금해하는 듯 하다. 어떻게 만들어졌을까. 이런 것을 어떻게 구현했을까. 그러나 프로젝트가 한.. 더보기 NTD 배포 및 어셈블리 로딩 그리고 IIS 설정 어셈블리 로딩과정을 알고 싶다면 바로 아래 링크를 참조한다.2015/10/15 - [04.기술-APP/.NET InDepth] - 어셈블리 바인딩(최종) 현재 참여하고 있는 프로젝트는 ClickOnce와 NTD배포를 혼합해서 사용하고 있다. 다음은 어제밤에 NTD에게서 당한 린치 사건이다. 밤 12시까지 퇴근을 못하고 택시비로 몇 만원을 강탈당했다. 그 사건에 대한 내용을 지금부터 기록해 보려고 한다. 1. 사건 개요 현재 참여하고 있는 기업에서는 처음에 배포 서버에 HTTP핸들러를 하나 제작해서 사용하고 있었다. 그 녀석이 하는 일은 두 가지였다. 하나는, 배포 서버로 퍼블리시(publish) 되는 어셈블리를 디렉토리별로 구분하여 관리할 수 있도록 할 수 있게 하는 역할을 한다. HTTP핸들러는 또한 .. 더보기 어셈블리 바인딩 1 어셈블리 바인딩 관련 최종 버전은 아래 링크로 바로 갈 수 있다.2015/10/15 - [04.기술-APP/.NET InDepth] - 어셈블리 바인딩(최종) 어셈블리 바인딩 1 이번 포스트를 이해한다면 .NET 애플리케이션 특히 NTD 스마트클라이언트 애플리케이션의 많은 부분을 이해할 수 있는 기초가 다져지게 될 것이다. 우리는 다른 어셈블리를 사용하고 싶을때는 VS.NET의 솔루션 탐색기의 프로젝트에서 참조 추가를 통해서 원하는 작업을 쉽게 수행한다. 또는 코드상에서 직접 Assembly.Load(), Assembly.LoadFrom() 메소드를 사용해서 원하는 어셈블리를 메모리로 로딩시키는 경우도 있다. 정적이든 동적이든 대상 어셈블리 파일을 로딩하는 과정은 어셈블리 바인딩(assembly bind.. 더보기 어셈블리 바인딩 2 어셈블리 바인딩 관련 최종 버전은 아래 링크로 바로 갈 수 있다.2015/10/15 - [04.기술-APP/.NET InDepth] - 어셈블리 바인딩(최종) 어셈블리 바인딩 2 퓨전의 바인딩을 알아보기 전에 미리 알아봐야 하는 개념들이 있다. 그것들을 정리한다. 애플리케이션에는 애플리케이션 전체에 대한 설정도 있고 특정 어셈블리에만 적용될 수 있는 환경 설정이 있을 수 있다. 이런 애플리케이션 설정들은 XML형식의 .config 파일로 주어진다. 애플리케이션은 시작하면서 이 설정 파일을 읽어들인다. 퓨전은 어셈블리 바인딩을 수행하면서 설정 정보 중에서 대상 어셈블리에 대한 설정이 있는지를 확인하고, 만약 있다면 그 설정을 대상 어셈블리 검색 과정에 반영하게 된다. 바인딩 과정에서 적용될 수 있는 애플리.. 더보기 어셈블리 구조 어셈블리(Assembly) 구조 이제 어셈블리(Assembly)라는 것을 구체적으로 알아볼텐데, 어셈블리에 대한 이해가 스마트클라이언트 애플리케이션의 어떤 문맥에서 필요한지 그 상황을 먼저 정리해 본다. 어셈블리와 바인딩 그리고 NTD 배포 어셈블리의 바인딩과 로딩은 스마트클라이언트 애플리케이션에서는 중요한 주제중의 하나이다. 어셈블리에 대한 이해가 필요한 곳이 바로 이 바인딩/로딩과 관련이 있다. 애플리케이션이 어셈블리를 호출( 즉 어셈블리에 포함된 타입을 사용)하게 되면 해당 어셈블리가 아무 고민없이 바로 로딩되는 것은 아니다. 애플리케이션이 참조하고 있는 어셈블리에 대한 정보는 우선 .NET 프레임워크의 CLR에 전달된다. 그 CLR은 이 어셈블리를 어느 위치에서 찾아야 하는가를 고민해서 결정해야 .. 더보기 GAC은 어떻게 생겼을까 GAC(Global Assembly Cache) GAC(Global Assembly Cache)은 머신 차원의 공용 저장소로 이곳에 등록된 어셈블리는 머신에 설치된 모든 애플리케이션에서 같이 사용할 수 있다. 여러 애플리케이션에서 어셈블리에 접근하려면 그 어셈블리는 CLR이 인식할 수 있는 디렉토리에 있어야 한다. 참조하는 어셈블리를 애플리케이션이 로딩하려고 하면 CLR은 자동적으로 미리 정해진 그 디렉토리 구조를 따라가며 검색할 것이다. GAC은 CLR이 이해할 수 있는 디렉토리 구조를 갖는다. GAC은 그러나 단순한 디렉토리가 아니다. 어셈블리의 버전닝 정책 즉 파일명은 같지만 버전번호가 다른 어셈블리가 동시에 존재할 수 있는 디렉토리 구조이며, 그리고 우연히 두 회사에서 출시한 어셈블리의 파일명이 .. 더보기 애플리케이션 도메인과 속성들(베이스 디렉토리) 애플리케이션 도메인(AppDomain)과 환경 속성들 이 포스트에서는 애플리케이션 도메인과 그와 관련된 도메인 속성들에 대해서 알아본다. 이 포스트에서 중요한 개념은 애플리케이션의 베이스 디렉토리와 환경 설정 파일 .config이다. 애플리케이션의 베이스 디렉토리의 개념을 이해하는 것은 특히 스마트클라이언트 애플리케이션에서의 어셈블리 바인딩과 배포(특히 NTD배포)를 이해하는데 있어서 중요한 개념이다. 애플리케이션 도메인은 AppDomain이라는 클래스로 구현되어 있다. AppDomain에는 여러가지 환경 정보들을 가지고 있고, 이런 정보들은 퓨전을 제어하는 중요한 정보들이다. AppDomain의 환경 속성값들은 퓨전이 어셈블리를 검색할 때 이용하게 되는 중요한 정보들이다. 이런 환경 속성값들은 애플리케.. 더보기 강력한 / 약한 이름의 어셈블리(일치 비교, 배포, 보안체크) 1. 어셈블리의 일치 비교(assembly identity comparison) 어셈블리의 일치 비교는 어셈블리가 바인딩이 되고 로딩이 일어나려 할때 수행되고, 또한 어셈블리가 로딩되면, 로딩된 어셈블리의 캐시( LoadContext, LoadFromContext)에 캐싱이 되는데 새로운 어셈블리를 로딩하려고 할때 이 어셈블리가 이미 로딩되어 캐시에 있는지를 확인할때도 어셈블리 일치에 대한 비교 작업이 수행된다. 이런 어셈블리 일치에 대한 판정은 강력한 이름의 어셈블리과 약한 이름의 어셈블리가 다른 비교 로직을 거치게 된다. 강력한 이름의 어셈블리와 약한 이름의 어셈블리는 내부 구조에 있어서는 동일하다. 구조적인 면에서의 차이점은 강력한 이름의 어셈블리는 디지털 사인을 추가했다는 것이다. 디지털 사인이 .. 더보기 스마트클라이언트 디버깅 툴 소개 스마트클라이언트 애플리케이션은 디버깅하기가 상당히 까다로운 면이 있다. 특히 IE 브라우저 임베딩 타입의 스마트클라이언트 애플리케이션의 경우는 디버깅에 상당한 어려움을 느끼는 경우가 많다. 이제 기본적인 디버깅 툴들을 소개한다. 이런 툴들을 언제 사용해야 할지를 알고 적절한 시기에 적절한 툴을 사용할 수 있도록 해야 할 것이다. ■ 어셈블리 다운로드 캐시 뷰어 외부의 배포 서버에서 다운된 어셈블리는 어셈블리 다운로드 캐시(assembly download cache)에 저장이 된다. 그 저장 결과를 그림처럼 윈도우 탐색기를 이용해서 볼 수 있다. 다음 명령을 실행하면 뷰어가 구동된다. 시작->실행->”assembly” 어셈블리 다운 여부에 대한 결과만을 확인하고 싶다면 윈도우 탐색기를 이용해서 어셈블리 다.. 더보기 Understanding the Excel Object Model from a .NET Developer's Perspective Understanding the Excel Object Model from a .NET Developer's Perspective - msdn 더보기 트리구조 정보표시 / 쿼리로부터 테이블(start with connect by prior) 트리구조 정보표시 / 쿼리로부터 테이블(start with connect by prior) 더보기 .NET Framework 3.0으로 이름 변경 .NET Framework 3.0으로 이름 변경 - 안재우개인 블로그 http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx 더보기 URL에 의한 ClickOnce 애플리케이션 구동시 문제 1 에러 상황 다음은 현재 달봉이가 투입된 프로젝트에서 발생하는 현상이다. ClickOnce로 배포된 EXE 타입의 .NET 애플리케이션을 링크 URL 호출을 통해서 구동하는 형태의 시스템 구조이다. 문제는 URL에 첨부한 파라미터가 EXE 애플리케이션으로 전달되지 않는다는 것이다. http://***/Container/LemContainer.application?userid=lem15 url로 넘기는 GET 파라미터 userid 값이 전달되지 않는다는 것이다. fiddler를 통해서 HTTP 요청을 캡쳐해보니 다음 그림처럼 원래의 요청외에도 계속 다른 요청이 추가되는 것이었다. 두번째의 HTTP 요청에는 GET 파라미터가 삭제된다는 것을 확인 할 수 있었는데, 결국 문제는 두번째 요청이 왜 발생하는지에.. 더보기 URL을 이용한 ClickOnce 애플리케이션 구동 절차 현 프로젝트의 구조 및 구동 달봉이가 현재 투입된 프로젝트에서는 스마트클라이언트 기술을 사용해서 기업의 ERP 시스템을 개발하고 있다. 스마트클라이언트 애플리케이션의 배포 방식은 ClickOnce 방식과 NTD 방식을 혼용하고 있다. 우선 업무 화면의 컨테이너 역할을 하는 MDI 컨테이너 및 공통 모듈은 ClickOnce 방식으로 배포한다. 그리고 업무용 화면은 사용자가 메뉴를 클릭했을 경우 해당 메뉴의 화면이 포함된 어셈블리를 On-Demand 형식으로 NTD를 사용해서 다운하고 있는 것이다. 다음 그림은 현재 프로젝트에서 사용하고 있는 스마트클라이언트 애플리케이션의 구조와 배포 방식을 나타내고 있다. 현 스마트클라이언트 시스템의 구조와 배포 방식 이 시스템의 구동은 URL을 통해서 하고 있다. Vis.. 더보기 What's new in security for v2.0 What's new in security for v2.0? 더보기 FullTrust means Full Trust 뉴스가 아닌가? FullTrust means Full Trust 더보기 [연재 09] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper) 프로덕트 XML 파일 부트스트래퍼(Bootstrapper)는 ClickOnce 애플리케이션이 구동되기 전에 애플리케이션에서 필요로 하는 필수 프로그램(prerequisties)이 먼저 설치되어 있는지를 확인하는 작은 부피의 프로그램을 말한다. Visual Studio.NET 2005에는 내장된 부트스트래퍼 기능이 있다. 우리는 이 기능을 사용하여 ClickOnce 애플리케이션이 실행되기전에 필요한 다른 컴포넌트를 설치할 수 있다. 달봉이는 지금까지 알고 있는 방법중에서 이전의 COM 컴포넌트나 .NET 어셈블리나 가리지 않고 클라이언트로 배포를 할 수 있는 가장 쉬운 방법중의 하나로 여기고 있다. 단점은 ClickOnce에서만 가능하다는 것이다.[현재 2006.09.16] VS.NET의 부트스트래퍼 기능.. 더보기 [연재 08] ClickOnce 보안 모델( 두번째 이야기 ) ■ ClickOnce 애플리케이션의 권한 설정 VS.NET으로 ClickOnce용 애플리케이션을 게시할 때 사용하는 프로젝트 디자이너를 다시 보여주고 있다. 그림은 보안 페이지에서 설정하는 모습이다. 달봉이는 처음에 이 설정이 계속 마음에 걸렸고, 결국은 달봉이가 이 그림이 뭔지 이해하지 못하고 있다는 것을 알게 되었다. 달봉이가 처음 의문을 갖게 된 사연을 보면 다음과 같다. 먼저, “ClickOnce 보안 설정 사용”이라는 선택을 하고 있는데, 이것이 뭔지 이해가 안 갔다. “ClickOnce 보안”이라는 것이 별도로 있다는 것인가? 그리고 “완전 신뢰 응용 프로그램”과 “부분 신뢰 응용 프로그램”이라는 말도 이해가 가지 않았다. 기존의 모델이라면 “완전 신뢰 어셈블리”, “부분 신뢰 어셈블리”이어야.. 더보기 [연재 07] 비관리형 파일의 배포 ▶ .NET 애플리케이션에서도 여전히 비관리형 파일을 사용하는 경우가 있다. 다음 url의 문서들은 unmanaged 파일을 배포하는 방법에 대해서 설명하고 있다. 참조 문서 Versioning/Deploying Unmanaged Files - Suzanne Cook's blog http://blogs.msdn.com/suzcook/archive/2004/10/28/249280.aspx HOW TO: Deploy COM Interop Programs to Internet Explorer - msdn http://support.microsoft.com/?kbid=311297 Escape DLL Hell Simplify App Deployment with ClickOnce and Registration-Fr.. 더보기 이전 1 2 3 4 5 6 7 8 ··· 10 다음