[문과 코린이의 IT 기록장] C# 네트워크 프로그래밍 (C# Network Programming Intro, 네트워크 기본 구조와 원리)
[문과 코린이의 IT 기록장] C# 네트워크 프로그래밍 (C# Network Programming Intro, 네트워크 기본 구조와 원리)
1. C# Network Programming Intro
- 장치와 장치, 컴퓨터와 컴퓨터를 연결할 수 있도록 하는, 네트워크 프로그래밍을 학습해보고자 한다.
1) C#의 중요성
1. 단순히 Window OS에서만 동작하는 것이 아니라, 여러 IOT기기까지 적용할 수 있다.
- 현재 .NET Platform은 운영체제에 의해 제한받지 않고, 어디서든 동작할 수 있다. 따라서 굉장히 작은 IOT 기기에서도 C#을 사용해 프로그래밍 및 동작이 가능하며, 이는 실제로 다양한 산업 현장, 제어 분야 등까지 활용 되고 있다.
ex. 로봇 팔 내부에서, C# 프로그래밍이 동작
2. 굉장히 많은 클래스 라이브러리를 제공한다.
- C#은 강력한 클래스 라이브러리르들을 제공함으로써, 프로그래머가 세부적인 부분을 구현하지 않고, 더욱 편리하고 효율적으로 프로그램을 구현할 수 있도록 돕는다. 이 과정에서 C++에 존재하던 강력한 장점들을 손쉽게 사용할 수 있게 되며, 결과적으로 생산력을 향상시킬 수 있게 된다.
3. C#은 MS에서 자체 개발된 언어이다.
- C, C++, Python 등은 창시자가 따로 있지만, C#만 유일하게 MS에서 자체 개발된 언어이다. 현재 세계에서는 IDE도구로 Visual Studio라는 도구를 굉장히 많은 비중을 차지하고 있다. 그런데 이 Visual Studio가 MS사에서 개발되었기 때문에, Visual Studio에서는 C#을 많은 사람들이 사용할 수 있도록, 앞으로 더 많이 집중하며 다양한 버전과 도구들을 제공하게 될 것이라고 예상된다.
4. MSDN이 굉장히 체계적으로 정리되어있다.
- MicroSoft Developer Network(MSDN)가 굉장히 잘 정리되어 있어, Windows 개발 중 모르는 것이 있거나 참고할 것들을 찾고 싶으면, 쉽게 찾아보고, 활용할 수 있다.
2) C# Network Progarmming 학습 방향
- 소켓을 이용하는 프로그래밍 방식과, 제공되는 클래스를 이용하는 프로그래밍 방식, 둘 모두 알아볼 것이며, 학습은 주로 제공되는 클래스를 이용하는 방식에 초점을 맞춰 이루어질 것이다.
- Windows Form Programming을 사용해, 네트워크가 어떻게 구성되는지 실제 프로젝트 형식으로 실습해보면서 학습할 것이다.
- 네트워크 관련 기본 내용을 중심으로 진행할 것이다.
- 이론보다, 현업에서 자주 사용되는 내용들을 중심으로 학습할 것이다.
3) C# Network Programming 학습 내용
- 네트워크 구조를 학습하며, C# 네트워크 프로그래밍 구현 원리를 알아낸다.
- 네트워크의 전반적 사항을 학습한다. 즉, 네트워크 정보 관련 메소드 및 클래스들을 학습한다.
- Server / Client / IP / Port 등의 핵심 용어 관련 내용을 내용을 학습한다.
- 네트워크 구조 내부 사이사이에, 코드를 넣어서 하나의 프로그램을 만든다.
[ 과정 ]
a. 네트워크 기본 구조 및 내용
b. 서버-클라이언트
c. 스레드 * 여러 명이 데이터를 주고 받기 위함
=> 결과적으로, 프로그래머가 원하는 데이터를 서버로 보내고, 해당 서버는 클라이언트에 응답하는 과정이 원활하게 이루어질 수 있도록, 코드를 작성하고 활용할 수 있도록 과정을 학습한다.
2. 네트워크 기본 구조와 원리
1) 서버와 클라이언트
(1) 네트워크의 기본 개념
- Net(망) + Work(일) = 망 안에서 일(데이터를 주고 받는 것)을 하는 것을, 네트워크라고 한다.
- 즉 연결, 관계를 통해 작업을 수행하는 것을 의미한다.
(2) 프로토콜 (Protocol) = 통신 규약
* 네트워크의 작업에 대한, 즉 데이터를 주고받는 것에 대해 미리 정해놓은 형식이 있는데, 이것을 프로토콜이라고 한다.
- 프로토콜 : 인터넷 상에서, 컴퓨터 간의 데이터를 주고 받기 위해 약속된 형식
* 프로그램을 하는 사람들은, 이 형식에 따라 데이터를 주고 받아야 하기 때문에, 이 형식을 아는 것이 중요하다.
(3) OSI 7계층 - 국제 표준 기구
응용 프로그램 계층 |
프리젠테이션 계층 |
세션 계층 |
전송 계층 |
네트워크 계층 |
데이터 링크 계층 |
물리 계층 |
- 네트워크를 통해 데이터를 주고받을 경우, 지켜야 할 형식을 표준화한 것을, OSI 7계층이라고 한다.
- 즉, 프로토콜을 기능별로 구분한 것을 이야기한다.
* 모든 인터넷은, 이 OSI 7계층 기반 위에, 여러 응용 프로그램이 붙어, 데이터를 주고 받도록 구성되어 있다.
- 이 OSI 7계층은, 랜 카드 및 인터넷 망, 라우터 등에서 이미 고려하고 있으며, 일부는 OS 영역 내부에 들어가서 동작하고 있다.
- 프로그래머는, 이와 같은 계층에 대해 직접적으로 다루고 구현하는 것이 아니라, OS에서 제공해주는 프로그램을 사용하여 개발하면 된다.
* OS제공 프로그램을 실제적으로 사용하는 계층 : 전송 계층, 세션 계층, 프리젠테이션 계층, 응용 프로그램 계층
2) 서버와 클라이언트
(1) 서버 (Server)
- 클라이언트에게, 네트워크(ex. 인터넷 망)를 통해, 정보 및 서비스를 제공하는, 컴퓨터(HW) 또는 프로그램(SW)을 의미
- 서버에는 2개의 개념이 함께 들어있음
a. HW 부분 : 컴퓨터 자체
* 서버 컴퓨터 HW와, 일반 컴퓨터 HW의 차이 : 서버 컴퓨터 HW는 24시간 풀 가동될 수 있는 성능을 가져야 하며, 문제가 생겨 다운되더라도, 2차 전원이 존재해 컴퓨터가 돌아갈 수 있도록 해야 한다. 따라서 보드의 수명, 메모리, CPU 등의 성능이 굉장히 좋은 컴퓨터를 사용해야 한다.
b. SW 부분 : 서버의 역할을 해 줄 수 있는, 프로그램이 동작하는 컴퓨터 ex. MSSQL / IIS
* IIS(Internet Information Service) : MS Windows를 사용하는 서버들을 위한, 인터넷 기반 서비스들의 모임
(2) 클라이언트 (Client)
- 네트워크를 통해, 서버라는 다른 컴퓨터 시스템 상의 원격 서비스에 접속할 수 있는, 응용 프로그램 및 사용자 컴퓨터
* 서버에 접속하기 위해서는, 응용 프로그램이 반드시 필요하다.
3) TCP/IP 서버와 클라이언트
(1) TCP/IP
- 전송계층에 해당된다. * 전송계층 : 데이터를 주고받을 때, 어떻게 주고받을 것인지 규정한 계층
- 보통 TCP/IP를 한번에 묶어, 이야기하곤 한다.
- 프로그래머는 직접 TCP/IP 관련 부분들을 구현할 필요는 없다. 이는 OS의 일부로 구현되어 있으며, 프로그래머는 OS가 제공해주는 TCP/IP 서비스를 이용하면 된다. 이와 관련한 코드들은, C#에서는 Class로 제공하고 있다.
a. IP
- 사용자와 목적지간, 경로 등을 확보해주는 프로토콜
b. TCP (Transmission Control Protocol)
- 데이터를 전송할 때, 망 내부에서 데이터가 유실되는 경우가 종종 발생한다. TCP는 데이터가 올바르게 전달되었는지, 에러 검출을 해주는 역할을 하며, 더 나아가 재전송을 할 수 있도록 제어하는, 전송제어 프로토콜의 역할을 한다.
c. UDP
- 에러 검출 및 재전송과 같은, 전송 제어의 역할은 하지 않으며, 빠른 전송을 요구하는 상황에서 주요 사용된다.
- 비연결형 : UDP Wrapper를 연결시켜놓고 처리하는 것이 아닌, 주소 및 PORT번호로 데이터를 쏴주면, 즉각적으로 처리한다.
(2) PORT 번호
- TCP/IP 서버에서, 다수 클라이언트 응용 프로그램을 구분하기 위해, PORT번호를 사용한다.
- PORT번호의 범위 : 0 - 65535번
* 예약된 번호 : 0-1023 (사용X)
* 1024 - 49151 중 하나를 선택해서 사용하여야 한다.
포트번호 | 항목 |
7 | 에코(echo) |
13 | DayTime |
21, 23 | FTP , Telnet |
25 | SMTP |
80 | HTTP |
(3) TCP 서버의 기본 구조
1. 대기 상태 : 클라이언트 쪽에서 접속을 할 때까지 대기하는 상태
2. 접속 요청 : 접속할 수 있는 내부 소켓을 생성한 후, 접속을 요청하는 상태
3. 데이터 전송 : 클라이언트의 접속요청이 받아들여지면, 데이터 전송을 진행하는 상태.
(4) TCP 서버와 클래스
* 프로그래머가 TCP 서버를 구성할 때, 클래스 라이브러리를 제공받는다. 이 클래스 라이브러리 메서드만 잘 이용해도, 편리하게 원하는 목적을 달성하도록 코드를 작성 가능하다.
- TCP와 관련된 대표적인 클래스 3가지 : TCPListner / TCP Client / NetworkStream
1. TCPListner
: 대기상태에 있으면서, 접속할 클라이언트를 받을 준비를 한다. 즉, 연결 관련 부분을 담당한다.
: TCPListner는, TCP Client 객체를 생성된다.
2. TCPClient
: 클라이언트 영역과 서버 영역이 데이터를 주고 받을 수 있도록 하는 객체이다.
3. NetworkStream
: TCP Client 객체가 1:1로 연결된 상태에서, 데이터를 주고 받을 수 있도록 과정을 구현한다.
(5) UDP 서버와 클라이언트
- UDP서버는 TCP처럼 클라이언트의 연결 요청 과정이 존재하지 않는다. UDP서버에서의 대기상태는, 실제 데이터를 받기 위한 대기 상태이며, 클라이언트에서 데이터를 보내면 받고, 처리하는 과정으로만 구성된다.
- 즉, 클라이언트에서 어떠한 데이터를 보내면, UDP 서버는 즉각적으로 반응한다. (비연결형)
cf) UDP서버에서, 한 그룹 내의 클라이언트들에게 동일한 메시지를 전달하는 경우, UDPClient.JoinMulticast()를 사용
또는, 추가적으로 기능을 구현하고 싶은 것들이 있다면, UDP Client를 상속받아 확장하기
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |