참 많은 일을 할 수 있는 Redirector

오늘 소개하는 확장은 Redirector이다. 사용자가 요청한 주소를 정한 규칙에 따라 실시간으로 바꿔치기할 수 있는 확장이다. 이런 확장이 왜 필요할까 싶지만 의외로 쓰임새가 많다. 이 글에서는 Redirector을 이용해 여러 문제에 대한 해결법을 소개하고 있다. Warning.or.kr에서 차단한 4shared.com과 같은 사이트에 우회 접속할 수 있는 방법, 크로미움 계열의 브라우저에서 빠른 검색의 기본 검색엔진으로 google.com을 사용할 수 있는 방법, 구글 뉴스를 날짜순으로 정렬할 수 있는 방법 등을 소개하고 있다.

내가 구글(Google)을 좋아하는 이유는 여러 가지가 있다. 그 중 하나는 네이버처럼 사용자를 사육하려 들지 않는다는 점[1]도 포함된다. 사육당하는지 모르는 네이버 사용자들의 충성도는 세계 어디에 내놔도 부럽지 않을 정도로 견고하다. 자체 DB 밖에 검색하지 못하는 네이버 검색 점유율이 87.2%이나 되는 가장 큰 이유다[2]. 또 자신도 모르는 체 '철저히 사육된 사용자'는 네이버를 인터넷으로 인식한다[3]. 더 큰 문제는 이런 사람들이 네이버에는 적지 않다는 점이다.

그런데 언제부터인지 모르겠지만 한국 구글이 네이버를 따라하기 시작했다. 네이버로 퇴화하는 구글?라는 글[4][5]에서 한번 설명했지만 최근에는 집착을 넘어 병적으로 바뀐 것이 아닌가 하는 생각도 든다. 구글을 좋아해도 한국 구글은 사용하지 않는다. 네이버스런 배치를 싫어하기 때문이다. 따라서 지금까지 기본 검색엔진으로 google.com을 등록하고 사용해 왔다.

역시 언제부터인지 모르겠지만 google.com으로 검색해도 google.co.kr로 검색 결과를 표시했다. 물론 google.co.kr로 접속한 뒤 아래쪽의 google.com 사용을 클릭하면 웹의 기본 검색을 google.com으로 바꾸는 것은 가능하다. 그러나 주소 표시줄에 검색어를 입력해서 검색한 결과는 항상 한국 구글(google.co.kr)을 검색한 결과가 나타났다.기본 검색 엔진을 바꾸고 크롬 설정 파일을 직접 변경해도 마찬가지였다.[4]

오페라도 비슷했다. 처음에는 기본 검색 엔진을 google.com으로 바꾸면 빠른 검색의 결과도 google.com에서 가져왔다. 그런데 갑자기 기본 검색 엔진을 바꿔도 항상 한국 구글을 통해 가져오도록 바뀌었다. 결국 오페라 설정 파일에서 접속하는 위치를 us로 변경해서 사용해 왔다. 그런데 그런데 오페라가 판올림되며 접속 지역을 바꾸는 것까지 막혀버렸다[6][4][7]. "안도면 되게하라!"가 내 철학 중 하나이기 때문에 빠른 검색에 google.com을 사용할 수 있는 방법을 궁리하게 되었다.

쓰임새가 많은 Redirector

Railway Siding

리다이렉터는 어디에나 있다. 진행 방향을 살짝 바꿔주는 Railway Siding도 이런 리다이렉터의 하나다.

그럼 빠른 검색에서 google.com을 사용할 수 없을까? 일단 이런 현상은 모든 크로미움 계열 브라우저(크롬, 비발디, 오페라 등)에서 발생한다. 크로미움 계열의 브라우저에는 default_partner_content.json 파일이 포함되어 있다. 이 파일에는 국가별 구글 주소가 등록되어 있다. 아마 설정과 관계없이 이 파일에 저장된 값을 빠른 검색에서 사용하도록 하드 코딩되어 있는 것으로 추정하고 있다[8][9].

