'플래폼'에 해당되는 글 1건

  1. 2007.05.23 플랫폼으로서의 Windows 소개


이글은 Microsoft MSDN에서 보실수 있습니다.
http://www.microsoft.com/korea/msdn/library/ko-kr/bb330925(VS.80).aspx
 




플랫폼으로서의 Windows 소개

Rich Tebb

Content Master Ltd

2007년 2월

목차


개요

Visual Studio Express Edition 제품군은 쉽게 익힐 수 있는 간단하고 간편한 무료 프로그래밍 도구 모음을 제공하며, 취미로 개발하는 일반 사용자, 초보 개발자 및 예비 개발자를 대상으로 만들어졌습니다. 이들 중에는 컴퓨터 과학 분야에 대해 정규 교육을 받은 적이 없고 실제로 프로그래밍 경험이 전무한 사람이 많습니다. 여기에 해당하는 독자라면 이제 걱정하지 마십시오. 이 기사를 통해 여러분을 프로그래밍의 세계로 안내해 드리겠습니다.

이 초보자 가이드는 컴퓨터 프로그래밍에 대한 지식이 거의 없거나 전무한 상태로 Visual Studio Express 도구를 사용한 프로그래밍에 도전하려는 독자를 대상으로 작성되었습니다. 따라서 프로그래밍 경험이 풍부한 독자에게는 크게 도움이 되지 않을 수 있습니다.

그러면 이 가이드에서는 어떤 내용을 배우게 될까요? Microsoft Windows 컴퓨터에서 실행할 수 있는 프로그램을 작성하려는 경우 이 가이드에서 구체적인 방법을 이해하는 데 도움이 되는 기본 개념을 배울 수 있습니다. 자세한 내용을 정리하면 다음과 같습니다.

  • 컴퓨터의 작동 원리

  • 하드웨어와 소프트웨어의 차이

  • 운영 체제의 정의

  • 컴퓨터 프로그램의 실행 원리

  • 프로그램의 구성 요소 파트란?

이 가이드는 Microsoft Windows 프로그램 실행 환경을 이해하는 데 도움을 주기 위해 작성되었습니다. 프로그램의 작동 방식은 실행되는 컴퓨터, 운영 체제, 사용자의 프로그램 사용 방식 등 여러 가지 요인에 따라 달라집니다. 이러한 컴퓨터 프로그램의 환경을 플랫폼이라고 합니다. 프로그래밍 환경을 이해하면 컴퓨터가 프로그램을 해석하는 방식을 파악할 수 있으므로 프로그램을 보다 쉽게 배울 수 있고 궁극적으로는 더 나은 프로그램을 작성할 수 있습니다.

이 가이드에서는 이러한 프로그래밍 환경으로서의 Microsoft Windows 플랫폼에 대해 설명합니다. 따라서 이 문서의 내용은 Windows에서 실행되고 Microsoft Windows를 실행하는 사용자가 사용하는 프로그램, 즉 Windows 응용 프로그램에 적용됩니다. 브라우저를 사용하여 액세스하는 응용 프로그램을 작성할 때는 Windows 응용 프로그램이 아니라 웹 응용 프로그램을 만들어야 합니다. 이 경우에는 관련 기사인 "플랫폼으로서의 웹 소개"를 읽어 보시기 바랍니다. 이 기사를 통해 응용 프로그램 플랫폼으로서의 World Wide Web에 대한 정보를 얻을 수 있습니다.


컴퓨터의 작동 원리

