출처
Unix Socket과 TCP Socket의 차이
Unix Socket 과 TCP Socket은 어떤 차이가 있을까?
소켓 통신이란?
소켓이란?
소켓 프로그래밍
MQTT - Go 프로젝트를 구상하던 중, TCP Socket과 UNIX Socket을 접하여 해당 내용을 정리하고자 한다.
단, UNIX Socket에 우선순위를 두어 초점을 맞출 예정이다.
일반적으로 웹 어플리케이션을 구동하는 경우, 앞 단에 Apache 혹은 Nginx와 같은 웹서버를 연결하여 서비스한다.
웹서버와 어플리케이션을 연결할 때 -> UNIX 소켓을 이용하는 방법과 특정 포트로 연결(TCP 통신)하는 방법이 있다.
네트워크를 경유하는 프로세스 간 통신의 종착점.

소켓(Socket)이란 프로세스가 네트워크 세계로 데이터를 내보내거나, 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다.
그러므로, 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.
소켓은 프로토콜, IP 주소, 포트 넘버 로 정의된다.
다시 말해, 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로써, 인터페이스의 역할을 수행한다.
또한, 데이터를 주고받을 수 있는 구조체로, 소켓을 통해 데이터 통로가 만들어진다.


1. 서버
: 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
socket() 함수 이용해 소켓 생성bind() 함수로 ip와 port 번호 설정listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기시킬지 결정accept() 함수를 사용하여 클라이언트와의 연결 대기2. 클라이언트
: 데이터 송수신이 일어나는 것
socket() 함수로 소켓 열기connect() 함수로 통신할 서버의 설정된 ip와 port 번호에 통신 시도accept() 함수 이용해 클라이언트의 socket descriptor 반환read(), write() 하며 통신 (해당 과정 반복)1. 스트림(TCP)

2. 데이터그램(UDP)

1. HTTP 통신
: 클라이언트의 요청(Request)이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식
2. Socket 통신
: 서버와 클라이언트가 특정 port를 통해 실시간으로 양방향 통신을 하는 방식
IPC를 위한 방법으로 파이프, 메세지 큐, 세마포어, 소켓 등이 있다.
IPC (Inter-Process Communication, 프로세스 간 통신)
- 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로
1) 단일 시스템 내에서 프로세스 간 데이터 교환을 허용하는 통신 메커니즘.
1) 다른 시스템의 프로세스와 네트워크를 통해 통신하기 위해 사용하는 통신 메커니즘.