브라우저에 하드 코딩이 되어 있다면 google.co.kr에서 가져오는 것은 바꿀 수 없다. 그러나 방법이 없는 것은 아니다. google.co.kr이라는 주소를 google.com이라는 주소로 중간에서 바꿔치기 하면 되기 때문이다. 빠른 검색 문제가 발생하기 전에도 Redirector로 여러 문제를 해결해 왔다. 리다이렉터(Redirector)가 사용자의 요청[10]을 정해진 규칙에 따라 실시간으로 다른 주소로 바꿔주는 확장이기 때문이다. 구글 웹 스토어에는 이름이 같은 Redirector가 많다. 주된 기능은 모두 비슷하지만 내가 추천하는 확장은 REDIRECTOR이다.

다운로드: REDIRECTOR

Redirector 규칙

리다이렉터(Redirector)는 기본적으로 사용자가 어떤 주소를 입력[10]하면 미리 정한 규칙에 따라 주소를 바꿔준다. 사용자가 입력한 주소외에도 스크립트, IFrame 등 브라우저가 내부적으로 요청하는 대부분의 주소를 바꿀 수 있다. 지원하는 패턴은 별표(*)를 사용하는 '만능 문자'(Wildcard)나 검색한 패턴을 저장해서 사용할 수 있는 '정규식'(Regular Expression)이다. 만능 문자를 이용한 패턴은 제한이 많기 때문에 정규식을 사용하는 것이 좋다. 정규식에 대한 부분은 관련 글(1, 2)을 참조하기 바란다. 리다이렉터 옵션을 클릭하고 'Create new redirect'를 클릭하면 다음과 같은 화면이 나타난다.

Create new redirect

이 창에서 설정할 수 있는 옵션은 다음과 같다. 결론부터 이야기하면 핵심은 찾을 패턴(Include pattern)과 전환 패턴(Redirect to)이다.

항목 설명
설명 Description: 규칙을 구분할 수 있는 이름을 입력한다.
  예: Bypass 4shred
URL 예: Example URL: 변환할 주소를 그대로 입력한다.
  예: http://www.4shared.com/rar/OVLcs4ERce/DM_OST.html
찾을 패턴 Include pattern: URL에서 찾을 패턴을 만능 문자(*) 또는 정규식을 사용해서 입력한다.
  예: http://(.\*)\.4shared\.com/(.\*)
전환 패턴 Redirect to: 전환할 패턴을 입력한다. 정규식을 사용한다면 ()는 순서대로 $1~$9로 참조할 수 있다.
  예: https://$1.4shared.com/$2
패턴 유형 Pattern type: 패턴 유형을 선택한다. 만능 문자, 정규식 중 하나를 택한다.
적용 결과 Example result: 패턴을 적용한 주소가 자동으로 표시된다.
  예: https://www.4shared.com/rar/OVLcs4ERce/DM_OST.html
제외 패턴 Exclude pattern: 제외할 패턴을 입력한다.
처리 방법 Process matches: 주소를 인코딩, 디코딩할 필요가 있을 때 사용한다.
  예: URL 인코딩, URL 디코딩, 베이스64 디코딩, 기본값은 없음(No processing)
적용 대상 Apply to: 적용할 대상를 선택한다. 보통 Main Window(Address bar)를 택하면 된다.
  Main Window(Address bar): 주소 표시줄에 입력한 URL 또는 브라우저의 요청에 적용된다.
  IFrames: IFrames 주소에 적용된다.
  Stylesheets: 스타일 주소에 적용된다.
  Scripts: 스크립트 주소에 적용된다.
  Images: 이미지 주소에 적용된다.
  Objects (예. 플래시 비디오, 자바 애플릿): 개체 주소에 적용된다.
  XMLHttpRequests(Ajax): AJax 요청 주소에 적용된다.

규칙을 설정하는 법

http://www.4shared.com/rar/OVLcs4ERce/DM_OST.html → 
                https://www.4shared.com/rar/OVLcs4ERce/DM_OST.html

