API 호출 방식 중 일반 호출, 브릿지 호출(Bridge call), **콜백 URL 호출(Callback URL call)**은 목적과 데이터 흐름 방식이 다릅니다. 하나씩 비교해서 설명드릴게요.
POST /api/pay → 응답: 200 OK { "status": "success" }
Client → Bridge Server → 제3의 API 서버
1. Client → Server (요청)
2. Server → "처리 중, 콜백으로 결과 줄게"
3. 처리 완료 후 → Client의 콜백 URL로 HTTP POST 전송
1. Client: "결제 요청" (callback_url 포함)
2. Server: "결제 접수됨"
3. Server: 결제 완료 후 → POST callback_url {결과}
| 항목 | 일반 API | 브릿지 | 콜백 url |
| 처리 방식 | 동기(Sync) | 중계(Sync or Async) | 비동기(Async) |
| 응답 시점 | 즉시 | 즉시 또는 중간 처리 후 | 나중에 콜백 URL로 전송 |
| 사용 목적 | 단순 요청/응답 | 중간 처리, 시스템 간 격리 | 장시간 작업, 푸시형 알림 |
| 예시 | 로그인, 조회 | VPN 내부 호출, 연동 가공 | 결제 결과 알림, 알림톡 |
아래는 일반 API 호출, 브릿지(중계 서버) 호출, 콜백 URL 방식 호출에 대한 Java 코드 예제입니다. 각각의 구조적 차이를 간단히 설명한 후, Spring Boot 환경 기준으로 RestTemplate 사용 예제를 드릴게요.
RestTemplate restTemplate = new RestTemplate();
String url = "https://api.example.com/data";
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer your-token");
HttpEntity entity = new HttpEntity<>(headers);
ResponseEntity response = restTemplate.exchange(
url,
HttpMethod.GET,
entity,
String.class
);
System.out.println("API 응답: " + response.getBody());
Client는 직접 외부 API를 호출하지 않고 **중간 서버(Bridge Server)**를 통해 요청합니다.
@RestController
public class BridgeController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("/bridge/send")
public ResponseEntity bridgeApi(@RequestBody Map<string, object=""> body) {
String thirdPartyUrl = "https://thirdparty.com/api/receive";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<map<string, object="">> request = new HttpEntity<>(body, headers);
ResponseEntity response = restTemplate.postForEntity(thirdPartyUrl, request, String.class);
return ResponseEntity.ok("전송 결과: " + response.getBody());
}
}
</map<string,></string,>
Map<string, object=""> requestBody = new HashMap<>();
requestBody.put("data", "example");
requestBody.put("callbackUrl", "https://my-service.com/callback");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<map<string, object="">> entity = new HttpEntity<>(requestBody, headers);
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity("https://api.example.com/start-task", entity, String.class);
</map<string,></string,>
public void sendCallback(String callbackUrl, String result) {
Map<String, Object> callbackData = new HashMap<>();
callbackData.put("status", "done");
callbackData.put("result", result);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> callbackRequest = new HttpEntity<>(callbackData, headers);
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity(callbackUrl, callbackRequest, String.class);
}
호출 방식 특징
| 일반 API | Client가 직접 요청 |
| 브릿지 호출 | Client는 내부 서버로 보내고, 내부 서버가 외부 호출 |
| 콜백 호출 | Client가 callback URL을 주고, 나중에 결과를 비동기 전달받음 |
필요하시면 Spring WebClient나 비동기 처리(@Async, CompletableFuture) 예제도 제공해 드릴 수 있습니다.
| PUID란? (5) | 2025.08.16 |
|---|---|
| IT 개발에서 vue를 사용하는 이유와 장단점은? (4) | 2025.08.15 |
| curl -i -k -v -X POST --location 뜻은? (1) | 2025.06.22 |
| api key에서 access key, secret key 개념과 역할은? (0) | 2025.06.04 |
| adid, gaid, idfa 개념과 각각 역할은? (0) | 2025.06.01 |