혹시 몰라 싸피 때 정리해 둔 노션에 '소켓'이라고 검색해봤더니 세상에 나 자율 프젝에 소켓 통신썼네; 심지어 내가 만든 UCC랑 PPT에 한 번도 아니고 세네 번씩 등장하는 소켓맨.. 이걸 써먹었다고 할 수는 없어도 거기서 쓸데없는 걸 가르친 건 아니구나 싶다.
싸피 말고도 회사에서 SAS를 쓰게 되면서 수도 없이 들은 단언데 그래서 대체 이게 뭔가 싶어 찾아보게 됐다. 이제서야 찾아보는 나도 조곰 징하긴 한데 지금이라도 궁금하다고 생각한 게 흠 아니지 궁금한 지는 좀 됐는데 공부해야 쓰겄다고 마음먹은 게 대단하다고 생각을 고쳐먹기 ~
소켓
네트워크 프로그래밍에서 통신의 끝점을 나타내는 개념. 소켓을 사용하면 두 컴퓨터 간에 데이터를 송수신할 수 있음. 소켓은 네트워크 상에서 데이터가 오가는 경로를 정의하고, 이 경로를 통해 응용 프로그램이 데이터를 주고받을 수 있게 함.
..지피티한테 물어본건데 미안하지만 뭔 소린지 잘 모르겠다 내가 좀 더 똑똑해지도록 노력하는걸로 ~
소켓은 사전적으로 구멍, 연결, 콘센트 이런 의미를 갖는데,
네트워크 프로그래밍에서의 소켓도 거의 비슷하다.
간단히 표현하면 아래와 같다. (말만 간단함)
프로그램이 네트워크에서 데이터를 송수신할 수 있도록,
'네트워크 환경에 연결할 수 있게 만들어진 연결부'
오케 대충 뭔 느낌인지 알았스 (모름)
(1) 소켓의 3요소
- 프로토콜: 시스템 간의 통신 규약, 약속
- IP 주소: 전세계 컴퓨터에 부여된 고유 식별 주소
- Port 번호: 같은 컴퓨터 내에서의 프로그램 식별 번호
(2) 서버 소켓
- socket(): 소켓 생성
- bind(): IP, Port 설정
- listen(): 클라이언트 요청에 대기열을 만들어 몇 개의 클라이언트를 대기시킬지 결정
- accept(): 클라이언트와 연결
- send()/recv(): 데이터 송수신
- close(): 소켓 닫기
(3) 클라이언트 소켓
- socket(): 소켓 생성
- connect(): 서버에 설정된 IP, Port로 연결 요청
- accept(): 클라이언트의 socket descriptor 반환
- send()/recv(): 데이터 송수신
- close(): 소켓 닫기
(4) 소켓 종류
- 스트림 소켓: TCP / 연결형 / 신뢰성 / 순서보장 / 대량 데이터 전송에 적합 / 점대점 연결
- 데이터그램 소켓: UDP / 비연결형 / 신뢰 X / 순서보장 X / 점대점 + 일대다 연결 가능 / accept 과정 X
뒤 로 미루기 뒤로 미루기
이 밈 아는 사람? 진짜 근본없는 노래라 웃김
소켓으로 네트워크 통신 기능을 구현하려면 알아야 될 것들
- 소켓 만들기
- 소켓을 통한 데이터 송수신 절차에 대한 이해
- 운영체제 및 프로그래밍 언어에 종속적으로 제공되는 소켓 API 사용법
- 다양한 예외상황에 대한 처리
- 케이블 분리로 인한 네트워크 단절
- 트래픽 증가에 따른 데이터 전송 지연
- 시스템 리소스 관리 문제로 인한 에러 등
블럭 방식
- 뭔가 동기 비동기랑 비슷한 거 같기도 하고.
- 이것두 뒤 로 미루기 뒤로미루기
근데 원래
- 이 글의 제목은 HTTP VS 소켓 VS 웹소켓이었다는 사실
- 소켓 먼저 찾아보다가 아 이거는 나중에 다시 봐야쓰것다 하고 한반짝 물러서기
- 딱기다리쇼 담에 진짜 찾아본다 진짜임
느낀점
찾다보니까 이렇게 간단히 정리될 내용이 아닌데,
일단 당장 궁금한 깊이만큼만이라도 알게되어서 뿌듯바리
이 간단하지 않은 내용을 나같은 감자도 이해할 수 있게 정리해둔 수많은 대단맨들에게 새삼 박수 (찹)
레퍼런스. 감사합니다!
https://recipes4dev.tistory.com/153