CS(Computer Science)

네트워크 기본 개념 Socket 통신: OSI 7 계층

min민 2025. 1. 1. 21:25

네트워크 기본 개념 Socket 통신: OSI 7 계층

 

 

안녕하세요, Java 개발자 min입니다.

 

이번 포스팅에서는 네트워크의 기본 개념과 Socket 통신을 중심으로 OSI 7 계층에 대해 정리해보겠습니다.

 

네트워크는 개발자가 반드시 알아야 할 핵심 분야로, 효율적인 시스템 설계와 안정적인 통신 구현에 필수적인데요, 특히 Socket 통신은 클라이언트-서버 간 데이터 교환의 기본 구조를 이해하는 데 중요한 역할을 합니다.

 

 

 

1. 네트워크란?

  • 네트워크(Network)는 두 개 이상의 장치(Device)가 데이터를 주고받기 위해 연결된 상태를 의미한다.
    • 인터넷, 로컬 네트워크, 블루투스 등 다양한 형태가 존재하며, 네트워크는 물리적 연결뿐만 아니라 논리적 연결을 포함한다.

 

 

 

2. OSI 7 계층: 네트워크 통신의 기반

OSI (Open Systems Interconnection) 7 계층은 네트워크 통신을 7단계로 나눈 모델이다.

이 모델은 통신 시스템 간 상호 운용성을 보장하기 위해 고안되었다.

 

각 계층은 특정 역할을 맡고 있으며, 데이터를 송수신하는 과정을 단계적으로 처리한다.

 

 

1계층: 물리 계층 (Physical Layer)

  • 역할: 데이터를 전기적 신호, 광 신호 등 물리적 형태로 변환하여 전달한다.
  • 예시: Ethernet, USB

2계층: 데이터 링크 계층 (Data Link Layer)

  • 역할: 물리 계층에서 발생할 수 있는 오류를 처리하고, 프레임(Frame) 단위로 데이터를 전달한다.
  • 예시: MAC 주소, 스위치

3계층: 네트워크 계층 (Network Layer)

  • 역할: 데이터를 목적지까지 가장 효율적인 경로로 전달한다.
  • 예시: IP 주소, 라우터

4계층: 전송 계층 (Transport Layer)

  • 역할: 데이터 전송의 신뢰성과 흐름 제어를 담당한다.
  • 예시: TCP, UDP

5계층: 세션 계층 (Session Layer)

  • 역할: 통신 세션을 관리하고, 데이터 교환이 끊김 없이 유지되도록 한다.
  • 예시: SSL/TLS

6계층: 표현 계층 (Presentation Layer)

  • 역할: 데이터를 애플리케이션이 이해할 수 있는 형태로 변환한다.
  • 예시: 암호화, 데이터 압축

7계층: 응용 계층 (Application Layer)

  • 역할: 사용자와 직접적으로 상호작용하며, 네트워크 서비스에 접근할 수 있도록 한다.
  • 예시: HTTP, FTP

 

 

 

3. Socket 통신: 네트워크 프로그래밍의 핵심

Socket은 네트워크 상에서 데이터를 송수신하기 위한 양쪽 끝단의 연결점이다.

 

주로 TCP와 UDP 프로토콜을 사용하며, Java에서는 java.net 패키지를 통해 구현할 수 있다.

 

 

Socket 통신의 기본 구조

  1. 클라이언트와 서버 간 연결
    • 클라이언트는 서버의 IP 주소와 포트 번호를 통해 연결을 요청한다.
    • 서버는 특정 포트에서 클라이언트의 요청을 대기한다.
  2. 데이터 송수신
    • 클라이언트와 서버 간 연결이 수립되면 양방향 통신이 가능하다.
    • 데이터를 송신할 때는 OutputStream, 수신할 때는 InputStream을 사용한다.

 

 

 

Socket 통신의 주요 코드

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8080)) {
            System.out.println("서버가 시작되었습니다.");
            Socket socket = serverSocket.accept();
            System.out.println("클라이언트 연결됨: " + socket.getInetAddress());

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

            String message = in.readLine();
            System.out.println("클라이언트 메시지: " + message);

            out.println("서버 응답: " + message.toUpperCase());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

클라이언트 코드:

import java.io.*;
import java.net.Socket;

public class SocketClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8080)) {
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            out.println("안녕하세요, 서버님!");
            System.out.println("서버 응답: " + in.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

 

 

 

 

4. 면접 예상 질문 및 답변

Q1. OSI 7 계층에서 TCP는 어느 계층에 속하나요?

  • 답변: TCP는 OSI 4계층인 전송 계층에 속한다. TCP는 데이터의 신뢰성을 보장하며, 흐름 제어 및 오류 복구를 제공한다.

 

 

Q2. TCP와 UDP의 차이점은 무엇인가요?

  • 답변:
    • TCP는 신뢰성을 보장하지만 속도가 느리다. (예: HTTP, FTP)
    • UDP는 신뢰성을 보장하지 않지만 속도가 빠르다. (예: 동영상 스트리밍, DNS)

 

Q3. 클라이언트와 서버의 통신에서 Deadlock(교착 상태)이 발생할 수 있는 이유는?

  • 답변: 클라이언트와 서버가 서로 데이터를 기다리면서 무한 대기 상태에 빠질 경우 발생한다. 이를 방지하려면 타임아웃 설정 또는 비동기 처리 방식이 필요하다.

 

 

Q4. Java에서 Socket 연결 시 발생할 수 있는 주요 예외는?

  • 답변:
    • UnknownHostException: 잘못된 호스트 주소로 접근 시 발생한다.
    • IOException: 소켓 연결 중 입출력 오류가 발생할 때 발생한다.

 

 

 

총 정리

  • OSI 7 계층을 이해하면 네트워크 통신 과정에서 발생하는 문제를 빠르게 해결할 수 있다.
    • 이를 바탕으로 안정적이고 효율적인 애플리케이션을 설계할 수 있을 것이다.