Apidog로 실습! 3분 만에 이해하는 RESTful API 통신의 구조와 흐름

배고픈코알라·2025년 8월 15일
0

시작하며

"API 응답이 오지 않네..."

이런 경험, 있으신가요? 지난주, 저는 클라이언트 사이트에서 갑자기 API가 작동하지 않아 원인 파악에 하루 종일 걸렸습니다. 입사 1년 차 때보다는 성장했지만, 아직도 'API의 내부 작동 방식'을 완전히 이해하지 못했던 거죠.

사실, 많은 엔지니어들이 API를 '블랙박스'처럼 다루고 있습니다. 버튼 하나로 데이터가 전송되는 메커니즘은 우리가 생각하는 것보다 훨씬 복잡한 통신 프로세스의 집합체입니다.

오늘은 Apidog를 사용하여 API 요청이 전송되고 응답이 돌아오기까지의 전체 프로세스를 철저히 설명하겠습니다! 이 글에서는 Apidog를 클라이언트 도구로, Nginx를 리버스 프록시로, 백엔드에는 Spring Boot + Tomcat을 사용한 예시로 설명합니다. 또한, 글 마지막에는 회원가입 없이 바로 시도해볼 수 있는 API 데모도 준비했습니다. 단 3분 만에 완전한 API 흐름을 경험해 보세요!

Apidog란?

본 글에서는 Apidog를 API 디버깅 클라이언트로 사용합니다. Apidog는 시각화 API 테스트 도구로, 요청의 빠른 구성, 인터페이스 디버깅, 응답 데이터 확인을 지원하며, 개발자와 테스트 엔지니어에게 최적화되어 있습니다.
apidog

이제, 이 Apidog를 사용하여 API 요청의 내부를 살펴보겠습니다!

1. Apidog에서 요청 발사!

먼저 Apidog를 열고, 요청 URL을 입력한 후 메서드(GET이나 POST 등)를 선택합니다. 필요에 따라 헤더(Headers)나 바디(Body) 파라미터를 설정한 다음, Send 버튼을 클릭합니다.

이 순간, Apidog는 입력한 정보를 HTTP 프로토콜에 맞는 요청으로 패키징하여 네트워크를 통해 전송할 준비를 합니다.

apidog-request

솔직히, 이 Send 버튼을 누르는 것만으로도 뒤에서는 믿을 수 없을 정도로 복잡한 처리가 진행됩니다. 이제 그 '뒷면'을 살펴보겠습니다!

2. 네트워크 통신의 여정

2-1. DNS 해석

먼저, 브라우저에서 웹사이트를 열 때와 마찬가지로 URL에 포함된 도메인 이름(예: example.com)을 IP 주소로 변환해야 합니다.

example.com → 93.184.216.34

이것이 없으면 인터넷상의 어떤 서버에 연결해야 할지 알 수 없습니다. DNS 서버가 '전화번호부'와 같은 역할을 해줍니다.

2-2. TCP/IP 연결 수립

다음으로, 클라이언트와 서버 간에 TCP 3-way 핸드셰이크(SYN, SYN-ACK, ACK)가 이루어집니다. 이는 "서로 대화할 수 있는 상태인가요?" "네, 준비됐습니다!" "알겠습니다, 통신을 시작합니다"라는 인사와 같은 것입니다.

HTTPS의 경우, 추가로 TLS/SSL 암호화 핸드셰이크도 진행됩니다. 이는 "비밀 대화를 나눕시다"라는 합의 형성이죠.

2-3. HTTP 요청 전송

연결이 수립되면, Apidog에서 작성한 요청 데이터가 HTTP 프로토콜을 통해 서버로 전송됩니다. 이 데이터는 인터넷, 내부 네트워크, CDN 노드 등을 경유할 수 있습니다.

3. 리버스 프록시와 부하 분산

3-1. 리버스 프록시

많은 프로덕션 환경에서는 Nginx와 같은 리버스 프록시가 클라이언트로부터의 요청을 받아 백엔드 애플리케이션으로 전달합니다.

클라이언트 → Nginx → 백엔드 앱

이는 보안 강화나 캐시 기능 제공 등의 역할을 합니다.

3-2. 부하 분산

대규모 시스템에서는 여러 백엔드 인스턴스가 존재하는 경우가 많습니다. 이 경우, 리버스 프록시는 특정 알고리즘(라운드 로빈이나 최소 연결 수 등)에 기반하여 요청을 다른 서버로 분산시킵니다.

           ┌→ 서버1
Nginx ─┼→ 서버2
           └→ 서버3

이를 통해 시스템 전체의 성능과 가용성이 향상됩니다. 처음에는 이런 설정이 어렵게 느껴졌지만, 실제로 다뤄보면 이해가 깊어집니다!

