본문 바로가기
IT 인터넷

IIS 5.0 최적화 - MS자료

by zzom~ 2024. 8. 28.
반응형

Internet Information Services 5.0 최적화

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Internet Information Services 5.0

요약

(조금 오래된 자료이긴 하나 기본이 되는 내용들이 있어서 남겨둡니다.)

 

본 문서에 나와 있는 정보는 Microsoft Press에서 제공한 것입니다.

이 문서에서는 Microsoft Internet Information Services 5.0을 최적화하는 방법을 설명합니다. 이 정보는 Microsoft Windows 2000 Server Resource Kit에 속해 있는 Internet Information Services Resource Guide의 4장 "Capacity Planning"과 5장 "Monitoring and Tuning Your Server"의 정보가 수록된 문서를 기반으로 하고 있습니다. Windows 2000 Server Resource Kit에 대해 자세히 알아 보십시오.

 


추가 정보

웹 사이트에서 최적의 성능을 얻는 방법은 무엇입니까? Microsoft Windows 2000 Server와 Internet Information Services 5.0를 기반으로 실행되는 웹 사이트와 응용 프로그램을 관리하고 있다면 수천 개의 동시 트랜잭션을 처리할 수 있는 고성능 사이트의 기본 요인을 갖추었다고 할 수 있습니다. 하지만 단순히 플랫폼이 좋다고해서 반드시 높은 성능을 얻을 수 있는 것은 아닙니다. 사이트에 대한 사용자의 접속 속도가 느리거나, 페이지 요청을 처리하는 중에 시스템이 무한정 중지하거나, 더 큰 처리 능력과 메모리를 가진 서버의 구입을 고려하게 되는 경우에는 먼저 사이트의 성능에 영향을 미치는 요인과 처리량을 최대화하기 위하여 IIS 5.0을 최적화하는 방법을 알아야 합니다.

이 문서에서는 IIS 5.0에서 시스템 리소스를 사용하는 방법과 성능을 향상시키기 위해 시스템 리소스를 조정하는 방법을 설명합니다. 자세한 내용은 Microsoft Windows 2000 Server Resource Kit에 포함되어 있는 Microsoft Internet Information Services 5.0 Resource Guide라는 제목의 Microsoft Press 서적에서 참조하실 수 있습니다. 이 책에서는 최상의 성능을 발휘하도록 웹 사이트를 조정하는 방법에 대해 상세하게 설명합니다. 하지만 이 문서의 내용만으로도 기본적인 내용은 충분히 알 수 있을 것입니다.


웹 사이트의 성능이 떨어지는 원인

웹 사이트가 느려지는 원인은 무엇일까요? 이러한 질문에 대한 답은 많이 있지만, 크게 보면 가능한 원인은 다음 몇 가지로 정리할 수 있습니다.
  • 웹 사이트가 실행 중인 하드웨어의 구성
  • 웹 서버 소프트웨어의 구성
  • 인터넷 연결의 대역폭
  • 웹 응용 프로그램의 디자인과 구성
  • 사용자 컴퓨터와 해당 연결의 특성
위에서 설명한 요인을 모두 웹 관리자가 제어할 수는 없습니다. 인터넷 연결의 대역폭은 대개 예산에 의해 결정되며, 웹 응용 프로그램의 디자인에는(사내에서 개발하는 프로그램이라고 해도) 영향을 미치기가 거의 불가능합니다. 물론 사용자를 통제할 수도 없습니다. 그래도 웹 사이트의 성능 향상을 위해서 할 수 있는 일이 많이 남아 있습니다. 서버와 관련한 부분부터 살펴보겠습니다.

서버 최적화

웹 서버의 성능을 최적화하려면 기본적으로 메모리, 프로세서, 하드 디스크 및 네트워크 I/O의 최적 구성을 알아야 합니다. 하드웨어는 무조건 많을수록 좋다고 생각할 수도 있지만 실제로는 그보다 훨씬 복잡한 문제가 있습니다.

메모리