컴퓨터는 여러 가지 고급 기술 구성 요소로 이루어져 있지만 기본적인 작동 원리는 매우 간단할 뿐만 아니라 20세기 중반 전자 컴퓨터가 처음 발명된 이래 거의 변하지 않았습니다. 컴퓨터에는 다음과 같은 세 가지 주요 기능 영역이 있습니다.

  • 입/출력. 컴퓨터에 연결되어 컴퓨터와 '외부 세계'(컴퓨터의 관점에서)의 상호 작용 또는 의사 소통 수단을 제공하는 모든 장치를 말합니다. 입력 장치의 예로는 키보드, 마우스, 조이스틱 등이 있고, 출력 장치의 예로는 모니터, 프린터, 사운드 카드 등이 있습니다.

  • 메모리. 컴퓨터에서 정보 저장 기능을 제공하는 부분입니다. 컴퓨터의 메모리는 바이트라는 수천 개의 작은 단위로 나누어져 있으며 컴퓨터에서 관리되는 모든 데이터는 하나 이상의 바이트에 저장됩니다. 이러한 바이트는 벌집의 구멍 하나에 비유할 수 있습니다. 수많은 우편 사서함과 같이 각 구멍(바이트)에는 컴퓨터가 데이터를 가져오고 저장하는 데 사용하는 고유한 메모리 위치, 즉 주소가 할당되어 있습니다. 그리고 각 바이트 안에는 컴퓨터가 처리할 수 있는 숫자가 들어 있습니다.

  • 중앙 처리 장치. CPU(중앙 처리 장치)는 컴퓨터의 '두뇌'에 해당하는 부분으로, 모든 계산을 수행하고 메모리와 입/출력 장치의 작업을 제어합니다.


명령 주기

컴퓨터는 메모리나 입력 장치에서 CPU로 바이트를 복사하고 이 바이트에 대한 계산을 수행한 후 계산 결과를 메모리나 입력 장치로 다시 복사하는 방식으로 작동합니다. 이러한 프로세스는 다음과 같은 주기로 계속 반복됩니다.

이러한 데이터 처리 주기를 실행하기 위해서는 명령을 통해 컴퓨터에 읽고 쓸 데이터와 수행할 계산을 지시해야 합니다. 명령은 데이터를 읽을(메모리에서 데이터를 가져올) 위치나 데이터를 쓸(메모리에 데이터를 저장할) 위치와 액세스할 입력 또는 출력 장치를 CPU에 알려 주는 역할을 합니다. 컴퓨터 메모리에 이미지 또는 사운드와 같은 외부 항목을 나타내는 정보가 저장되는 방법은 이 기사의 뒷부분에서 살펴봅니다.

컴퓨터에서 실행되는 명령은 다른 데이터와 마찬가지로 단순히 숫자에 불과하며 컴퓨터의 메모리에 저장됩니다. CPU는 실행할 다음 명령이 있는 메모리 위치(주소)를 내부 레코드에 항상 유지합니다. 그리고 한 명령을 완료하면 메모리에서 다음 명령을 읽고 그 다음 명령을 가리키도록 레코드를 업데이트합니다. 레코드를 업데이트한 후에는 방금 메모리에서 읽어온 명령을 처리할 수 있습니다.

한마디로 컴퓨터 프로그램은 CPU에 대한 명령이 포함된 일련의 바이트일 뿐입니다. 컴퓨터가 프로그램을 실행할 때는 명령 바이트의 집합 내에서 순차적으로 이동하면서 각 명령을 CPU에 로드하고 해당 명령을 수행한 후 다음 명령을 CPU로 가져옵니다. 이러한 동작은 자동으로 실행되므로 프로그램 자체에서 항상 CPU에 다음 명령으로 이동하도록 지시할 필요는 없습니다.

그러나 명령을 통해 CPU에 내부 레코드를 수정하도록 지시하여 다음 명령을 다른 주소에서 읽게 할 수는 있습니다. '점프'라고 하는 이러한 명령을 사용하면 상황에 따라 컴퓨터가 다른 작업을 수행하도록 할 수 있습니다. 몇 가지 명령과 컴퓨터에서 이를 사용하는 방법을 예로 들어 컴퓨터 내에서 명령이 작동하는 방식을 살펴보도록 하겠습니다.

위 그림은 CPU 명령(하위 섹션)과 데이터(상위 섹션)가 있는 몇 개의 컴퓨터 메모리 바이트를 보여 줍니다.

그림에 나와 있는 메모리의 하위 섹션에는 CPU 명령의 숫자 값이 파란색 텍스트로 표시되어 있습니다. 숫자 값 옆에 어느 정도 알아볼 수 있는 텍스트 형식으로 CPU 명령을 표현했습니다.

