1. .NET Framework

1.1. App.config

  • Framework 버전

1.2. 메모리 구조

  • Kernel
  • Shared object
  • Application

Application의 메모리 구조

  • Stack(Data Segment)
  • Heap
  • Static Data Area
  • Code (Code Segment)

Heap은 CLR에서 제거한다.

1.3. 로깅, 추적 및 성능 진단

  • 윈도우 이벤트 로그 (관리도구 - 이벤트 뷰어 - Windows 로그 - 응용프로그램)
  • Debug.Assert를 활용한 디버그 (VS의 Debug 모드에서 사용가능)
  • Debug.WriteLine를 활용한 추적 (VS의 Debug 모드)
  • Trace.WriteLine를 활용한 추적 (VS의 Debug, Release 모드)
  • Visual Studio의 [분석 - 성능 및 진단]을 사용해서 성능 분석
  • PerformanceCounter 객체와 성능 모니터를 활용한 성능 분석 (관리도구 - 성능 및 모니터)

1.4. IL 디스어셈블러

ildasm을 통해 타입정보 및 참조정보를 확인할 수 있다.

[VS2013용 개발자 명령 프롬프트] - ildasm 실행

[ctrl + M]을 통해 타입 정보를 확인할 수 있다.

1.5. 단위 테스트

  1. 테스트 프로젝트를 추가해야한다.
  • [솔루션] -> [추가] -> 테스트 프로젝트 추가
  1. 다른 프로젝트를 테스트하기 위해서 참조를 추가를 해야한다.
  • [참조 추가] -> [솔루션] -> [프로젝트] -> 프로젝트 선택
  1. 테스트 실행
  • [테스트] -> [실행] -> 테스트 선택

1.6. DLL

종류

  • Assembly(.NET DLL, 클래스 라이브러리, 참조 추가로 사용, ILDASM으로 확인)
  • Unmanaged DLL(Win32 API)
  • Unmanaged DLL(COM Component, [DllImport]로 사용, regsvr32 zip.dll로 등록되는지 체크) [참조 추가] - [COM] - [형식 라이브러리] - 등록된 DLL을 찾는다.

1.6.1. 어셈블리(Assembly)

실행 프로그램 또는 DLL 또는 많은 PE파일과 리소스의 단위이다.

구성

  • Manifest
  • MSIL
  • Resource
  • Type metadata

종류

  • Private Assembly. 참조 추가한 프로그램만 사용 가능
  • Shares Assembly. 여러 프로그램에서 사용 가능한 어셈블리이며 GAC에 등록해서 사용할 수 있다. 강력한 이름(Strong name)을 갖는다.

클래스 라이브러리 프로젝트를 만들어서 DLL을 만들 수 있다.

프로젝트에서 참조할 DLL 경우

  • 기본적으로 시작 프로젝트에서 빌드할때 참조하는 DLL을 복사해온다.
  • app.config에 특정 하위폴더에서 찾도록 할 수 있다.

강력한 이름(Strong name) 만드는 방법

  • [프로젝트 속성] - [서명] - [강력한 이름 키 파일 선텍] - [빌드]

1.6.2. GAC (Global Assembly Cache)

명령 ::
[Visual2013용 개발자 명령 프롬프트] 실행 gacutil -i [DLL Path] gacutil -l [DLL Path]

1.6.3. COM Component

COM Component는 레지스트리에 HKEY_CLASSES_ROOT - [프로그램ID] - [클래스 아이디]로 등록되어서 사용 가능한 DLL이며 Type Library(.tlb)로 타입 정보를 얻을 수 있다. (RegID, CLSID)로 식별된다. 참조 추가할 경우 RCW(Runtime Callable Wrapper)를 통해서 참조한다.

1.6.4. Win32 API

반드시 정적 함수로 선언해야하며 타입을 맞게 바꿔줘야한다.

예시:

[DLLImport("user32.dll", EntryPoint="MessageBox")]
public static extern int APIMessageBox(int h, string text, string caption, uint type);

1.7. TaskList

TaskList를 이용해서 Visual Studio에서 진행할 작업을 넣을 수 있다.

1.8. FILE I/O

  • File. 정적 메서드를 멤버로 갖음
  • FileInfo. 인스턴스화 해서 사용함
  • Directory. 정적 메서드를 멤버로 갖음
  • DirectoryInfo. 인스턴스화 해서 사용함
  • Path. 패스 유틸리티 클래스
  • FileStream. 이미지나 사운드 파일
  • StreamReader/StreamWriter. 텍스트 파일
  • BinaryReader/BinaryWriter. 바이너리 파일

1.9. 직렬화

[Serializable] 이라는 속성을 이용해 객체 직렬화가 가능하다. 바이너리, XML, Json등으로 직렬화가 가능하다.

  • BinaryFormatter. 바이너리 데이터로 직렬화
  • SoapFormatter. SOAP 형식의 데이터로 직렬화
  • DataContractJsonSerializer. Json 형식의 데이터로 직렬화

1.10. XML 처리

  • XmlTextReader/XmlTextWriter.

1.11. 데이터베이스

  • ADO.NET class.
  • ADO.NET Entity Framework.
  • LINQ to SQL.

1.11.1. ADO.NET Entity Framework

데이터 기반(Data oriented) 소프트웨어를 개발할때 필요한 기술의 집합이다.

ADO.NET 엔터티 추가

  • [새 항목] - [데이터] - [ADO.NET 엔터티 데이터 모델] - [데이터베이스의 EF Designer] - DB 연결 정보 입력 및 테이블 선택

엔터티를 추가하면 edmx 라는 파일이 생성되고 이 파일에서 객체 - 테이블의 관계를 확인할 수 있다. 모델 클래스도 같이 생성된다.

간단하게 엔터티 인스턴스를 만들어서 데이터를 조회할 수 있다.:

MyEntity e = new MyEntity();
var result = e.Employees.FirstOrDefault();

데이터 저장:

r.FirstName = "Choe";
db.SaveChnages();

1.11.2. 간단한 HTTP 통신

HTTP 요청:

HttpWebRequest request = WebRequest.Create("http://www.naver.com") as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//Response
System.IO.Stream s = response.GetResponseStream();

1.11.3. WCF(Windows Communication Foundation)

응용 프로그램에서 여러 컴퓨터와 비동기적으로 통신할 수 있도록 해주는 프레임워크이다.

WCF로 여러가지 서비스를 구성할 수 있다.

  • WCF Service
  • WCF Data Service

1.11.3.1. WCF Data Service(ADO.NET Data Services)

REST를 사용하여 WWW을 통해 데이터를 제공하는 하나의 컴포넌트이다.

절차

  1. 먼저 ASP.NET 웹 프로젝트를 만들어야 한다.
  2. 새 항목 추가 - WCF Data Service를 추가한다.
  3. 새 항목 추가 - ADO.NET 엔터티 데이터 모델 추가한다.
  4. DataService의 타입 파라미터로 생성된 엔터티 타입을 전달한다.
  5. InitializeService 메서드에서 권한 설정을 한다.
  6. 오퍼레이션(메서드)을 생성하고 SetServiceOperationAccessRule 에서 메서드를 등록한다. (메서드 생성시 적절한 속성(attribute)을 줘야한다. [WebGet], [SingleResult])

1.11.3.2. WCF Client

WCF Data Service 접속

  1. Winform 프로젝트 생성
  2. 서비스 참조 추가
  3. 네임스페이스 추가
  4. LINQ 쿼리로 데이터 조회

1.11.3.3. 컴포넌트 (Component)

Component One, DevExpress