본문 바로가기

공부하자/IT

[웹언어] 닷넷(.net) 소개 및 장단점

728x90
반응형

닷넷(.net) 소개 및 장단점

닷넷

닷넷은 구현에 있어 자유도가 많이 저해되어 특정기능을 수행할 때 일반적인 닷넷틀이 않은 커스터 마이징해서 썼었던 경험이 있네요. 물론 이 언어의 경우도 큰 사이트들에서 많이 사용되어짐으로 연봉이 상대적으로 높습니다. 그리고 닷넷은 사용 가능한 언어가 많은데요. 저는 그때 C#을 썼었습니다. 자바랑 비슷해서 그 점은 좋더군요.

 

 

 

1.닷넷 소개
.등장 배경

 2000 6 MS는 닷넷(.net)이라는 새로운 개발환경 발표.

 

소프트웨어는 딱 한번만 작성하고 어느 곳에서나 수정 없이 쓸 수 있으려면 호환성의 문제를 해결해야 한다. 윈도우즈, 유닉스, 매킨토시 등 운영체제에 상관없이 실행될 뿐만 아니라 PDA, 핸드폰, 냉장고, 손목시계 등의 가전 제품에서도 실행 가능하다면 얼마나 좋을까? 닷넷은 이런 호환성을 목표로 만들어졌으며 궁극적으로는 웹 상의 어느 곳에서나 실행 가능한 프로그램을 작성하는 것이 닷넷의 목표이다.

 

 

 

  

소프트웨어를 딱 한 벌만 만들어서 모든 플랫폼에 두루 실행할 수 있다는 것은 아주 매력적인 특징이지만 중간 코드를 통해 실행하기 때문에 필수적으로 성능의 저하가 따를 수밖에 없다. 중간 코드는 특정 플랫폼 전용의 네이티브 코드로 컴파일한 프로그램보다 이론상 더 느릴 수밖에 없으며 실제로도 느리다. 그럼에도 불구하고 플랫폼 독립성이 대세가 된 이유는 혁신을 통해 하드웨어 환경이 지속적으로 개선됨으로 인해 소프트웨어의 느린 속도를 뒷받침할 수 있는 물적 토대가 마련되었기 때문이다. 하드웨어보다 인건비가 훨씬 더 비싸기 때문에 성능보다는 개발 기간 단축과 유지 보수의 편의성이 더 중요한 시대가 된 것이다.

 

.닷넷은 인터넷의 표준 문서 포맷인 XML HTTP를 통한 SOAP 프로토콜을 기본적으로 지원하여 네트워크상의 소프트웨어끼리 자유롭게 정보를 교환할 수 있도록 한다. 닷넷은 마이크로소프트의 웹 서비스 전략의 주요 수단이며 닷넷이라는 이름 자체가 분산 환경에 대한 지원 의지를 잘 표현하고 있다.






 
. 새로운 개발 환경

 

       _ 문자적으로는 이해할 수 있으나, 개념적으로 이해하기 어려움. 단순필기../

 ① WinMain의 두 번째 인수는 16비트에서 이전 인스턴스의 핸들을 가리키는데 32비트에서는 항상 NULL이며 전혀 사용되지 않는다. 하지만 진입 함수의 원형을 바꿀 수는 없기 때문에 이 인수는 계속 유지되며 앞으로도 그럴 것이다.

 

② C++에서 구조체 멤버의 디폴트 액세스 지정자가 public이다. 객체 지향 환경에서는 가급적 멤버를 숨겨야 하는데 C의 구조체가 정보 은폐를 지원하지 않기 때문에 호환성 유지를 위해 디폴트는 public이 될 수밖에 없다.

 

③ MFC 의 컬렉션 클래스는 일반 버전과 템플릿 버전 두 벌이 존재한다. C++에 템플릿 문법이 도입되기 전에 일반 버전이 먼저 만들어졌고 이후 템플릿 버전이 추가되었다. 템플릿 버전으로 모든 컬렉션을 더 안전하고 효율적으로 관리할 수 있으므로 일반 버전은 사실 필요가 없어졌지만 호환성 유지를 위해 두 벌을 그대로 유지할 수밖에 없다.

 

필요에 따라 함수들을 계속 추가하다 보니 비슷한 기능을 하는 함수들이 지나치게 많아졌다. 예를 들어 문자열 복사 함수는 유니코드 지원을 위해 strcpy, wcscpy, _tcscpy, lstrcpy 등등이 있다. 이중 일부는 더 이상 사용되지 않지만 없애 버릴 수는 없다. 파일 입출력 함수들은 현재 무려 여섯 벌이나 존재한다.

 

