ajax가 아닌 controller단에서 통신하는 방법에 대해 알아보자.
Spring에서만 국한되는 것이 아닌 Java에서 사용되는 것이다.


◆ 백단에서 외부URL페이지 읽기

프론트단에서는 ajax를 통해 내부의 페이지를 받아올 수 있지만,
외부 페이지는 동일 출처 정책(Same-origin Policy)에 의해 규제되며 개발자도구를 통해 URL이 노출될 수 있다는 단점이있다.
따라서 백단(컨트롤러)에서는 외부 페이지를 읽어오게 되면 프론트단에서 노출되는 통신 경로를 숨길 수 있다.


api를 사용하는 ajax외부 통신의 경우에는 가능하다. 단, 이때도 킷값등을 숨기기 위해 컨트롤러단에서 처리해야 할 수 있다.


1. URL객체 생성

URL url = new URL("https://gunbin91.github.io");


2. URL객체를 통해 커넥션

oepnConnection시 URLConnection객체를 반환하지만, HttpURLConnection객체로 다운캐스팅 할 경우 setConnectTimeout메서드등의 좀 더 다양한 기능을 사용할 수 있다.

  • setConnectTimeout(int)는 커넥션의 타임아웃 시간을 설정한다.
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.connect();


3. input객체 생성

기본 인자로 conn.getInputStream()을 통해 읽기쉬운 객체로 변환한다.

BufferedReader in = new BufferedReader(
    new InputStreamReader(conn.getInputStream(), Charset.forName("UTF-8")));


4. 페이지읽기

String inputLine;
String re="";
while ( (inputLine=in.readLine()) != null) //한 행씩 읽기
    re+=inputLine;


URL url = new URL("https://gunbin91.github.io");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.connect();
BufferedReader in = new BufferedReader(
    new InputStreamReader(conn.getInputStream(), Charset.forName("UTF-8")));
String inputLine;
String re="";
while ( (inputLine=in.readLine()) != null) //한 행씩 읽기
    re+=inputLine;