총 삽질들 514

#075_닷넷(.NET)_.Net Framework 기본 - 메모리상 Thread 기본 구조

안녕하세요 삽잡이입니다. 이전에 쓰레드에 대해서 알아본 적이 있습니다.간단하게 다시 요약해보죠.모든 응용 프로그램의 진입점은 Primary Thread에 의해서 실행됩니다.따라서, 쓰레드는 프로세스 내의 실행 경로라고 부를 수 있지요. 독립적으로 움직이는 쓰레드들은메모리 관점에서 볼 때 핵심적으로 두가지의 메모리를 갖습니다.바로, TLS와 Stack을 소유할 수 있는 것입니다.또한, Heap 영역과 Global Data영역을 공유하지요. 닷넷에서는 프로세스와 쓰레드를 다루기 편하도록 타입을 만들어놨습니다.Process 타입의 속성에는 크게,'Handle, Id, Moudle, Threads' 가 있습니다.말 그대로 핸들을 반환하거나,프로세스의 PID, module, Thread들을 반환할 수 있는 속성들..

[삽잡이] 모듈(module) 이란?

모듈이란, '전체를 다루는 일부'를 뜻합니다. 그리고, 일반적으로 컴퓨터 용어에서 부르는 모듈이란 '컴파일이 완료된 바이너리'입니다.또한, 이 때의 모듈에서는 기존의 모듈의 의미인 '어떤 일부'라는 의미가 들어가야겠지요. 즉, 컴퓨터 용어에서 모듈은'라이브러리'를 말하게 되는 것입니다.라이브러리는 여러가지의 타입들, 함수들을 모아둔 집합의 용어를 뜻합니다. 그렇다면 모듈과 라이브러리는 뭔 차이일까요?라이브러리라는 모듈을 사용할 때에는'어떤 것의 일부'로 사용된다는 의미가 좀더 강하게 됩니다. C#에서는 '다중 파일 어셈블리'에서 모듈이라는 용어가 존재합니다.다중 파일 어셈블리에서의 모듈이란,다중 파일을 다루는 '일부 닷넷 바이너리'를 말하는 것입니다. 만약, 다중 파일 어셈블리가 4개의 다중 파일로 이루..

[삽잡이] 직렬화 (Serialization ) & 역직렬화 (UnSerialization)

직렬화란, 말 그대로 직렬로 만들겠다는 뜻이다.그렇다면 역직렬화란? 이또한 역직렬로 만들겠다는 뜻이다. 사실 직렬화라는 단어는 '객체'에 대한 내용이 나오지 않는다면 의미가 없습니다.객체를 어떤 장치에 쓰고, 다시 객체로 복원하는지에 대한 작업이 직렬화와 역직렬화에 관련된 작업이 됩니다. 우리가 만든 객체가 하나 있다고 해봅시다.이때에 이 객체를 똑같이 복원하고 싶을 때 어떻게 할까요?객체는 어플리케이션에 만들어지는데, 프로그램이 죽는 순간 다 날라가버리지 않습니까? 마치 피x온라인에서 전설의 카드로 '베르캄프'선수를 뽑았는데,피x온라인을 종료하자마자 베르캄프가 날라간다고 해봅시다... 하... 이처럼, 어플리케이션을 다시 켰을 때 지금까지 만들어놓은 객체를 복원되게 하고싶다면?이러한 요구로부터 나온 단..

#074_닷넷(.NET)_.Net Framework 기본 - 특성 (Attribute)

안녕하세요 삽잡이입니다. 이번 시간에는 닷넷에서 제공하는 특성에 대해서 알아보려고합니다. 특성은 우리가 알고 있는 특성이 아닙니다. 닷넷에서 말하는 특성인 필드를 말하는 것이 아닙니다. XML의 Element를 가보면, 시작태그와 끝 태그가 있다고 하지 않았습니까?그 사이에 시작 태그의 이름과 값 사이에 있는 특성을 말하는 것도 아닙니다. 제가 이번 시간에 말하고자 하는 특성은 닷넷에 있는 또 다른 특성입니다. 우선 C#에서 기호로는 대괄호 내에 있는 어떤 것을 바로 '특성'이라고 부릅니다. 이 특성은 어셈블리 자체에 특성이 있을 수도 있고,그 외에 모듈, 타입, 멤버(속성, 필드, 메서드 등)등에 지정될 수 있는 특성들이 있습니다.즉, 특성이라는 것이 그런 것입니다.어셈블리, 모듈, 타입, 멤버등에 지..

#073_닷넷(.NET)_.Net Framework 기본 - 동적 어셈블리 로딩

안녕하세요 삽잡이입니다. 이번 시간에는 동적으로 어셈블링을 하고,객체를 생성해보고, 메서드를 바인딩해보려고합니다. 머나먼 여정이 될것 같습니다... 같이 힘내서 달려봅시다! 동적이라는 뜻은 '런타임'시간을 의미하고,정적이라는 뜻은 '컴파일' 시간을 의미합니다. 그렇다면 동적 어셈블리 로딩이란 무엇일까요?바로, 실행시간에 어셈블리를 로드하는 것이지요. 도대체 동적, 정적을 왜 나눠놓은 것일까요?각기 필요가 있으니 나눠놓은 것이지요... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 정적으로 어셈블리를 로드 할 경우 '고정 불변'입니다.즉, 컴파일할 때에 어셈블리를 참조하게 되면 변경이 불가능해지는 것입니다. 그런데 동적으로 어셈블리를 로드할 경우에는 '변화가 가능'합니다.원하는 시점에 Load/UnLoad가 가능하다는 소리입..

