### 사용자 목록 조회 (###가 요청 구분자이자 주석)
GET http://localhost:8080/api/users?page=1
Accept: application/json
### 사용자 생성 — 헤더 뒤 "빈 줄" 다음부터 바디
POST http://localhost:8080/api/users
Content-Type: application/json
{
"name": "홍길동",
"age": 30
}
### 수정
PUT http://localhost:8080/api/users/1
Content-Type: application/json
{
"age": 31
}
### 삭제
DELETE http://localhost:8080/api/users/1
💡 파일 기반이라 폐쇄망·오프라인에서 동작하고 git으로 공유된다(Postman 대체). IntelliJ는 요청 왼쪽 ▶로 실행, VS Code는 REST Client 확장. 바디 앞 빈 줄을 빠뜨리면 바디가 헤더로 해석된다.
.http 파일 — 인증 토큰 · 환경 전환
HTTP 클라 · IntelliJ .http / VS Code REST Client
### 로그인 — 토큰 받기
POST http://localhost:8080/api/login
Content-Type: application/json
{
"username": "admin",
"password": "1234"
}
### 인증이 필요한 요청 — Bearer 토큰
GET http://localhost:8080/api/orders
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Accept: application/json
### 폼 전송 (application/x-www-form-urlencoded)
POST http://localhost:8080/api/search
Content-Type: application/x-www-form-urlencoded
keyword=kim&page=1
💡 실전에선 URL·토큰을 {{host}} 같은 변수로 두고 http-client.env.json에 dev/운영 값을 정의해 환경을 전환한다(IntelliJ·VS Code 공통 문법). 로그인 응답에서 토큰을 뽑아 다음 요청에 잇는 응답 핸들러(> {% ... %})도 지원.
.http 파일 — 배열 변수로 같은 요청 N번 반복 발송 (엑셀 행 일괄 등록)
HTTP 클라 · IntelliJ .http (2024.2+ 컬렉션 변수)
### ───────────────────────────────────────────────────────────────
### 엑셀 수신분(행 목록) → 배열 1개로 반복 발송하는 틀
###
### 원리
### 변수 값이 JSON 배열이면 HTTP Client가 원소 수만큼 요청을 연속 발송한다
### (JetBrains "collections in variables", 2024.2+).
### → 배열(recordIds)이 반복을 구동하고, 나머지 필드는 request.iteration() 인덱스로 꺼내 쓴다.
###
### 사용법
### [입력] 블록의 rows 배열에 엑셀 행을 그대로 옮겨 적고 ▶ 실행. 행이 N개면 요청 N건.
### 먼저 2~3행만 넣고 돌려 로그가 행마다 다르게 찍히는지 확인한 뒤 전체를 채울 것.
###
### 주의
### · 엑셀은 "01" 같은 코드의 선행 0을 떨어뜨린다 → 아래 스크립트에서 2자리로 보충한다.
### · 필드 이름·필수 여부는 서버 DTO 기준으로 맞출 것(여기 이름은 예시).
### · 같은 id 재발송이 중복 생성인지 무시(멱등)인지는 서버 구현에 달렸다.
### ───────────────────────────────────────────────────────────────
@host = http://localhost:8080
### ═══════════════ [입력] 엑셀 행 → 반복 발송 ═══════════════
< {%
// ▼▼▼ 여기에 엑셀 행을 옮겨 적는다 (행 1개 = 원소 1개) ▼▼▼
const rows = [
{ recordId: "EXT-20260801-001", title: "정기 회의", startAt: "2026-08-03T10:00:00", endAt: "2026-08-03T11:00:00", orgCode: "01", typeCode: "A", memo: "", place: "본사 대회의실", sourceUpdatedAt: "" },
{ recordId: "EXT-20260801-002", title: "실무 점검", startAt: "2026-08-04T14:00:00", endAt: "2026-08-04T15:00:00", orgCode: "01", typeCode: "B", memo: "", place: "본사 중회의실", sourceUpdatedAt: "" },
{ recordId: "EXT-20260801-003", title: "현장 점검", startAt: "2026-08-05T10:00:00", endAt: "2026-08-05T12:00:00", orgCode: "2", typeCode: "C", memo: "지역 순회", place: "서울 사무소", sourceUpdatedAt: "" },
];
// ▲▲▲ 여기까지 ▲▲▲
// 배열을 그대로 넘기면 원소 수만큼 요청이 나간다 (= 반복 구동자)
request.variables.set("recordIds", rows.map(function (r) { return r.recordId; }));
// 이번 회차 행을 꺼내 나머지 필드를 채운다
var r = rows[request.iteration()] || rows[0];
// 엑셀에서 떨어진 선행 0 보충 (코드는 2자리)
var org = String(r.orgCode == null ? "" : r.orgCode).trim();
if (org.length === 1) { org = "0" + org; }
request.variables.set("title", r.title || "");
request.variables.set("startAt", r.startAt || "");
request.variables.set("endAt", r.endAt || "");
request.variables.set("memo", r.memo || "");
request.variables.set("place", r.place || "");
request.variables.set("orgCode", org);
request.variables.set("typeCode", r.typeCode || "");
request.variables.set("sourceUpdatedAt", r.sourceUpdatedAt || r.startAt || "");
client.log("[입력 " + (request.iteration() + 1) + "/" + rows.length + "] " + r.recordId + " " + r.title);
%}
POST {{host}}/api/external/v1/records
Content-Type: application/json
{
"eventType": "I",
"recordId": "{{recordIds}}",
"title": "{{title}}",
"startAt": "{{startAt}}",
"endAt": "{{endAt}}",
"sourceUpdatedAt": "{{sourceUpdatedAt}}",
"memo": "{{memo}}",
"place": "{{place}}",
"orgCode": "{{orgCode}}",
"typeCode": "{{typeCode}}"
}
> {%
client.log("[입력 결과] " + JSON.stringify(response.body));
client.test("2xx 응답", function () {
client.assert(response.status === 200, "status=" + response.status);
});
%}
💡 컬렉션 변수 반복은 IntelliJ HTTP Client 2024.2+ 기능 — VS Code REST Client엔 없다. 배열 변수가 요청 안에 실제로 참조돼야(여기선 recordId 자리) 반복이 돈다. 배열이 아닌 필드를 {{}}로 쓰면 매 회차 request.variables.set으로 갱신해야 하고, 안 하면 직전 값이 그대로 나간다. 이 카드는 {{}}가 HTTP Client 변수라 채우기 폼 없이 원문 그대로 복사된다.
.http 파일 — id 목록만으로 반복 삭제 (검증 데이터 정리)
HTTP 클라 · IntelliJ .http (2024.2+ 컬렉션 변수)
### ═══════════════ [삭제] id 목록만으로 반복 발송 ═══════════════
### 삭제 이벤트는 대상 id만 있으면 된다 → 배열 하나로 끝.
### 위 [입력]으로 넣은 검증 데이터를 정리할 때도 이 블록을 쓴다.
@host = http://localhost:8080
< {%
request.variables.set("recordIds", [
"EXT-20260801-001",
"EXT-20260801-002",
"EXT-20260801-003",
]);
%}
POST {{host}}/api/external/v1/records
Content-Type: application/json
{
"eventType": "D",
"recordId": "{{recordIds}}"
}
> {%
client.log("[삭제 " + (request.iteration() + 1) + "] " + JSON.stringify(response.body));
%}
💡 삭제 블록은 입력과 파일·블록을 분리해 둘 것 — 배열 하나만 바꿔 실행하는 구조라 오삭제가 쉽다. 서버에서 "D가 아니면 입력"처럼 기본값을 안전한 쪽에 두면 오타로 지워지는 사고를 줄인다. ▶ 누르기 전에 {{host}}가 로컬인지 운영인지 매번 확인.