현재 상황에서 전혀 의미가 없는 이론도 여기 저기에 흔적이 남아 있다. 16비트 프로세서의 입체적인 메모리 구조에서 기인한 NEAR, FAR, HUGE 포인터의 구분이나 메모리 모델 등은 평면 메모리 구조인 32비트부터는 의미가 없다. 그러나 64비트에서조차도 이 흔적을 완전히 지워 버리지 못한다.




2. 닷넷의 구조

. 플랫폼 독립

 


 




닷넷 프로그램은 IL로만 컴파일되고 실행 직전에 플랫폼별 JIT 컴파일러에 의해 기계어 코드로 변환되어 실행된다.

IL로 컴파일된 코드를 관리 코드(Managed Code)라고 하는데 닷넷 프레임워크에 의해 실행되는 안전한 코드라는 뜻이다.

관리된다는 말은 닷넷 런타임이 코드의 안전성을 보장하고 가비지 컬렉션을 자동으로 수행한다는 뜻이다.

이외에 보안, 버전 관리, 언어 교차 지원 등의 수준 높은 지원을 받을 수 있다.

반대말은 비관리 코드이며 기존의 비닷넷 언어로 생성된 코드를 의미한다.

물론 중간 코드를 생성함으로 인한 불이익도 있다.

CPU IL을 직접 해석하지 못하므로 컴파일 과정을 거쳐야 실행할 수 있는 번거로움이 있고 컴파일 후 실행 단계를 거치므로 네이티브 언어(C언어) 보다 성능은 떨어진다.

  

각 언어별 30만건 정렬 결과 (가트너ID 조사기관)


언어 

 C

 C++

 C#

 자바

 수행시간

9

  42 

 115

 107

 

 

C ->OS 바로 명령 -> 하드웨어 바로 적용

C# -> 프래임워크에게 부탁(;;실행엔진) -> OS 부탁 -> H/W

 

 메모리 요구량이 더 많다는 것도 치명적인 단점.

 .net은 중간코드에 의해 언어 독립성, 플랫폼 독립성은 확보했지만, 이래저래 성능으로는 네이티브 언어의 적수가 될 수 없다.

하지만, 대기 시간이 많은 UI 작업에서는 거의 차이가 없고, 그래픽처리, 동영상재생, 네트워크 전송처럼 본질적으로 하드웨어에 의존하는 기능은 오히려 닷넷이 더 빠를 수 있다.

 

. 닷넷의 구성 요소

1) CLR (Common Languge Runtime - 공용언어런타임, 닷넷실행엔진)

    자바의 가상 머신과 개념적으로 동일.





  

닷넷 응용 프로그램은 운영체제와 직접 통신하지 않으며 반드시 CLR을 거쳐야 한다. CLR은 물론 플랫폼별로 따로 제공된다.

CLR이 호스트 운영체제와의 통신을 책임지므로 응용 프로그램은 운영체제에 대해서 독립적이다.

응용 프로그램은 호스트 운영체제는 거의 신경 쓸 필요가 없고 오로지 CLR과의 약속만 잘 지키면 된다.

 

2) CTS (Common Type System)

CTS는 모든 닷넷 언어들이 공동으로 사용하는 타입 체계를 정의한다.

언어끼리 함수를 호출하려면 인수나 리턴값에 대해 서로의 타입을 알 수 있어야 한다.

예를 들어 C++에서 int 형의 값을 넘기면 VB에서는 Integer 타입으로 이 값을 받아들일 것이다.

이때 int Integer는 같은 타입이라는 것을 두 언어가 모두 알고 있어야 하며 물리적인 포맷이 같아야 한다.

두 타입의 길이나 형태가 다르다면 서로 다른 언어끼리 원활하게 통신할 수 없을 것이다.


 

 



진정한 언어 독립성을 확보하고 언어간의 교차 프로그래밍이 가능하기 위해서는 개별 언어가 타입을 마음대로 정의해서는 안되며 플랫폼 차원에서 공통의 타입을 정의할 필요가 있는데 이 타입 체계가 바로 CTS이다



3) CLS (Common Language System)

 닷넷은 언어들이 지켜야 하는 최소한의 사양을 정의하는데 이를 CLS라고 한다. CLS의 몇 가지 예를 들어 보자.

전역 함수나 변수는 정의할 수 없다.

부호없는 정수형은 인정하지 않는다.

명칭은 대소문자를 구분하지 않는다.

포인터를 사용할 수 없다.

