Postman으로 Rest-API 확인(1차 수정)

이준석·2025년 11월 25일

Web_Development_Basics

목록 보기
10/14

시작하기 앞서.
2-4 Postman에서 PUT Resquest의 example body 코드스니펫 오타 있음

이론

Postman이란?

Postman은 개발한 API를 테스트하고, 공유할 수 있는 API를 배달하는 배달부

  • 내가 만든 API가 잘 작동 하는지, 프론트엔드 개발자는 백엔드 API가 어떤 데이터를 주는지 미리 테스트 할 수 있다.
    -> 프론트엔드는 백엔드가 뭘 하는지 알 바 없고(데이터만 받으면 되니까)
    -> 백엔드는 프론트엔드가 뭘 하든지 받은 요청대로만 주면 되니까 서로가 뭘 하는지 일반적으로는 알 수 없기에 필요한 작업
  • 가짜 서버 생성기능도 제공한다.

가짜 서버(목서버, Mock Servers)

  • 실제 서버가 존재하지 않을 때, API 명세서에서 정의에 대해 응답만 해주는 '가짜' 서버이다.
    -> 응답만 해주기에 사전에 설정한 가짜 데이터만 출력된다.
  • 예) 클라이언트 : GET /items 요청 -> 가짜 서버(Mock Servers) : "어! GET /items 요청이네? 명세서에 보니까 이럴 땐 [ { "id": 1, ... } ] 모양의 JSON을 주라고 적혀있네. 그대로 전달해야겠어" (미리 저장된 예시 JSON을 응답)
  • 즉 실제 주방(서버)은 없지만, 주문을 받고 미리 준비된 '전시용 음식(JSON)'을 내어주는 '가짜 식당'과 같습니다.

쓰는 용도

  1. 서버와의 연결을 미리 테스트
  2. 서버 개발을 기다리 않고 프론트엔드가 통신 기능 구현 가능
  3. API 명세서(계약서)의 검증

Postman 주요 메뉴 & 기능

1. 컬렉션(Collections)

API 요청(Request)들을 담아두는 '폴더'입니다.
-> 우리가 GET /items, POST /items, DELETE /items/1처럼 여러 개의 API 요청을 만들었습니다. 이 요청들은 모두 '찜 목록'이라는 하나의 기능에 관련되어 있죠.
컬렉션은 이 관련 있는 API 요청들을 '찜 목록 API'라는 이름의 폴더 하나에 묶어서 깔끔하게 정리하고 관리할 수 있게 해줍니다.

2. 가짜 서버(Mock Servers)

API 명세서에 따라 '미리 정해진 예시 응답'만 돌려주는 '가짜' 서버입니다.
-> 실제 백엔드 서버가 아직 개발 중이거나 완성되지 않았을 때, 프론트엔드 개발자가 API가 완성될 때까지 기다릴 필요 없이 개발을 계속할 수 있도록 도와준다.

  • GET /items 요청이 오면 200 OK[ ... ] (새우깡 예시)
  • POST /items 요청이 오면 201 Created{ ... } (키보드 예시)
  • 돌려주도록 미리 '대본'을 짜두는 것입니다.

3. Rostman Request(요청)

  • 요청(Request)은 프론트엔드 없이 서버에 API 요청(클라이언트->서버)과 응답(서버->클라이언트)을 받을 수 있는 API 전송 기능이다.
  • 요청에 매소드(Method), 엔드포인트(Endpoint), 파라미터(Parameters)를 작성하여 Send 버튼을 누르면 fetch() 함수가 실행되는 것과 동일한 효과를 볼 수 있다.
    -> fetch() 함수 : << 이거 링크 1-4~6인가 2-1 ~ 3에 있음. 아직 덜외워서 모르겠네

Method

GET, POST, PUT, DELETE 등 "어떻게" 행동할지를 나타내는 동사입니다.

Endpoint

{{baseURL}}/items처럼 "무엇을" 다룰지 알려주는 목적지 주소(명사)입니다.

Parameters

Params (Query String), Headers, Body 등 요청을 수행하기 위해 "무엇을 가지고" 가야 하는지에 대한 상세 정보 입력할 수 있습니다.

