inblog logo
|
DailyCoding
    Network & Socket

    2. 소켓(Socket)

    박은서's avatar
    박은서
    Feb 09, 2026
    2. 소켓(Socket)
    Contents
    1. 소켓(Socket)1️⃣ 소켓이란?2️⃣ 비유3️⃣ 소켓이 하는 일4️⃣ 소켓의 구성 요소5️⃣ TCP 소켓 vs UDP 소켓6️⃣ 예시7️⃣ 실습2. 서버 소켓(ServerSocket)1️⃣ 서버 소켓이란?2️⃣ ServerSocket이 필요한 이유3️⃣ 소켓과의 관계4️⃣ 동작 흐름5️⃣ 예시6️⃣ 필기7️⃣ 특징 정리3. 세션(Session)1️⃣ 세션이란?2️⃣ 비유3️⃣ 소켓 vs 세션 차이4️⃣ 세션이 필요한 이유5️⃣ 세션의 구성 요소4. 필기 정리

    1. 소켓(Socket)

    1️⃣ 소켓이란?

    네트워크에서 두 프로그램이 데이터를 주고받기 위한 통신 창구(출입구)

    2️⃣ 비유

    📞 소켓 = 전화기
    • IP 주소 → 전화번호
    • 포트 번호 → 내선 번호
    • 소켓 → 실제로 통화하는 전화기
    [프로그램] ── 소켓 ── 네트워크 ── 소켓 ──[프로그램]

    3️⃣ 소켓이 하는 일

    • 연결 생성
    • 데이터 송수신
    • 연결 종료

    4️⃣ 소켓의 구성 요소

    • IP 주소
    • 포트 번호
    • 프로토콜 (TCP / UDP)
    • 상태 정보

    5️⃣ TCP 소켓 vs UDP 소켓

    1) TCP 소켓 (신뢰성 ⭕)

    • 연결 지향 (3-way handshake)
    • 데이터 순서 보장
    • 손실 시 재전송
    • 예: HTTP, HTTPS, FTP

    2) UDP 소켓 (속도 ⭕)

    • 비연결
    • 손실 가능
    • 빠름
    • 예: 게임, 스트리밍, DNS

    6️⃣ 예시

    1) 서버 측

    ServerSocketserver=newServerSocket(8080); Socketsocket= server.accept();

    2) 클라이언트 측

    Socketsocket=newSocket("localhost",8080);

    7️⃣ 실습

    1) Server

    package com.mtcoding.ex03; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws IOException { // 1. 리스너 ServerSocket ss = new ServerSocket(20000); // 2. 소켓 System.out.println("[server] waiting"); Socket socket = ss.accept(); System.out.println("[server] connected"); // 3. 버퍼 InputStream in = socket.getInputStream(); InputStreamReader ir = new InputStreamReader(in); BufferedReader br = new BufferedReader(ir); String msg = br.readLine(); System.out.println("클라이언트로부터 받은 메시지 : " + msg); } }

    2) Client

    package com.mtcoding.ex03; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; public class MyClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost", 20000); OutputStream out = socket.getOutputStream(); OutputStreamWriter ow = new OutputStreamWriter(out); BufferedWriter bw = new BufferedWriter(ow); bw.write("hello world"); bw.write("\n"); bw.flush(); } }

    3) 결과

    notion image

    2. 서버 소켓(ServerSocket)

    1️⃣ 서버 소켓이란?

    • 서버 프로그램이 클라이언트의 접속을 기다리기 위해 사용하는 소켓
    • 접속을 받아들이는 전용 역할
    • ServerSocket은 특정 포트를 열고 클라이언트의 연결 요청을 대기·수락하는 객체(리스너)

    2️⃣ ServerSocket이 필요한 이유

    • 서버는 항상 켜져 있어야 함
    • 누가 언제 접속할지 모름
    • 그래서 연결 요청을 계속 기다리는 전용 객체가 필요
    ➡️ 그 역할이 ServerSocket

    3️⃣ 소켓과의 관계

    ServerSocket → 연결 수락 전용 Socket → 실제 데이터 통신
    ✔ ServerSocket은 통신 안 함
    ✔ accept() 후 생긴 Socket이 통신 담당

    4️⃣ 동작 흐름

    [클라이언트] ↓ 접속 요청 [ServerSocket] --accept() -->[Socket] ↓ 데이터 송수신

    5️⃣ 예시

    1) 서버

    ServerSocketserverSocket=newServerSocket(8080); System.out.println("서버 대기 중..."); Socketsocket= serverSocket.accept();// 여기서 대기 System.out.println("클라이언트 연결됨");

    2) 클라이언트

    Socketsocket=newSocket("localhost",8080);

    6️⃣ 필기

    notion image

    7️⃣ 특징 정리

    항목
    ServerSocket
    역할
    클라이언트 접속 대기
    포트
    하나의 포트에 바인딩
    통신
    ❌ 안 함
    반환값
    accept() → Socket
    멀티 접속
    가능 (반복 + 스레드)

    3. 세션(Session)

    1️⃣ 세션이란?

    클라이언트와 서버 사이에서 일정 기간 유지되는 연결 상태 및 그에 관련된 정보
    누가 접속했고, 지금 어떤 상태인지 서버가 기억하는 단위

    2️⃣ 비유

    ☕ 카페 비유
    • 손님 입장 → 연결
    • 주문 정보 기억 → 세션
    • 나가기 → 세션 종료
    손님 = 클라이언트 카운터 = 서버 주문서 = 세션 정보

    3️⃣ 소켓 vs 세션 차이

    구분
    소켓(Socket)
    세션(Session)
    개념
    통신 통로
    상태 정보
    성격
    물리적/기술적
    논리적
    목적
    데이터 송수신
    상태 유지
    종료
    연결 끊기
    타임아웃/로그아웃
    ➡️ 소켓 위에서 세션이 관리됨

    4️⃣ 세션이 필요한 이유

    네트워크 통신(특히 HTTP)은 기본적으로 무상태(stateless)
    ❌ 요청 1번 → 응답 → 끝
    ❌ 누가 요청했는지 기억 못 함
    그래서 필요:
    • 로그인 유지
    • 장바구니
    • 사용자 권한
    • 게임 상태
    ➡️ 이걸 묶어주는 게 세션

    5️⃣ 세션의 구성 요소

    • 세션 ID
    • 사용자 ID
    • 로그인 여부
    • 마지막 접근 시간
    • 기타 상태 데이터
     

    4. 필기 정리

    notion image
    notion image
    notion image
    notion image
    notion image
    notion image
    notion image
    notion image
    notion image
     
    Share article
    Contents
    1. 소켓(Socket)1️⃣ 소켓이란?2️⃣ 비유3️⃣ 소켓이 하는 일4️⃣ 소켓의 구성 요소5️⃣ TCP 소켓 vs UDP 소켓6️⃣ 예시7️⃣ 실습2. 서버 소켓(ServerSocket)1️⃣ 서버 소켓이란?2️⃣ ServerSocket이 필요한 이유3️⃣ 소켓과의 관계4️⃣ 동작 흐름5️⃣ 예시6️⃣ 필기7️⃣ 특징 정리3. 세션(Session)1️⃣ 세션이란?2️⃣ 비유3️⃣ 소켓 vs 세션 차이4️⃣ 세션이 필요한 이유5️⃣ 세션의 구성 요소4. 필기 정리

    DailyCoding

    RSS·Powered by Inblog