Jan 022014
 

현재 운영중인 jinukbaek.com 홈페이지는 블로그 페이지에 들어오기 위해 "jinukbaek.com/blog"까지 입력을 해야한다. 하지만 jinukbaek.com 도메인으로는 현재 블로그 밖에 운영하고 있지 않기 때문에 자동으로 이동(리다이렉션, Redirection)되게 해두었다. 하지만 문제는 Javascript로 이동하게 해두었다는 점에 있었다.

Redirection

Javascript와 301리다이렉션과 차이는 빨간색부분이지만 웹브라우져는 200의 경우 html코드를 실행을 해야하기 때문에 반응 속도는 좀 더 늦다.

웹 브라우져는 "http://jinukbaek.com"으로 접속을 먼저 하게 되면 서버는 특별한 설정을 하지 않았다는 전제하에 index.html을 찾아서 그림과 같이 "200 OK"라는 메시지와 index.html의 내용을 같이 보내게 된다. 이 파일을 웹 브라우져는 읽어 들여서 실행을 하게 된다. 요는 불러와서 자바스크립트를 따로 실행해야한다는 점에 있다. 비록 필자가 "jinukbaek.com/blog"로 이동하라는 코드를 넣어놨다 하더라도 웹 브라우져 입장에서는 html파일의 내용이 무엇일지 예측할 수 없기 때문에 일단 실행을 해야한다. 하지만 301과 같이 상태코드(300대의 상태 코드는 페이지 이동을 나타냄)를 이용해서 리다이렉션을 하기 때문에 딱히 내용을 확인하지 않아도 바로 이동하도록 하게 할 수 있다. 그래서 속도 향상과 검색봇이 크롤링1을 제대로 하게 된다. 제일 좋은 것은 "jinukbaek.com/blog" 주소를 블로그로 쓰지 않고 "jinukbaek.com"에 바로 블로그가 연결되도록 하는 것이 좋지만, 추후에 다른 서비스 확장도 고려하고 있는 필자의 입장에서는 어쩔 수 없는 선택이였다.

구글의 경우에는 자바스크립트까지 분석해서 크롤링하는지 모르겠지만 내용도 문제없이 검색이 되었었는데 네이버는 상황이 다른 듯 했다. 네이버 검색 신청을 하고 키워드로 검색해도 결과가 안나와서 "블로그 RSS 등록2" 을 찾아서 신청해야 했다. 다음의 경우에도 "블로그 RSS 등록3"을 통해서 검색이 되도록 하였다. 그렇게 검색이 안되는 문제를 해결하였다. 필자가 블로그 사이트를 만든지 시간이 꽤 지났기 때문에 Javascript를 통해서 리다이렉션을 했었는지 완전 잊고 있었다. 그런데 그렇게 했는지 다시 확인하게 된 것은 한 신문기사 때문이였다.

(9) JavaScript나 flash로 redirect 하지 말 것4

필자가 설마하고 확인을 해 보았더니 정말로 자바스크립트로 블로그페이지로 이동되게 되어 있었다. 봇이 자바스크립트까지 해석하지는 않을태니 당연히 크롤링이 안됬고 따라서 검색이 안되는 것이었다. 아마 "index.html" 파일 만들고 코드 몇 줄 입력하면 되기 때문에 그렇게 했을 것이다. 자바스크립트 리다이렉션은 서버 재시작이나 설정을 바꾼다거나 하는 작업 없이 아래 코드를 입력하면 된다.

<script>
	window.location = "/blog";
</script>

이참에 문제있는 부분도 수정할겸 아파치 서버 설정을 바꾸어 "http://jinukbaek.com"으로 접속하면 301 코드를 리턴하여 이동하도록 수정하였다. 수정한 환경설정 파일 경로는 "/etc/apache2/sites-enable/000-default.conf"이며 사용자 환경에 따라서 경로는 달라질 수도 있다. 수정은 환경설정 파일의 상황에 따라서 달라지는데 보통 VirtualHost 태그 사이에 넣으면 된다. 수정하고 나서 아파치 서버를 제시작(sudo service apache2 restart) 하는 것을 잊지 말자.

RedirectMatch 301 ^/$ /blog 
# RedirectMatch : 요청 주소가 해당하는 정규표현식을 만족할 경우 리다이렉션
# 301 : 리다이렉션시 http응답 코드
# ^/$ : 시작시 "/"로 시작하고 끝나는 문자열에 대해서. (즉 "/"로 요청이 왔을 때만)
# /blog : "/blog" 경로로 리다이렉션