CPU 명령은 하위 메모리 위치(그림의 아래쪽)에서 시작하여 위쪽 방향으로 읽히며, CPU에 다음 작업을 수행하도록 지시합니다.

read [8000] 주소 8000의 값을 CPU로 읽습니다.
sub 100 CPU에 로드된 값에서 100을 뺍니다. 앞서 CPU로 읽어 들인 값이 빼기 연산의 결과 값으로 바뀝니다.
cmp 121 CPU의 현재 값을 121과 비교합니다.
jne +8 CPU 값이 121과 같지 않으면 현재 명령에서 8바이트 앞(주소 2020)으로 이동하여 이 메모리 위치에 들어 있는 명령을 실행합니다. 여기서 jne는 Jump Not Equal을 나타냅니다.

CPU 값이 121이면 CPU가 점프하지 않고 순서상 다음 메모리 위치(이 예의 경우 2016)에서 명령을 계속 읽습니다.
jmp [2038] 주소 2038로 이동하여 이 메모리 위치에 들어 있는 명령을 실행합니다.
write [8842] CPU의 값을 메모리 위치 8842에 기록합니다.

이제 끝났습니다. 이렇게 단순한 숫자 처리만으로 컴퓨터가 어떻게 매일 워드 프로세싱이나 인터넷 검색과 같은 모든 작업을 수행하는지 상상하기가 쉽지 않을 것입니다. 걱정하지 마십시오. 이 부분이 가장 복잡한 내용이긴 하지만 약간의 설명만 더 읽으면 충분히 이해할 수 있습니다.

과제: 간단한 과제로서 위의 예에서 어떠한 현상이 발생할지 파악해 보시기 바랍니다. 메모리 위치 8000에 있는 값이 221이라는 가정 하에 CPU 명령 실행 과정에 따라 다음 질문에 답해 보십시오.

  • 메모리 위치 8842에 기록되는 값은 무엇입니까?

  • 메모리 위치 8878에 기록되는 값은 무엇입니까?

이 기사를 모두 읽으면 쉽게 답을 찾을 수 있을 것입니다.


입력 및 출력 장치

컴퓨터가 단순히 메모리의 명령을 처리하기만 한다면 별로 쓸모가 없을 것입니다. 다양한 용도에 활용하기 위해서는 사용자가 수행할 계산을 지정할 수 있도록 하고, 계산 결과를 표시함으로써 사용자와 컴퓨터 간의 상호 작용 수단을 제공해야 합니다.

컴퓨터와의 상호 작용은 입/출력 장치라는 구성 요소를 통해 이루어집니다. 예를 들어 키보드의 경우 키를 눌렀을 때 컴퓨터가 어느 키가 눌려졌는지를 읽을 수 있으므로 입력 장치에 해당합니다. 컴퓨터의 관점에서 보면 키 입력은 들어오는 정보에 해당하기 때문입니다. 반면에 모니터는 컴퓨터가 정보를 내보내 계산 결과를 표시하는 데 사용하므로 출력 장치에 해당합니다.

컴퓨터가 여러 위치 간에 바이트를 복사하는 작업만 수행한다면 이러한 장치와 어떻게 상호 작용할 수 있는지 궁금할 것입니다. 간단히 답하면 입력 및 출력 정보는 바이트로 표현할 수 있기 때문에 상호 작용이 가능합니다. 예를 들어 키보드의 각 키에는 고유한 숫자 값이 할당되어 있어 컴퓨터가 키를 식별하고 메모리 위치에 이 숫자를 저장할 수 있습니다.

조금 이해하기 어렵겠지만, 컴퓨터의 입장에서 보면 독자 여러분이 지금 모니터에서 보는 정보는 일련의 바이트일 뿐입니다. 화면에 있는 각각의 점(픽셀)은 모니터에서 해당 픽셀에 표시할 색을 나타내는 몇 개의 바이트로 표현됩니다.