연산자 오버로딩을 지원하지 않는다.

 

4) BCL

닷넷에는 여러 가지 복잡한 기능을 제공하는 방대한 기본 클래스 라이브러리(BCL)가 탑재되어 있다. 닷넷은 플랫폼이면서 라이브러리라고 할 수 있는데 사실 플랫폼은 응용 프로그램 제작을 위한 라이브러리를 포함할 수밖에 없다. 플랫폼이 라이브러리를 제공하지 않으면 응용 프로그램 개발자들이 해야 할 일들이 너무 많아지기 때문이다마치 윈도우즈가 방대한 Win32 API를 제공하는 것처럼 닷넷도 같은 개념의 BCL을 제공한다.

 

BCL은 마이크로소프트가 미리 작성하여 제공하는 잘 정리된 클래스들의 거대한 집합이다.

제공되는 클래스들의 규모가 엄청날 뿐만 아니라 객체 지향적이고 문서화도 잘 되어 있어서

잡스러운 처리들의 대부분은 BCL을 호출하기만 하면 된다.

닷넷을 공부한다는 것은 BCL의 클래스들을 하나 둘씩 정복해 나가는 과정이라고 할 수 있다.

BCL에 포함된 클래스의 목록과 기능을 대충 정리해 보자.

 

기본 타입에 대한 정보 제공

배열, 연결 리스트, 큐 등의 컬렉션 클래스

그래픽 라이브러리(GDI+)

스레드와 동기화 클래스

각종 컨트롤

파일 입출력

네트워크와 인터넷 프로그래밍

데이터베이스 액세스





.닷넷의 장점

1. 닷넷의 가장 큰 장점은 플랫폼에 독립적인 응용 프로그램을 만들 수 있다는 것이다.

   플랫폼 독립성은 중간 코드와 JIT 컴파일러에 의해 구현된다. 닷넷이 필요해진 이유이기도 하다.

   소프트웨어를 딱 한 번만 작성해서 수정 없이 어디에서나 실행된다는 것은 정말 큰 매력이다.

 

2. 언어 상호 운용이 가능하다. CLS를 만족하고 관리 코드를 생성해 낼 수 있다면 어떤 언어로도 닷넷 응용 프로그램을 개발할 수 있다. 오로지 자바 언어만 인정하는 자바와는 비교되는 부분이다언어 상호 운용성은 언어 독립성보다는 한단계 더 상위의 개념으로서 이기종의 언어끼리 교차 호출, 교차 상속, 교차 디버깅까지도 가능하다.

 

3. 닷넷은 플랫폼 자체가 객체 지향적이며 닷넷 언어들도 모두 완전한 객체 지향 언어이다. C 수준의 API 함수로만 구동되는 윈도우즈와 비교되는 부분이다. 객체 지향은 절차식에 비해 직관적이고 개발 속도가 빨라 생산성이 높고 배우기도 훨씬 더 쉽다.

 

4. 응용 프로그램을 배포하기 쉽다. 어셈블리가 자신에 대한 정보인 메타 데이터를 내장하고 있으므로 단순히 복사하기만 하면 설치 완료된다. 레지스트리에 의존하는 COM과는 달리 시스템에 부하를 주지 않으며 DLL처럼 덮어쓰기에 의해 이전 프로그램이 영향을 받는 경우도 없다전용 어셈블리는 자기 디렉터리에 설치되므로 충돌 문제가 아예 없고 공유 어셈블리는 암호화와 엄격한 이름(strong name)에 의해 충돌 방지된다.

 

5. 어셈블리가 어떤 동작을 하는지에 대한 정보가 어셈블리 자체에 작성되어 있어 보안 적용이 쉽고 완벽하다. 닷넷 런타임은 어셈블리가 무엇을 하는지 사전에 조사할 수 있어 부적절한 코드의 실행을 원천적으로 방지할 수 있다. 윈도우즈는 로긴한 사용자에 따라 보안이 적용되는 역할 기반인데 비해 실제 어떤 동작을 하는가에 따라 보안을 적용하는 코드 기반 보안을 지원한다.

6.  프로그래밍 환경이 아주 쾌적하다. CLR은 가비지 컬렉션 기능을 제공하며 할당한 객체를 해제하지 않아도 자동으로 해제한다. C++은 할당 후 반드시 직접 해제해야 하는데 이런 문제로 인해 여러 가지 부작용이 나타나고 메모리 누수로 인해 시스템에도 악영향을 미쳤다. 닷넷에서는 이런 문제가 없어 프로그래밍하기 편리하다. 필요한 만큼 생성해서 쓰고 다 쓴 후 그냥 내 버려 두면 된다. 또한 비주얼 스튜디오 닷넷 같은 막강한 컴파일러의 지원을 받을 수 있다.