리다이렉션시 웹브라우져가 자바스크립트 파싱하고 실행하는 상황이 생략되었기 때문에 초기 접속 속도가 약간 향상 되었으며 네이버에서 RSS내용 이외의 것도 검색이 되기 시작하였다. 이것으로써 서버운영하면서 있었던 문제 하나를 해결하였다.

참고자료

  1. 웹 크롤러, http://ko.wikipedia.org/wiki/%EC%9B%B9_%ED%81%AC%EB%A1%A4%EB%9F%AC
  2. 네이버 도움말, https://help.naver.com/ops/step2/mail.nhn?catg=547&upCatg=264
  3. 다음 검색 등록, https://register.search.daum.net/index.daum
  4. 한세희, "네이버 검색에 잘 걸리는 웹페이지 만들기 비법은?", 전자신문, 2013년 12월 20일
Dec 032013
 

OSX에는 알프레드(http://www.alfredapp.com/)라는 앱이 있습니다. 이 앱은 쉽게 키보드로 여러 기능을 빠르게 실행할 수 있게 해줍니다. 기본적인 기능은 무료 버전을 다운로드 받으시면 됩니다. 하지만 Alfred에 기능(워크플로우)을 추가할 수 있는 기능은 따로 파워팩을 구매해야만 합니다.

이 앱을 사용하다 보니 네이버 검색이나, 사전에서 같은 것을 쉽게 쓸 수 있었으면 좋을 것 같다는 생각을 하게 되었습니다. 기존에 자동완성은 되지 않지만 브라우져 창을 열어 주는 것은 기존에 있었습니다. 저는 자동완성도 되길 원했기 때문에 간단히 만들어 보았습니다. 그리고 작성한 코드는 github에(https://github.com/Kuniz/alfnaversearch) 공개하였습니다.  아래 링크에서 다운 받으면 됩니다.

다운로드 

사용하면서 버그나 추가적으로 필요하신 기능같은게 있다면 댓글을 달아주세요. 가능한 범위 내에서 적용하도록 하겠습니다.

[수정 2014-04-18 01:32+0900] shasing님, 이재호님께서 제보해주신 부분 중 자동완성 후 브라우져 작동시 잘 못되는 문제 해결하였습니다.
[수정 2014-04-18 01:38+0900] shasing님께서 말씀하신 일본어 한자 자동완성 기능도 추가하였습니다.
[수정 2014-04-22 01:32+0900] shasing님께서 말씀하신 일본어 자동완성 버그 수정하였습니다.
[수정 2014-05-18 18:26+0900] 1. 국빵님께서 요청하신 중국어 자동완성 기능 넣었습니다.  2. 라이브러리 성능을 개선하였습니다. 기존에 쓰시던 분들도 다시 받아주세요 ㅎㅎ 3. 중국어 자동완성에 있어서 한글로 입력을 했을 때 한글로만 나오는건 네이버 중국어 사전 자동완성 기능이 그 부분만 제공하기 때문입니다 ㅠㅠ
[수정 2014-07-23 12:07+0900] 독일어, 한자사전 추가됬습니다.
[수정 2014-11-08 16:36+0900] 프랑스어 추가 및 링크 깨진 것 수정 하였습니다.
[수정 2016-07-02 01:26+0900] norux님이 워크플로우에 한글 디렉토리명이 있는 경우에 대한 버그 수정 기여해주셨습니다~ 감사합니다.  버그 수정한 버전 업로드 되어 있습니다!
[수정 2016-10-01 01:09+0900] 이탈리아어 사전 추가했습니다.
[수정 2016-10-15 22:30+0900] 러시아어, 스페인어, 태국어, 베트남어 사전 추가했습니다.
[수정 2016-12-11 15:07+0900] 러시아어, 스페인어, 태국어, 베트남어 사전 추가했습니다.
[수정 2016-01-01 16:05+0900] 중국어 사전 자동완성 결과 개선
[수정 2017-07-25 03:45+0900] 연관 프레임워크 업데이트 (시에라 백그라운드 버그 해결)

[수정 2017-12-14 02:06+0900] 독일어사전 API주소 변경

[수정 2021-01-01 12:38+0900] 네이버 자동완성 API주소 변경
[수정 2021-08-23 01:15+0900] 24개 언어 추가 및 일본어 사전 자동완성 주소 변경

[수정 2021-10-20 12:00+0900] 네이버 쇼핑 자동완성 적용

[수정 2022-01-04 01:50+0900] 각종 버그 수정 및 macos 등 지원 강화

[수정 2022-01-28 01:17+0900] na명령 버그 수정 및 영영사전 추가

[수정 2022-02-09 01:53+0900] python2/3 지원. @kw-lee 님 감사합니다 🙂 -> macOS 12.3에서 안될시 python3 설치 후 다운받아주세요.
 

[수정 2022-04-06 01:22+0900] 자동완성의 상세내용을 cmd+C 로 클립보드 복사되도록 기능 추가

사용방법


 na 명령 : 네이버 일반 검색을 수행합니다.

2013-12-03_20-36-02

ns 명령 : 네이버 쇼핑 검색을 수행합니다.

nae 명령 : 네이버 영어사전 검색을 수행합니다.

영어로 입력시 한글 단어가 나오며, 한글로 입력시 영어 단어가 나옵니다.

2013-12-03_20-36-35

2013-12-03_20-36-56

 

naj 명령: 네이버에서 일어사전 검색을 합니다.

로마자 입력 검색시 일문, 일어 검색시 한국어, 한국어 검색시 일어 단어가 출력됩니다.

2013-12-03_20-37-57

2013-12-03_20-37-24

2013-12-03_20-37-10

 

* `nak ...` : Naver Korean Dictionary (국어 사전)
* `nae ...` : Naver Korean-English Dictionary (영어 사전)
* `naee ...` : Naver English-English Dictionary (영어 사전)
* `naj ...` : Naver Korean-Japanese Dictionary (일본어 사전)
* `nac ...` : Naver Korean-Chinese Dictionary (중국어 사전)
* `nah ...` : Naver Hanja Dictionary (한자 사전)
* `nad ...` : Naver Korean-German Dictionary (독일어 사전)
* `naf ...` : Naver Korean-French Dictionary (프랑스어 사전)
* `nai ...` : Naver Korean-Italian Dictionary (이탈리아어 사전)
* `nar ...` : Naver Korean-Russian Dictionary (러시아어 사전)
* `nas ...` : Naver Korean-Spanish Dictionary (스페인어 사전)
* `nat ...` : Naver Korean-Thai Dictionary (태국어 사전)
* `nav ...` : Naver Korean-Vietnamese Dictionary (베트남어 사전)
* `nan ...` : Naver Korean-Indonesian Dictionary (인도네시아어 사전)
* `nau ...` : Naver Korean-Uzbekistan Dictionary (우즈베키스탄어 사전)
* `nane ...` : Naver Korean-Nepali Dictionary (네팔어 사전)
* `namn ...` : Naver Korean-Mongolian Dictionary (몽골어 사전)
* `namy ...` : Naver Korean-Burmese Dictionary (미안마어 사전)
* `nasw ...` : Naver Korean-Swahili Dictionary (스와힐리어 사전)
* `naar ...` : Naver Korean-Aramaic Dictionary (아랍어 사전)
* `nakm ...` : Naver Korean-Cambodian Dictionary (캄보디아어 사전)
* `nafa ...` : Naver Korean-Persian Dictionary (페르시아어 사전)
* `nahi ...` : Naver Korean-Hindi Dictionary (힌디어 사전)
* `nanl ...` : Naver Korean-Dutch Dictionary (네덜란드어 사전)
* `nasv ...` : Naver Korean-Swedish Dictionary (스웨덴어 사전)
* `nauk ...` : Naver Korean-Ukrainian Dictionary (우크라이나어 사전)
* `naka ...` : Naver Korean-Gruziya Dictionary (조지아어 사전)
* `nacs ...` : Naver Korean-Czech Dictionary (체코어 사전)
* `nahr ...` : Naver Korean-Croatian Dictionary (크로아티아어 사전)
* `natr ...` : Naver Korean-Turkish Dictionary (터키어 사전)
* `napt ...` : Naver Korean-Portuguese Dictionary (포르투갈어 사전)
* `napl ...` : Naver Korean-Polish Dictionary (폴란드어 사전)
* `nafi ...` : Naver Korean-Finnish Dictionary (핀란드어 사전)
* `nahu ...` : Naver Korean-Hungarian Dictionary (헝가리어 사전)
* `nasq ...` : Naver Korean-Albanian Dictionary (알바니아어 사전)
* `naro ...` : Naver Korean-Rumanian Dictionary (루마니아어 사전)
* `nala ...` : Naver Korean-Latin Dictionary (라틴어 사전)
* `nael ...` : Naver Korean-Greek Dictionary (그리스어 사전)