서버를 최적화하려면 메모리를 추가하기만 하면 된다고 말하는 사람들이 많습니다. 성능 문제가 있을 때 단지 RAM을 추가하여 문제가 수정된다면 이 문서를 작성할 필요가 없을 것입니다. 메모리를 추가하면 어느 정도 도움이 된다는 것은 사실입니다. 실제로 프로세서 또는 디스크 병목처럼 보이는 문제 중 대다수가 메모리 문제입니다. 그러나 그 밖의 경우에는 메모리를 추가해도 성능이 전혀 나아지지 않을 수 있습니다. 하지만 메모리 최적화는 IIS 성능을 향상시키기 위한 최선의 방법이자 가장 쉬운 방법입니다.

IIS는 Windows 2000 Server에서 실행되므로 Windows 2000 Server의 메모리 관리가 그대로 적용된다는 점을 명심하십시오. 따라서 메모리 최적화의 많은 부분이 자동으로 수행됩니다. Windows 2000 Server는 프로세스와 스레드에 사용할 수 있는 메모리의 양을 조정하고 최적의 성능을 제공하기 위해 캐시 크기, 페이징 및 비페이징 메모리 풀, 페이징 파일의 크기 등을 조정합니다. IIS에 대한 메모리를 최적화할 경우에는 Windows 2000에서 모든 자동 조정 작업을 원하는 대로 수행할 수 있는 충분한 메모리가 있는지 확인하는 것처럼 각 프로세스, 스레드 또는 캐시에 메모리를 많이 할당하지 않습니다.

서버에 충분한 메모리가 있는지 확인하려면 어떻게 해야 합니까? 우선 IIS 5.0 웹 서버가 어떤 작업에 메모리를 사용하는지 생각해 보십시오. Windows 2000 Server는 작업 집합으로 알려진 해당 메모리 청크를 각 프로세스에 할당하여 메모리를 제어합니다. 거의 모든 경우에 프로세스 내의 개별 스레드들은 해당 작업 집합 내에서 할당된 메모리 부분을 사용합니다. Windows 2000은 프로세스가 커질수록 필요에 맞게 해당 작업 집합에 메모리를 추가합니다. 할당된 메모리의 대부분은 페이징이 가능한데, 이것은 해당 메모리 내의 데이터를 임시로 디스크에 저장했다가 필요할 때 RAM으로 다시 불러올 수 있음을 의미합니다. 하지만 TCP/IP 연결 같은 일부 스레드는 페이징이 불가능한 메모리를 필요로 하므로 메모리는 디스크 상의 파일이 아니라 활성 RAM(live ram)이어야 합니다. 연결 수가 증가하고 페이징이 불가능한 메모리 요구가 증가할수록 시스템의 사용 가능한 메모리가 부족해져 더 이상 할당할 수 없게 됩니다. 이러한 상황은 시스템 충돌을 초래할 수 있으며, 실제로도 일부 서비스 거부 공격은 이러한 방식으로 수행됩니다.

Windows 2000 Server에서 실행되는 다른 프로그램과 마찬가지로 IIS 5.0도 inetinfo.exe라는 하나의 프로세스입니다. 따라서 IIS 5.0은 작업 집합을 갖고 있습니다. IIS에 속한 작업 집합은 프로그램 코드 자체를 위한 공간, 활성 TCP/IP 연결을 위한 공간, IIS 개체 캐시를 위한 공간, IIS 로그 파일을 위한 공간 그리고 HTTP 연결 데이터 구조를 위한 공간을 포함합니다. 프로그램 코드는 RAM을 최대 2.5MB까지 사용할 수 있으며, 다른 작업 집합 요소의 크기는 동시에 연결된 사용자 수(TCP/IP 연결당 약 10KB + HTTP 데이터용 메모리)와 해당 서버에서 호스트되는 웹 사이트 수(사이트당 최소 64KB 이상의 메모리 매핑 로그 파일)에 따라 달라집니다. IIS는 inetinfo.exe 자체의 작업 집합 외에 IIS 템플릿 캐시, IIS 스크립트 엔진 캐시 및 IIS 파일 시스템 캐시를 사용하는데, 이 세 캐시는 기본적으로 inetinfo.exe 외부에 있지만 그 내부에서 실행하도록 구성할 수 있습니다. IIS는 또한 TCP Transmission Control Block 해시 테이블과 코드 실행용 스레드 풀도 사용합니다. inetinfo.exe의 외부에 있는 이러한 요소는 비페이징 메모리에 있어야 하며, 이들을 수용할 수 있는 충분한 RAM이 반드시 있어야 합니다.

