메뉴 건너뛰기

신승식의 다른 생각 (보관)

보편적 디자인 페이지 refresh 대신에 서버측 redirection을

신승식 2004.01.18 16:06 조회 수 : 95687

 
홈페이지를 만들다 보면 여러 이유로, 다른 특정 페이지에서 페이지로 자동으로 이동시켜야 하는 경우가 있습니다. 이런 경우는,
  • 더 이상 그 페이지 주소가 유효하지 않아서, 유효한 새 주소로 이동시킬 때
  • 그 페이지에서 어떤 작업을 처리하고 나서, 다른 페이지로 이동시킬 때
  • 웹 서버에서 지정한 시작 파일(보통 Document Root라고 많이 표현하는 것들)이 아닌 다른 파일에서 시작하고자 할 때
등이 있을 수 있습니다.
그럴 때에 흔히 사용하는 방법이, 다음과 같이 HTML 메타 태그를 쓰는 것입니다.
<META HTTP-EQUIV=Refresh CONTENT="10; URL=http://www.htmlhelp.com/">
이 방법은 여러 가지 이유로 좋지 않은 방법입니다.
  1. 어떤 브라우저에서는 이런 식의 페이지 이동을 지원하지 않습니다. 특히, 장애인용 화면 음성 변환 장치(screen reader), 텍스트 기반의 브라우저에서 이런 기능을 지원하기는 힘듭니다.
  2. 우리가 많이 쓰는 인터넷 익스플로러, 모질라, 오페라 등에서도 메타 리프레시 기능 옵션을 사용자가 꺼둘 수 있습니다.
  3. 이렇게 페이지 이동을 하면, (아마 경험해보셨겠지만) [←뒤로가기] 버튼을 통해 페이지를 되돌아갈 수가 없고, 사용자는 아무리 뒤로가기 버튼을 눌러도 현재 페이지에서 갇혀 버립니다.
  4. 이제까지 방문했던 페이지들의 기록(history)이 엉망이 되어버립니다.
  5. 검색 엔진의 검색 로봇이 해당 페이지가 새 페이지로 옮겨졌다는 정보를 찾아내지 못합니다. 의미적으로 새 페이지가 구 페이지를 대체한다는 정보를 아무것도 가지고 있지 못합니다.
  6. 어떤 검색 엔진에서는 리프레시를 사용한 페이지는 의도적으로 검색 결과에서 빼버립니다.
  7. 특정 시간 내에 어떤 일을 다 끝마치지 않으면 새 페이지로 이동해버리겠다는 것은 장애인, 노인과 같이 컴퓨터 작업 속도가 일반인보다 훨씬 느린 사람들에게는 인터넷을 쓸 수 없게 만드는 요인이 됩니다.

따라서 페이지를 자동으로 이동시킬 일이 있을 때에는 HTTP 헤더에 지시를 내려서, 웹 콘텐츠를 브라우저가 해석하기 전에 새 페이지로 내용이 바뀌었음을 알려주는 것이 좋습니다. 이렇게 하는 것(HTTP redirect)은 또 의미적으로 풍부한 정보를 서버에서 남겨줍니다. 영구적인 이동(HTTP 301), 임시 이동(HTTP 307), 정의되지 않은 이동(HTTP 302) 등이 그것입니다.
자세한 것은 HTTP 프로토콜 문서의 HTTP Redirection 3xx 부분을 참조하십시오.
각 웹서버에서 이 redirect를 어떻게 처리하는지 예를 몇 개만 들어보겠습니다.
  • 아파치 웹 서버의 경우, httpd.conf 파일에 redirect directive를 활용하여,
    Redirect permanent /one http://example.com/two
    Redirect 303 /three http://example.com/other

    와 같이 넣어주면 됩니다. 자세한 것은 아파치 매뉴얼의 redirect directive 부분을 참조하십시오.
  • Microsoft사의 IIS 서버의 경우, IIS의 리디렉션 설정 방법을 참조하십시오.
  • 흔히 쓰는 스크립트 언어인 PHP를 예로 들면, HTTP 헤더에 값을 보내는 방법을 쓸 수도 있습니다. 자세한 것은 PHP 매뉴얼의 header 함수 부분을 참고하십시오.
    <?php
    header("Location: http://www.example.com/"); /* Redirect browser */
    /* Make sure that code below does not get executed when we redirect.*/
    exit;?>

  • 서버측 스크립트를 쓸 수 있는 권한이 없는 사용자의 경우는 차선책으로 JavaScript의 location 객체를 사용할 수도 있습니다. (이 방법은 별로 권장하지 않으며, 차라리 마지막 방법인 정적인 링크를 쓰는 것이 낫지 않나 생각됩니다.)
    <script type="text/javascript">
            window.location.href="http://www.new.com/new_page/";
    </script>

  • 마지막으로 위와 같이 헤더에 정보를 줄 수 있는 권한이 전혀 없는 많은 무료 계정 사용자들의 경우는 그냥 자동 페이지 이동 대신에 아래와 같이 단순한 정적인 링크를 걸어주는 것이 좋습니다.
    이 페이지를 <a href="http://www.new.com/new_page">http://www.new.com/new_page</a> 로 옮겼습니다.

그 밖의 언어(ASP, JSP, Perl, Python, Java 등)에서는 각 언어의 매뉴얼을 참조하여 HTTP 헤더에 상태값을 주는 방법을 찾아보시면 될 것입니다.
결론적으로, 클라이언트측에서 의미적으로 아무런 정보도 갖지 못하고, 사용자에게 네비게이션에 혼란만 주는 meta refresh는 되도록이면 쓰지 않는 것이 좋겠습니다.
번호 제목 글쓴이 날짜 조회 수
287 친구되기 모임 모꼬지 신승식 2005.10.09 301090
286 블로그의 MIDI 카테고리로 이전합니다. 신승식 2006.05.31 269853
285 블로그의 Universal Design 카테고리로 이전합니다. 신승식 2006.05.31 163771
284 'ㅐ'와 'ㅔ' 소리의 구별 신승식 2005.11.19 150333
283 퍼온 글: 주민등록번호, 이대로 좋은가? [13] 신승식 2003.08.06 145320
282 미 뉴욕주 법무 장관, 장애인 권익 보호법이 웹 사이트에도 적용된다고.. [6] 빛알갱이 2004.08.21 140429
281 [mid/mp3] 짧은 산책 file 신승식 2005.11.06 132158
280 100분 토론에서 얻은 생활의 지혜 두 가지 신승식 2005.10.15 129271
279 블로그의 Lives라는 카테고리로 이전합니다. 신승식 2006.05.31 121667
278 iCon 스티브 잡스 신승식 2005.10.18 119272
277 컴퓨터 없는 곳 [2] 신승식 2005.11.26 117053
276 화련한 현대적 사극, 왕의 남자를 보고 신승식 2006.01.22 115735
275 아무데나 쿡 찔러도 거침없이 나오는... [1] 신승식 2005.10.27 113001
274 Word by Word [1] 신승식 2005.10.24 111165
273 대화의 명료성 [1] 신승식 2005.11.17 109119
272 팝업창과 새 창은 꼭 필요한 때에만 file 신승식 2004.01.28 108479
271 Formerly Macromedia [1] 신승식 2005.12.07 104457
270 문자 메시지 [1] 신승식 2006.01.02 103929
269 블로그를 열었습니다. [2] 신승식 2006.03.27 103743
» 페이지 refresh 대신에 서버측 redirection을 신승식 2004.01.18 95687