일단 예로서 4shared.comhttp로 요청했을 때 자동으로 https로 바꾸는 방법을 생각해 보자. httphttps로 바꾸면 되기 때문에 '찾을 패턴'(Include pattern)을 http(.*)로 하고 '전환 패턴'(Redirect to)을 https$1로 하면 될 것 같다. 그러나 이렇게 하면 모든 http 요청을 https로 바꾸게 된다. 따라서 주소를 프로토콜, 호스트 이름, 요청의 세 부분으로 나누어 고정된 부분변하는 부분을 나누어 생각하는 것이 좋다.

  1. *://*.4shared.com/*
    변하는 부분은 프로토콜, 호스트이름, 주소 뒤의 요청이기 때문에 일단 만능 문자로 바꾸면 이렇게 된다. 호스트 이름 중 4shared.com은 바뀌지 않기 때문에 *.4shared.com으로 했다.
  2. http://*.4shared.com/*
    어떤 프로토콜은 어떻게 바꿀 것인지 알고 있기 때문에 프로토콜도 http로 고정한다. 값이 두 개이기 때문에 변수로 다루는 것 보다는 직접 입력하는 것이 더 낫다.
  3. http://.*\.4shared\.com/.*
    만능 문자와 정확히 같은 역할을 하는 정규식으로 바꿨다. 정규식은 변수를 사용할 수 있기 때문이다.
  4. http://(.*)\.4shared\.com/(.*) - 찾을 패턴(Include pattern)
    전환 패턴(Redirect to)에서 사용하기 위해 패턴을 괄호로 묶었다. 졍규식에서는 이렇게 괄호로 묶으면 묶은 순서대로 $1~$9의 변수를 이용해서 참조할 수 있다. 예를 들어 $1에는 www가 저장되며 $2에는 rar/OVLcs4ERce/DM_OST.html가 저장된다.
  5. https://$1\.4shared\.com/$2 - 전환 패턴(Redirect to)
    httphttps로 바꾸고 4단계에서 저장된 wwwrar/OVLcs4ERce/DM_OST.html를 가져오기 위해 변수 $1$2를 사용했다.

찾을 패턴과 전환 패턴이 결정되면 '패턴 유형'(Pattern type)은 '정규식'(Regular Expression), '적용 대상'(Apply to)을 Main Window(Address bar)으로 하고 저장한다. 그리고 http://www.4shared.com으로 접속하면 자동으로 http 프로토콜이 https로 변환된다. 참고로 이 방법은 Warning.or.kr를 우회하는데도 사용할 수 있다. 물론 접속하려는 사이트가 https를 지원해야 한다. 또 앞에서 설명했지만 리다이렉터를 사용할 때 핵심은 찾을 패턴(Include pattern), 전환 패턴(Redirect to)이다. 이 두 개만 정확히 찾으면 끝이다. 마지막으로 Examples을 통해 찾을 패턴과 전환 패턴이 맞는지 바로 확인할 수 있다.

Bypass 4shared

인터넷에서 필요한 자료를 검색하다 보면 의외로 많이 등장하는 사이트가 4shared.com이다. 다른 웹 하드에 비해 생긴지 오래됐고 한동안 공개 업로드/다운로드를 지원했기 때문으로 보인다. 그런데 작년부터 Warning.or.kr에서 4shared.com도 막기 시작했다. 바보도 할 수 있는 Warning.or.kr 우회하기라는 글에서 설명한 것처럼 Warning.or.kr을 우회하는 방법은 아주 많다. 특히 https를 지원하는 사이트라면 간단히 httphttps로만 바꾸면 된다.

4shard.comhttps를 지원한다. 따라서 http://4shared.com/으로 접속하면 차단 메시지가 뜨지만 https://4shared.com/로 접속하면 잘 접속된다. 4shared.com을 자주 사용하는 것은 아니다. 그러나 일부 검색 결과에도 http로 링크되어 있고 다른 사이트에서 4shared.com을 링크할 때도 http로 되어 있는 때가 많다. 이럴 때 매번 https로 바꾸는 것이 귀찮아 추가한 규칙이다. 앞에서 자세히 설명했으로 규칙에 대한 설명은 생략하겠다.

Bypass 4shred

찾을 패턴: http://(.*).4shared.com/(.*)
전환 패턴: https://$1.4shared.com/$2
예와 결과: http://www.4shared.com/rar/OVLcs4ERce/DM_OST.html → 
                        https://www.4shared.com/rar/OVLcs4ERce/DM_OST.html