성능 모니터에서 사용 가능한 카운터를 통해 시스템에서 사용하는 메모리뿐 아니라 inetinfo.exe 자체가 사용하는 메모리도 추적할 수 있습니다. The IIS 5.0 Resource Guide의 5장, "Monitoring and Tuning Your Server"에 카운터 목록이 나와 있습니다. 가장 중요한 카운터는 다음과 같습니다.
  • Computername\Memory\Available Bytes - 이 카운터는 시스템의 사용 가능한 총 메모리 양을 추적합니다. 운영 체제는 이 값을 4MB 이상으로 유지하려고 합니다. 최적의 성능에 적절한 메트릭은 전체 RAM의 5%입니다.
  • Computername\Process\Working Set: Inetinfo - 이 카운터는 inetinfo.exe 자체에서 사용하는 메모리의 양을 추적합니다. 최신 값만 나타나지만, 오랫동안 관측하면 IIS에서 사용한 메모리를 파악할 수 있습니다.
  • Computername\Process\Page Faults/sec.: Inetinfo - 이 카운터는 서버가 초당 inetinfo.exe의 부분을 디스크로 페이징해야 하는 횟수를 추적합니다. 이 숫자는 가능한 한 작게 유지해야 합니다.
전체적으로 보면 전체 서버가 사용하는 메모리 양과 IIS 자체가 사용하는 메모리 양을 파악하게 됩니다. 최소한 inetinfo.exe 전체를 디스크로 페이징하지 않고 RAM에 보관하기에 충분한 메모리 외에도 작업 집합 외부의 페이징이 불가능한 다른 항목과 캐시를 실행하기 위해서 충분한 RAM이 필요합니다. 그 외에도 실행할 웹 응용 프로그램의 메모리 요구량을 예상해야 합니다. 예를 들어, Microsoft의 웹 서버는 대부분 해당 웹 응용 프로그램을 실행하기 위해 최소한 512MB 이상의 RAM을 갖고 있습니다. 마지막으로 보다 빠르게 웹 사이트의 모든 정적 페이지를 검색하고 처리하려면 메모리에 웹 사이트의 해당 페이지를 저장할 수 있는 충분한 RAM이 시스템에 있어야 합니다. 오랫동안 로드할 때 컴퓨터의 메모리 사용을 모니터하면 시스템에 있는 RAM의 양을 알 수 있습니다.

프로세서

메모리를 최적화한 후에는 작업이 훨씬 더 빠르게 수행된다는 것을 알 수 있습니다. 성능을 개선하기 위하여 할 수 있는 일은 이것만이 아닙니다. 프로세서에서도 병목 현상이 발생할 가능성이 있습니다. 메모리 최적화를 먼저 수행하는 이유는 그렇게 하면 메모리 문제를 프로세서 문제로 혼동하지 않기 때문입니다. 예를 들어 서버에 메모리가 충분히 없으면 스레드를 디스크로 페이징하는 데 시간이 많이 걸릴 수 있으므로, 페이징 시간이 프로세서 로드에 추가되어 오버로드된 프로세서가 문제의 원인인 것처럼 보일 수 있습니다.

프로세서와 관련하여 알아야 할 사항을 성능 모니터에서 확인할 수 있습니다. 모니터해야 할 카운터(The Resource Guide의 5장 참조)가 몇 가지 있지만 가장 중요한 카운터는 System\Processor Queue Length입니다. 이 카운터는 프로세서 대기열에 있는 스레드 수를 알려줍니다. 이 카운터가 오랫동안 2를 초과하면 해당 프로세서에 병목 현상이 발생한 것일 수 있습니다.

빠른 속도로 일반화되고 있는 다중 프로세서 서버의 경우, 또 다른 문제로 프로세서 로드 균형 조정을 고려해야 합니다. 한 프로세서는 100% 예약되고 다른 프로세서는 유휴 상태로 있는 시스템에서 System\% Processor Time 카운터가 낮은 값을 나타내더라도 이 카운터는 기본적으로 해당 시스템에 있는 모든 프로세서의 평균 값을 기록하기 때문에 병목 현상이 발생합니다. 상황을 제대로 파악하려면 개별 프로세서에 각각 System\% Processor Time을 실행해야 합니다.

