네트워크

[네트워크] 프로세스 간 통신(IPC): 소켓(Socket) 개념과 Java·Python 예제 코드

CodeCaine Explorer 2024. 12. 18. 09:42
728x90
반응형
SMALL

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

컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주고받거나 협력해야 할 때가 있습니다. 이를 프로세스 간 통신(IPC)이라고 해요. 😊

IPC는 운영체제가 프로세스들끼리 정보를 공유할 수 있게 하는 방법이에요.
간단히 말해서, 프로세스들이 서로 대화하거나 파일을 주고받는 방법이에요. 😊


📂 IPC에서 자주 사용되는 개념

  • 파이프 (Pipe): 데이터를 한쪽에서 보내면 다른 쪽에서 받을 수 있는 터널 같은 것!
  • 소켓 (Socket): 네트워크로 연결된 두 프로세스가 통신하는 방식.
  • 공유 메모리: 프로세스들이 같은 메모리 공간을 함께 사용하는 방법.
  • 메시지 큐: 데이터를 보내고 받고 할 수 있는 편지함 같은 구조.

🌐 소켓 (Socket)

  • 소켓은 두 프로세스가 네트워크를 통해 통신할 수 있는 연결 통로를 만드는 도구예요.
  • 쉽게 말해, 한 컴퓨터에서 또는 인터넷을 통해 데이터를 주고받는 전용 전화선 같은 거예요.
  • 소켓은 클라이언트(데이터를 보내거나 요청하는 쪽)와 서버(데이터를 받거나 제공하는 쪽)로 구성됩니다.

🐍 파이썬으로 소켓 통신 예제

# 서버 코드 (데이터를 기다림)
import socket

def start_server():
    # 서버 소켓 생성
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('localhost', 12345))  # 서버 주소와 포트 설정
    server_socket.listen(1)  # 클라이언트의 연결을 기다림
    print("서버가 준비되었습니다. 클라이언트를 기다립니다 😊")

    conn, addr = server_socket.accept()  # 클라이언트와 연결 수락
    print(f"클라이언트와 연결되었습니다: {addr}")

    data = conn.recv(1024).decode()  # 클라이언트로부터 데이터 수신
    print(f"받은 메시지: {data}")

    conn.send("안녕하세요! 😊".encode())  # 클라이언트에게 메시지 전송
    conn.close()  # 연결 종료

if __name__ == "__main__":
    start_server()
# 클라이언트 코드 (데이터를 보냄)
import socket

def start_client():
    # 클라이언트 소켓 생성
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 12345))  # 서버에 연결
    print("서버에 연결되었습니다 😊")

    client_socket.send("안녕하세요! 😊".encode())  # 메시지 전송
    data = client_socket.recv(1024).decode()  # 서버로부터 응답 수신
    print(f"서버의 응답: {data}")

    client_socket.close()  # 연결 종료

if __name__ == "__main__":
    start_client()

☕ 자바로 소켓 통신 예제

// 서버 코드
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(12345); // 서버 소켓 생성
        System.out.println("서버가 준비되었습니다. 클라이언트를 기다립니다 😊");

        Socket clientSocket = serverSocket.accept(); // 클라이언트 연결 수락
        System.out.println("클라이언트와 연결되었습니다");

        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

        String message = in.readLine(); // 클라이언트로부터 데이터 수신
        System.out.println("받은 메시지: " + message);

        out.println("안녕하세요! 😊"); // 클라이언트에게 응답 전송

        clientSocket.close();
        serverSocket.close();
    }
}
// 클라이언트 코드
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 12345); // 서버에 연결
        System.out.println("서버에 연결되었습니다 😊");

        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        out.println("안녕하세요! 😊"); // 서버에 메시지 전송
        String response = in.readLine(); // 서버로부터 응답 받기
        System.out.println("서버의 응답: " + response);

        socket.close();
    }
}

🧠 동작 설명 😊

  1. 서버는 특정 포트(전화번호 같은 거!)에서 클라이언트의 연결 요청을 기다려요.
  2. 클라이언트는 서버에 연결 요청을 보내고 데이터를 전송해요.
  3. 서버는 클라이언트의 데이터를 받고 응답 메시지를 다시 보내요.

2024.12.16 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 파이프

 

[쉬운설명]프로세스 간 통신(IPC)이란? : 파이프

프로세스 간 통신(IPC, Inter-Process Communication)이란?컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주

alswnsghd1234.tistory.com

2024.12.17 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 메시지 큐

 

[쉬운설명]프로세스 간 통신(IPC)이란? : 메시지 큐

프로세스 간 통신(IPC, Inter-Process Communication)이란?컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주

alswnsghd1234.tistory.com

2024.12.17 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 공유 메모리

 

[쉬운설명]프로세스 간 통신(IPC)이란? : 공유 메모리

프로세스 간 통신(IPC, Inter-Process Communication)이란?컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주

alswnsghd1234.tistory.com

 

😊 마무리

  • 소켓: 네트워크 통신.
  • 공유 메모리: 프로세스 간 공용 메모리 공간.
  • 메시지 큐: 메시지를 저장하고 교환하는 우체통.
반응형
SMALL