적용 대상: Main window (address bar)

Google.com

위에서 설명한 것처럼 한국 구글의 요청을 google.com으로 바꾸는 규칙이다. https://www.google.co.kr/search로 들어온 요청을 https://www.google.com/search로 바꾼다. 그리고 search 이후의 검색 질의어((.*))를 google.com에 전달($1&fg=1)한다.

Google.com

검색 패턴: https://www.google.co.kr/search(.*)
전환 패턴: https://www.google.com/search$1&fg=1
예와 결과: https://www.google.co.kr/search?q=구글 →
                                        https://www.google.com/search?q=구글
적용 대상: Main window (address bar)

Old Apps Bypass

올드 앱은 이름처럼 특정 프로그램의 구판을 받을 수 있는 사이트다. 예를 들어 새로 판올림을 했는데 프로그램이 동작하지 않고 공식 사이트에서 구판을 찾을 수 없을 때 주로 사용한다. 이 사이트는 다운받기 전에 다운로드 페이지를 보여주는데 이 것이 귀찮아 다운로드 링크를 클릭하면 바로 파일을 받도록 규칙을 추가한 것이다.

Old Apps Bypass

검색 패턴: http://www.oldapps.com/(.*)\?old_(.*)
전환 패턴: http://www.oldapps.com/$1?old_$2?download
예와 결과: http://www.oldapps.com/utorrent.php?old_utorrent=16156 →
                http://www.oldapps.com/utorrent.php?old_utorrent=16156?download
적용 대상: Main window (address bar)

Google News sorting by Date

사실 많은 사람들이 뉴스를 포털을 통해 소비한다. 과거 언론 시장은 생산자(언론사)와 소비자(독자)가 직접 연결된 구조였다. 그러나 인터넷과 포털이 발전함으로서 생산자→유통자→소비자[11]로 중간에 포털이 뉴스를 유통하는 사업자로 끼어들었다[12]. 사용자는 포털 하나만 상대하면 되기 때문에 편한 측면이 분명히 있다. 그러나 생산자는 자신이 생산한 컨텐츠에 대해 정당한 보상을 받기 힘들다.

따라서 생산자가 정당한 보상을 받을 수 있도록 기사 수집은 RSS로 하고 기사는 각 언론사에서 읽는다. 광고가 많아 보기 힘들다는 사람도 있다. 또 미성년자가 보기 민망한 광고도 많다. 그러나 불필요한 광고는 차단하면 되고 광고가 정보가 될 때도 있다. 따라서 성인 광고나 마우스를 따라다니는 키워드 광고처럼 정말 성가신 광고가 아니라면 신경쓰지 않는 편이다. 또 기사를 검색할 일이 있으면 네어버나 다음이 아니라 구글을 이용해서 검색한다. 문제는 구글 뉴스는 '날짜순'이 아니라 '관련순'으로 정렬된다. 이 때문에 구글 뉴스를 날짜순으로 자동 정렬하도록 추가한 규칙이다.

Google News sorting by Date

검색 패턴: https://news.google.com/news/story?(.*?)$
전환 패턴: https://news.google.com/news/story$1&scoring=n
예와 결과: https://news.google.com/news/story?q=컷오프&lr=Korean&hl=ko →
                 https://news.google.com/news/story?q=컷오프&lr=Korean&hl=ko&scoring=n
적용 대상: Main window (address bar)

날짜순 정렬이 안되는 구글 뉴스

구글 뉴스를 검색하고 관련기사를 클릭하면 항상 관련순으로 정렬된다. 날짜순으로 정렬하기 위해 날짜순을 클릭하면 그림 오른쪽처럼 찾을 수 없다는 메시지가 뜬다[13]. 코딩 형태를 보면 자바스크립트에서 인코딩하는 과정에 오류가 있는 것으로 보인다. 참고로 검색어는 어제 논란이 되었던 '안철수 연출'이다.

IT World

