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) 결과

2. 서버 소켓(ServerSocket)
1️⃣ 서버 소켓이란?
- 서버 프로그램이 클라이언트의 접속을 기다리기 위해 사용하는 소켓
- 접속을 받아들이는 전용 역할
- ServerSocket은 특정 포트를 열고 클라이언트의 연결 요청을 대기·수락하는 객체(리스너)
2️⃣ ServerSocket이 필요한 이유
- 서버는 항상 켜져 있어야 함
- 누가 언제 접속할지 모름
- 그래서 연결 요청을 계속 기다리는 전용 객체가 필요
➡️ 그 역할이
ServerSocket3️⃣ 소켓과의 관계
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️⃣ 필기

7️⃣ 특징 정리
항목 | ServerSocket |
역할 | 클라이언트 접속 대기 |
포트 | 하나의 포트에 바인딩 |
통신 | ❌ 안 함 |
반환값 | accept() → Socket |
멀티 접속 | 가능 (반복 + 스레드) |
3. 세션(Session)
1️⃣ 세션이란?
클라이언트와 서버 사이에서 일정 기간 유지되는 연결 상태 및 그에 관련된 정보
누가 접속했고, 지금 어떤 상태인지 서버가 기억하는 단위
2️⃣ 비유
☕ 카페 비유
- 손님 입장 → 연결
- 주문 정보 기억 → 세션
- 나가기 → 세션 종료
손님 = 클라이언트
카운터 = 서버
주문서 = 세션 정보3️⃣ 소켓 vs 세션 차이
구분 | 소켓(Socket) | 세션(Session) |
개념 | 통신 통로 | 상태 정보 |
성격 | 물리적/기술적 | 논리적 |
목적 | 데이터 송수신 | 상태 유지 |
종료 | 연결 끊기 | 타임아웃/로그아웃 |
➡️ 소켓 위에서 세션이 관리됨
4️⃣ 세션이 필요한 이유
네트워크 통신(특히 HTTP)은 기본적으로 무상태(stateless)
❌ 요청 1번 → 응답 → 끝
❌ 누가 요청했는지 기억 못 함
그래서 필요:
- 로그인 유지
- 장바구니
- 사용자 권한
- 게임 상태
➡️ 이걸 묶어주는 게 세션
5️⃣ 세션의 구성 요소
- 세션 ID
- 사용자 ID
- 로그인 여부
- 마지막 접근 시간
- 기타 상태 데이터
4. 필기 정리









Share article