Skip to content

Commit 9de6f71

Browse files
Merge pull request #52 from ChangJoo-Park/gitlocalize-80
[Korean] basic.md
2 parents fb4deb7 + c617c9f commit 9de6f71

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

ko/basic.md

+144
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# 기본 사용 방법
2+
3+
## 설치
4+
5+
```bash
6+
npm install vue vue-server-renderer --save
7+
```
8+
9+
이 가이드에서는 NPM을 사용하지만 [Yarn](https://yarnpkg.com/en/)을 사용하여도 전혀 문제가 되지 않습니다.
10+
11+
#### 참고 사항
12+
13+
- Node.js 6 이상을 권장합니다.
14+
- `vue-server-renderer``vue`는 반드시 서로 맞는 버전을 사용해야합니다.
15+
- `vue-server-renderer`는 일부 Node.js 네이티브 모듈을 사용하므로 Node.js에서만 사용할 수 있습니다. 앞으로 다른 JavaScript 런타임에서 실행할 수 있는 보다 간단한 방법을 제공할 예정입니다.
16+
17+
## Vue 인스턴스 렌더링
18+
19+
```js
20+
// Step 1: Create a Vue instance
21+
const Vue = require('vue')
22+
const app = new Vue({
23+
template: `<div data-segment-id="430704">Hello World </div>`
24+
})
25+
// Step 2: Create a renderer
26+
const renderer = require('vue-server-renderer').createRenderer()
27+
// Step 3: Render the Vue instance to HTML
28+
renderer.renderToString(app, (err, html) => {
29+
if (err) throw err
30+
console.log(html)
31+
// => <div data-server-rendered="true" data-segment-id="481338">Hello World </div>
32+
})
33+
```
34+
35+
## 서버와 통합하는 방법
36+
37+
[Express](https://expressjs.com/)와 같이 Node.js 서버에서 사용하면 매우 간단합니다.
38+
39+
```bash
40+
npm install express --save
41+
```
42+
43+
---
44+
45+
```js
46+
const Vue = require('vue')
47+
const server = require('express')()
48+
const renderer = require('vue-server-renderer').createRenderer()
49+
server.get('*', (req, res) => {
50+
const app = new Vue({
51+
data: {
52+
url: req.url
53+
},
54+
template: `<div data-segment-id="430706">The visited URL is: {{ url }}</div>`
55+
})
56+
renderer.renderToString(app, (err, html) => {
57+
if (err) {
58+
res.status(500).end('Internal Server Error')
59+
return
60+
}
61+
res.end(`
62+
63+
64+
<title data-segment-id="430707">Hello</title>
65+
${html}
66+
67+
`)
68+
})
69+
})
70+
server.listen(8080)
71+
```
72+
73+
## 페이지 템플릿 이용하기
74+
75+
Vue 앱을 렌더링할 때 렌더러는 앱의 마크업만 생성합니다. 이 예제에서 추가 HTML 페이지 쉘로 출력을 레핑해야합니다.
76+
77+
이를 간단히 하기 위해 렌더러를 만들 때 페이지 템플릿을 직접 제공할 수 있습니다. 대부분의 경우 페이지 템플릿을 자체 파일에 저장합니다. (예: `index.template.html`)
78+
79+
```html
80+
81+
82+
<title data-segment-id="430708">Hello</title>
83+
84+
<!--vue-ssr-outlet-->
85+
86+
87+
```
88+
89+
`<!--vue-ssr-outlet-->` 주석을 주목하세요. 이것은 앱의 마크업이 삽입되는 곳 입니다.
90+
91+
그 다음 파일을 읽고 Vue 렌더러로 전달합니다.
92+
93+
```js
94+
const renderer = createRenderer({
95+
template: require('fs').readFileSync('./index.template.html', 'utf-8')
96+
})
97+
renderer.renderToString(app, (err, html) => {
98+
console.log(html) // will be the full page with app content injected.
99+
})
100+
```
101+
102+
### 템플릿 인터폴레이션
103+
104+
템플릿은 간단한 인터폴레이션(보간)도 지원합니다. 다음 템플릿을 확인하세요.
105+
106+
```html
107+
108+
109+
<!-- use double mustache for HTML-escaped interpolation -->
110+
<title data-segment-id="430709">{{ title }}</title>
111+
<!-- use triple mustache for non-HTML-escaped interpolation -->
112+
{{{ meta }}}
113+
114+
115+
<!--vue-ssr-outlet-->
116+
117+
118+
```
119+
120+
`renderToString`의 두번째 전달인자로 "render context object" 를 전달하여 인터폴레이션 데이터를 제공할 수 있습니다.
121+
122+
```js
123+
const context = {
124+
title: 'hello',
125+
meta: `
126+
<meta ...>
127+
<meta ...>
128+
`
129+
}
130+
renderer.renderToString(app, context, (err, html) => {
131+
// page title will be "Hello"
132+
// with meta tags injected
133+
})
134+
```
135+
136+
`컨텍스트`객체는 Vue 앱 인스턴스와 공유할 수 있으므로 컴포넌트가 템플릿 인터폴레이션을 위해 데이터를 동적으로 등록할 수 있습니다.
137+
138+
또한 템플릿은 다음과 같은 몇 가지 고급 기능을 지원합니다.
139+
140+
- `*.vue` 컴포넌트를 사용할 때 CSS를 자동으로 주입합니다.
141+
- `clientManifest`를 사용할 때 에셋 링크 및 리소스에 관련한 힌트를 자동으로 주입합니다.
142+
- 클라이언트 측 하이드레이션을 위한 Vuex 스테이트 포함시 자동 주입 및 XSS를 예방을 지원합니다.
143+
144+
나중에 이 가이드에서 관련 개념을 소개할 때 자세히 다룰 것 입니다.

0 commit comments

Comments
 (0)