IT World는 IT에 관련된 유용한 기사와 자료를 제공하는 사이트다. 다만 기사가 약간만 길어도 기사를 통으로 보여주지 않고 여러 페이지의 슬라이드로 보여준다. 상황에 따라 괜찮을 수도 있지만 기사를 다 읽기 위해 클릭을 몇번 씩해야 하는 문제가 있다. 페이지가 많을 때는 20 페이지가 넘을 때도 있기 때문에 오히려 불편했다. 반면 프린트 페이지는 항상 하나의 페이지로 표시된다. 따라서 분할된 페이지를 하나의 페이지로 보기 위해 추가한 규칙이다. itworld.co.kr/slideshow/xxx와 같은 주소를 itworld.co.kr/print/xxx로 전환하며 인쇄용 페이지가 표시된다.

IT World

검색 패턴: http:\/\/(www\.itworld\.co\.kr|www\.ciokorea\.com)\/(slideshow|news)\/(.*)
전환 패턴: http://$1/print/$3
예와 결과: http://www.itworld.co.kr/slideshow/1995 →
                        http://www.itworld.co.kr/print/1995
적용 대상: Main window (address bar)

Google to Daum

외국 사이트를 사용하다 보면 구글 지도 링크를 제공하는 사이트가 많다. 그런데 외국은 몰라도 국내는 구글 지도보다 다음 지도의 품질이 더 낫다. 따라서 '구글 지도' 링크를 '다음 지도'에서 볼 수 있도록 추가한 규칙이다. 아래 규칙은 구글 지도의 위도, 경도를 다음 지도로 전달하는 규칙이다.

Google to Daum

검색 패턴: http:\/\/maps\.google\.com\/maps\?q=(.*)
전환 패턴: http://map.daum.net/link/search/$1
예와 결과: http://maps.google.com/maps?q=37.23605223,127.42891566 →
                    http://map.daum.net/link/search/37.23605223,127.42891566
적용 대상: Main window (address bar)

남은 이야기, 트위터 바이러스 링크이즈(Linkis)

트위터linkis.com/www.mediatoday.co.kr/izBO6와 같은 링크가 종종 찾을 수 있다. 긴 주소를 짧게 줄이는 서비스같지만 전혀 아니다. 일단 다음 그림을 보자. 기사의 내용을 가리고 트위터에 연결할 것을 요구하는 창이 나타난다. 지금은 X를 클릭하면 연결 창이 사라지기 때문에 그나마 낫다. 그런데 과거에는 트위터에 연결하지 않으면 글을 읽을 수 없었다[4].

링크이즈: 트위터 바이러스

더 큰 문제는 기사를 읽기위해 트위터에 연결하면 트위터에 올리는 모든 링크를 링크이즈로 바꾼다. 이 때문에 한때 트위터 링크가 링크이즈로 도배가된 적도 있었다. linkis.com/www.mediatoday.co.kr/izBO6를 보면 분명 미디어 오늘 기사다. 그런데 링크이즈를 통해 미디어 오늘에 연결하는 것이 아니라 미디어 오늘 기사를 링크이즈에서 보여주는 방식을 택하고 있다. 따라서 링크이즈에 접속해도 기사의 실제 주소를 알 수 없다[14]. 링크이즈의 이런 작태 때문에 제목으로 기사를 찾아 읽었었다. 또 가져온 기사를 마치 링크이즈의 글처럼 보여주는 방식 때문에 구글을 검색하면 많은 글이 링크이즈의 글로 검색되던 때도 있었다[4].

결국 참지 못하고 링크이즈를 우회하는 규칙을 REDIRECTOR에 추가했다. 다행히 링크이즈의 문제를 인식하는 사람들이 많아져 요즘에는 링크이즈는 찾기 힘들다. 링크이즈의 이런 동작 방식은 바이러스가 순식간에 퍼지다 갑자기 사라지는 것과 꽤 비슷하다. 그러나 혹시 모르기 때문에 '트위터/설정 및 개인정보/어플리케이션'에 링크이즈가 있는지 확인하기 바란다. 만약 있다면 꼭 접근 차단하기 바란다. 난 링크이즈를 트위터 바이러스라고 생각한다.

오늘 공개한 규칙에 링크이즈는 없다. 단순히 주소를 바꾸는 것으로 원 기사의 주소를 알 수 없다. 따라서 블로그에 링크이즈에서 원래의 주소를 가져오는 프로그램을 짰다. 리다이렉터는 링크이즈 주소를 블로그 서버 프로그램에 넘기는 역할을 한다. 아직도 링크이즈에 짜증난 사람이 많아 공개 요청이 많다면 공개할 수도 있다.

