ABOUT ME

-

  • Android) 안드로이드 네트워크 프로파일러 사용해보기 feat) 웹 파싱 방법
    Android 2021. 8. 11. 11:43


     

    오늘은 안드로이드에서 웹 페이지를 파싱 할 때 도움이 될 수 있는 내용을 소개하려고 합니다.

     

    Network Profiler

    • 실시간 네트워크 활동을 표시하며 송수신된 데이터 및 현재 연결 수를 보여주는 기능을 합니다.
    • 네트워크 프로파일러를 사용하여 네트워크 활동이 급증하는 부분 등을 파악하여 앱의 성능을 개선시킬 수 있습니다.
    • View -> Tool Windows -> Profiler를 클릭하거나 안드로이드 하단 툴바에서 Profiler 아이콘을 클릭하여 열 수 있습니다.

     

     

     

    Usage

    • 프로파일러에서 NETWORK 부분의 아무 영역에 클릭을 해주면 네트워크 프로파일러로 이동합니다.

     

    • 네트워크 프로파일러를 실행하면 위와 같이 타임라인에 표시됩니다.
    • 1번처럼 드래그하여 구간을 선택할 수 있습니다.
    • 2번에서는 좀 더 자세한 네트워크 활동을 볼 수 있습니다.

     

    • Connection View : 이곳에서는 앱의 모든 CPU 스레드에 걸쳐 선택된 부분 동안 송수신된 파일의 목록이 나열됩니다. 각 열을 눌러 목록을 정렬할 수 있습니다.
    • Thread View : 앱의 CPU 스레드의 네트워크 활동이 표시됩니다. 각 파일 목록의 네트워크 요청을 담당하는 앱의 스레드를 확인할 수 있습니다.

    • 3번에서는 목록의 데이터에 대해 좀 더 자세한 정보를 확인할 수 있습니다.
    • 데이터의 용량, 사이즈, 사용한 스레드, url, 파일 형식 등등.
    • View ParesdView Source를 통해 지정된 텍스트나 원시 텍스트로 해당 내용을 볼 수 있습니다.

     

    URL url = new URL(MY_URL_EN);
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    ...
    // Sets acceptable encodings in the request header.
    urlConnection.setRequestProperty("Accept-Encoding", "identity");
    • 만약 HttpUrlConnection을 사용하는 경우 위의 코드처럼 setRequestProperty 메소드를 사용해주지 않으면 Request 탭에 헤더가 표시되지 않습니다.

     

    When To Use?

    • 현재 네트워크 프로파일러는 HttpURLConnectionOkHttp 라이브러리만 지원하고 있습니다. 
    • 그래서 웹사이트에서 XML이나 HTML을 파싱하거나 크롤링하는 경우 사용하면 도움이 된다고 생각합니다.
    • 또한, 안드로이드에서 웹사이트의 데이터를 로딩하는데 유난히 오래 걸리는 경우 해당 데이터의 용량을 파악하여 앱의 성능을 개선시키는데 도움이 될 것 같습니다.

     

    XML 파싱

    • DOM(Document Object Model) - 문서 내용을 모두 해석 후, 메모리에 트리 구조로 파싱. 메모리가 모두 로드되어 있어 검색, 수정 등이 빠르지만 전체를 로딩해야 하므로 속도가 느리고 메모리 사용량이 많습니다.
    • SAX(Simple API for XML) - XML 데이터를 라인 태그(시작 태그, 종료 태그) 단위로 순차적으로 읽어가며 파싱. 메모리를 비교적 적게 차지하고, XML 파싱 속도가 빠름. 지나간 Element를 읽기 위해서는 처음부터 다시 읽어햐 하고 DOM보다 복잡하고 어려움.

    HTML 파싱

    • Jsoup - 자바로 만들어진 HTML 파서 라이브러리. 문자열을 트리 형태로 펼쳐 메서드를 이용하여 원하는 DOM을 찾을 수 있도록 해줌. Element를 탐색하는 기능 제공

    HtmlUrlConnection 파싱

    • HTTP 통신을 위한 URL을 연결하는 방식.
    • 파싱을 위해 일일이 문자열을 분석하기가 힘듭니다. 그래서 정규식 사용하는 것을 추천.

    Dom을 찾기 위한 속성

    • tag - HTML 문서의 구조를 나타내기 위한 명령어(중복 가능)
    • id - 하나의 DOM을 구분하기 위해서 태그에 붙인 식별자(중복 불가)
    • class - 여러 DOM에 동일한 디자인을 적용하기 위한 라벨(중복 가능)
    • name - 서버에게 데이터를 전달할 때 서버에서 인식할 라벨(중복 가능)

    Dom을 찾기 위한 메소드

    • getEelementById - Element 객체 반환 / 없으면 null
    • getElementsByTagName - Element 객체 반환 / 없으면 size = 0
    • getElementsByClass - Elements 객체를 반환 / 없으면 size = 0

    Element 객체

    • attr(String key)로 속성의 값 얻고, attr(String key, String value)로 속성 값 설정 가능.
    • id(), className()으로 id, class 속성 값 가져옴. class는 여러 개 지정되면 하나의 문자열로 반환.

    XML, HTML 차이

    • HTML은 데이터의 표현에 목적을 두어 정해진 태그를 가지고 표현. 웹 환경에서 작동되는 언어, 웹 브라우저라가 있어야 실행 가능.
    • XML은 데이터 교환을 위한 구조정의에 목적을 두어 정해진 태그가 존재하지 않음. 특정 환경에 종속되어 있지 않음.

     


    Preference

    네트워크 프로파일러를 사용하여 네트워크 트래픽 검사

    반응형

    댓글

Designed by Me.