HTTP(HyperText Transfer Protocol)

mskimdev·2026년 4월 22일

Java Network

목록 보기
2/2
post-thumbnail

HTTP란?

웹 브라우저에서 주소를 입력하면 페이지가 뜬다. 이 과정에서 브라우저와 서버가 주고받는 약속이 있다. 그게 바로 HTTP다.


HTTP란

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버가 데이터를 주고받기 위한 통신 규약(Protocol) 이다. 웹에서 HTML, 이미지, JSON 등 거의 모든 데이터가 HTTP를 통해 전달된다.

핵심은 요청(Request)과 응답(Response) 구조다. 클라이언트가 먼저 요청을 보내고, 서버가 그에 맞는 응답을 돌려준다. 서버가 먼저 데이터를 보내는 일은 없다.


HTTP와 소켓의 차이

소켓은 연결을 유지하면서 자유롭게 데이터를 주고받는다. 반면 HTTP는 기본적으로 요청 하나에 응답 하나로 끝나는 단순한 구조다.

구분SocketHTTP
연결 방식지속 연결요청-응답 후 종료
형식자유 형식정해진 헤더/바디 구조
용도채팅, 게임 등 실시간웹 요청, API 호출

소켓이 전화 통화라면, HTTP는 편지다. 편지를 보내면 답장이 오고 끝난다.


HTTP 요청 구조

HTTP 요청은 세 부분으로 이루어진다.

GET /search?q=java HTTP/1.1
Host: www.example.com
Accept: text/html

(본문 없음 - GET은 보통 본문이 없다)

메서드(Method): 무엇을 할지 지정한다.
URL: 어디에 요청할지 지정한다.
헤더(Header): 부가 정보(인증, 콘텐츠 타입 등).
바디(Body): 전송할 데이터 (POST, PUT 등에서 사용).


HTTP 메서드

메서드의미주요 용도
GET조회데이터 읽기
POST생성데이터 등록
PUT수정데이터 전체 교체
PATCH수정데이터 일부 수정
DELETE삭제데이터 삭제

GET은 URL에 데이터를 담아 보내고, POST는 바디에 담아 보낸다. 그래서 GET은 주소창에서 내용이 보이고, POST는 보이지 않는다.


HTTP 응답 구조

HTTP/1.1 200 OK
Content-Type: application/json

{"name": "김민수", "age": 25}

응답도 세 부분이다. 상태 라인, 헤더, 바디.


HTTP 상태 코드

서버는 요청 결과를 숫자로 알려준다.

범위의미예시
2xx성공200 OK, 201 Created
3xx리다이렉트301 Moved Permanently
4xx클라이언트 오류400 Bad Request, 404 Not Found
5xx서버 오류500 Internal Server Error

404는 요청한 페이지가 없다는 뜻이고, 500은 서버 쪽에서 문제가 생겼다는 뜻이다. 2xx가 나오면 정상적으로 처리됐다고 보면 된다.


Java에서 HTTP 요청 보내기

Java 11부터는 HttpClient가 표준으로 포함됐다. 별도 라이브러리 없이 HTTP 요청을 보낼 수 있다.

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

// GET 요청
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
        .GET()
        .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode()); // 200
System.out.println(response.body());       // JSON 응답 본문

POST 요청도 비슷하다. 바디에 데이터를 담아 보낸다.

String json = "{\"title\": \"테스트\", \"body\": \"내용\", \"userId\": 1}";

HttpRequest postRequest = HttpRequest.newBuilder()
        .uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(json))
        .build();

HttpResponse<String> postResponse = client.send(postRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(postResponse.statusCode()); // 201

HTTPS란

HTTP 앞에 S가 붙은 HTTPS(HTTP Secure)는 데이터를 암호화해서 주고받는다. 주소창에 자물쇠 아이콘이 붙어 있으면 HTTPS다. 요즘 웹사이트는 대부분 HTTPS를 쓴다. Java의 HttpClient는 HTTPS도 별도 설정 없이 그대로 지원한다.


마무리

HTTP는 웹의 기본 언어다. 요청과 응답, 메서드, 상태 코드 이 세 가지만 이해해도 웹이 돌아가는 방식을 읽을 수 있다. 나중에 REST API나 Spring을 다루게 되면 여기서 배운 개념이 계속 등장한다.

profile
<- 개발 공부하는 나

0개의 댓글