0Pricing
Java Academy · 강의

요청 본문과 헤더

POST 데이터를 전송하고 헤더를 설정합니다

요청 본문과 헤더은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

요청 본문과 헤더

GET 요청에는 본문이 거의 필요하지 않지만 POST, PUT, PATCH에는 본문이 필요합니다. JDK HTTP 클라이언트는 요청 본문을 제공하는 BodyPublisher 객체와 헤더를 설정하는 빌더 메서드를 사용합니다.

이 레슨에서는 데이터를 전송하고 Content-Type과 같은 헤더를 제어하는 방법을 다룹니다.

BodyPublishers.ofString

가장 간단한 게시자는 문자열 본문을 전송합니다. 요청 빌더의 POST(...) 메서드에 전달합니다.

본문이 없는 요청에는 BodyPublishers.noBody()를 사용할 수 있습니다.

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"Ada\"}";
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com/users"))
            .POST(BodyPublishers.ofString(json))
            .build();
        System.out.println("Method: " + request.method());
    }
}

단일 헤더 설정하기

헤더 하나를 추가하려면 header(name, value)를 사용합니다. JSON을 전송할 때는 거의 항상 Content-Type을 설정합니다.

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;

public class Main {
    public static void main(String[] args) {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com/users"))
            .header("Content-Type", "application/json")
            .POST(BodyPublishers.ofString("{}"))
            .build();
        System.out.println("Has Content-Type: " +
            request.headers().firstValue("Content-Type").isPresent());
    }
}

여러 헤더 한 번에 설정하기

headers(name1, value1, name2, value2, ...)는 한 번의 호출로 여러 헤더를 설정합니다. 인수 개수는 짝수여야 하며, 그렇지 않으면 IllegalArgumentException이 발생합니다.

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

public class Main {
    public static void main(String[] args) {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com"))
            .headers(
                "Accept", "application/json",
                "Accept-Language", "en-US")
            .GET()
            .build();
        System.out.println(request.headers().map().keySet());
    }
}

인증 헤더

베어러 토큰은 Authorization 헤더를 통해 전송합니다. 값을 문자열로 만들되 원시 토큰을 절대 로그에 기록하지 마십시오.

public class Main {
    public static void main(String[] args) {
        String token = "abc123";
        String headerValue = "Bearer " + token;
        System.out.println("Authorization: Bearer ***");
        System.out.println("Length: " + headerValue.length());
    }
}

PUT과 DELETE

빌더에는 전용 메서드인 PUT(publisher), DELETE()와, PATCH와 같은 그 밖의 메서드에 사용할 수 있는 일반적인 method(name, publisher)가 있습니다.

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;

public class Main {
    public static void main(String[] args) {
        HttpRequest patch = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com/users/1"))
            .method("PATCH", BodyPublishers.ofString("{\"active\":true}"))
            .build();
        System.out.println("Method: " + patch.method());
    }
}

폼 인코딩 본문

application/x-www-form-urlencoded 데이터를 사용하려면 본문 문자열을 직접 만들고 각 값을 URL 인코딩한 다음 문자열로 전송합니다.

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class Main {
    public static void main(String[] args) {
        String body = "name=" + URLEncoder.encode("Ada Lovelace", StandardCharsets.UTF_8)
            + "&role=" + URLEncoder.encode("engineer", StandardCharsets.UTF_8);
        System.out.println(body);
    }
}

파일 본문 전송하기

BodyPublishers.ofFile(path)은 파일 전체를 메모리에 로드하지 않고 파일을 요청 본문으로 스트리밍하므로 업로드에 적합합니다.

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com/upload"))
            .header("Content-Type", "application/octet-stream")
            .POST(BodyPublishers.ofFile(Path.of("data.bin")))
            .build();
        System.out.println("Upload request built");
    }
}

바이트 배열 본문

메모리에 이미 바이트가 있다면 BodyPublishers.ofByteArray(byte[])로 바이트를 직접 전송합니다. 실행 중 생성된 이진 데이터를 전송할 때 유용합니다.

import java.nio.charset.StandardCharsets;

public class Main {
    public static void main(String[] args) {
        byte[] payload = "raw-bytes".getBytes(StandardCharsets.UTF_8);
        // BodyPublishers.ofByteArray(payload) would wrap these bytes
        System.out.println("Payload size: " + payload.length + " bytes");
    }
}

제한된 헤더

보안을 위해 클라이언트는 Host, Content-Length, Connection, Upgrade와 같은 특정 헤더를 설정하지 못하게 합니다. 이러한 헤더를 설정하려고 하면 IllegalArgumentException이 발생하며, 클라이언트가 직접 관리합니다.

함께 사용하기

일반적인 JSON POST는 본문 게시자와 콘텐츠 유형 헤더를 함께 사용합니다.

  • .POST(BodyPublishers.ofString(json))
  • .header("Content-Type", "application/json")
  • 필요하면 add .header("Authorization", "Bearer ...")

빠른 확인

요청 본문과 헤더에 대한 이해도를 확인해 보십시오.

복습

데이터를 전송하고 헤더를 제어하는 방법을 배웠습니다.

  • BodyPublishers.ofString / ofByteArray / ofFile은 요청 본문을 제공합니다.
  • POST / PUT / DELETE / method(...)는 HTTP 메서드를 선택합니다.
  • header(...)와 headers(...)는 요청 헤더를 설정합니다.
  • JSON과 폼 데이터에는 Content-Type을 설정하고, 토큰에는 Authorization을 사용합니다.
  • 일부 헤더(Host, Content-Length)는 제한되어 있으며 클라이언트가 관리합니다.

자주 묻는 질문

“요청 본문과 헤더” 강의는 무료인가요?

네 — “요청 본문과 헤더” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“요청 본문과 헤더”에서 뭘 배우나요?

POST 데이터를 전송하고 헤더를 설정합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“요청 본문과 헤더” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. java.net.http.HttpClient
  2. 비동기 요청
  3. 요청 본문과 헤더
  4. 응답 처리
← Java Academy(으)로 돌아가기