4. Postman Example (응답 예시)

해당 요청(Request)가 성공 또는 실패했을 때 서버의 응답을 미리 저장해 둔 샘플 응답이다. (= 메뉴판의 음식 사진)

!중요 : 실제 서버에서 받은 응답이 아니다.
Send 버튼을 눌렀을 때 돌아오는 응답은 실제 응답(Actual Response) 이다.
그러나
Example은 사전에 API 명세서(계약서)를 바탕으로 미리 저장해 둔 예상 응답(Sample Response) 이다.

Example를 작성하는 이유

  1. API 문서화
    백엔드 개발자가 프론트엔드 개발자에게 API 호출 성공과 실패 시 발생하는 결과값에 대해 알려줌
    예) 성공 -> 200 OK | 실패 -> 404 Not Found

  2. 가짜 서버(Mock Server)의 예상 응답 = Mocking
    가짜 서버 사용 시 Example로 그대로 응답 받음. 가짜 서버를 통해 실제 서버처럼 작동시키는 것


설치 방법

1. 회원가입 및 로그인

(어지간히 많은 API가 있거나 다양한 프로젝트 참여하는 것이 아니면 무료버전 ㄱㄱ)

2. 포스트맨 다운로드(이메일 입력 후 Create free Account 클릭 또는 Log in 클릭)

??? 다운로드 안 해도 실행은 되나본데?

이따위로 떠서 무서운데...?

3. Collection 만들기

  1. API를 작성하기 위한 Collection - 폴더를 만든다.
  • Collections 메뉴 클릭
  • New(좌측 중간 상단) -> Collections
  • Collection 이름을 찜 목록 API로 변경

4. Postman 실행

  1. 새로운 Mock Server 생성
  • 새로운 도구 모음에서 Mock Servers 선택(없으면 활성화)

  • Create Mock Server 선택
  1. mock server의 URL을 확인
  • 상단 Copy URL 복사

  • https:// 생성된 mock server id .mock.pstmn.io

5. Request & Example 만들기

  • Request를 만들기 전 찜 목록 API collections에서 전역으로 사용할 baseURL을 사용하기 위해 찜 목록 API > Variables 로 이동

Variable : baseURL | Value : 생성된 mock server 주소

  • Collections 메뉴로 돌아가 + 클릭하여 요청(Request, 클라이언트가 가짜 서버로 요청하는 신호) 생성 : Add requert -> New Request 생성됨

6. 이 아래부터는 2-4 노션(또는 PDF) 참고하기.

