티스토리로 이관 중이며 해당글을 좀더 다듬어진 글로 https://mjkim1201.tistory.com/ 로 이관 하였습니다.
💌 개발을 하며 자원을 주고 받는 일이 많다. 외부 서버의 API를 받아서 사용하기도 하고 API를 개발하기도 하는데 REST API 라는 개념에 대해서 자세히 찾아보고 정리해보고자 한다. 정리한 내용을 적어보고 사소한 내용이지만 혹시라도 이 글을 보셔서 최소한 의 지식을 공유 했으면 좋겠다는 바람입니다.
저번 포스트에서는 REAT API를 직접 개발하는 방법에 대해서 알아보았습니다.
API 는 '애플리케이션 프로그래밍 인터페이스' 로서 소프트웨어 프로그램이 다른 소프트웨어 프로그램으로 데이터를 전송할 수 있도록 하는 규칙 집합 의 의미 한다고 하였습니다.
이번 포스트에서는 다른 API를 가져와서 사용하는 방법에 대해 알아보겠습니다.
HTTP 통신과 관련된 과정을 살펴보면

자바와 스프링에서는 다양한 HTTP Request 만드는 방법을 제공한다. Java 내부에서도 제공하고, Spring Framework에서도 제공하고, 별도의 외부라이브러리를 쓸 수 도 있다.
우선 자바에서의 내용부터 정리한다.

➡️HttpURLConnection 클래스의 생성자가 protected인 이유는 무엇일까요?
HttpURLConnection 생성자는 외부에서 직접 객체를 생성할 수 없게 제한하려는 의도입니다. URLConnection 클래스에서만 객체를 생성할 수 있도록 하여, 다양한 네트워크 프로토콜(HTTP, HTTPS, FTP 등)에 맞는 구체적인 구현체만을 사용할 수 있도록 합니다.
protected란? 상속받은 클래스에서 객체를 생성 할 수 있도록 한다.
URL url = new URL(targetUrl); // 통신할 API URL 적용
HttpURLConnection con = (HttpURLConnection) url.openConnection();
conn.setRequestProperty(); // key-value의 reqeust 값을 넣는다.
conn.setRequestMethod("PUT"); // Method 방식을 넣는다.
위 코드가HttpURLConnection 하기 위한 내용이 끝이다. 그렇기에 상대적으로 가볍고 핵심 API만 가지고 있습니다.
HTTP Client는 서버와 HTTP 통신을 담당하는 라이브러리 또는 도구를 의미합니다. Apache HttpClient는 HttpURLConnection의 한계를 극복하기 위해 개발되었습니다. 웹소켓, 동기-비동기처리를 지원하는 등 다양한 기능을 유연하게 지원합니다. 각각의 목적에 맞게 HTTP의 명령어에 따른 클래스를 제공 하고 있습니다. ( HttpGet, HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, HttpOption)


//hhtpClient 객체 생성
CloseableHttpClient httpClient = HttpClients.createDefault();
//외부 api 가 존재하는 url
String url ="testurl;
HttpPost httpPost = new HttpPost(url);
//content-type 정의 및 http body에 json 문자열 정의
httpPost.addHeader("Content-Type","application/json");
StringEntity entity = new StringEntity(json); // 필요로하는 requestEntity
httpPost.setEntity(entity);
즉, 성능이 빠른 프로그램을 만들때는 HttpURLConnection 을 사용하는 것이 좋고
다양한 API를 사용해야한다면 HttpClient 를 사용하는 것이 좋다.
요즘에는 프레임워크가 발전하고 있고 Spring, Springboot에서 제공하는 HTTP 통신 방식이 나왔기 때문에 잘 쓰진 않지만. 업무 상황에 따라 사용하게 된다면 도움이 되었으면 합니다.