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.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을 통해 데이터를 제공하는 하나의 컴포넌트이다.
절차
- 먼저 ASP.NET 웹 프로젝트를 만들어야 한다.
- 새 항목 추가 - WCF Data Service를 추가한다.
- 새 항목 추가 - ADO.NET 엔터티 데이터 모델 추가한다.
- DataService의 타입 파라미터로 생성된 엔터티 타입을 전달한다.
- InitializeService 메서드에서 권한 설정을 한다.
- 오퍼레이션(메서드)을 생성하고 SetServiceOperationAccessRule 에서 메서드를 등록한다. (메서드 생성시 적절한 속성(attribute)을 줘야한다. [WebGet], [SingleResult])
1.11.3.3. 컴포넌트 (Component)¶
Component One, DevExpress
1.12. Reference¶
- WCF Data Service : https://msdn.microsoft.com/en-us/library/cc668792(v=vs.110).aspx
- COM Component Excel : http://net-informations.com/