상세 컨텐츠

본문 제목

공공 API 사용 시 "등록되지 않은 인증키 입니다. " 에러 해결

트러블슈팅

by ksjsjsj 2025. 3. 4. 22:02

본문

개요

사업자 등록번호 검증을 위해 공공 데이터 포털의

"국세청_사업자등록정보 진위확인 및 상태조회 서비스" api를 사용해야 했다.

서버에서 이를 구현하기 위한 코드를 작성한 후,
Postman을 통해 테스트를 해 본 결과 정상적으로 구현이 되었음을 확인했고,

프론트엔드와 연결하여 로컬 서버에서 테스트를 했다.

그런데?

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request on POST request for "https://api.odcloud.kr/api/nts-businessman/v1/validate": "{"code":-4,"msg":"등록되지 않은 인증키 입니다."}<EOL>"

 

위와 같은 에러가 발생한다.

 

문제 코드

// 사업자 등록번호 검증
    public String validateBusinessNumber(BusinessNumberRequest request) throws URISyntaxException {
        String fullUrl = baseUrl + "?serviceKey=" + serviceKey;

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("businesses", List.of(
                Map.of(
                        "b_no", request.businessNumber(),
                        "start_dt", request.startDate(),
                        "p_nm", request.owner()
                )
        ));

        HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);

        ResponseEntity<String> response = restTemplate.exchange(
                fullUrl,
                HttpMethod.POST,
                entity,
                String.class
        );

        return response.getBody();
    }

 

 

문제 원인

Postman에서 테스트를 성공한 것으로 보아 분명 인증키에는 문제가 없었다.

검색을 통해 문제의 핵심은 URL 인코딩에 있었다는 것을 알게 되었다.

서버 코드에서 URL을 전송할 때 문자열을 그대로 사용했기 때문에,

특수 문자가 포함된 인증키가 올바르게 전달되지 않았던 것이다!!!!!!!!!!!

 

 

해결방법

JAVA의 URI 클래스를 사용해서 해결

String fullUrl = baseUrl + "?serviceKey=" + serviceKey;

URI uri = new URI(fullUrl);

 

위와 같이 URI클래스에 내가 사용하려는 URL 문자열을 집어넣어 인코딩 처리를 함으로써

인증키를 정상적으로 인식할 수 있도록 했다!

관련글 더보기