출처 : techholic
https://developers.googleblog.com/2017/02/whats-in-amp-url.html
구글은 스마트폰이나 태블릿 등에서 웹페이지를 기존보다 4배 빠른 속도로 액세스할 수 있게 해주는 AMP(Accelerated Mobile Pages)를 제공한다. 모바일용 구글 검색을 보면 AMP 해당 웹페이지가 나타난다. 하지만 AMP에 표시되는 페이지에는 원래 도메인이 아니라 다른 URL이 부여된다. 이런 구조가 독자에게 혼란을 초래하거나 원본 URL을 복사할 수 없는 문제가 있었던 것. 하지만 구글 측이 2월 6일 AMP의 이런 URL 문제를 개선하는 새로운 기능을 추가했다고 밝혔다.
구글이 추가한 기능은 AMP 해당 페이지에 새로운 기능을 더해 AMP 페이지 헤더 표시줄에 원본 URL을 표시, 복사, 공유할 수 있는 버튼을 구현한 것. AMP 페이지는 원래 페이지와 거의 같은 내용을 표시하지만 URL이 다르기 때문에 같은 웹사이트 내 페이지인지 모르겠다는 나오는 등 혼란이 있었다. 왜 원본 URL과 다른 주소가 생성됐는지에 대한 의문이 이런 혼란을 일으킨 원인 가운데 하나였다. 구글 검색 부문 소프트웨어 엔지니어인 알렉스 피셔(Alex Fischer)는 AMP가 3가지 URL 을 갖고 있다고 말한다. 원본 URL 외에 AMP 캐시 URL(AMP Cache URL), 구글 AMP 뷰어 URL(Google AMP viewer URL)이 그것이다.
AMP 페이지에서 생성되는 3가지 URL은 AMP 형식으로 쓰인 문서 주소인 원본 URL 외에 사용자는 대부분 볼 수 없지만 AMP 모든 콘텐츠는 AMP 캐시를 통해 볼 수 있게 해주는 AMP 캐시 주소, 구글 검색 결과에 나올 때 AMP 뷰어에 표시되는 주소인 AMP 뷰어 주소다.
다시 말해 콘텐츠 하나에 여러 주소가 있다는 게 혼란의 원인이 되는 것이다. 하지만 반대로 말하면 일반 페이지보다 4배 빠른 속도로 콘텐츠를 표시하고 데이터량도 10분의 1로 억제하는 AMP의 특성 자체가 이렇게 여러 URL을 혼합해 구성했기 때문이라고 할 수 있다.
구글 AMP 캐시는 취득한 AMP HTML 페이지를 캐시해 자동으로 페이지 성능을 개선해주는 과정에서 생성된다. 웹마스터가 특정 주소에서 콘텐츠를 이용할 수 있게 할 필요가 있는데 구글 AMP 캐시는 원본 URL을 미러링해 변환, 새로운 주소를 통해 구글 글로벌 인프라를 통해 콘텐츠를 캐시 전달한다. 원본 URL로 구글 AMP 캐시를 이용하면 웹마스터는 DNS 기록을 바꾸거나 네임서버를 재설정해야 할 수도 있다. 작은 웹사이트는 이런 복잡한 API를 통해 콘텐츠를 제공하는 엔지니어링 리소스가 없는 게 보통이다. 따라서 원본 URL을 AMP 캐시 URL로 변환해 누구나 AMP의 혜택을 쉽게 받을 수 있도록 해준다.
AMP 캐시 URL은 AMP 콘텐츠를 캐시한 버전이지만 일반 사용자의 눈에 보이는 건 아니다. 한편 구글 검색에선 검색어에 따라 나오는 결과를 누르면 브라우저의 URL 표시줄에 표시되는 ‘google.com/amp’로 시작하는 주소가 AMP 뷰어 URL이다. 이 주소는 사전 렌더링을 위해 존재하는 것이다.
사용자가 구글 검색에서 AMP 페이지를 실행하면 동시에 여러 관련 AMP 페이지를 미리 렌더링한다. 사전에 내용을 미리 렌더링해둬서 사용자는 관련 AMP를 한번에 빠르게 불러올 수 있다. 사전 렌더링은 검색 결과 페이지에 숨겨져 포함된 아이프레임을 AMP 콘텐츠 내용과 AMP 페이지가 사전 렌더링되어 있다는 점을 나타내는 추가 매개 변수를 불러와 이뤄진다. 이런 아이프레임 동작 처리를 하는 자바스크립트 구성 요소를 AMP 뷰어라고 부른다.
앞서 설명한 행동은 모든 구글 검색 결과 페이지에서 이뤄진다. AMP 페이지를 눌러도 다른 페이지로 이동하는 게 아니라 같은 페이지에서 아이프레임을 읽어들일 뿐이기 때문에 브라우저는 URL을 바꿀 필요가 없다.
한편 화면에는 구글 검색에서 표시한 웹사이트의 페이지가 표시되지만 사용자가 페이지를 리로딩하면 뒤에 있는 구글 검색 페이지가 나타날 수 있다. 이를 방지하기 위해 AMP 뷰어는 브라우저 URL에 부하를 주지 않고 비동기 처리할 수 있는 히스토리 API(History API)를 이용해 수동으로 업데이트를 한다.
물론 히스토리 API가 원래 페이지나 AMP 캐시 URL을 업데이트한다면 이상적이지만 히스토리 API는 같은 도메인을 기점으로 한 페이지 밖에 읽을 수 없는 제한이 있다. AMP는 이런 이유로 구글닷컴 도메인을 기점으로 해도 AMP 뷰어 URL이 필요하다.
AMP는 여러 URL을 필요로 하지만 원본이 아닌 URL을 혼합한다는 건 피싱 공격을 받을 가능성이 높아진다. 예를 들어 AMP 페이지에 구글과 똑같이 로그인 페이지가 표시된다면 URL 표시줄이 보이기 위한 가짜 사이트에 구글 로그인 정보를 입력해버리는 일을 줄일 수 있지만 이를 방지하기 위해 AMP 뷰어는 사용자가 검색하는 내용 출처를 나타내는 헤더표시줄을 표시한다.
이번에 추가된 새로운 기능은 헤더바데 원래 페이지 URL을 표시, 공유, 복사할 수 있는 것이다. 실제로 AMP 페이지를 열 때 표시되는 헤더 표시줄에 고정 버튼을 추가했고 이를 누르면 원래 URL이 표시되는 것이다. 새로운 기능은 이미 iOS용 구글 애플리케이션에는 구현이 됐고 몇 주 안에 안드로이드에서도 구현된다. 앞으로는 웹셰어API(Web Share API)를 구현해 AMP 뷰어에서 원래 페이지 주소를 브라우저 자체 공유 기능 등을 이용해 호출할 수 있게 할 예정이라고 한다.