소켓(Socket)

소켓(Socket) 소켓은 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미한다. 소켓은 프로세스가 네트워크를 통해 데이터를 송수신하기 위한 실제적인 창구 역할을 한다. 운영체제는 소켓을 통해 네트워크 통신을 위한 인터페이스를 제공한다. 소켓의 구성 요소 소켓은 다음 세 가지 요소로 구성된다: 프로토콜: 데이터 전송을 위한 표준 집합 규칙 (예: TCP/IP, UDP/IP) IP 주소: 서버 또는 클라이언트의 주소 포트 번호: 통신을 사용하는 애플리케이션을 식별하는 번호 소켓의 특징 프로토콜, IP 주소, 포트 번호로 정의된다. 서버 소켓과 클라이언트 소켓으로 구분된다. 실시간 데이터 전송에 적합하다. 소켓 통신의 장점 실시간 양방향 통신이 가능하다. 서버와 클라이언트 간 지속적인 연결을 유지할 수 있다. 소켓 통신의 단점 HTTP 통신에 비해 구현이 복잡할 수 있다. 지속적인 연결 유지로 인한 리소스 소비가 있을 수 있다. 소켓의 종류 소켓은 크게 두 가지 유형으로 나눌 수 있다: ...

October 2, 2024 · 3 min · Me

Message Queue

메시지 큐(Message Queue) 프로세스 간 통신(IPC)의 메시지 큐(Message Queue)는 프로세스 간에 데이터를 교환하는 메커니즘이다. 메시지 큐는 커널 내에 저장된 메시지의 연결 리스트로, 고유한 식별자로 구분된다. 이는 프로세스들이 비동기적으로 통신할 수 있게 해주는 IPC 메커니즘이다. 메시지 크기 제한과 시스템 리소스 사용 등의 단점도 고려해야 한다. 적절한 사용 시나리오를 파악하고 효과적으로 활용하는 것이 중요하다. Source: https://www.javatpoint.com/ipc-using-message-queues 메시지 큐의 특징 커널 관리: 메시지 큐는 커널에 의해 관리되어 안정성이 높고 동기화가 용이하다. FIFO 순서: 메시지는 일반적으로 선입선출(FIFO) 순서로 처리된다. 비동기 통신: 송신 프로세스와 수신 프로세스가 동시에 활성화될 필요가 없다. 메시지 구조: 각 메시지는 타입 필드, 길이, 실제 데이터로 구성된다. 프로세스 분리: 메시지 큐를 사용하면 프로세스들이 서로 직접 연결되지 않아도 된다. 메시지 큐의 주요 시스템 호출 ftok(): 고유한 키를 생성한다. msgget(): 메시지 큐를 생성하거나 기존 큐의 식별자를 반환한다. msgsnd(): 메시지를 큐에 추가한다. msgrcv(): 큐에서 메시지를 검색한다. msgctl(): 큐에 대한 다양한 작업을 수행한다. 메시지 큐 사용 방법 메시지 큐 생성: ...

October 2, 2024 · 2 min · Me

Shared Memory

공유 메모리(Shared Memory) 공유 메모리(Shared Memory)는 운영체제의 프로세스 간 통신(IPC) 기법 중 하나로, 여러 프로세스가 동시에 접근할 수 있는 메모리 영역이며, 커널에 의해 생성되고 관리되는 공통 메모리 공간이다. 이는 여러 프로세스가 동일한 물리적 메모리 영역에 접근할 수 있게 해주며, IPC 메커니즘 중에서 가장 빠른 통신 방법을 제공한다. Source: https://www.geeksforgeeks.org/ipc-shared-memory/ 작동 원리 프로세스가 커널에 공유 메모리 할당을 요청 커널이 해당 프로세스에 메모리 공간을 할당 이후 다른 프로세스들도 해당 메모리 영역에 접근 가능 공유 메모리의 생성과 관리 공유 메모리를 사용하는 일반적인 단계는 다음과 같다: ...

October 2, 2024 · 2 min · Me

Pipe

파이프(Pipe) 파이프(Pipe)는 프로세스 간 통신(IPC)의 한 방법으로, 단방향 데이터 흐름을 제공하는 가장 오래된 IPC(프로세스 간 통신) 메커니즘 중 하나이다. 파이프는 한쪽 끝에서 데이터를 쓰고 다른 쪽 끝에서 데이터를 읽을 수 있게 해준다. 종류 익명 파이프 (Anonymous Pipe): 부모-자식 프로세스 간 통신에 사용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import os def create_anonymous_pipe(): """익명 파이프 생성 예제""" read_fd, write_fd = os.pipe() pid = os.fork() # 프로세스 생성 if pid > 0: # 부모 프로세스 os.close(read_fd) # 읽기 끝 닫기 os.write(write_fd, "Hello from parent".encode()) os.close(write_fd) else: # 자식 프로세스 os.close(write_fd) # 쓰기 끝 닫기 message = os.read(read_fd, 1024).decode() print(f"Child received: {message}") os.close(read_fd) 이름 있는 파이프 (Named Pipe 또는 FIFO): 관련 없는 프로세스 간 통신에 사용 ...

October 2, 2024 · 2 min · Me

프로세스 간 통신 (Inter-Process Communication, IPC)

프로세스 간 통신 (Inter-Process Communication, IPC) 프로세스 간 통신은 서로 다른 프로세스들이 데이터를 주고받거나 서로의 동작을 조율하기 위해 사용하는 메커니즘. 한 프로세스의 출력이 다른 프로세스의 입력으로 사용될 수 있다. 이를 통해 프로세스들은 데이터를 교환하고, 작업을 동기화하며, 리소스를 효율적으로 활용할 수 있다. 프로세스 간 통신(IPC)에 대해 체계적으로 설명해드리겠습니다. 이 개념을 더 쉽게 이해하기 위해, 실제 생활의 예시와 함께 설명을 시작하겠습니다. Source: https://www.geeksforgeeks.org/inter-process-communication-ipc/ 장점 프로세스 간 데이터 공유 및 협력 가능 모듈화 및 유연한 시스템 설계 가능 단점 구현 복잡성 증가 동기화 및 데드락 문제 발생 가능성 IPC의 주요 방식 파이프(Pipe) 파이프는 가장 오래되고 간단한 IPC 방식으로, 한 프로세스의 출력이 다른 프로세스의 입력으로 직접 전달된다. ...

October 2, 2024 · 3 min · Me