홈 › 중급 › 09 / 9

HTTP 와 JSON 기초

요청·응답 구조, 메서드, 상태 코드, HttpClient, JSON 직렬화
섹션 7진행 0 / 9

6. 연습 문제

문제 1. 상태 코드 분류

204, 301, 409, 429, 503 을 1xx~5xx 계열로 분류하고 각각 한 줄로 뜻을 쓰세요.

text
204 → 2xx, 삭제 성공(본문 없음)
301 → 3xx, 영구 이동
409 → 4xx, 자원 충돌(중복)
429 → 4xx, 요청 한도 초과
503 → 5xx, 서버 일시 중단·과부하

204 는 성공이지만 본문이 없다는 점, 429 는 클라이언트 오류지만 클라이언트 코드가 아니라 호출 빈도가 원인이라는 점이 핵심입니다.

문제 2. JSON 직렬화 코드 작성

이름 "박민수", 나이 28, 활성 여부 true 를 담은 JSON 문자열을 MiniJson 으로 만드는 코드를 쓰세요.

java
String json = MiniJson.write(MiniJson.obj("name", "박민수", "age", 28, "active", true));
System.out.println(json);
// {"name":"박민수","age":28,"active":true}

숫자와 불리언은 따옴표 없이, 문자열만 따옴표로 감싸는 걸 MiniJson.value 가 타입으로 구분합니다.

문제 3. 연결 거부 예외 처리

존재하지 않는 포트로 GET 요청을 보내고, 연결 거부 예외를 잡아 메시지를 출력하는 코드를 쓰세요.

java
try {
    HttpClient c = HttpClient.newHttpClient();
    HttpRequest req = HttpRequest.newBuilder(URI.create("http://127.0.0.1:1/ping"))
            .GET().build();
    c.send(req, HttpResponse.BodyHandlers.ofString());
} catch (ConnectException e) {
    System.out.println("연결할 수 없습니다: " + e.getMessage());
}

ConnectException 은 IOException 의 자손이라 send 의 throws 절에 잡힙니다.

문제 4. 페이징 쿼리 요청 작성

2페이지, 페이지당 5개를 요청하는 GET /members 쿼리 URL 을 만들고 호출하는 코드를 쓰세요.

java
HttpResponse<String> res = client.get("/members?page=2&size=5");
System.out.println(res.statusCode() + " " + res.body());

값이 숫자뿐이라 인코딩은 필요 없지만, 검색어처럼 한글·공백이 섞이면 URLEncoder.encode 를 거쳐야 합니다.