6. 추가(PORT) request 생성 : 찜 상품 추가

  1. 찜 목록 API 컬렉션 옆의 + 버튼을 눌러 Add Request를 선택합니다.
  2. 요청의 이름을 찜 상품 추가로 변경합니다.
  3. HTTP Method를 POST로 선택합니다. (GET -> POST)
  4. URL 입력창에 {{baseURL}}/items라고 입력합니다.
  • {{baseURL}} = mock server의 주소
  • 엔드포인트 = /items
    (baseURL은 환경 변수에서 가져옴 : 모의서버 URL을 새 환경변수로 저장했었음)
  1. Body 탭을 선택합니다.
  2. raw 옵션을 선택하고, 드롭다운 메뉴에서 JSON을 선택합니다. (None -> raw)
  3. Request Body 작성 합니다.
  4. Save 버튼을 눌러 요청을 저장합니다. (꼭 잊지 않고 저장해주세요!!!
    (Save 우측 상단에 있음)

실행(Send)

에러가 났을 때, 왜 그런지 보는 것이 중요함

에러를 살펴보면 404 Not Found 그리고
"name": "mockRequestNotFoundError" 이라 한다.
mock server에서 이것에 해당하는 응답을 찾을 수 없단 뜻이다. 즉 mock request가 잘못된 것 같다.

-> 이건 해당 코드에 응답에 대한 코드가 없었기 때문임
그러면 만들어야겠지?

만든 Request의 ...을 선택하면 Add example가 있음. 이거 누르면

새로운 example이 생성된다. 여기에서 body 선택하고, raw -> JSON으로 변동한 뒤 하단에

mock server의 응답 코드를 작성하면 됨

상태 코드는 '201' Created임

다시 알고 가는 상태 코드 설명

  • 클라이언트(웹 브라우저 등)가 서버에 보낸 요청에 대해 서버가 어떻게 처리했는지 알려주는 3자리 숫자의 응답 코드

= 201번을 응답해줄거임

이러고 Save(!강조) -> 다시 PORT 찜 목록 추가에서 Send 실행하면

이다.
404 Not Found -> 201 Created
에러코드 -> 사전에 입력한 응답 코드

  • id는 사전 설정이 없으니 랜덤이고

7. 조회(GET) request 생성 : 전체 찜 상품 조회

  1. 찜 목록 API 컬렉션 옆의 + 버튼을 눌러 Add Request를 선택합니다.

  2. 요청의 이름을 전체 찜 상품 조회로 변경합니다.

  3. HTTP Method를 GET로 선택합니다.

  4. URL 입력창에 {{baseURL}}/items라고 입력합니다.

  5. GET 요청은 Body가 필요 없으므로 Body 탭은 none으로 둡니다.
    -> [조회는 body가 필요 없다.]

  6. Save 버튼을 눌러 요청을 저장합니다. (꼭 잊지 않고 저장해주세요!!!)

  • 주의! 여기에서도 가짜 응답인 example 설정 안 했으니까. 해줘야 함
    (수정하는 중이라 단건 조회와 목록 수정이 포함된거임)

그러면

추가로, 리스트를 조회하는 것이니까 example에 하나 더 추가해보자
(새우깡에 고래밥(id=2) 추가해봄)

잘 나온다.
(GET의 가짜응답은 전체 찜 상품 조회에서 200 OK : 조회 성공으로 바 꿈)

8. 단건 조회(GET) : 목록 조회와 달리 특정 id가 필요하다.

{{baseURL}}/items/임의의 ID : items 중 선택한 id를 골라서 선택하는 것(그러나...)
예) {{baseURL}}/items/2
1. 찜 목록 API 컬렉션 옆의 + 버튼을 눌러 Add Request를 선택합니다.
2. 요청의 이름을 찜 상품 단건 조회로 변경합니다.
3. HTTP Method를 GET로 선택합니다.
4. URL 입력창에 {{baseURL}}/items/임의의 ID 를 작성합니다.
5. Save 버튼을 눌러 요청을 저장합니다.

  • 가짜 응답(특정 아이디가 필요하다. 여기선 고래밥(id=2)을 선택해보자)

어라? id 질문한 건 2인데, 왜 1이 출력될까? 애초에 가짜 응답에는 2도 없으니 에러가 나와야 하는데?

!!!여기서 확인할 점!!!

가짜 응답(Example)의 단건 조회는 임의의 ID를 입력하여도 Example에 작성된 내용으로만 반환된다.

즉 뭐든지간에

{{baseURL}}/items/2라고 물어보면

example에서 이렇게 답변하기로 했으니까 실제 id가 다르더라도 출력된다.

(여기서도 빼먹었는데, 상태 코드 : 200 OK)

(!!GET 질문 발생!!)

