티스토리 뷰

SW 개발/Java

Java에서 User-Agent 파써 사용하기

지단로보트 2016. 5. 20. 06:30

개요

User-Agent는 HTTP 요청시 헤더에 담겨 오는 정보로 요청 클라이언트의 디바이스 및 브라우저 정보를 담고 있다. 국제적으로 표준화되어 있지 않아 엄격히 관리되고 있지 않으며 어떤 값을 넣어도 상관없기 때문에 완전히 신뢰할 수 있는 데이터는 아니지만 간단한 통계 및 디바이스 특성에 따른 분기 처리에 있어 가장 기초가 되는 데이터이기도 하다.

Java 진영의 User-Agent 파써 도구들

User-Agent 파써의 관건은 자체적으로 보유한 데이터베이스의 양이 중요하다. 현재 이순간에도 실시간으로 새로운 User-Agent 정보가 추가되고 있기 때문이다. 데이터베이스가 주기적으로 갱신되지 않으면 새로운 기기, 새로운 브라우저에 대한 감지가 되지 않을 가능성이 높다.

  • user-agent-utils: Java 진영 최초의 User-Agent 파써이다. 현재 개발 중단되었다.

  • UADetector: Java 진영에서 가장 잘 만들어진 User-Agent 파써이다. 아쉬운 점은 2014-10 부로 User-Agent 데이터베이스의 업데이트가 중단되었다. 본 글에서 사용할 라이브러리이다.

  • uap-java: 사용자들의 참여로 현재까지 계속 User-Agent 데이터베이스가 업데이트되고 있는 uap-core 기반의 파써이다. 데이터베이스의 주기적 갱신이라는 측면에서 가장 높은 점수를 주고 싶다.

UADetector, 의존성 추가

본 글에서 소개할 파써는 UADetector이다. 먼저 /build.gradle 파일에 아래와 같이 라이브러리 의존성을 추가한다.

dependencies {
    compile group: 'net.sf.uadetector', name: 'uadetector-core', version: '0.9.22'
    compile group: 'net.sf.uadetector', name: 'uadetector-resources', version: '2014.10'
}

사용 예

String userAgent = "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";

// User-Agent 데이터베이스를 로드하여 파써를 초기화한다. 초기화는 소모적인 작업이므로 Spring 환경의 경우 Bean으로 관리하는 것을 추천한다.
UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser();

// ReadableDevieCategory.Category를 반환한다.
// PERSONAL_COMPUTER, SMARTPHONE, TABLET, SMART_TV, WEARABLE_COMPUTER, GAME_CONSOLE, PDA, OTHER, UNKNOWN을 반환한다.
parser.parse(userAgent).getDeviceCategory().getCategory();

// ReadableOperatingSystemFamily.OperatingSystemFamily을 반환한다.
// WINDOWS, MAC_OS, BSD, LINUX, ANDROID, IOS, BLACKBERRY_OS, UNKNOWN 등을 반환한다.
parser.parse(userAgent).getOperatingSystem().getFamily();

// UserAgentType을 반환한다.
// BROWSER, MOBILE_BROWSER, OFFLINE_BROWSER, ROBOT, LIBRARY, UNKNOWN 등을 반환한다.
parser.parse(userAgent).getType();

// UserAgentFamily를 반환한다.
// CHROME, CHROME_MOBILE, FIREFOX, MOBILE_FIREFOX, SAFARI, MOBILE_SAFARI, IE, IE_MOBILE, UNKNOWN 등을 반환한다.
parser.parse(userAgent).getFamily();
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함