사실 컴퓨터가 표시하거나 저장하는 사진, 비디오, 노래, 워드 프로세싱 문서 등의 모든 정보는 디지털 표현이라는 바이트 집합이라고 할 수 있습니다. 영화 매트릭스에서 녹색의 0과 1이 검은 화면에 흘러내리는 이미지를 볼 수 있는데, 컴퓨터에서는 모든 데이터가 숫자로 표현되므로 이 영상은 어느 정도 사실에 가깝다고 할 수 있습니다. 컴퓨터가 인식하는 정보와 사용자가 모니터 또는 인쇄물에서 보는 정보를 서로 변환하는 역할을 입/출력 장치가 수행하는 것입니다.

컴퓨터의 입/출력 장치는 디지털 표현과 사용자가 상호 작용하는 실제 매체 사이의 이러한 변환 작업을 담당합니다. 이때 변환의 대상이 되는 데이터에는 소리, 빛, 용지, 키 입력은 물론 이동(마우스의 경우)까지 포함됩니다. 사용자가 상호 작용하지 않는 입/출력 장치도 있습니다. 예를 들어 네트워크 카드와 모뎀의 경우 입/출력 장치에 해당하지만 사용자가 아니라 다른 컴퓨터와 상호 작용합니다.

컴퓨터에 디지털 형식으로 정보가 입력되면 컴퓨터 프로그램이 이 바이트를 다양한 방법으로 조작한 다음 계산 결과를 출력 장치로 보내 사용자 또는 다른 컴퓨터가 결과를 볼 수 있도록 합니다.


하드웨어, 소프트웨어 및 운영 체제

디지털 표현과 외부 매체 간의 변환은 복잡한 작업이며, 입/출력 장치는 이러한 작업을 효과적으로 빠르게 실행하는 방법을 아는 전문적인 전자 구성 요소라고 할 수 있습니다. 입/출력 장치에는 변환 작업에 사용되는 전자 회로가 들어 있습니다. 예를 들어 사운드 카드에는 컴퓨터에서 소리의 디지털 표현을 받아 사람이 들을 수 있는 아날로그 웨이브 형식으로 변환하는 디지털/아날로그 변환기라는 컴퓨터 칩이 내장되어 있습니다.

컴퓨터의 전자 회로는 일반적인 공구 상점에서 살 수 있는 공구와 마찬가지로 물리적으로 존재한다는 의미에서 하드웨어라고 합니다. 이와 대조적으로 컴퓨터에서 실행되는 프로그램은 소프트웨어라고 합니다. 소프트웨어는 하드웨어와 달리 컴퓨터에 물리적으로 존재하지 않으며 컴퓨터 메모리에 저장되어 CPU에 내릴 명령을 구성하는 일련의 바이트에 불과합니다.

하드웨어는 전문화된 작업을 효과적으로 수행할 수 있다는 장점이 있습니다. 컴퓨터의 관점에서 이는 해당 작업에 '전용'으로 사용된다고 할 수 있습니다. 그러나 하드웨어는 특정 작업에 전문화되어 다른 작업을 수행할 수 없기 때문에 유연성이 떨어진다는 단점이 있습니다. 예를 들어 모니터는 컴퓨터의 데이터를 표시하는 데는 매우 유용한 장치이지만 네트워크를 연결하는 데는 적합하지 않습니다. 반면 소프트웨어는 컴퓨터 메모리에 들어 있는 내용만 변경하면 손쉽게 다른 작업을 수행할 수 있으므로 유연성이 매우 뛰어납니다. 워드 프로세싱 응용 프로그램에서 인터넷 브라우저로 전환하는 경우와 같이 두 프로그램 사이를 전환할 때를 떠올리면 이해가 쉬울 것입니다. 이때 컴퓨터는 새 프로그램을 실행할 수 있도록 메모리 내에 있는 바이트를 변경합니다.


운영 체제

이번에는 운영 체제에 대해 알아보겠습니다. 컴퓨터는 그저 명령만 따릅니다. 그렇다면 언제 특정 프로그램의 바이트를 다른 프로그램의 바이트로 바꿀지를 어떻게 알 수 있을까요? 해답은 항상 실행되는 마스터 프로그램을 통해 컴퓨터의 작동을 제어하는 것입니다. 바로 이러한 프로그램을 OS(운영 체제)라고 하며, 그 대표적인 예가 Microsoft Windows입니다. 그 외에도 Macintosh, Linux와 같은 다양한 운영 체제가 있으며 모두 비슷한 역할을 합니다.

