{"componentChunkName":"component---src-templates-blog-post-js","path":"/vue/vue-js-히스토리-관리/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"d6b5307c-5e07-55a5-85cd-72b2485bce3d","excerpt":"Vue Js 히스토리 관리 History API 리엑트, 뷰, 앵귤러를 사용하면 기본적으로 싱글 페이지 애플리케이션(SPA) 형태로 개발 하게 된다. SPA…","html":"<p><img src=\"/assets/vue-logo.png\" alt=\"Vue Js 히스토리 관리\" title=\"Vue Js 히스토리 관리\"></p>\n<h2 id=\"history-api\" style=\"position:relative;\"><a href=\"#history-api\" aria-label=\"history api permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>History API</h2>\n<p>리엑트, 뷰, 앵귤러를 사용하면 기본적으로 싱글 페이지 애플리케이션(SPA) 형태로 개발 하게 된다. SPA의 단점은 주소가 바뀌지 않는다는 것이다. 초창기에는 주소 뒤에 #(해쉬) #!(해쉬뱅)을 붙이고 뒤에 하위 주소를 넣었다. <a href=\"https://www.doamin.com/#coffee\">https://www.doamin.com/#coffee</a> 하지만 이 방식은 의미 없는 #(해쉬뱅) 를 넣었기 때문에 서버에서는 제대로된 주소라고 생각 하지 않는다.</p>\n<p>따라서 해쉬뱅 대신 브라우저에서 제공하는 주소 API를 사용해 주소를 바꾸게 되었는데, 그게 바로 History API이다. 요즘 웬만한 SPA의 라우터들은 이 History API를 사용하고 있다. IE도 10부터 가능하다.</p>\n<p>이 History API는 기존 history 객체(window.history)를 그대로 활용한다. 따라서 자바스크립트로 뒤로가기(history.back())와 앞으로 가기(history.forward()), 지정한 위치로 가기(history.go(인덱스))를 모두 사용할 수 있다.</p>\n<p>History API 는 브라우저의 세션 기록, 즉 현재 페이지를 불러온 탭 또는 프레임의 방문 기록을 조작할 수 있는 방법을 제공한다.</p>\n<h3 id=\"속성\" style=\"position:relative;\"><a href=\"#%EC%86%8D%EC%84%B1\" aria-label=\"속성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>속성</h3>\n<p>History 인터페이스는 어떤 속성도 상속하지 않는다.</p>\n<p><strong>History.length (Read only)</strong>\n현재 페이지를 포함해, 세션 기록의 길이를 나타내는 정수를 반환한다.</p>\n<p><strong>History.scrollRestoration</strong>\n기록 탐색 시 스크롤 위치 복원 여부를 명시할 수 있다. 가능한 값은 auto와 manual이다.</p>\n<p><strong>History.state (Read only)</strong>\n기록 스택 최상단의 스테이트를 나타내는 값을 반환한다. popstate 이벤트를 기다리지 않고 현재 기록의 스테이트를 볼 수 있는 방법이다.</p>\n<h3 id=\"메서드\" style=\"position:relative;\"><a href=\"#%EB%A9%94%EC%84%9C%EB%93%9C\" aria-label=\"메서드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>메서드</h3>\n<p><strong>History.back()</strong>\n세션 기록의 바로 뒤 페이지로 이동하는 비동기 메서드이다. 브라우저의 뒤로 가기 버튼을 눌렀을 때, 그리고 history.go(-1)을 사용했을 때와 같다.</p>\n<p><strong>History.forward()</strong>\n세션 기록의 바로 앞 페이지로 이동하는 비동기 메서드이다. 브라우저의 앞으로 가기 버튼을 눌렀을 때, 그리고 history.go(1)을 사용했을 때와 같다.</p>\n<p><strong>History.go()</strong>\n현재 페이지를 기준으로, 상대적인 위치에 존재하는 세션 기록 내 페이지로 이동하는 비동기 메서드이다. 예를 들어, 매개변수로 -1을 제공하면 바로 뒤로, 1을 제공하면 바로 앞으로 이동한다. 세션 기록의 범위를 벗어나는 값을 제공하면 아무 일도 일어나지 않는다. 매개변수를 제공하지 않거나, 0을 제공하면 현재 페이지를 다시 불러온다.</p>\n<p><strong>History.pushState()</strong>\n주어진 데이터를 지정한 제목(제공한 경우 URL도)으로 세션 기록 스택에 넣는다. 데이터는 DOM이 불투명(opaque)하게 취급하므로, 직렬화 가능한 모든 JavaScript 객체를 사용할 수 있다. 참고로, Safari를 제외한 모든 브라우저는 title 매개변수를 무시한다.</p>\n<p><strong>History.replaceState()</strong>\n세션 기록 스택의 제일 최근 항목을 주어진 데이터, 지정한 제목 및 URL로 대체한다. 데이터는 DOM이 불투명(opaque)하게 취급하므로, 직렬화 가능한 모든 JavaScript 객체를 사용할 수 있다. 참고로, Safari를 제외한 모든 브라우저는 title 매개변수를 무시한다.</p>\n<h2 id=\"vue-history-mode\" style=\"position:relative;\"><a href=\"#vue-history-mode\" aria-label=\"vue history mode permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue History Mode</h2>\n<p>vue-router의 기본 모드는 hash mode 입니다. URL 해시를 사용하여 전체 URL을 시뮬레이트하므로 URL이 변경될 때 페이지가 다시 로드 되지 않는다. 해시를 제거하기 위해 라우터의 history 모드 를 사용할 수 있다. history.pushState API를 활용하여 페이지를 다시 로드하지 않고도 URL 탐색을 할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> Vue <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue\"</span>\n<span class=\"token keyword\">import</span> VueRouter <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue-router\"</span>\n\nVue<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span>VueRouter<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> routes <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>code\n<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">const</span> router <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">VueRouter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">mode</span><span class=\"token operator\">:</span> <span class=\"token string\">\"history\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">base</span><span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">BASE_URL</span><span class=\"token punctuation\">,</span>\n  routes<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> router</code></pre></div>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/vue/vue-js-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EA%B4%80%EB%A6%AC/#history-api\">History API</a></p>\n<ul>\n<li><a href=\"/vue/vue-js-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EA%B4%80%EB%A6%AC/#%EC%86%8D%EC%84%B1\">속성</a></li>\n<li><a href=\"/vue/vue-js-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EA%B4%80%EB%A6%AC/#%EB%A9%94%EC%84%9C%EB%93%9C\">메서드</a></li>\n</ul>\n</li>\n<li><a href=\"/vue/vue-js-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EA%B4%80%EB%A6%AC/#vue-history-mode\">Vue History Mode</a></li>\n</ul>","wordCount":{"words":390},"fields":{"slug":"/vue/vue-js-히스토리-관리/","image":"/assets/vue-logo.png","faq":[]},"frontmatter":{"title":"Vue Js 히스토리 관리","date":"2021년 4월 4일","dateISO":"2021-04-04T15:11:34.709Z","updatedISO":null,"category":"vue","description":"vue-router의 기본 모드는 hash mode 입니다. URL 해시를 사용하여 전체 URL을 시뮬레이트하므로 URL이 변경될 때 페이지가 다시 로드 되지 않는다. 해시를 제거하기 위해 라우터의 history 모드 를 사용할 수 있다. history.pushState API를 활용하여 페이지를 다시 로드하지 않고도 URL 탐색을 할 수 있다.","tags":["vue","javascript","framework","frontend","web","router"]}}},"pageContext":{"slug":"/vue/vue-js-히스토리-관리/","previous":{"fields":{"slug":"/vue/vue-js-redirect-alias/"},"frontmatter":{"title":"Vue Js Redirect / Alias","tags":["vue","javascript","framework","frontend","web","router","redirect","alias"]}},"next":{"fields":{"slug":"/vue/vue-js-네임드-라우트/"},"frontmatter":{"title":"Vue Js 뷰 네임드 라우트","tags":["vue","javascript","framework","frontend","web","router","named-routes"]}}}},"staticQueryHashes":["213619243","3262363727"]}