7.  닷넷의 활용 범위는 광범위하다. 일반적인 응용 프로그램뿐만 아니라 데이터 베이스 접속도 할 수 있으며 웹 응용 프로그램 개발도 지원한다. 분산 환경의 서버, 클라이언트도 작성할 수 있고 모바일 응용 프로그램까지도 만들 수 있어 필요한 거의 대부분의 응용 프로그램 제작이 가능하다. 닷넷 3.5의 실버라이트로는 플래시같은 예쁜 프로그램도 만들 수 있다. 한마디로 다재 다능하여 닷넷으로 못 만들 프로그램이 거의 없다.

 8.  방대한 양의 클래스 라이브러리(BCL)가 제공된다. BCL에는 윈폼, 웹폼, ADO, 리모팅 등의 기능을 제공하는 클래스들이 체계적으로 잘 정리되어 있다. 뿐만 아니라 XML, 정규식, 이미지 출력, 네트워킹 등 웬만한 기능이 다 포함되어 있어 공짜로 쓸 수 있다. 게다가 BCL은 개별 언어가 아닌 닷넷 플랫폼에 의해 제공되는 것이므로 모든 닷넷 지원 언어들이 이 라이브러리의 서비스를 받을 수 있다. 닷넷 프레임워크는 닷넷 언어들이 공유하는 거대 규모의 라이브러리이다.



. 닷넷의 허와 실

 

프로그램 언어에 대한 공평한 시각이 필요.

 

닷넷 응용 프로그램이 실행되기 위해서는 호스트 운영체제에 닷넷 프레임워크가 반드시 설치되어 있어야 한다.

닷넷 프로그램 자체는 복사에 의해 쉽게 배포할 수 있지만 프레임워크는 그렇지 않다. 1M도 안되는 프로그램을 실행하기 위해

수백 M에 달하는 프레임워크를 설치해야 하는 것이다.

물론 이는 운영체제를 다시 설치하는 것에 비해서는 훨씬 더 쉬운 일이기는 하지만 최종 사용자가 직접 하기는 역시 부담스럽다.

 

비스타는 닷넷 프레임워크 3.0을 기본적으로 내장하고 있으며 차후의 운영체제들도 최신 닷넷 프레임워크를 내장하고 발표되겠지만 이전 버전에서는

그렇지 않다. 또한 비스타라 하더라도 닷넷의 다음 버전이 발표되면 여전히 새로운 프레임워크로 업그레이드해야 한다.

닷넷 자체가 운영체제가 아니기 때문이다. 프레임워크의 용량도 문제가 되는데 핸드폰에 닷넷을 설치하는 것은 현실적으로 어렵다.

그래서 좀 더 작은 컴팩트 프레임워크라는 것을 제공하기도 한다. 배포 문제는 당분간 닷넷 대중화의 걸림돌로 작용할 것이다.

 

중간 언어를 생성하는 닷넷은 느리다. 여러 가지 변명을 늘어 놓지만 동백마닳 최적화를 해도 네이티브 언어보다 빠를 수는 없다.

하드웨어의 눈부신 발전에 힘입어 부족한 성능을 보충하기는 하지만 아직까지도 속도를 최우선으로 하는 응용 프로그램은 많다.

압축, 동영상 재생, 컴파일, 그래픽 처리 등은 빠를수록 좋다. 닷넷의 주요 개발툴인 비주얼 스튜디오가 닷넷에서 실행되지 않는 걸 봐라.

가장 범용적인 소프트웨어인 오피스도 닷넷으로 만들지는 않는다.

효율이 중요한 곳에서는 여전히 C/C++이 강세며 앞으로도 이 점은 변하지 않을 것이다






ASP.NET의 특징


ASP.NET이란 닷넷 프레임워크와 함께 발표되었으며, 닷넷 언어를 이용해서 웹 응용프로그램을 개발하는 기술을 의미합니다. 물론, 닷넷이 개발되기 전에 ASP(Active Server Page)라는 웹 페이지 응용프로그램 개발 기술이 존재했고 , 아직까지도 많이 쓰이고 있습니다.

