gunicorn 을 파헤쳐보자! 소켓 사용과 포트 사용의 차이점

kkachi·2022년 11월 20일
1

파이썬 이모저모

목록 보기
2/2

안녕하세요. 까치입니다.

최근 django 애플리케이션을 구축하던 중 WSGI(Web Server Gateway Interface) 서버로 gunicorn을 사용하게 되었는데 갑자기 문득..

--bind 0:8000 vs --bind unix:/tmp/gunicorn.sock

뭔 차이지..?? 가 궁금해져서 내용을 정리하게 되었습니다.

사전 지식

아는 내용이라면 넘어가셔도 무방합니다.

TCP/UDP

  • 네트워크의 계층들 중 전송(Transfort) 계층에서 사용하는 프로토콜
  • 데이터 전송을 위해 사용하는 프로토콜

TCP

  • TCP(Transmission Control Protocol)
  • 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
  • 연결 지향 방식
  • 연속성보다는 신뢰성이 중요한 서비스에 사용

UDP

  • UDP(User Datagram Protocol)
  • 데이터를 데이터그램 단위로 처리하는 프로토콜
  • 비연결형 방식
  • 신뢰성보다는 연속성이 중요한 서비스에 사용

네트워크 소켓 vs 유닉스 소켓

Network socket

  • 네트워크 상에서 처리되는 커뮤니케이션
  • TCP/UDP 프로토콜을 사용해서 통신

Unix socket

  • Unix Domain Socket.
  • IPC(Inter process communication) Socket
  • 머신 내부의 프로세스들끼리 통신만을 위해 사용되는 양방향 통신 소켓.

결론

UNIX 소켓 --bind unix:/tmp/gunicorn.sock 은 동일한 시스템에서 프로세스 간의 양방향 데이터 통신을 허용하는 메커니즘입니다.

네트워크 소켓 --bind 0:8000 은 네트워크(ex. TCP/IP)를 통해 프로세스 간의 통신을 허용하는 메커니즘입니다.

UNIX 소켓은 컴퓨터가 동일한 시스템에서 실행되고 있음을 알고 있으므로 라우팅과 같은 일부 검사 및 작업을 피하고 훨씬 가볍게 통신할 수 있습니다.

따라서 리눅스 시스템상의 프로그램에서 프로세스 간 로컬 통신이 필요할 경우 네트워크 소켓보다 유닉스 소켓을 사용하는 것이 속도 등에 유리한 이점을 가질 수 있습니다.

참고링크

1개의 댓글

comment-user-thumbnail
2023년 9월 27일

진짜 딱 제가 궁금한 내용이었는데 잘 정리해주셔서 감사해요!

답글 달기