#072_닷넷(.NET)_.Net Framework 기본 - Type 클래스 & 리플렉션

안녕하세요 삽잡이입니다. 이번 시간부터는 실시간에 '몰랐던' 타입을 로딩하고,그 로딩한 타입의 인스턴스(객체)를 생성하는 등의 작업에 대해서 알아보려고합니다. 차근차근 알아보도록 하겠습니다.이전에 배웠던 내용들을 한번 생각해볼까요? 우선, 어셈블리는 배포되고 버전관리가 되는 단위라고 말했었습니다.그리고, 메타데이터는정보의 정보 즉, '함축적인 정보'라고 헀습니다.정보를 알게 되면 더 많은 정보들을 뽑아낼 수 있다는 의미입니다. 대표적인 메타데이터의 예로, 벡터 이미지가 있지요.벡터 이미지는 픽셀이라는 위치값에 따르는 색상값 즉, 사람들이 인식할 수 있는 데이터들의 집합입니다. 벡터 이미지는 이미지이자만, 정보를 가지고 있는 이미지입니다.이미지를 나타내는 정보 말입니다.이처럼 함축적인 정보를 바로 '메타'..

[삽잡이] XML

XML에 대해서 알아볼 기회가 있어서 간략하게(?) 알아봤습니다. XML이란, Mark Up 언어입니다.해당 언어는 확장 가능한 Mark Up Language라는 뜻으로써,대표적인 언어로는 HTML이 있습니다.이 Mark Up 언어의 장점은 말 그대로 Mark Up을 갖는 언어라는것입니다. 일반적으로 파일은 크게 두 가지로 분류를 할 수 있습니다.바로, '텍스트 파일' 과 '바이너리 파일'입니다. 이 둘은 서로 다른 장,단점을 가지고 있습니다.텍스트 파일의 경우 '읽기가 편하다.'는 장점이 있습니다.그리고 바이너리 파일의 경우 '정확한 정보를 찾아내기 쉽다.'는 장점을 가지고 있습니다. 이처럼 텍스트를 사용하면 읽기에는 편하지만 정보를 뽑아오기는 매우 어렵습니다.형식이 없기 때문이지요...즉, 정형화 된..

#071_닷넷(.NET)_.Net Framework 기본 - 어셈블리 (구성 파일)

안녕하세요 삽잡이입니다. 이번시간에도 어김없이 어셈블리에 대해서 알아보려고합니다. 그 중에서 바로 핵심중 하나인 '구성 파일' 에 대한 개념을 알아보겠습니다. 실행파일을 전혀 변경시키지않고 불과 몇줄만의 코드 수정으로도 내가 하고자하는 프로그램의 성질을 완전히 바꿀 수 있다면 얼마나 편리할까요? 이 편리함을 바로 '구성 파일'이 제공해주는 것입니다. 코드 몇줄만으로도 똑같은 라이브러리인데, 버전이 다를 경우 한 곳에선 이전 버전, 또 다른 곳에서는 최신 버전을 사용하게 만들 수 있다 이겁니다. 즉, 구성 파일은 실행 파일이 실행되기 직전에자기 자신과 관련성이 있는 실행 파일의 구성이 있는 지를 확인해주는 파일입니다. 어셈블리를 proving 할 때에 다섯가지의 강력한 이름을 비교하여 구분한다고 했습니다...

#070_닷넷(.NET)_.Net Framework 기본 - 어셈블리 (공유 어셈블리)

안녕하세요 삽잡이입니다. 이번 시간에는 공유 어셈블리에 대해서 알아보려고합니다. 이처럼 '강력한 이름 키'를 만들게 되면 '.snk' 확장자 명으로 파일이 하나 만들어집니다. 해당 파일은 암호화 알고리즘에 의해 만들어진 파일입니다. 이는 강력한 이름 키 파일입니다. 우리가 뭔말인지 알아보지는 못하겠지만, 현재 '성명 키'를 생성하게 된것입니다. 보안에 사용되는 알고리즘 중 '공개키, 비밀키' 알고리즘이라는 것이 있습니다. MD5라던지, RSA 알고리즘에서 사용되지요. 아무튼... 해당 파일은 공개키, 비밀키에 의해 만들어진 코드 값입니다. 닷넷에서 제공해주는 '강력한 이름'에는 다섯가지가 있습니다. 이 강력한 이름이란, 공유 어셈블리를 배포하기 이전에 부여해줘야하는 것입니다. 즉, 공유 어셈블리는 '강력..

#069_닷넷(.NET)_.Net Framework 기본 - 어셈블리(assembly)

안녕하세요 삽잡이입니다. 이번 시간부터 본격적으로 닷넷에서 제공해주는 어셈블리에 대해서 알아보려고합니다.글이 산으로 갈 수 있으니 주의하시고...시작해보겠습니다. 닷넷 플렛폼의 특징 중 하나가 바로 바이너리를 재사용할 수 있다는 것입니다.즉, 외부의 어셈블리에 포함된 타입을 재사용할 수 있다는 것을 의미합니다. 그렇다면 어셈블리란 무엇일까요?어셈블리의 정의는'버전 관리되고 배포 되는 프로그램의 단위'를 뜻합니다. 어셈블리는 두 가지의 종류로 배포될 수 있습니다.즉, 응용 프로그램 하나 혹은 여러 프로그램에서 사용하는지에 따라 두가지로 나뉠 수 있게 됩니다.바로, '공유 어셈블리'와 '전용 어셈블리'로 나뉠 수 있게 되지요. 전용 어셈블리는 응용 프로그램 하나에,공유 어셈블리는 여러 응용 프로그램에서 사용..