그렇지만, ASP.NET ASP에 비해 완전히 새로운 프로그래밍 모델을 제공하며 C#, VB.NET, J#, C++.NET등의 닷넷 언어로 개발합니다, 그렇기 때문에 ASP.NET이란, 개발언어를 의미하는 것이 아니라 닷넷 환경에서의 웹 개발 방법과 기술이라는 것을 기억해야 하겠습니다.

 

 ASP.NET의 특징

  • 디자인과 코드의 분리
    ASP는 화면에 보이는 부분은 HTML, 실제 코드는 ASP 코드로 작성해서 소스가 보기 어렵고 복잡했지만, ASP.NET은 디자인 구현 부분과 실제 프로그래밍을 구현하는 코드가 분리되어 있으므로, 개발할 때와 수정할 때 간편하게 분리해서 작업할 수 있습니다.
  • 다양한 브라우저 지원
    지금까지 웹사이트를 개발하려면 개발 언어의 특성 때문에 익스플로러와 네스케이프용 화면을 각각 개발해야 했으나 ASP.NET은 이 두 가지 브라우저 뿐만 아니라, PDA 같은 무선 장비에서도 페이지 하나만을 작성해서 모두 적용할 수 있습니다.
  • 컴파일 된 닷넷 기반의 환경
    닷넷과 호환하는 어떤 언어도 이용할 수 있으며, C#파일(*.cs)과 마찬가지로 실행되기 전에 컴파일을 거치므로, 일반적인 오류를 미리 검출하고 실행 속도를 향상시킬 수 있습니다.
  • 웹 폼 기반의 개발 환경
    비주얼 베이직처럼 사용자 개발 환경(GUI)을 직접 보면서 개발할 수 있기 때문에 개발할 때 직관성이 뛰어납니다. 그리고 이벤트 드리븐(event-driven) 방식으로 개발하기 때문에 웹 페이지 링크나 버튼, 여러 가지 폼에 대한 기능을 상세하게 구현할 수 있습니다.

 

웹 폼이란?

웹폼(Web Form)이란 ASP.NET의 화면 디자인 및 GUI를 개발하기 위한 기술로서, 웹 응용프로그램 개발을 위한 가장 기본적인 기능입니다. ASP.NET 웹폼(Web Form)의 확장자는 .aspx, 웹폼 페이지의 내부 구조는 다음과 같이 3가지 부분으로 구성됩니다.

  • @Page 지시자
    HTTP
    런타임이 웹폼 페이지를 어떻게 처리해야 하는지를 기술하며 웹폼 페이지이 실행될 환경을 설정합니다.
  • 서버측 코드 부분
    runat="server" 속성을 포함하는 <script> 태그 부분은 일반적으로 이벤트 핸들러(Handler) Helper 함수들이 위치합니다.
  • 페이지 레이아웃 부분
    페이지 레이아웃은 페이지 골격을 나타냅니다. 이 부분은 서버 컨트롤, 문자열 텍스트, 그리고 HTML 태그를 포함합니다.

 ASP.NET 컴포넌트 모델

닷넷 프레임워크 클래스 라이브러리는 클래스의 객체 지향적 계층 구조로 이뤄집니다.

ASP.NET은 이러한 닷넷 프레임워크의 웹 기술이기 때문에 닷넷 프레임워크의 객체 모델 특징을 직접, 또는 간접적으로 이어 받습니다.

실제 ASP.NET의 웹폼 페이지는 ASP.NET 런타임에 의해 실행될 때, 단순히 텍스트 문서처럼 파싱되어 처리되는 것이 아니라 Page 클래스의 파생 클래스로 생성됩니다. 이 클래스의 인스턴스가 만들어져 실행되는 것이기 때문에 ASP.NET은 닷넷 프레임워크 클래스 라이브러리를 사용할 수 있을 뿐만 아니라 자신의 Page 클래스를 확장해서 웹 프로그램을 작성할 수 있습니다.

 

 

ASP.NET 서버 컨트롤

ASP.NET 서버 컨트롤은 ASP.NET 페이지에서 웹 응용 프로그램의 사용자 인터페이스(UI)를 정의하기 위해 사용되는 컴포넌트입니다. 이것은 웹폼 프로그래밍 모델의 가장 핵심이 되는 요소입니다.

서버 컨트롤은 크게 HTML 서버 컨트롤과 웹 서버 컨트롤로 나눠지며, 모든 서버 컨트롤은 runat="server" 속성을 포함합니다. 웹 서버 컨트롤은 'asp:'라는 접두어로 시작합니다.

//HTML 서버 컨트롤

<INPUT id="txtUserName" type="text" runat="server">

 

// 웹 서버 컨트롤

<asp:TextBox id="txtUserName" runat="server"></asp:TextBox>



반응형