테스트 결과 프로세서 문제가 있는 것으로 확인된 경우, 우선 프로세서를 업그레이드할 것인지 아니면 다중 프로세서 시스템으로 전환할 것인지를 선택합니다. 프로세서를 업그레이드할 경우에는 프로세서에 L2 캐시를 최대한 확보하십시오. IIS는 명령 경로 중 대부분이 여러 구성 요소를 필요로 하므로 캐시 메모리에서 훨씬 빨리 실행되며 이러한 프로세서가 있으면 도움이 됩니다. IIS 5.0 Resource Guide에 프로세서를 최적화하기 위한 몇 가지 다른 권장 방법이 포함되어 있습니다.

하드 디스크

디스크를 보다 효율적으로 사용하기 위해 서버의 하드 디스크 구성에 여러 가지 작업을 수행할 수 있습니다. 하드 디스크는 페이징 메모리의 저장소이기 때문에 서버가 페이징 파일을 처리하는 방법은 중요한 고려 사항입니다. 다음 사항을 검토해 보십시오.
  • 페이징 파일을 확대하십시오. 기본 페이징 파일의 크기는 최소한 시스템 RAM 크기의 두 배 + 1MB인 것이 좋습니다. 충돌 발생 시 메모리 코어 덤프를 수행하기 위해서는 컴퓨터에 이 공간이 필요합니다.
  • 페이징 파일 수를 늘리십시오. 기본적으로 페이징 파일은 하나 있지만, 시스템에 연결된 모든 하드 디스크에서 페이징 파일을 설정할 수 있고 설정해야 합니다.
  • 디스크 스트라이핑을 사용하여 페이지 파일 성능을 향상시키십시오. 기본 페이징 파일을 스트라이프 디스크 세트(RAID 0)나 패리티 사용 스트라이프 세트(RAID 5)에 놓으면 페이징 파일 성능이 급격하게 향상됩니다.
  • 로그 파일을 웹 페이지가 있는 디스크와 다른 디스크에 저장하십시오. 이렇게 하면 디스크 로깅 스레드가 웹 페이지 검색 스레드를 방해하지 못합니다.
  • 웹 페이지 저장을 최적화하십시오. 사이트의 관련 웹 페이지는 모두 같은 논리 파티션에 함께 저장되어야 합니다. 이렇게 배열하면 파일 시스템 캐시의 성능이 향상됩니다. 또한 웹 페이지 파일이 조각나지 않게 하십시오. 이렇게 하면 단일 파일을 읽는 속도가 매우 빨라집니다.

서버 구성 옵션

하드웨어 최적화 외에 서버 소프트웨어의 구성도 성능에 크게 영향을 미칠 수 있습니다. 소프트웨어의 구성을 간단히 하면 속도를 높이는 데 도움이 됩니다. 이러한 주제에 대한 자세한 내용은 Microsoft Press에서 출판한 요약 참조서인 "Microsoft Windows 2000 Server and IIS 5.0 Administrator's Pocket Consultant"를 참조하십시오. 웹 서버가 IIS 전용이 아니라면 수정해야 할 사항이 있습니다. 웹 서버를 다른 네트워크 서비스에 사용하지 마십시오. 다른 네트워크 서비스는 다른 시스템에서 사용하고 IIS 서버는 웹에만 사용하십시오. 그렇게 할 경우 해당 시스템에서 실행을 종료할 수 있는 서비스는 다음과 같습니다.
  • Alerter
  • ClipBook
  • Computer Browser
  • DHCP Client
  • DHCP Server
  • Fax Service
  • File Replication
  • INfrared Monitor
  • Internet Connection Sharing
  • Messenger
  • NetMeeting Remote Desktop Sharing
  • Network DDE
  • Network DDE DSDM
  • NWLink NetBIOS
  • NWLink IPX/SPX
  • Print Spooler
  • TCP/IP NetBIOS Helper Service
  • Telephony
  • Telnet
  • Uninterruptible Power Supply
이러한 서비스 중 하나를 종료하기 전에 정말로 필요하지 않은 것인지 여러 번 확인해야 합니다.