4. 백엔드 애플리케이션이 요청을 수신

Java + Spring Boot 예시로 살펴보겠습니다:

애플리케이션에는 내장된 Tomcat이 포트(예: 8080)를 리스닝하고 있습니다. 요청이 도착하면, Spring은 URL과 HTTP 메서드에 기반하여 해당하는 Controller 메서드에 매핑합니다:

@RestController
public class ExampleController {
    @PostMapping("/api/data")
    public ResponseEntity<DataResponse> getData(@RequestBody DataRequest request) {
        DataResponse response = dataService.process(request);
        return ResponseEntity.ok(response);
    }
}

이 코드를 보면, /api/data로의 POST 요청이 오면, getData 메서드가 호출됨을 알 수 있습니다.

5. 비즈니스 로직 처리

Controller는 일반적으로 Service 레이어를 호출하여 비즈니스 로직을 실행합니다. 예를 들어, 데이터베이스 쿼리, 규칙 검증, 다른 API 호출 등입니다:

@Service
public class DataService {
    public DataResponse process(DataRequest request) {
        // 비즈니스 로직 처리
        return new DataResponse("OK");
    }
}

개인적으로는 이 계층의 설계가 가장 재미있습니다. 비즈니스 로직이야말로 애플리케이션의 '두뇌'이니까요!

6. 응답 데이터 구성

  • Service가 응답을 Controller에 반환합니다
  • Spring은 Java 객체를 JSON으로 직렬화하고, Content-Type: application/json 응답 헤더를 설정합니다

이 변환 처리는 자동으로 이루어지므로, 개발자는 특별히 신경 쓸 필요가 없습니다. 편리하죠!

7. Apidog로 응답 반환

백엔드는 HTTP 상태 코드, 응답 헤더, 응답 본문을 패키징하여 Apidog에 전송합니다. 예를 들면:

{
  "status": "success",
  "data": { "id": 1, "name": "example" }
}

이 JSON 데이터가 우리가 최종적으로 보게 될 정보입니다.

8. Apidog로의 네트워크 전송

  • 서버는 TCP/IP를 통해 데이터를 전송합니다
  • Apidog는 응답을 수신하고 분석합니다

9. Apidog에서의 응답 표시

Apidog는 응답의 상태 코드와 내용에 기반하여 아름답게 정리된 표시를 제공합니다. 이를 통해 개발자는 결과를 빠르게 확인하고 디버깅할 수 있습니다.

솔직히, 이 아름다운 표시 기능은 다른 API 클라이언트와 비교해도 Apidog의 강점이라고 생각합니다. 특히 JSON의 접기 표시나 색상 구분이 보기 쉬워서 도움이 됩니다!

실전 데모: 3분 만에 API 체험

속도 제한이나 복잡한 인증을 피하기 위해, 여기서는 JSONPlaceholder라는 테스트용 API를 사용합니다. 바로 사용할 수 있어 편리합니다!

  1. Apidog를 엽니다
  2. 새 요청을 생성합니다:
    • Method: GET
    • URL: https://jsonplaceholder.typicode.com/posts/1
  3. Send을 클릭합니다
  4. 다음과 같은 응답이 표시됩니다(예시):
{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit..."
}

이 API는 안정적이고 로그인이 필요 없어서 HTTP 요청 데모에 최적입니다. 초보자도 안심하고 시도해볼 수 있습니다!

API 요청의 전체 흐름

API 요청의 전체 흐름

마무리

Apidog에서 Send 버튼을 클릭하고 응답이 표시될 때까지, 다음과 같은 복잡한 프로세스가 진행됩니다:

  • 클라이언트가 HTTP 요청을 구성
  • DNS 해석과 TCP/IP 연결 수립
  • 리버스 프록시와 부하 분산
  • 백엔드 애플리케이션이 요청을 수신하고 비즈니스 로직을 실행
  • JSON 응답 구성과 반환
  • 클라이언트의 분석과 표시

이러한 프로세스를 이해함으로써 API 디버깅이 더 효율적이 되고, 요청이 실패했을 때도 문제를 빠르게 파악할 수 있게 됩니다.

개인적으로는 이 '보이지 않는 부분'을 이해하면서 API 개발이나 테스트가 더 재미있어졌습니다. 특히 Apidog와 같은 직관적인 도구를 사용하면 복잡한 HTTP 통신도 시각적으로 파악할 수 있어 초보자에게도 추천합니다!

여러분도 Apidog를 사용하여 API 요청의 내부를 경험해 보세요. 질문이나 의견이 있으시면 댓글로 남겨주세요!

0개의 댓글