운영 체제는 사용자가 요청할 때 워드 프로세서나 브라우저 등의 다른 프로그램을 실행하는 작업도 담당합니다. 운영 체제는 이러한 프로그램을 컴퓨터의 메모리로 로드하고 시작 메모리 위치로 '점프'하여 프로그램을 실행합니다. 또한 실행 중인 여러 프로그램이 CPU를 '공유'하여 동시에 실행될 수 있도록 합니다. 즉, OS는 복잡한 교차로의 신호등이고 교차로에 연결된 각 도로는 CPU에서 실행되는 프로그램이라고 할 수 있습니다. OS는 항상 한 도로를 제외한 다른 모든 도로의 통행을 중지하여 전반적인 교통 흐름을 원활하게 유지합니다. 교차로와의 차이점이 있다면 컴퓨터에서는 CPU의 처리 속도가 빠르기 때문에 OS가 프로그램 사이를 잇따라 전환하더라도 사용자에게는 모든 프로그램이 동시에 실행되는 것처럼 느껴진다는 것입니다. 이는 신호등이 너무 빨리 바뀌어 교차로의 모든 차량이 멈추지 않고 서로 스쳐 지나가는 것과 같습니다.

다른 모든 프로그램이 사용할 수 있는 표준화된 도구를 제공하는 것도 운영 체제의 중요한 역할입니다. 대부분의 운영 체제에서는 응용 프로그램을 최대화하거나 최소화하거나 닫는 단추, 메뉴 표시줄, 테두리 등 표준화된 기능을 살펴볼 수 있습니다. 이러한 기능이 모두 동일한 방식으로 제공되는 것은 모든 소프트웨어 공급업체에서 응용 프로그램을 서로 비슷한 모양으로 만들기 위해 노력했기 때문이 아니라, Windows에서 메뉴 표시줄, 테두리, 단추를 비롯하여 응용 프로그램이 사용할 수 있는 도구의 모음을 제공하기 때문입니다.

Windows는 응용 프로그램이 사용할 수 있는 수백 가지 도구를 제공합니다. 응용 프로그램은 하드 드라이브에서 데이터를 읽거나 네트워크에 연결하거나 화면의 내용을 업데이트하는 등의 작업을 수행할 때마다 운영 체제에서 제공하는 도구를 사용합니다. 메모리 읽기 및 쓰기와 같은 기본적인 작업도 운영 체제가 제어하므로 응용 프로그램이 다른 응용 프로그램에 사용되는 메모리 위치를 실수로(또는 고의로) 수정하는 일은 발생하지 않습니다.

운영 체제에서 제공하는 가장 유용한 기능 중 하나로 앞서 설명한 입/출력 장치를 들 수 있습니다. 운영 체제는 프로그램에서 표준화된 방법으로 이러한 장치를 사용할 수 있도록 합니다.

그래픽 카드를 비롯하여 모든 하드웨어 장치는 대개 여러 제조업체에서 각자 고유한 브랜드로 생산하게 되는데 각 제조업체의 그래픽 카드는 제공하는 기능이 서로 다르므로 작동하는 방식 역시 약간씩 다릅니다. 운영 체제가 도구를 제공하지 않는다면 프로그램에서 그래픽 카드를 사용하기 위해서는 프로그래머가 각 공급업체의 하드웨어별로 전용 코드를 작성해야 할 것입니다. 그러나 운영 체제에서 제공하는 기능을 사용하면 프로그램에서 운영 체제 도구를 사용하고 운영 체제가 각 공급업체의 하드웨어를 제어하도록 하면 되므로 프로그래머가 훨씬 수월하게 프로그램을 개발할 수 있습니다.


Windows 프로그램 작성

지금까지는 모든 종류의 컴퓨터에 적용되는 일반적인 측면을 주로 살펴보았습니다. 위에서 설명한 바와 같이 운영 체제는 프로그램에서 사용할 수 있는 도구를 제공합니다. 그러나 운영 체제마다 제공하는 도구가 다르며 같은 도구라도 제공하는 방식이 다릅니다. 따라서 특정 운영 체제에서 작동하도록 설계된 프로그램은 다른 운영 체제에서 작동하지 않는 경우가 많습니다. 이 섹션에서는 Microsoft Windows 플랫폼에 초점을 맞추어 설명하도록 하겠습니다. 그렇더라도 기본 개념은 다른 플랫폼에도 적용될 수 있습니다.


