아래의 내용은 java_grammer 레파지토리 C09NetWorking 디렉터리에 저장되어있는 내용을 정리함
기본 HTTP GET 웹서버 구현부터 쿼리 파라미터 처리까지 순차적으로 학습하는 내용임. ServerSocket과 Socket을 활용한 네트워크 통신 원리 이해가 핵심이다.
HTTP 통신은 Request-Response 구조로 이루어져 있고 각 문서는 Start Line + Header + Empty Line + Body로 구성된다.

1. Start Line (필수): HTTP/1.1 200 OK
- HTTP/1.1: 프로토콜 버전
- 200: 성공 상태코드
- OK: 상태 설명
2. Header (선택): Content-Type, Content-Length 등
- Content-Type: text/html; charset=UTF-8
- Content-Length: 17 (Body 바이트 길이)
3. Empty Line: \r\n (Header와 Body 구분)
4. Body: "hello world java"
ServerSocket serverSocket = new ServerSocket(8080); // 서버 소켓 생성
Socket socket = serverSocket.accept(); // 클라이언트 연결 대기
socket.getOutputStream().write(response.getBytes()); // 응답 전송
socket.close(); // 연결 종료
포트와 소켓 개념
테스트: http://localhost:8080 접속 → "hello world java" 응답
사용자가 http://localhost:8080?id=1로 접속하면 id 값 추출해서 동적 응답 생성한다.
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while (line != null && !line.isEmpty()) {
sb.append(line).append("\n");
line = br.readLine();
}
// "GET /?id=1 HTTP/1.1" → 첫 번째 줄 추출 → "/?id=1" → "1" 파싱
String firstLine = sb.toString().split("\n")[0];
String infos = firstLine.split(" ")[1];
String id = infos.contains("?") ? infos.split("=")[1] : "";
응답: "HTTP/1.1 200 OK\r\n\r\nhello world java 1"
- 사용자 요청에 따른 동적 화면 확인
| 구분 | C01WebServerGet | C02WebServerGet |
|---|---|---|
| 기능 | 고정 응답 | 쿼리 파라미터 처리 |
| InputStream | 사용 안함 | BufferedReader로 요청 읽기 |
| 응답 | "hello world java" | "hello world java " + id |
| 파싱 | 없음 | GET 라인 분석 |
문제점: 현재 코드는 단일 클라이언트만 처리 (연결 대기 상태)
해결책: 각 클라이언트별 별도 스레드 생성
// 개선 예시
new Thread(() -> {
// 클라이언트 처리 로직
}).start();
다음 단계: POST 요청 처리 (Body 데이터 읽기), 멀티스레딩 적용, 실제 HTML 응답
POST와 차이점: POST는 Request Body에 데이터 포함 → socket.getInputStream()으로 이름/이메일 등 읽어야 한다. Postman 툴로 테스트 가능함.
- Postman 툴로 확인한 모습 예시(GET요청)