문과 코린이의, [C#] 기록/C# 이론

[문과 코린이의 IT 기록장] C# 네트워크 프로그래밍 (C# Network Programming Intro, 네트워크 기본 구조와 원리)

벼리네 2022. 8. 11. 11:43
반응형

[문과 코린이의 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:1접속 관계

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를 상속받아 확장하기

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형