본문 바로가기

IT 살이/04. 기술 - 프로그래밍

.Net Framework source (4.5.1 ~ 4.6.2 ) 공개 사이트 소개(링크) .Net Framework source (4.5.1 ~ 4.6.2 ) 공개 사이트 소개 MS 사이트 : http://referencesource.microsoft.com/ 더보기
ClickOnce SHA2기반 코드 사인 SHA2 기반의 인증서를 사용하면, Visual Studio에서 제공하는 서명 기능이 제대로 작동하지 않는 듯 하다. 특히 SHA2용 Timestamp URL을 입력하면 오류가 발생하고 있다. 명령 프롬프트에서 직접 signtool.exe같은 서명툴을 사용하면 정상으로 서명이 진행된다. Visual Studio에서 아직 찾지 못한 자동화 방법이 있는지는 모르겠다. 우선 Visual Studio를 사용하지 않고, 사인툴(Signtool.exe)을 직접 사용하는 방식을 택했다. 그 절차를 정리해 둔다. 01.click once sha2기반 코드 사인 2016.05.30 from InGuen Hwang 더보기
ASP.NET 웹 어플리케이션 인스턴스와 HttpModule 아래 글은 동일한 ASP.NET 웹 어플리케이션의 인스턴스가 여러개 생성될 수 있다는 것을 말하고 있다. 2015/09/06 - [04.기술-APP/웹서버] - 05. ASP.NET 웹어플리케이션-쓰레드 같은 프로세스내에서 동일한ASP.NET 웹 어플리케이션 인스턴스가 여러개 생성되어 동시에(simultaneously)된다는 것이고 이것은 ASP.NET은 하나의 프로세스내에서 여러개의 웹 어플리케이션을 멀티쓰레드로 실행하는 것을 의미할 것이다. 그래서 앞의 포스트에서는 static 변수를 사용할때 locking을 사용해야 한다고 했다. 그리고 동일한 웹 어플리케이션의 인스턴스가 여러개 생성된다는 것은 HttpModule의 구현에도 영향을 줄 수 있다는 것을 아래 블로그가 설명하고 있다. How to co.. 더보기
C#, yield return ※ 일단 "yield"는 "항복"보다는 "produce"라는 의미로 해석하자. C# 2.0에서 봤던 것 같은데, "yield return", 이런 녀석이 있구나 하고 그냥 넘어갔었다. 이 녀석을 다시 보게 된 것은 LINQ 때문이다. 그때 정리 좀 해야겠다 싶었던 LINQ의 "Deferred Execution"특성이 "yield return"과 연관되어 있다는 것을 느꼈다. yield return을 이해하면 도움이 될 것 같다는 생각을 했다. ■ yield return 이란 뭣인가? 지금까지 봐온 봐로는 yield return은 주로 컬렉션의 iterator를 구현할 때 이용하는 듯 하다. 다음과 같이 컬렉션이 있다고 해 보자. private static readonly string[] StringVal.. 더보기
log4net 정리 & 예제 개발을 하다 보면 로그 모듈을 제작해야 하는 경우가 많다. 때로는 개인적인 디버깅 목적으로 때로는 시스템의 일부로서. 그럴때마다 제작해야 하는 것이 귀찮을때도 있고, 기간이 정해진 프로젝트라면 일정때문에 안정된 모듈을 찾는 경우도 있다. log4net 라이브러리는 라이센스 제약도 거의 없고, 여러가지 장점들이 있는 듯하다.이번에 사용할 기회가 생겨 메모를 좀 해 두려한다. ■ log4Net 모듈 개요 1) config를 통해서 다양한 로그 저장소를 "설정"할 수 있다. 참고) 로그 저장소에 로그를 남기는 log4Net의 소위 "Appender"들이 이미 구현되어 있다.2) "설정"한 로그 저장소중에서 필요한 저장소를 시나리오에 따라서 "선택"할 수 있다. "선택"또한 config를 통해서 할 수 있다.3.. 더보기
ASP.NET Session ID 특성 달봉이가 근무하고 있는 곳에서 ASP.NET의 SessionID를 쿠키의 키로 이용하는 웹 어플리케이션이 있었다. 다음과 같은 구조에 문제가 없을까? ■ 상황 웹 어플리케이션 사용자 세션 정보를 쿠키에 저장하고 있었는데, 아래와 같은 구조였다. [쿠키 키 : (사용자정보#1,값#1), (사용자정보#2,값#2),... (사용자정보#n,값#n)]쿠키 키 : ASP.NET 세션 ID값을 사용 근데 이 키를 ASP.NET의 현재 Session ID로 지정하고 있었다. ASP.NET의 Session ID를 쿠키의 키로 지정하는 예는 처음 보았다. 이 코드가 문제가 있다는 것을 설명하기 위해서 구글링을 해 봤다. ■ 분석 사용자가 ASP.NET 어플리케이션에 대한 요청을 하면 아래와 같이 상태 관리를 위한 세션 객.. 더보기
.NET 어셈블리 로드 컨텍스트(최종이길 바라며...) ClickOnce 배포와 NTD 배포가 함께 섞여 있는 어플리케이션을 만들다보면, 동일한 어셈블리가 ClickOnce로도 배포되고, NTD로 배포되는 상황이 발생할 수 있다. 이런 경우, .NET의 어셈블리 로드 컨텍스트를 알아야 한다. 이전 포스트에서도 정리를 했지만 제대로 정리가 되지 않았다. 마지막으로 정리해서 올려본다. 어셈블리 로딩 컨텍스트 from InGuen Hwang 더보기
어셈블리 바인딩(최종) .NET 기반의 어플리케이션을 작성하는 개발자, 특히 개발 프레임워크를 만들거나 운영하는 사람은 어셈블리 바인딩에 주목해야 한다.어셈블리 바인딩에 대해서 꽤 오랫동안 정리를 해 왔던 것 같다. 이전에 올리 포스트들을 정리하고 싶지는 않다. 잘못된 부분이 있다면 그대로 두려고 한다. 시간도 없다. 아마 이번이 개발자로서 정리하는 최종 버전이 되지 않을까 싶다. Locate Assembly from InGuen Hwang 더보기
05. ASP.NET 웹어플리케이션-쓰레드 ASP.NET 웹 어플리케이션에서 쓰레드 프로그래밍을 한다고 가정해보자. 이때 서버측 코드의 정적 필드는 어떤 단위로 격리될까? 예를 들어 static string s = “초기값”을 가지고 있는 쓰레드가 있다고 하자. 이 정적 필드 s를 같은 스레드에서 s=“다른값”으로 변경하면, 어디에서 “초기값”으로 조회되고, 어디에서 “다른값”으로 조회될까 고민해본 적 있다. 결론을 말하면 "같은 AppDomain과 같은 쓰레드"에서는 동일한 Thread Local Storage를 갖는다. 만약 ASP.NET 프로그램에서 명시적으로 AppDomain을 생성하지 않는다면 웹 어플리케이션과 AppDomain은 1:1이다. 하나의 AppDomain에서 쓰레드 프로그래밍을 하면 쓰레드별로 정적 필드가 관리된다는 것이다... 더보기
04. ASP.NET 웹 어플리케이션, AppDomain 웹 어플리케이션과 Appdomain에 대해서 좀 더 알아보자. 코드의 실행 범위 그리고 리소스의 소유 범위를 결정하는 모델은 프로그래밍 모델, 기술에 따라서 항상 있어왔다. OS에서는 프로세스(process)가 애플리케이션의 경계가 되었고, IIS와 ASP에서는 가상 디렉토리를 기준으로 애플리케이션이 구분되었고 그리고 .NET 실행환경에서는 실행공간을 나누기 위해서 애플리케이션 도메인(AppDomain) 개념을 사용하고 있는 것이다. 즉 애플리케이션의 코드가 실제로 실행되는 런타임 공간이 AppDomain이다."웹 어플리케이션"은 IIS 관리자에서 시각적으로 보이기때문에 익숙할 수 있다. 반면에 "어플리케이션 도메인"은 IIS 관리자를 통해서 보여지지 않기때문에 익숙하지 않다. 각 ASP.NET 어플리케.. 더보기
03. IIS - 워커 프로세스 처리 static 파일에 대한 요청(.jpg, .htm등)이든 동적인 파일에 대한 요청(.aspx, .php등)이든, 모든 요청은 다음 그림처럼 워커 프로세스로 전달된다( 아래 그림은 IIS7.x 이상의 "통합모드"로 설정된 어플리케이션에서 HTTP요청이 처리되는 것을 보여주고 있다). 정적인 파일에 대한 요청이든 동적 파일에 대한 요청이든 모든 요청은 그림처럼 IIS의 파이프라인를 통과하게된다. 이 과정에서 aspx라는 요청이 확인되면 ASP.NET으로 요청이 전달된다. ASP.NET은 .NET 런타임 CLR을 로딩하고 하고, .NET 웹 어플리케이션이 실행될 AppDomain을 생성한다. 그런 다음 CLR은 생성된 AppDomain으로 웹 어플리케이션에서 사용할 클래스 등 모든 타입을 가지고 있는 어셈블리.. 더보기
02. IIS - HTTP 요청 처리 다음 그림은 커널 모드의 리스너부터 시작해서 HTTP 요청을 처리하는 과정을 그림으로 그렸다.( 다른 프로토콜 요청 처리에 대한 그림은 이와 유사하게 될 것으로 본다.) 구성 요소들이 좀 더 상세하게 그려졌고, 서로간의 관련서도 보여주도록 그렸다. configuration 저장소가 있다. 이 configuration 저장소는 파일 시스템의 파일("ApplicationHost.config")로 되어 있다. 이곳에 웹 어플리케이션과 어플리케이션 풀등의 정보가 저장된다.ASPX 요청이 들어온다고 가정해보자(IIS7.x의 통합모드에서는 HTML 요청도 비슷한 처리 과정을 거친다). 1) 커널모드의 HTTP 리스너인 http.sys가 요청을 받고 이 요청은 커널 모드의 Request Queue에 넣는다. 2) H.. 더보기
01. IIS - Basic Architecture & WAS IIS 구조, 작동 원리 및 역할 수행 프로세스에 대해서 달봉이 입맛에 맞게 한번 정리하고 싶었다. 나름 정리 원칙을 정했었다. ■ 정리 원칙 1) 먼저, IIS 웹 서버의 정적인 구조를 보여주는 큰 그림을 보여준다. 2) 그리고 나서 특정 주제별 작은 그림들의 개념도를 간략히 보여준다. 3) 마지막으로 특정 주제별 상세한 구조 및 프로세스에 대해서 정리한다. 여기서, 특정 주제라 함은 프로세스, 쓰레드, 큐 모델, IIS와 .NET 연동 모델, AppDomain, 웹 Application, ApplicationPool의 개념등을 말하고 있다. 1),2) 목적은 기억에 오래 남을 수 있도록 전체와 특정 주제별로 간단한 개념도 수준의 요약본을 그리는 것이다. 주로 정적인 구조의 그림이다. 3)의 목적은 상.. 더보기
어도비 PDF 열리지 않는 문제 어도비 PDF 열리지 않는 문제.. 상황을 보니, 근본적인 조치를 취하기가 힘들어요. ..... driving me crazy 이 문제를 해결하기 위한 시도는 2가지의 방향이 있는 듯 합니다. : 공식적, 비공식적 1. Adobe 공식적인 방법 1.1) Adobe 헬프의 "자동 업데이트"를 통해서 해결하라. Solutions to common issues viewing PDFs from a website. https://helpx.adobe.com/acrobat/kb/cant-view-pdf-web.html 1.2) 만약 직접 트러블슈팅을 통해서 하고 싶다면 아래 20가지 항목을 체크하라. Troubleshoot errors, freezes, Reader, Windows https://helpx.adob.. 더보기
Adobe, Java 환경 설정 많은 솔루션들간에 인터페이스가 일어나고 있고, 각 구성 요소들의 변화가 다른 요소들에 영향을 줄 수 있는 엔터프라이즈 환경에서는 환경 설정값이 통제되어야 하는 경우가 종종 있다. 특히 다음 두 가지 설정은 자주 시스템을 비정상적으로 작동하게 만든다. 보안 모드 자동 업데이트달봉이의 경험상 아래 두 제품은 앞의 두가지 설정에 특히 민감했다. Java (JRE), Adobe 제품 이 제품들은 버전별로 보안 설정을 처리해야 하는 경우도 있는 듯 하고, 그리고 윈도우 업데이트 기능을 사용하지 않고 자체적으로 가지고 있는 자동 업데이트 기능때문에 많은 문제들이 발생한다. 자동 업데이터( Auto Updater, 제품 업데이트를 담당하는 작은 프로그램) 자체의 업데이트도 제품의 실행에 영향을 주기도 한다. 예를 들.. 더보기
.NET 캐시 .NET 기반의 프로젝트를 담당하고 있다. 얼마전에 누군가 "NTD 배포( 예를 들어 LoadFrom 메소드 사용)로 다운로드되는 어셈블리가 서명이 된 경우( strong named assembly, signed assembly)라면 클라이언트 머신의 GAC( Global Assembly Cache)에 등록된다"는 얘기를 했다. 깜딱 놀랬다. 해서 .NET 캐시 특히 스마트클라이언트 어플리케이션과 관련된 캐시에 대한 정리를 해야 겠다고 생각하게 됐다. .NET 어플리케이션중에서도 스마트클라이언트와 관련된 캐시는 4개가 있다. Global Assembly Cache Download Cache Web Browser Cache ClickOnce Application cache 예의 "그"가 오해했던 것은 "G.. 더보기
어셈블리 바인딩3-정리 어셈블리 바인딩 관련 최종 버전은 아래 링크로 바로 갈 수 있다. 2015/10/15 - [04.기술-APP/.NET InDepth] - 어셈블리 바인딩(최종) 요즘 일하면서 어셈블리 바인딩 문제를 몇 건 만나고 있어서, 오래전에 이에 대해서 올린 포스트를 훑어 보았다. 어셈블리 바인딩1 어셈블리 바인딩2 시간이 꽤 지난 지금 읽어보니 글을 컴팩트하게 정리할 필요를 느꼈다. ■ 어셈블리 바인딩이란? 하나의 .NET 어셈블리는 여러개의 다른 어셈블리를 참조한다. 개발시, 참조하는 어셈블리와 참조되는 어셈블리는 주로 같은 디렉토리에 있기때문에 많은 개발자들은 하나의 어셈블리가 다른 어셈블리에 있는 메소드를 사용하는 것을 당연하게 생각한다. 그러나 참조되는 어셈블리는 크게 "검색"하고, 찾게 되면 "로딩"하는.. 더보기
back to the basic : .NET Interoperablility basic이라고 해서 기본적이라는 의미는 아니다. .NET이 세상에 출시된지 10년이 넘었기에 .NET과 관련된 새로운 주제는 아니라는 의미에서의 basic이다. ■ .NET 상호운용성(interoperability) .NET이라는 새로운 방식으로 컴포넌트를 만들 수 있게 되었지만, 그때도 그랬지만 지금도 여전히 기존의 만들어진 COM 컴포넌트나 Win32를 직접 호출해서 만들어진 프로그램들도 여전히 많다. .NET이 나오면서 어플리케이션의 세계도 구분이 필요하게 되었는데, .NET 코드가 실행되는 어플리케이션의 세계를 "managed(관리형)"라는 말로 표현하게 되었고, .NET 이전의 어플리케이션의 세계를 "nonmanaged(비관리형)"이라고 표현했다. .NET의 중요한 목표중의 하나는 unmana.. 더보기
LoadFrom 컨텍스트 오랜만에 .NET 이야기를 써 보고자 한다. 이전 포스팅에서 어셈블리 바인딩에 대해서 이야기한 적이 있다. 2009/04/23 - [01. 기술-APP] - 어셈블리 바인딩 12009/04/23 - [01. 기술-APP] - 어셈블리 바인딩 2 그때 "LoadFrom 컨텍스트"라는 것을 것을 그림에서 보여준 적이 있었다. 이제 이 LoadFrom 컨텍스트라는 것에 대해서 좀 더 상세히 정리하고 싶다. LoadFrom 메소드를 요즘 자주 사용하다 보니 관련된 이슈가 계속 생기고 있어서 정리를 해야 겠다는 생각을 하고 있었다. LoadFrom을 사용해서 원격에 있는 어셈블리를 호출하게 되면 어셈블리의 코드가 수정되는 경우 재배포에 대한 편리함이 있고 해서 개발단계, 유지 보수 단계에서도 편의성을 제공하게 된.. 더보기
[메모] 디버깅 정보 블로그 http://blogs.msdn.com/b/tess/ WinDBG, SOS, ADPlus 관련 지식 전달 더보기