삽질의 현장/- .NET

#077_닷넷(.NET)_.Net Framework 기본 - 객체 컨텍스트

shovelman 2015. 11. 15. 16:45


안녕하세요 삽잡이입니다.


닷넷에서의 프로세스는

어플리케이션 도메인이 한개 이상 존재할 수 있다고 했었습니다.

기본 APP Domain과 그 이외에 사용자가 이름을 붙일 수 있는 Sub App Domain들이 있지요.

이를 닷넷에서는 논리적인 프로세스라고 볼 수 있다고 했습니다.



그런데, APP Domain에는 컨텍스트라는 것이 포함이 됩니다.

기본은 무조건 Context 0 이지요.

즉, App Domain이 만들어지면, 기본적으로 컨텍스트가 만들어지는데,

이는 사용자가 만들고 제거해주는 것이 아닙니다.

사용자가 만드는 컨텍스트는 0번을 제외한 다른 번호의 컨텍스트가 되는 것이지요.


닷넷의 프로세스가 기본적으로 뜰 때 App Domain이 생성되듯이,

기본 컨텍스트도 생성이 됩니다.



이러한 컨텍스트는 도대체 무엇일까요?

바로, '특정 요청'을 갖는 객체들을 넣는 독립적인 공간을 뜻합니다.


객체를 생성하게 될 때에 수 없이 많은 객체들이 생성된다고해봅시다.

이러한 일반적인 객체들을 우리는 'Context Agile 객체'라고 부릅니다.

이는 '아무것도 특정 요청을 받지 않은 평범한 객체'임을 의미합니다.


해당 객체들은 모두 Context 0번 방에 들어가게 됩니다.

즉, 기본 컨텍스트에 위치하게 되는 것이지요.


그런데, 우리 이전에 특성 공부한 적이 있었는데...

어떤 객체에 특성을 부여했다고 해봅시다.

그런데 수 많은 객체중에 몇개의 객체만이 특성이 부여됬다면...

CLR에서 판단할 때 매우 비효율적이지 않겠습니까?


따라서 특성과 같이 '특정 요청'을 갖는 객체가 있다면,

기본 컨텍스트 0번의 공간에 두는 것이 아니라

Runtime에 의해서 Context 1번을 만들고 거기에 해당 객체들을 담게 됩니다.

즉, Context 0번에 담겨져 있는 객체들은 아무 체크도 안하지만,

Context 1번에 담긴 객체들은 체킹을 하게 되는 것이지요...


이렇게 '특정 요청'을 갖는 객체를 우리는

'Context Bound 객체'라고 부르며, 따로 보관하게 됩니다.

이렇게 컨택스트를 만들게 되면 

관리가 훨씬 용이하고 효율적이라는 장점을 가지게 됩니다.


이렇게 '논리적'으로 그룹을 나누어 객체를 담을 수 있습니다.

굉장히 효율적이지요.



그런데, Context Bound 객체를 만들기 위해서는

'ContextBoundObject'를 상속받아야합니다.

그리고, 특성을 적용시켜줘야합니다.


여기서 주의해야할 사항이 하나 있습니다.

바로 '쓰레드'와의 관계입니다.


사실, APP Domain은 격리 공간을 제공하기 위한 

논리적인 프로세스 파티션입니다.

그래서 쓰레드와 전혀 관련성을 갖지 않지요.

따라서, 컨텍스트와도 전혀 관련성을 갖지 않습니다.


하나의 쓰레드가 여러개의 도메인과 컨텍스트를 실행시킬 수있습니다.

즉, 그리고 메모리간에 격리가 되어있을 수 는 있으나,

쓰레드가 이곳 저곳을 넘나들며 실행할 수 있다 이겁니다.


또한, 하나의 기능을 전문적인 쓰레드가 실행하도록 지정할 수 도 있습니다.


아무튼 APP 도메인이나 컨텍스트는

진짜 프로세스가 아니기 때문에 쓰레드와 무관한 사실을 기억하시길 바랍니다.

쓰레드를 하나만, 혹은 여러개 띄울 수 있다 이겁니다.

어차피 OS가 보는 프로세스는 하나이니깐요.


이번시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!