-> 요청과 가짜 응답의 id가 다르면 딴놈이 튀어나옴(전체 찜 상품 조회(id=1과 id=2 2개가 나옴)

9. 수정(PUT) Request 만들기

  1. HTTP Method를 PUT으로 설정. Resquest body에 값을 입력하고, Save

  2. 여기서 의문점 하나
    Resquest는 id가 1인데, 달리 주어진 자료에서는 id가 3임. 이러면 요청값과 응답값의 id가 다르잖아. 애초에 3으로 선택한 것도 없고

    2-2. 질문 하나
    -> 첨부된 자료와 달리 example body의 id가
    "id": {{$randomInt}} 가 아니라
    "id": {{$pathSegments '1'}}
    -> 일단 "id": {{$randomInt}}"id": {{$randomInt '1'}} 을 각각 해보자.

3-1. example body가 "id": {{$randomInt}} 으로 Save.
Resquest에서 Send를 실행할 경우
id가 무작위 수로 출력됨

3-2. example body가 "id": {{$pathSegments '1'}} 으로 Save.
Resquest에서 Send를 실행할 경우

이게 맞네.

(!!PUT 질문 발생!!)

가짜 응답 값의 "id": {{$pathSegments '1'}}는 요청한 id 값을 출력하는 건가? 그렇다면 조회(GET)에서 소개한 것과 달리 요청값과 가짜 응답 값의 id가 다른데 왜 적용 되는건지?
요청값의 id가 1인데, 가짜 응답의 id가 3이면 안되야하는거잖아

10. 삭제(DELETE) Resquest 만들기

  1. HTTP Method를 DELETE로 설정. URL만 입력 후 Save
  2. Example body 탭 이름 204 No Content: 삭제 성공, URL은 동일하게 {{baseURL}}/items/1, 색션 상태 코드는 204 No Content


3. body는 none
4. Resquest 실행 : 텅 빔


완성된 API import & export 방법

설치한 C:\SpartaClub\postman_basics\items-mock-collections.json을 Postman에서 import로 실행

items-mock-collections.json은 기존에 만든거 그대로 복사한거임(그렇게 코드 짜여있음) 그렇기에 baseURL 설정이 안되어있으니, 추가로 설정하자.

mock server -> Copy URL으로 복사한 뒤
찜 목록 API Copy -> Variables -> Value에 붙여넣기



문제 발생 & 질문

강의 내용 중 질문

1. 2-4 Postman으로 REST API 확인하기_단건 조회(GET) 중

가짜 응답(example)에 저장된 값을 물어보면 실제 id값과는 무관해도 Resquest에는 가짜 응답의 값이 출력되는 것으로 알고 있다. 그런데, 실제로 해당 id가 없는 경우 찜 목록 조회의 값이 내려온다.(id=1과 id=2 두 개가 있는 것)

예:
1. 단건 조회의 가짜 응답 id는 1일 때, resquest와 example은 id=2 -> 가짜 응답이 출력된다. 이는 가짜 응답의 id 값과는 상관 없이 입력한(id=2) 값에 따른 출력값(id=2)이므로 그렇다.
2. 단건 조회의 가짜 응답 id는 1일 때, resquest와 example가 서로 다른 id(example가 2인데, resquest가 1이나 3 등)이면 이전 설정한 값이 나온다? 에러가 아니라?

둘의 URL이 달라지니 단건 조회의 가짜 응답이 아니라 딴놈(전체 찜 조회의 가짜 응답)이 튀어나옴

2. 2-4 Postman으로 REST API 확인하기_수정(PUT) 중

예제 자료를 통해 작성해보니
1. PUT에서 Resquest body에 값을 입력하고, Save

  1. 여기서 의문점 하나
    Resquest는 id가 1인데, 달리 주어진 자료에서는 id가 3임. 이러면 요청값과 응답값의 id가 다르잖아. 애초에 3으로 선택한 것도 없고

    2-2. 질문 하나
    -> 첨부된 자료와 달리 example body의 id가
    "id": {{$randomInt}} 가 아니라
    "id": {{$pathSegments '1'}}
    -> 일단 "id": {{$randomInt}}"id": {{$randomInt '1'}} 을 각각 해보자.

3-1. example body가 "id": {{$randomInt}} 으로 Save.
Resquest에서 Send를 실행할 경우
id가 무작위 수로 출력됨

3-2. example body가 "id": {{$pathSegments '1'}}} 으로 Save.
Resquest에서 Send를 실행할 경우

이게 맞네.
그런데, 또 추가 질문

그런데, 또 추가 질문 : 가짜 응답 값의 "id": {{$pathSegments '1'}}는

요청한 id 값을 출력하는 건가?

그렇다면 조회(GET)에서 소개한 것과 달리 요청값과 가짜 응답 값의 URL이 다른데(items/1 <-X-> items/3) 왜 적용 되는건지?

요청값의 id가 1인데, 가짜 응답의 id가 3이면 안되야하는거잖아

조회에서는 가짜 응답이니까 id만 같으면 출력 된댔잖아

요청

가짜응답

profile
공부 정리방

0개의 댓글