07_소켓

Lukaid·2023년 9월 10일
0

boostcamp

목록 보기
7/20

socket

개인적으로 웹의 꽃은 네트워크라고 생각해서 그간 공부도 열심해 해왔다. (그렇다고 잘하는 건 아닐듯?) 그리고 웹에서 네트워크를 다룰때 꼭 마주치는 녀석이 이 "소켓"이라는 녀석이다. 이녀석에 대해 간단히 공부해보자.


소켓이란?

일단 소켓이 뭘까? 널널한개발자님에 의하면 소켓은 곧 "파일"이다. 그냥 파일에 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: 에러


정리

최초에 내가 네트워크에 대한 내용을 잘 모를때, 웹소켓을 먼저 접하고 아주 어려웠던 기억이 있다. 그때 진짜 포기해버리고 싶었는데, 시간이 지나고 자연스럽게 지식이 쌓이면서 다시 보니까 이해가 되는 것 같다. 내가 인상깊게 생각하는 말 중에 "알고 보니 쉽다" 라는 말이 있다. 예전에는 그냥 별 의미 없는 말이라고 생각했는데, 시간이 지날수록 저 말이 가지고 있는 묘한 의미를 다시 생각하게 되는 것 같다. 모를때는, 알고보자!

profile
풀스택 지향 웹개발자 이성우입니다.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN