[데브코스] Spring Boot 인증·인가(Auth) (22강) - Postman 로그인 응답으로 apiKey 자동 갱신하기

zuno·2026년 1월 12일

이번 강의에서는 Postman의 Script 기능(Post-response) 을 사용해서
로그인 성공 시마다 apiKey를 자동으로 컬렉션 변수에 갱신하는 작업을 진행했다.

이전 강의까지는 로그인 후 응답으로 받은 apiKey를
직접 복사해서 컬렉션 변수에 붙여 넣어야 했던 불편함이 있었다.

이번 작업의 목표는 다음과 같다.


🎯 목표

  • 로그인 요청이 성공(200 OK) 했을 때만
  • 응답 JSON에서 apiKey를 추출하고
  • Postman Collection Variable(apiKey) 를 자동으로 갱신
  • 이후 모든 요청에서 ?apiKey={{apiKey}} 를 그대로 재사용

🔁 기존 방식의 문제점

  • 다른 사용자로 로그인할 때마다
    • 로그인 요청 → 응답 확인
    • apiKey 복사
    • 컬렉션 변수에 수동으로 붙여넣기
  • 사람이 직접 하다 보니 실수 가능성 ↑
  • 테스트 흐름이 끊김

👉 자동화할 수 있는 부분은 자동화하는 게 맞다


🛠️ 해결 방법: Postman Post-response Script 사용

Postman의 Scripts → Post-response 탭에서
로그인 응답을 처리하는 자바스크립트를 작성한다.

회원->로그인->Scripts 이동해야됨


📜 로그인 요청 Post-response Script 코드

// ✅ 200(OK)이 아니면 바로 종료 (early return)
if (pm.response.code !== 200) {
  console.log(`응답 코드가 200이 아님: ${pm.response.code}`);
  return;
}

// ✅ 200일 때만 apiKey 추출
const apiKey = pm.response.json()?.data?.apiKey;

if (!apiKey) {
  console.warn("apiKey가 응답에 없습니다.");
  return;
}

// ✅ 컬렉션 변수에 apiKey 저장
pm.collectionVariables.set("apiKey", apiKey);
console.log(`apiKey 교체 : ${apiKey}`);

🔍 코드 설명 (초보 기준)

1️⃣ 응답 코드 먼저 체크

if (pm.response.code !== 200) {
  return;
}
  • 로그인 실패(401, 400 등)인데
  • apiKey를 덮어쓰면 기존 정상 apiKey까지 날아갈 수 있음
  • 그래서 200 OK일 때만 처리

2️⃣ 응답 JSON에서 apiKey 추출

const apiKey = pm.response.json()?.data?.apiKey;
  • 서버 응답 구조:
{
  "resultCode": "200-1",
  "msg": "...",
  "data": {
    "item": { ... },
    "apiKey": "xxxx-xxxx-xxxx"
  }
}
  • optional chaining(?.) 사용
    • 응답 구조가 예상과 달라도 에러 없이 undefined 처리

3️⃣ 컬렉션 변수에 저장

pm.collectionVariables.set("apiKey", apiKey);
  • Postman Collection Variables에 있는
    • apiKey 값을 새 값으로 교체
  • 이후 모든 요청에서 자동 반영됨

✅ 결과

  • 로그인 요청을 보내기만 하면
    • apiKey가 자동으로 갱신됨
  • 이후 모든 API 요청에서
    • ?apiKey={{apiKey}} 그대로 사용 가능
  • 수동 복사 작업 완전히 제거

🧠 정리

  • apiKey 인증 방식 자체가 더 안전해지는 건 아님
  • 하지만 테스트·개발 생산성은 확실히 개선
  • 실무에서도 Postman 자동화는 자주 쓰이는 패턴

👉 다음 단계에서는
username/password 로그인 → apiKey 발급 → apiKey로 인증
이 흐름을 더 자연스럽게 개선해 나갈 예정이다.

0개의 댓글