개발자의 오르막

SW 심화과정 21일차 본문

교육과정 ( SW 개발자 심화과정 )/Java

SW 심화과정 21일차

계단 2019. 8. 5. 09:45

# HttpClient 통신

 

- Test126.jsp 파일

 

- Test126.java

 

package main;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class Test126 {
	public static void main(String[] args) throws Exception{
		/*
		 * java.net.URL은 이것 자체가 작은 웹브라우저의 역할을 한다.
		 * 요청을 날리고 그에 해당하는 응답을 받아들인다.
		 * 안드로이드 앱에서 버튼을 누르면 오늘의 배송정보가 넘어오는?
		 * 서버에 존재하는 배송정보를 다운받는 역할을 수행한다.
		 * 
		 * 소캣으로 다 짜는 것이 아니라 http 프로토콜로 서버와 통신할 때는
		 * 이 클래스를 주로 이용한다.
		 * 
		 * 앱같은 경우에서 서버로부터 많은 데이터를 다운받아야 
         * 할 경우에는 URL 클래스를 이용하여
		 * JSP 파일로부터 정보를 다운받는다.
		 * 
		 * 이게 워낙 많이 쓰이다보니까 오픈소스 라이브러리가 등장
		 * 아파치 Http client 프로젝트 (안드로이드 http 기반 표준 통신수단)
		 * 
		 * 구글에서 httpclient-4.4.jar 을 다운로드
		 */
		
		URL rl = new URL("http://192.168.2.71:8081/study3/Test126.jsp?pw=1234");
		URLConnection ucon = rl.openConnection();
		InputStream in = ucon.getInputStream();
		
		
		// 아답터 역할하는 애
		BufferedReader bin = new BufferedReader(
				new InputStreamReader(in, "UTF-8"));
		String l = null;
		while((l = bin.readLine()) != null) {
			System.out.println(l);
		}
		
		in.close();
	}
}

 

- Test127.java

package main;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class Test127 {
	public static void main(String[] args) throws Exception{
		
		// CloseableHttpClient : 실제로 요청/응답을 수행하는 핵심
		CloseableHttpClient httpClient = HttpClients.createDefault();
		
		// Get 방식 요청에 필요한 정보를 담을 수 있다.
		String l = "http://192.168.2.71:8081/study3/Test126.jsp?pw=1234";
		HttpGet httpGet = new HttpGet(l);
		
		// 요청정보에 헤더를 조작할 수 있는 ㅕㅇ지를 제공한다.
		httpGet.addHeader("User-Agent","Mozila/5.0");
		
		// execute 실제로 요청/응답을 수앻한다. hhtpResponse가 응답한다.
		CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
		
		int resCode = httpResponse.getStatusLine().getStatusCode();
		System.out.println(resCode);
	}
}

 

- httpClient 는 아파치 재단에서 URL 클래스를 훨씬 좋게 만든 것
- http 프로토콜로 요청/응답을 수행할 수 있다.
- 안드로이드 OS에도 표준탑재되어서 서버에서 정보를 다운받는 용도로 사용한다.- httpClient 는 아파치 재단에서 URL 클래스를 훨씬 좋게 만든 것
- http 프로토콜로 요청/응답을 수행할 수 있다.
- 안드로이드 OS에도 표준탑재되어서 서버에서 정보를 다운받는 용도로 사용한다.

- 우리는 GET 방식으로 사용하는 법을 배웠다.
- 정보를 서버에서 다운받는 것에는 차이가 없다.( GET/POST )
- 클라이언트에서 서버로 대량의 정보를 업로드 할 때는 POST방식을 써야한다.
   ( 대부분 GET 방식이지만 POST 방식으로 쓰고자 할 때는
      위의 코드와 많이 틀려지게 되니까 이점 유의할 것 )
- jar 파일은 lib 폴더에 properties 파일은 src 폴더에 넣는다.
   ( 그러면 classes 폴더에 자동으로 복사된다.
       실제 운영할때는 classes 폴더에 넣으면 된다 )
- webContent 안에 log4j_test.jsp 넣어서 테스트

 

 

- log4j.textjsp

commons-loggin.properties 

 

1번 - NoOpLog 비활성화

2번 - Log 활성화

 

 

log4j.properties : 로그파일

 

 

- 경로안에 로그를 기록할 log.txt 파일을 만들어준다.

- log.txt 파일에 동일한 경로에 tail.exe 를 생성한다.

 

 

- cmd 파일에서 확인한다.

 

- log4j_text.jsp 파일에서 실행하면 cmd 창에서 콘솔창 역할을 한다.

 

- 개발환경이 달라져 콘솔창에 System.out.println() 함수를 호출하지 못할 때

  이 프로그램을 사용한다.

 

1. commons.logging 을 실행한다.
   Log4JLogger : log4j 를 내부적으로 사용하겠다는 설정
   Log4JLogger 에 대한 설정이 log4j.properties 가 된다.
   log Property에서 출력 형태도 설정할 수 있다.
   
2. ConversionPattern 에서 로그파일의 형식을 지정할 수있는데
      매우 다양한 형식을 지정할 수 있다.
   - 단순히 콘솔에 찍어보는 걸 넘어서 내부적인 동작을 고스란히 담아낼 수 있다.
     로그파일 분석 툴을 이용하면 사이트 전반의 분석을 가능하게 한다.
   - 실전에서는 Util.L(...) 같은거 만들어서 쓰는 경우가 많다.

 

 

- 먼저 Util 클래스 안에 아래의 함수를 생성한다.

 

Test127.jsp

 

- 위와 같은 Util.l 함수를 활용하면, 어떤 jsp 파일에서도, 로그를 보내

  cmd 창에서 활용할 수 있다.

 

 

- 이런 로그파일을 활용하면 사용자의 서비스 경로를 로그파일로 관리할 수 있다.

- 이러한 로그파일 DB를 활용하여 분석 및 응용하면 데이터를 가공할 수 있다.

- log.info() 안에 접두어를 넣고, subString 등과 같이 문자열 관리하는 함수를 활용하면

  원하는 정보를 뽑아내 DB에 관리할 수 있다.

- ex) 시간 대 별 사용자 방문기록 / 서비스 이동 경로 / etc.. 

 

 

'교육과정 ( SW 개발자 심화과정 ) > Java' 카테고리의 다른 글

SW 심화과정 23일차  (0) 2019.08.07
SW 심화과정 22일차  (0) 2019.08.06
SW 심화과정 18일차  (0) 2019.08.02
SW 심화과정 17일차  (0) 2019.07.31
SW 심화과정 16일차  (0) 2019.07.30
Comments