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 통신의 기본 구조
- 클라이언트와 서버 간 연결
- 클라이언트는 서버의 IP 주소와 포트 번호를 통해 연결을 요청한다.
- 서버는 특정 포트에서 클라이언트의 요청을 대기한다.
- 데이터 송수신
- 클라이언트와 서버 간 연결이 수립되면 양방향 통신이 가능하다.
- 데이터를 송신할 때는 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 계층을 이해하면 네트워크 통신 과정에서 발생하는 문제를 빠르게 해결할 수 있다.
- 이를 바탕으로 안정적이고 효율적인 애플리케이션을 설계할 수 있을 것이다.