컴퓨터 프로그램이란?

프로그램은 CPU 명령을 포함하는 여러 바이트로 구성되어 있다는 사실은 이미 배웠습니다. 이러한 명령은 데이터 바이트를 조작하고 메모리 위치나 입/출력 장치로 전송하는 기본 작업을 수행합니다. 프로그램을 실행하면 운영 체제가 메모리에 프로그램 파일을 로드한 다음 프로그램 명령을 실행합니다.

따라서 프로그램 작성은 CPU 명령의 바이트가 들어 있는 수많은 데이터 파일을 만드는 과정이라고 할 수 있습니다. 이는 엄연한 사실이지만 실제로 CPU 명령을 나타내는 바이트를 모두 배우기는 너무나 어렵습니다. 따라서 프로그래머는 엄청난 양의 지식을 갖추지 않고도 이러한 프로그램 파일을 만들 수 있는 여러 도구를 사용하게 됩니다.

프로그래머가 가장 많이 사용하는 도구는 컴퓨터 언어입니다. 일반적인 언어가 사람들 사이의 의사 소통에 사용되는 것과 마찬가지로 컴퓨터 언어는 사람과 컴퓨터 간의 의사 소통에 사용됩니다. 이러한 언어는 직관적이거나 사람이 읽을 수 있는 형식으로 되어 있으며 CPU 명령으로 변환하여 컴퓨터 프로그램을 만드는 데 사용할 수 있습니다.

현실에서 사용되는 언어와 마찬가지로 컴퓨터 언어도 여러 가지가 있습니다. 그 중에는 전문화된 작업에 사용되는 것도 있고 더 일반적인 용도로 사용되는 것도 있습니다. 모든 언어의 공통점은 프로그래머가 컴퓨터의 시스템 코드를 익히지 않고도 컴퓨터에 사용되는 명령을 만들 수 있도록 한다는 점입니다.

다음은 가상적인 자명종 프로그램의 일부를 보여 주는 코드의 예입니다. 코드의 세부적인 사항까지 알 필요는 없습니다. 단지 코드를 보기만 해도 프로그램의 기능을 대략적으로 알 수 있다는 사실이 중요합니다. 적어도 연속된 긴 바이트를 보는 것 보다는 훨씬 내용 파악이 쉬울 것입니다.

Sub CheckAlarm()
  If DateTime.Now >= AlarmTime Then
    DisplayAlarm()
  End If
End Sub

프로그램을 작성할 때는 이 예와 같이 컴퓨터 언어로 일련의 명령을 만들게 됩니다. 그러면 컴퓨터가 명령을 자체적으로 이해할 수 있는 다른 형태의 명령으로 변환합니다.

과제: 이 코드 예가 기사의 앞 부분에서 살펴본 CPU 명령과 어떠한 관계가 있는지 생각해 보십시오. 먼저 다음 명령문을 살펴보십시오.

If DateTime.Now >= AlarmTime

앞서 소개한 예에 연관하여 컴퓨터 명령과 CPU 명령과 비교해 보십시오. 힌트를 드리자면 DateTime.NowAlarmTime은 메모리 위치를 나타내는 이름이라고 할 수 있습니다. jne 명령 대신 비교 결과가 같거나 큰 경우에 점프를 수행하는 jge CPU 명령을 사용할 수도 있습니다.


Microsoft .NET Framework

소프트웨어가 여러 플랫폼에서 작동하도록 여러 가지 운영 체제 간의 차이를 관리하는 것은 프로그래머에게 매우 어렵고 많은 시간과 노력이 요구되는 과제입니다. 운영 체제가 다르면 제공되는 도구도 다를 수 있다는 점이 첫 번째 문제이며 다른 종류의 CPU에서 프로그램을 실행해야 하는 경우에는 CPU 종류마다 CPU 명령을 나타내는 숫자가 다를 수 있을 뿐만 아니라 CPU 종류에 따라 해당 명령이 없을 수도 있습니다.