또한 서버의 구성을 다르게 최적화할 수 있습니다. 예를 들어, IIS 5.0은 기본적으로 서버의 메모리를 최대 50%까지 사용합니다. 이러한 기본 설정을 통해 서버에서 실행해야 하는 다른 응용 프로그램을 수용할 수 있습니다. 하지만 서버를 IIS 전용으로 사용하고 불필요한 서비스를 제거할 경우에는 Windows 레지스트리에서 MemCacheSize 항목을 만들고 설정하여 이 비율을 늘릴 수 있습니다. 파일 및 프린터 공유에서 서버 최적화 등록 정보도 설정할 수 있는데, 이를 "네트워크 응용 프로그램을 위해 데이터 처리량 최대화"로 설정하면 파일 시스템 캐시가 추가 공간을 필요로 할 때 서버에서 inetinfo.exe를 디스크로 페이징하지 않고 우선적으로 RAM에 보관합니다. HTTP 연결 유지에서 최대 연결 대기열의 길이 설정도 조정할 수 있는데, 기본 설정인 15보다 크게 하면 HTTP 연결을 서버에서 세션 간에 열어 놓은 채로 유지할 수 있는 클라이언트 수를 늘릴 수 있습니다. 이렇게 하면 새로 만들어야 하는 연결 수를 줄일 수 있습니다. 구성을 최적화할 때 조정할 수 있는 다른 시스템 설정에 대해서는 "Resource Guide" "Administrator's Pocket Consultant"를 참조하십시오.

네트워크 대역폭 최적화

실제로 대부분의 조직이 가능한 한 모든 대역폭을 구비하고 있으며 모든 사람들이 대역폭이 많을수록 웹 사이트에서 보다 많은 클라이언트에게 서비스를 제공할 수 있다고 이해하고 있으므로 이 문서에서는 네트워크 I/O의 최적화에 대해서 자세히 다루지 않겠습니다. 대부분 대역폭에는 계속해서 상당한 비용이 들어가므로 감당하기 어려운 예산 문제가 생길 수 있습니다. 하지만 The Resource Guide에는 성능 모니터를 사용하여 웹 사이트의 네트워크 대역폭 사용을 추적하는 방법에 관한 풍부한 정보가 포함되어 있습니다. 서버가 사용 가능한 대역폭을 얼마나 잘 사용하고 있는지 분석하면 대역폭을 추가로 구입해야 할지 알 수 있습니다.

웹 응용 프로그램 및 웹 페이지 최적화

하드웨어를 최대한 활용하고, 소프트웨어를 조정하고, 감당할 수 있는 만큼 대역폭을 구비한 후에는 무엇을 더 할 수 있습니까? 웹 사이트의 디자인에 얼마나 영향을 미칠 수 있는지에 따라 많은 것이 달라집니다. 웹 사이트 구축 방법을 조정할 수 있다면 다음과 같은 권장 사항을 직접 구현할 수 있습니다. 그렇지 않은 경우에는 웹 사이트 개발자와 관리 팀에 다음 사항을 제안하십시오.

가장 먼저 할 일은 웹 사이트 콘텐트를 분석하여 가능한 많은 사이트를 실용적인 정적 HTML로 만드는 것입니다. 사용자와 동적 상호 작용을 유지하고자 하겠지만, 몇 가지 정적 변형을 저장하는 것만으로 사용자의 다양한 요구를 충족시킬 수 있는 반면에 동적 상호 작용을 사용하면 스크립트에서 불필요하게 많은 페이지가 작성될 것입니다. 정적 HTML은 서버 처리가 필요하지 않으므로 다른 어떤 콘텐트보다 빠르고 쉽게 서비스됩니다.

서버 처리 수요가 많을 경우 그 다음으로 수행할 작업은 동적 페이지를 생성할 때 스크립트와 데이터를 처리하기 위해 서버가 사용하는 시간의 양을 줄이는 것입니다. 측정 결과에 따르면 서버 처리 리소스를 가장 많이 소비하는 것은 CGI입니다. CGI 스크립트가 ASP보다 많은 처리 리소스를 사용하고 ASP가 ISAPI보다 많은 처리 리소스를 사용합니다. 따라서 가능한 대로 최대한 CGI 스크립트를 ASP로 변환하고, ASP를 ISAPI로 변환하는 것이 좋습니다.

