{"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":"a0f140e3-40bb-5fa8-8bf8-f9862fd1d993","excerpt":"Vue JS 이해 및 환경설정 Vue.js는 웹 애플리케이션의 사용자 인터페이스를 만들기 위해 사용하는 오픈 소스 프로그레시브 자바스크립트 프레임워크이다. 아래와 같은 특징을 가진다. 특징 SPA (Single Page Application) 재사용 가능한 Components…","html":"<p><img src=\"/assets/vue-logo.png\" alt=\"Vue JS 이해 및 환경설정\" title=\"Vue JS 이해 및 환경설정\"></p>\n<p>Vue.js는 웹 애플리케이션의 사용자 인터페이스를 만들기 위해 사용하는 오픈 소스 프로그레시브 자바스크립트 프레임워크이다.</p>\n<p>아래와 같은 특징을 가진다.</p>\n<p><strong>특징</strong></p>\n<ul>\n<li>SPA (Single Page Application)</li>\n<li>재사용 가능한 Components 기반 웹 페이지 개발</li>\n<li>데이터 바인딩과 화면 단위를 컴포넌트 형태로 제공하며, 관련 API 를 지원하는데에 궁극적인 목적이 있음</li>\n<li>Angular에서 지원하는 양방향 데이터 바인딩 을 동일하게 제공 하지만 컴포넌트 간 통신의 기본 골격은 React의 단방향 데이터 흐름(부모 -> 자식)을 사용</li>\n<li>다른 프런트엔드 프레임워크(Angular, React)와 비교했을 때 상대적으로 가볍고 빠름.</li>\n<li>문법이 단순하고 간결하여 초기 학습 비용이 낮고 누구나 쉽게 접근 가능</li>\n</ul>\n<h2 id=\"확장도구\" style=\"position:relative;\"><a href=\"#%ED%99%95%EC%9E%A5%EB%8F%84%EA%B5%AC\" 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>확장도구</h2>\n<h3 id=\"chrome\" style=\"position:relative;\"><a href=\"#chrome\" aria-label=\"chrome 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>chrome</h3>\n<ul>\n<li>Vue.js devtools</li>\n</ul>\n<h3 id=\"vs-code---extensions\" style=\"position:relative;\"><a href=\"#vs-code---extensions\" aria-label=\"vs code   extensions 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>VS Code - Extensions</h3>\n<ul>\n<li>vetur : Vue.js 작업시 편리한 기능들을 제공 한다.</li>\n<li>Material Icon Theme</li>\n<li>Live Server</li>\n</ul>\n<h3 id=\"nodejs\" style=\"position:relative;\"><a href=\"#nodejs\" aria-label=\"nodejs 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>Node.js</h3>\n<p>구글 V8엔진을 기반으로 만들어진 서버측 자바스크립트 언어이자 플랫폼\nNode 설치시 “npm” 이 자동 설치된다.</p>\n<ul>\n<li>LTS 버전으로 설치 (Long Term Support : 장기간 지원)</li>\n</ul>\n<h3 id=\"vue-cli-설치\" style=\"position:relative;\"><a href=\"#vue-cli-%EC%84%A4%EC%B9%98\" aria-label=\"vue cli 설치 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 CLI 설치</h3>\n<p>VS Code 터미널 실행후 아래 명령어 입력 한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm install -g @vue/cli</code></pre></div>\n<p>Vue CLI (Vue command line interface) 는 기본 vue 개발 환경을 설정해주는 도구이다. vue-cli 가 기본적인 프로젝트 세팅을 해주기 때문에 폴더 구조에 대한 고민, lint, build, 어떤 라이브러리로 구성을 해야되는지 webpack 설정은 어떻게 해야되는지에 대한 고민을 덜을 수 있다.</p>\n<blockquote>\n<p><strong>CLI 란 ?</strong></p>\n<p>명령 줄 인터페이스(CLI, Command line interface) 또는 명령어 인터페이스는 텍스트 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻한다. 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며, 컴퓨터로부터의 출력 역시 문자열의 형태로 주어진다. (위키백과)</p>\n</blockquote>\n<h3 id=\"프로젝트-생성\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%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<ul>\n<li>babel : 최신 문법의 코드를 호환 가능한 현재 하위 문법으로 자동 변환 (ES2015 모듈 포함) 한다.</li>\n<li>eslint : 자바스크립트 문법이나 코딩 스타일을 체크해서 알려준다</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">vue create {프로젝트명} // 프로젝트명이 폴더로 생성된다.</code></pre></div>\n<ol>\n<li>\n<p>Manually select features</p>\n<p><img src=\"/assets/vue-cli-1.png\" alt=\"Manually select features\" title=\"Manually select features\"></p>\n</li>\n<li>\n<p>Babel, Progressive Web App (PWA) Support, Router, Vuex, Linter/Formatter, Unit Testing, E2E Testing 추가</p>\n<p><img src=\"/assets/vue-cli-2.png\" alt=\"abel, Progressive Web App (PWA) Support, Router, Vuex, Linter/Formatter, Unit Testing, E2E Testing 추가\" title=\"abel, Progressive Web App (PWA) Support, Router, Vuex, Linter/Formatter, Unit Testing, E2E Testing 추가\"></p>\n</li>\n<li>\n<p>Use history mode for router? (Y 선택)</p>\n<p><img src=\"/assets/vue-cli-3.png\" alt=\"Use history mode for router\" title=\"Use history mode for router\"></p>\n</li>\n<li>\n<p>Pick a linter / formatter config (ESLint + Prettier 선택)</p>\n<p><img src=\"/assets/vue-cli-4.png\" alt=\"Pick a linter / formatter config\" title=\"Pick a linter / formatter config\"></p>\n</li>\n<li>\n<p>Pick additional lint features (Lint on save 선택)</p>\n<p><img src=\"/assets/vue-cli-5.png\" alt=\"Pick additional lint features\" title=\"Pick additional lint features\"></p>\n</li>\n<li>\n<p>Pick a unit testing solution (Jest 선택)</p>\n<p><img src=\"/assets/vue-cli-6.png\" alt=\"Pick a unit testing solution\" title=\"Pick a unit testing solution\"></p>\n</li>\n<li>\n<p>Pick an E2E testing solution (Cypress 선택)</p>\n<p><img src=\"/assets/vue-cli-7.png\" alt=\"Pick an E2E testing solution\" title=\"Pick an E2E testing solution\"></p>\n</li>\n<li>\n<p>Where do you prefer placing config for Babel, ESLint, etc.? (In dedicated config files 선택)</p>\n<p><img src=\"/assets/vue-cli-8.png\" alt=\"Where do you prefer placing config for Babel, ESLint, etc\" title=\"Where do you prefer placing config for Babel, ESLint, etc\"></p>\n</li>\n<li>\n<p>Save this as a preset for future projects? (Y 선택 ~ 저장될 preset {이름})</p>\n<p><img src=\"/assets/vue-cli-9.png\" alt=\"Save this as a preset for future projects?\" title=\"Save this as a preset for future projects?\"></p>\n</li>\n<li>\n<p>프로젝트 생성 완료</p>\n<p><img src=\"/assets/vue-cli-10.png\" alt=\"프로젝트 생성 완료\" title=\"프로젝트 생성 완료\"></p>\n</li>\n</ol>\n<h3 id=\"프로젝트-구조\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\" 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><img src=\"/assets/vue-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B5%AC%EC%A1%B0.png\" alt=\"vue-프로젝트구조\" title=\"vue-프로젝트구조\"></p>\n<ul>\n<li>package.json : 지정된 의존성이 node_modules에 설치 된다.</li>\n<li>node_modules : 앱 개발과 배포에 필요한 npm 패키지들이 저장 된다.</li>\n<li>src : 개발자가 작성한 코드가 저장 된다.</li>\n<li>\n<p>public</p>\n<ul>\n<li>공용으로 접근 가능한 정적 파일이 저장 된다.</li>\n<li>배포버전을 빌드할 때 필요한 파일이 저장 된다.</li>\n</ul>\n</li>\n<li>\n<p>dist</p>\n<ul>\n<li>빌드한 결과물이 저장 된다. (운영 서버에 배포할 파일 이다.)</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"프로젝트-실행-or-빌드\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%A4%ED%96%89-or-%EB%B9%8C%EB%93%9C\" aria-label=\"프로젝트 실행 or 빌드 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>프로젝트 실행 or 빌드</h3>\n<p><strong>serve</strong>\n개발용 버전으로 웹 실행</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm run serve\n// vue-cli-service serve</code></pre></div>\n<p><img src=\"/assets/vue-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B5%AC%EC%A1%B0-serve.png\" alt=\"vue npm run serve\" title=\"vue npm run serve\"></p>\n<p>실행 화면</p>\n<p><img src=\"/assets/vue-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B5%AC%EC%A1%B0-serve-view.png\" alt=\"vue npm run serve view\" title=\"vue npm run serve view\"></p>\n<p><strong>build</strong>\n배포용 버전으로 dist 생성</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm run build\nvue-cli-service build</code></pre></div>\n<p><img src=\"/assets/vue-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B5%AC%EC%A1%B0-build-dist.png\" alt=\"vue npm run build\" title=\"vue npm run build\"></p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#%ED%99%95%EC%9E%A5%EB%8F%84%EA%B5%AC\">확장도구</a></p>\n<ul>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#chrome\">chrome</a></li>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#vs-code---extensions\">VS Code - Extensions</a></li>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#nodejs\">Node.js</a></li>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#vue-cli-%EC%84%A4%EC%B9%98\">Vue CLI 설치</a></li>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1\">프로젝트 생성</a></li>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\">프로젝트 구조</a></li>\n<li><a href=\"/vue/vue-js-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%A4%ED%96%89-or-%EB%B9%8C%EB%93%9C\">프로젝트 실행 or 빌드</a></li>\n</ul>\n</li>\n</ul>","wordCount":{"words":474},"fields":{"slug":"/vue/vue-js-이해-및-환경설정/","image":"/assets/vue-logo.png","faq":[]},"frontmatter":{"title":"Vue JS 이해 및 환경설정","date":"2021년 3월 28일","dateISO":"2021-03-28T09:11:34.709Z","updatedISO":null,"category":"vue","description":"뷰(Vue.js)는 점진적으로 채택 가능한 구조를 갖추고 있다. 코어 라이브러리는 선언형 렌더링과 컴포넌트 구성에 초점을 두며 기존 페이지에 임베드가 가능하다. 라우팅, 상태 관리, 빌드 도구화와 같이 복잡한 애플리케이션에 필요한 고급 기능들은 공식적으로 유지 보수되는 지원 라이브러리와 패키지를 통해 제공된다.","tags":["vue","javascript","framework","frontend","web"]}}},"pageContext":{"slug":"/vue/vue-js-이해-및-환경설정/","previous":{"fields":{"slug":"/springboot/스프링-부트-구조/"},"frontmatter":{"title":"스프링 부트 구조","tags":["스프링","스프링부트","Spring","SpringBoot","Java","프레임워크","스프링부트구조","아키텍쳐"]}},"next":{"fields":{"slug":"/vue/vue-js-인스턴스-&-컴포넌트-소개/"},"frontmatter":{"title":"Vue JS 인스턴스 & 컴포넌트 소개","tags":["vue","javascript","framework","frontend","web"]}}}},"staticQueryHashes":["213619243","3262363727"]}