또한 기존 코드를 다른 프로그램에 다시 사용하려는 경우에도 코드가 프로그램에 사용하는 것과 다른 언어로 작성되어 있으면 문제가 생깁니다. 이미 다른 언어에 익숙한 프로그래머가 새로운 컴퓨터 언어를 배우는 데는 많은 시간이 필요하기 때문입니다.

이러한 문제를 해결하기 위해 Microsoft에서는 .NET Framework를 제작했습니다. .NET Framework는 프로그램을 실행할 수 있는 관리되는 환경을 제공합니다. 이 환경은 운영 체제 내에 또 다른 운영 체제가 있는 것과 비슷하다고 할 수 있습니다. .NET Framework를 사용할 경우 다음과 같은 여러 가지 이점이 있습니다.

  • .NET framework가 지원하는 모든 플랫폼 및 컴퓨터 언어에서 광범위하고 일관된 도구 집합을 사용할 수 있습니다.

  • .NET Framework가 지원하는 모든 종류의 CPU 및 운영 체제에서 실행되는 프로그램을 작성할 수 있습니다.

  • .NET이 지원하는 언어라면 어떤 언어로 된 코드라도 다시 사용할 수 있습니다.



클라이언트/서버

Windows 프로그램을 처음 작성하는 프로그래머는 프로그래밍 개념과 도구를 익히는 데 도움이 되는 간단한 프로그램을 먼저 작성해보게 됩니다. '실질적인 용도'의 응용 프로그램을 작성하려면 이러한 기본 도구 외에 보다 수준 높은 도구를 사용하여 시나리오에 적합한 프로그램을 만들어야 합니다.

실제 개발 환경에서 가장 자주 발생하는 문제는 여러 사람들 간에 정보를 어떻게 공유하느냐 하는 문제입니다. 대개 이러한 시나리오에서는 정보를 한 곳에 저장하여 여러 사람이 다른 위치에서 액세스하게 됩니다.

"클라이언트"와 "서버"라는 용어는 많이 들어보았을 것입니다. 고급 프로그래머가 되기 전까지는 클라이언트/서버에 대해 자세히 알 필요가 없으므로 이 가이드에서 자세히 다루지는 않겠지만 개념은 알아둘 필요가 있습니다.

클라이언트-서버 아키텍처는 여러 사람이 데이터를 공유하는 일반적인 방법입니다. 데이터가 있는 서버클라이언트가 해당 데이터에 액세스할 수 있도록 기능을 제공합니다. 서버에서는 클라이언트로부터의 연결을 수신하는 컴퓨터 프로그램이 항상 실행됩니다. 클라이언트 컴퓨터에서는 일정에 따라, 또는 컴퓨터 사용자가 실행한 작업의 결과로 정보가 필요할 때마다 서버에 연결하는 다른 프로그램이 실행됩니다. 예를 들어 사용자가 전자 메일을 확인하면 전자 메일 프로그램이 메일 서버에 연결합니다. 이 경우 전자 메일 프로그램은 메일 서버에 보낼 요청을 만드는 클라이언트 응용 프로그램이 됩니다.

클라이언트가 서버에 대한 요청을 만들면 다음과 같은 결과가 발생합니다.

  1. 클라이언트가 네트워크를 통해 요청에 대한 자세한 정보가 포함된 메시지를 서버로 보냅니다. 예를 들어 전자 메일 프로그램은 요청의 일부로 사용자 이름과 암호를 보냅니다.

  2. 그러면 서버가 일반적으로 서버의 데이터베이스 또는 일부 파일을 처리하여 몇 가지 작업을 수행합니다.

  3. 서버는 다시 클라이언트에 정보를 응답으로 보냅니다.

이 과정을 거치면 클라이언트 프로그램이 응답에 포함된 정보를 적절하게 사용할 수 있습니다. 전자 메일 프로그램의 경우 사용자가 읽을 수 있도록 화면에 전자 메일을 표시하는 데 정보를 사용하게 됩니다.