다음은 몇 가지 추가 정보입니다.
  • 응용 프로그램 디버깅을 끄십시오. 디버깅은 웹 사이트의 속도를 많이 느리게 합니다.
  • 모든 정적 웹 페이지와 이미지에 대해 Expire 헤더를 설정하십시오. 이렇게 설정하면 클라이언트와 프록시 서버가 콘텐트를 캐싱할 수 있어 서버에 대한 새로운 요청 수가 줄어듭니다.
  • ISAPI 응용 프로그램 캐싱을 사용 가능하게 설정하십시오. 이 설정은 자주 사용되는 ISAPI 응용 프로그램을 더 빠르게 액세스되는 메모리에 놓습니다.
  • 가능한 경우 ASP 출력의 캐싱을 사용 가능하게 설정하십시오.
  • 세션 관리 설정을 해제하고 세션을 실제로 사용하는 서비스에만 설정하십시오. 기본적으로 세션 관리는 모든 서비스에 설정되어 있어 응용 프로그램이 이를 사용하지 않는다면 리소스를 낭비하게 됩니다. 또한 적합한 세션 시간 제한 값을 설정하십시오.
  • 좀비 스크립트와 열려 있는 연결이 서버의 리소스를 고갈시키지 않도록 적절한 스크립트 및 연결 시간 제한을 설정하십시오.
  • 콘텐트의 크기를 줄이십시오. HTML 코드와 ASP 코드를 명료하면서 간단하게 작성하십시오. 불필요한 주석과 중복된 태그로 복잡해지지 않도록 하십시오. 비디오, 오디오 및 이미지 파일을 압축하십시오. 페이지가 작을수록 빨리 전달할 수 있습니다.
  • 클라이언트쪽 처리를 가능한 한 많이 수행하도록 ASP 또는 ISAPI 응용 프로그램을 설계하십시오. 이렇게 하면 서버 리소스의 사용을 최소화하는 데 도움이 됩니다.
  • 클라이언트와 서버 사이에서 데이터 읽기 및 쓰기 작업을 가능한 한 적게 사용하도록 클라이언트 대화형 작업을 설계하십시오. 예를 들어, 전체 레코드 집합을 한 번에 크게 쿼리하는 것이 약간의 레코드나 필드를 작게 여러 번 쿼리하는 것보다 낫습니다. 마찬가지로, 각 데이터 항목을 따로따로 서버에 보내는 것보다 가능하면 사용자가 입력한 데이터를 한 번에 모두 전송해야 합니다.

Microsoft Press 해결 방법

IIS 5.0 웹 서버의 성능을 완전히 최적화하기 위해서는 수행해야 할 작업이 많이 있습니다. 다행히 Microsoft Press에서 많은 도움을 얻을 수 있습니다. 시스템 성능의 매개 변수와 서버의 성능을 최상의 상태로 만드는 방법을 이해하는 데 Microsoft Press의 서적이 도움이 될 것입니다. 다음과 같은 서적을 읽어 보십시오.
마지막으로, IIS 5.0과 Windows 2000을 다루는 시스템 관리자라면 Windows 2000에 대한 다음 필수 참조서와 학습서를 갖추고 있어야 합니다.
  • Microsoft Windows 2000 Server Administrator's Companion - 가상 사설망(VPN)을 포함하여 Windows 2000 Server를 설치, 구성, 관리 및 지원하는 방법을 상세하게 설명합니다. 31장을 읽어 보십시오.
  • MCSE Training Kit: Microsoft Windows 2000 Server - Microsoft Press에서 Windows 2000 Server 시험(70-215) 대비용으로 출판된 공식 학습서입니다. 이 책에는 Windows 2000 Server를 설치 및 지원하는 방법이 있습니다. VPN에 대한 설명은 10장 "Routing and Remote Access Service"를 참조하십시오.
  • Microsoft Windows 2000 Server Resource Kit - Windows 2000 Server에 대한 Microsoft의 모든 참조서가 포함되어 있습니다. 7권으로 이루어져 있으며 다음과 같은 안내서로 구성됩니다.
    • Server Operations Guide
    • Distributed Systems Guide
    • TCP/IP Core Networking Guide
    • Internetworking Guide
    • Deployment Planning Guide
    • Internet Information Services 5.0 Resource Guide
    • Internet Explorer 5 Resource Kit
Microsoft Press의 Windows 2000용 교재에 대한 전체 목록을 보려면 Windows 2000 항목을 참조하십시오. .NET Enterprise Servers에 대한 교재는 .NET 항목을 참조하십시오.
반응형