마지막으로 오늘 소개한 규칙 외에 내가 사용하고 있는 규칙은 10여개 정도 더 있다. 다만 이 규칙들은 링크이즈처럼 공개할 수 없는 사정이 있어 공개하지 않은 것이다. 그러나 정규식만 알면 리다이렉터는 손 쉽게 사용할 수 있다. 아울러 상황에 따라 스스로 추가하면 되기 때문에 이 정도의 예제면 배우는데 충분할 것이라고 생각한다.

관련 글타래


  1. 사육이라는 말에 기분 나쁠 수 있다. 그러나 무턱대고 기분 나뻐하기 보다는 사육된 것인지 아닌지 먼저 판단해 보기 바란다. 판단하는 방법은 간단하다. 네이버없이 인터넷을 쓰는데 지장이 없다면 '그냥' 사용자다. 그러나 네이버 없이 인터넷을 쓸 수 없다면 사육된 것이 맞다. 
  2. 이런 점유율을 가지고 조작도 열심히 하는 업체가 네이버다. 네이버는 아니라고 하지만 네이버의 답변에 조작질에 대한 답을 찾을 수 있다. "실시간 검색어를 실수로 지울 수 있다"는 답변은 "실시간 검색어를 조작할 수 있다"는 자백이기도 하다. 
  3. 모든 네이버 사용자가 아니라 이들 중 '철저히 사육된 사용자'를 말한다. 
  4. 기억에만 의존한 것이라 부정확할 수 있다. 또 당시의 상황과 지금의 상황이 다르기 때문에 이 부분을 고려하고 읽기 바란다. 
  5. 네이버로 퇴화하는 구글?이라는 글을 쓴 뒤 한국 구글을 버렸다. 즉, 이 글을 쓰고 난 뒤부터 한번도 한국 구글을 사용해 본적이 없다. 크롬, 오페라 빠른 검색에서 자동으로 한국 구글의 검색 결과를 가져오기 전까지. 
  6. 오페라의 기반은 크로미움이다. 크로미움은 구글에서 지원하는 공개 소스 프로젝트로 오페라가 의도하던 의도하지 않던 구글의 입김을 무시할 수 없었을 것이라고 본다. 
  7. 우리나라에서 구글의 점유율을 높이려는 꼼수로 보인다. 만약 그렇다면 세계의 검색 시장을 지배하고 있는 공룡 구글의 IQ가 공룡 수준으로 퇴화한 것이라는 생각이 든다. 
  8. 처음에는 default_partner_content.json 파일을 바꿔서 사용했었지만 얼마 뒤 막혔다. 그래서 접속 지역을 us로 설정해서 사용했었지만 이 마저도 막힌 것이다. 
  9. 비발디는 default_partner_content.json 파일이 존재하지 않는다. 그러나 오페라, 크롬과 마찬가지로 한국 구글에서 가져오는 것으로 봐서 하드 코딩한 것으로 생각한다. 
  10. 사용자가 주소 표시줄에 입력한 주소 뿐만아니라 브라우저가 내부적으로 보내는 요청을 포함한다. 
  11. 과거에도 가판을 통한 유통이 존재했지만 포털과 같은 주도 사업자는 아니었다. 또 배달을 통한 유통도 존재했지만 대부분 언론사에 종속된 관계였다. 즉, 과거에도 유통망은 있었지만 종속관계와 규모가 달랐다. 
  12. 악풀러가 많아진 이유 중 하나도 바로 이런 유통구조 때문이라고 생각한다. 
  13. 벌써 수년째 같은 현생이 발생하고 있지만 아직까지 수정되지 않고 있다. 이 현상은 브라우저를 바꿔도 한국 구글에서 접근해도 마찬가지다. 
  14. 요즘은 링크이즈로 접속하면 기사를 링크한 트윗이 아래에 표시되며 이 트윗의 X단추를 클릭하면 미디어 오늘의 링크로 바뀐다. 오늘 글을 쓰며 확인한 것이다.