클라이언트 및 서버 응용 프로그램이 서로 통신하려면 교환하는 데이터를 같은 방식으로 인식해야 합니다. 통신에 사용되는 이러한 공통적인 인식 방법을 정의하는 규칙을 프로토콜이라고 합니다. 프로토콜은 통신에 사용되는 합의된 '언어'를 의미하는 컴퓨팅 용어입니다. 각 컴퓨터는 다른 컴퓨터가 데이터를 인식할 수 있도록 하기 위해 프로토콜을 사용해야 합니다.

프로토콜을 정의하는 것 외에도 클라이언트 컴퓨터와 서버 컴퓨터에서는 프로토콜을 사용하여 다른 컴퓨터와 통신하는 코드를 실행해야 합니다. .NET Framework에서는 이러한 코드가 대부분 '도구 모음'에 이미 포함되어 있으므로 직접 코드를 작성할 필요가 없습니다. .NET Framework를 사용해 보면 다른 프로그램과 통신하는 데 사용할 수 있는 .NET Remoting과 같은 도구가 많이 포함되어 있음을 알 수 있습니다.


요약

이 가이드에서는 프로그래밍에 대한 기본 개념을 광범위하게 다루었습니다. 컴퓨터의 작동 원리, 정보가 저장되는 방식, 정보를 디지털 표현으로 변환하여 외부로 보내고 받는 방법을 배웠습니다. 또한 하드웨어와 소프트웨어가 서로 상호 작용하면서 컴퓨터를 작동하는 방법, 운영 체제가 하드웨어와 소프트웨어를 함께 작동하도록 제어하는 방법, 운영 체제 내에서 프로그램이 기능을 수행하고 운영 체제에서 지원하는 도구를 사용하는 방법도 알아보았습니다. 마지막으로 클라이언트-서버 구조를 활용함으로써 서로 다른 종류의 컴퓨터에서 두 가지 이상의 컴퓨터 프로그램이 함께 작동하는 방법도 배웠습니다.

이렇게 여러 가지 구성 요소가 함께 작동하는 방식을 배움으로써 컴퓨터 프로그램의 기본 원리에 대해 알아보았습니다. 전자 메일 프로그램, 컴퓨터 게임, 워드 프로세싱 응용 프로그램 등 모든 컴퓨터 프로그램은 그 결과는 서로 다르지만 내부적으로는 동일한 작업을 수행합니다. 다른 실행 결과를 만들어 내는 요소는 프로그래머의 상상력뿐입니다.

이 짧은 기사에서는 컴퓨팅의 기본적인 사항만 대략적으로 살펴봤을 뿐이며, 여러 가지 측면에서 더 배워야 할 내용이 많습니다. Visual Studio Express Editions 제품군 응용 프로그램을 사용하여 프로그램을 작성하려면 MSDN에서 Visual Basic 또는 Visual C#에 대한 소개 가이드부터 읽어 보시기 바랍니다.

그럼 즐겁게 배워 보십시오.

과제 정답

CPU 명령 과제의 정답은 다음과 같습니다.

  • 이 명령은 실행되지 않으므로 메모리 위치 8842에는 값이 기록되지 않습니다. CPU는 메모리 위치 8000에서 221이라는 값을 읽어 100을 빼므로 CPU에 121이라는 값이 저장됩니다. 따라서 jne 명령은 주소 2020으로 점프하지 않으므로 jmp 명령이 실행됩니다. 즉, CPU가 주소 2020의 명령을 완전히 건너뛰게 됩니다.

  • CPU는 121라는 값을 메모리 위치 8878에 기록하며 CPU가 jmp 명령을 실행하면 위치 2038로 점프하게 됩니다. 따라서 write 8878 명령이 실행됩니다. 이때 CPU에는 여전히 이전 계산의 결과로 얻어진 121이라는 값이 들어 있으므로 주소 8878에 이 값이 기록됩니다.

정답을 맞혔다면 축하드립니다. 어셈블리 언어 프로그래밍이라고 하는 이 방식은 전문적인 프로그래머도 잘 사용하지 않는 고급 프로그래밍 방식입니다.

Posted by shunman


티스토리 툴바