본문 바로가기

Boostcamp

챌린지 마지막 과제

드디어 챌린지 기간의 마지막 과제가 지나갔다. 너무너무 힘들었지만 그만큼 재밌었던 것 같다. 혼자라면 아마 평생 하지 않았을 경험과 도전을 마무리하게 되어서 너무 기쁘다. 몸은 많이 힘들고 나이가 들었다는 걸 체감하지만, 그래도 좋다!

 

마지막 과제는 기대했던 네트워크...인가? 그냥 종합과제였다. 자세한 것은 밝힐 수 없으니 간단히 공부한 것만 정리해보자.

 

 

 

소켓이란?

일단 소켓이 뭘까? 널널한개발자님에 의하면 소켓은 곧 "파일"이다. 그냥 파일에 read write한다고 생각하면 된다. 그럼 이녀석의 역할이 뭐냐면, 하나의 pc 안에서는 각 계층간에 정보를 전달할 때 쓰이고, 네트워크 상에서는 두 개의 프로그램 간 양방향 통신의 하나의 엔드포인트라고 할 수 있다. 네트워크 상에서는 대부분 TCP/IP를 사용한다고 한다. (UDP도 있긴 하다.)

그럼 웹소켓은 무엇일까? 웹소켓은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다. 그리고 HTTP나 HTTPS 위에서 동작하도록 설계되었으며, 따라서 포트는 80번 혹은 443번이다. HTTP 프로토콜과 구별은 되지만 호환이 된다.

소켓은 4계층인 TCP에서 동작하고, 웹소켓은 7계층인 HTTP에서 동작한다. 근데 이걸 구분해서 생각할게 아니라, 웹 소켓은 TCP 소켓의 추상화된 형태이다.

소켓은 IP 주소와 포트의 조합으로 구성된 소켓 주소를 사용해 동작한다. 소켓 연결은 두 가지 형태(서버, 클라이언트)로 존재한다. 서버는 연결을 수신하고, 클라이언트는 서버에 연결을 진행한다.

 

TCP/IP란?


1. IP (Internet Protocol)

전세계의 인터넷에 연결된 pc들이 서로를 알아보기 위한 일종의 규약이다. IP 주소는 32비트로 구성되어 있고, 8비트씩 4개의 숫자로 표현된다.

2. TCP (Transmission Control Protocol)

서버와 클라이언트간의 데이터를 신뢰성있게 전달하기 위해 만들어진 규약이다. TCP는 데이터 패킷에 일련의 번호를 부여하여 데이터 손실을 찾아서 교정하고, 순서를 재조합하여 클라이언트에게 전달할 수 있게 해준다. 이는 왜 중요하냐면, 데이터는 네트워크 선로를 통해 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될수 있기 때문이다.

패킷: 데이터를 일정한 크기로 자른 단위로 인터넷에서 정보를 전달하는 단위이다. 나누어진 패킷이 순서대로 도착한다는 보장이 없으므로 규칙이 필요하다.

TCP는 전달받은 패킷을 재조립하고, 패킷에 손상이 있거나 손실된 패킷이 있다면 재전송을 요청하는 패킷을 전송하여 재전송받는다.

 

 

net.Socket이란?


오늘 본 개념 중 유일하게 처음 보는 개념이다.
net.Socket은 TCP나 IPC 통신을 위한 추상화된 네트워크 인터페이스이다. net.Socket은 Duplex 스트림이다. Duplex 스트림이란 읽기와 쓰기가 모두 가능한 스트림이다. net.Socket은 net.Server의 connection 이벤트를 통해 생성된다.

소켓 통신을 위한 기본 모듈은 net이다. const net=require('net')으로 사용할 수 있다.

net.Server로 소켓 서버를, net.Socket으로 소켓 클라이언트를 만들 수 있다.

서버 생성

const server = net.createServer([options][,connectionListener])

서버함수

server.listen(); 얘가 제일 중요함 클라이언트 접속 대기

server.close() 추가 접속을 받지 않는다

server.getConnections(callback) 연결 갯수

server.address() 서버주소

서버이벤트

listening: 포트 바인딩, 접속 가능한 상태 이벤트. server.listen메소드가 호출 되었을 경우

connection: 클라이언트 접속 이벤트

close: 서버 닫기(연결된 소켓이 없을 때만 발생)

error: 에러

 

 

과제를 하다가 알게 된 사실인데 net은 eventEmitter를 상속받아 만들어진 것이고 net은 express를 비롯해서 여러 라이브러리와 프레임워크에 쓰인다고 한다. 역시 부캠에서 공부한 것 중 의미 없는 건 없는 것 같다.

'Boostcamp' 카테고리의 다른 글

멤버십 시작!  (0) 2023.08.29
부스트캠프 웹・모바일 8기 챌린지 과정 회고  (1) 2023.08.08
마지막주 시작!!  (0) 2023.07.31
3주차 후반부  (0) 2023.07.28
3주차 전반부  (0) 2023.07.25