코드 보기

작업한 파일 순서는 process.js -> main.js -> querystring.js -> crpyto.js -> fs.js 다


process.js 실행은 node process --exit 시간(밀리세컨드)

이렇게 시작하면 setTimeout이 작동돼 시간만큼 지나면 꺼진다.


그다음은 node main


main.js는 module을 제작하고 불러오는 코드다.

module.js에 exports를 사용해 메소드를 선언한다.

main.js에서 require로 module.js를 추출하고 사용한다.


그다음은 node querystring

웹에서 get으로 전송하면 ?asd6=asd6&asd1=asdt

이런식으로 url의 querystring이 있다 ?와 #사이

이걸 객체로 만들어주는 코드가 작성돼있다.


그다음은 node crpyto

sha256을 사용해서 문자열을 암호화한다.

digest로 해쉬값의 반환 형태를 결정한다.


그다음은 node fs

파일을 비동기로 읽고, 비동기로 쓰고, 동기로 쓴다.

'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

바인딩이란?  (0) 2017.07.04
클래스와 스타일 바인딩  (0) 2017.07.04
2017-07-02 작업  (0) 2017.07.02
2017-07-02 스터디 내용  (0) 2017.07.02
계산된 속성과 감시자  (0) 2017.07.02

[+] 프로젝트 분류별로 보기

[+] 프로젝트 삭제

[/] 프로젝트 링크쪽 코드 약간 수정

'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

클래스와 스타일 바인딩  (0) 2017.07.04
모듈과 전역 객체 사용  (0) 2017.07.02
2017-07-02 스터디 내용  (0) 2017.07.02
계산된 속성과 감시자  (0) 2017.07.02
공부에 필요한 C언어 지식  (0) 2017.07.01

4명이 모여야 하는데,

2명이 안왔다.


그래가지고 간단하게 2명에서 자습좀하고 깃허브에 올라간, 코드에대해 리뷰했다.

그 다음 책을 조금 읽었다.


자료구조란?

프로그램은 데이터를 표현하고 처리하는 것이다.


자료구조는 기본적으로 다움과 같이 분류할 수 있다.


선형구조

리스트    

스택

비선형구조

트리

그래프

파일구조

순차파일

색인파일

직접파일

단순구조

정수

실수

문자열

문자


공부하는 책은 선형구조와 비선형구조를 공부한다.


int arr[10]={1,2,3,4,5,...};

이 코드는 자료구조측의 코드다.


for(idx=0;idx<10;idx++)

sum+=arr[idx];

이 코드는 알고리즘측의 코드다.


자료구조가 결정되어야 효율적인 알고리즘을 작성이 가능하다.


지수식과 로그식을 알아야 된다.


'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

모듈과 전역 객체 사용  (0) 2017.07.02
2017-07-02 작업  (0) 2017.07.02
계산된 속성과 감시자  (0) 2017.07.02
공부에 필요한 C언어 지식  (0) 2017.07.01
2017-07-01 작업목록  (0) 2017.07.01

계산된 속성

기본 예제

템플릿에서 사용하는 표현식은 편리하지만 단순한 연산만 해야합니다.

<div id="example">
{{ message.split('').reverse().join('') }}
</div>

이렇게 복잡한 로직은 계산된 속성을 사용해야 합니다.


<div id="example">
<p>원본 메시지: "{{ message }}"</p>
<p>뒤집히도록 계산된 메시지: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
el: '#example',
data: {
message: '안녕하세요'
},
computed: {
// 계산된 getter
reversedMessage: function () {
// `this` 는 vm 인스턴스를 가리킵니다.
return this.message.split('').reverse().join('')
}
}
})

이렇게요

reversedMessage 를 우리는 computed에서 선언했습니다.

vm.reversedMessage 는 getter 메세지로 반환된다.

계산된 캐싱 vs 메소드

<p>뒤집힌 메시지: "{{ reverseMessage() }}"</p>
// 컴포넌트 내부
methods: {
reverseMessage: function () {
return this.message.split('').reverse().join('')
}
}

표현식에서 메소드를 호출하면 계산된 결과와 같은걸 알 수 있습니다.

계산된 속성은 종속성에 따라 캐시가 된다.

message가 변경되지 않는 한, reverseMessage는 바로 반환됩니다.

computed: {
now: function () {
return Date.now()
}
}

이것도 Date.now가 변경되지 않으니 바로 반환됩니다.

캐싱이 왜 필요하냐면, 많은 연산을 하게되면, 서버에 무리가 가기 때문에 캐싱을 하는게 좋다.


계산된 속성 vs 감시된 속성

Vue 인스턴스는 속성을 감시하는게 가능하다.(데이터가 변경될때)

<div id="demo">{{ fullName }}</div>
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
},
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})

firstName의 값이 변경될 때 마다

firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},

val 파라매터로 값을 받고, this.fullName = val + ' ' + this.lastName

이걸 실행한다.


var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})

위 코드와 위 코드는 비슷합니다.

계산된 속성이 더 좋은거 같습니다.


계산된 Setter

computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}

computed는 getterd와 setter를 만들어줄 수 있습니다.

감시자

대부분 계산된 속성이 필요하지만. 감시자가 더 좋을 때가 있습니다.

<div id="watch-example">
<p>
yes/no 질문을 물어보세요:
<input v-model="question">
</p>
<p>{{ answer }}</p>
</div>

에제입니다.


<!-- 이미 Ajax 라이브러리의 풍부한 생태계와 범용 유틸리티 메소드 컬렉션이 있기 떄문에, -->
<!-- Vue 코어는 다시 만들지 않아 작게 유지됩니다. -->
<!-- 이것은 또한 당신이 사용하기 친숙할 것을 선택할 수 있는 자유를 줍니다. -->
<script src="https://unpkg.com/axios@0.12.0/dist/axios.min.js"></script>
<script src="https://unpkg.com/lodash@4.13.1/lodash.min.js"></script>
<script>
var watchExampleVM = new Vue({
el: '#watch-example',
data: {
question: '',
answer: '질문을 하기 전까지는 대답할 수 없습니다.'
},
watch: {
// 질문이 변경될 때 마다 이 기능이 실행됩니다.
question: function (newQuestion) {
this.answer = '입력을 기다리는 중...'
this.getAnswer()
}
},
methods: {
// _.debounce는 lodash가 제공하는 기능으로
// 특히 시간이 많이 소요되는 작업을 실행할 수 있는 빈도를 제한합니다.
// 이 경우, 우리는 yesno.wtf/api 에 액세스 하는 빈도를 제한하고,
// 사용자가 ajax요청을 하기 전에 타이핑을 완전히 마칠 때까지 기다리길 바랍니다.
// _.debounce 함수(또는 이와 유사한 _.throttle)에 대한
// 자세한 내용을 보려면 https://lodash.com/docs#debounce 를 방문하세요.
getAnswer: _.debounce(
function () {
if (this.question.indexOf('?') === -1) {
this.answer = '질문에는 일반적으로 물음표가 포함 됩니다. ;-)'
return
}
this.answer = '생각중...'
var vm = this
axios.get('https://yesno.wtf/api')
.then(function (response) {
vm.answer = _.capitalize(response.data.answer)
})
.catch(function (error) {
vm.answer = '에러! API 요청에 오류가 있습니다. ' + error
})
},
// 사용자가 입력을 기다리는 시간(밀리세컨드) 입니다.
500
)
}
})
</script>

이 예제는 question을 감시하고 methods에서 getAnswer을 실행해줍니다.

watch는 비동기 연산을 합니다.


'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

2017-07-02 작업  (0) 2017.07.02
2017-07-02 스터디 내용  (0) 2017.07.02
공부에 필요한 C언어 지식  (0) 2017.07.01
2017-07-01 작업목록  (0) 2017.07.01
2017-06-30 작업 목록  (0) 2017.06.30

vsual studio code 다운로드

gcc 다운로드

https://github.com/KSH-code/datastructures-c


스터디는 윤성우의 열혈 자료구조로 진행됨


'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

2017-07-02 스터디 내용  (0) 2017.07.02
계산된 속성과 감시자  (0) 2017.07.02
2017-07-01 작업목록  (0) 2017.07.01
2017-06-30 작업 목록  (0) 2017.06.30
템플릿 문법  (0) 2017.06.30

[+]마이페이지 프론트 엔트,백 엔드 작업

[/]DB 커넥션 반환 안하는 에러 수정

'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

계산된 속성과 감시자  (0) 2017.07.02
공부에 필요한 C언어 지식  (0) 2017.07.01
2017-06-30 작업 목록  (0) 2017.06.30
템플릿 문법  (0) 2017.06.30
두 번째 ERD 모델링  (0) 2017.06.28

[+]프로젝트 수정

[+]회원가입 생일 (Validation)

[/]프로젝트 추가 나이제한 에러 해결(Validation) 

'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

공부에 필요한 C언어 지식  (0) 2017.07.01
2017-07-01 작업목록  (0) 2017.07.01
템플릿 문법  (0) 2017.06.30
두 번째 ERD 모델링  (0) 2017.06.28
Vue 인스턴스  (0) 2017.06.28

보간법(Interpolation)

데이터 바인딩의 가장 기본은 머스터쉬(Mustache) {{이중 중괄호}}를 사용한 텍스트 보간이다.

<span>메시지: {{ msg }}</span>

머스터쉬 안의 msg는 해당 객체의 msg의속성 값으로 대체됩니다.


<span v-once>다시는 변경하지 않습니다: {{ msg }}</span>

v-once 디렉티브를 사용하면 msg값을 변경 시켜도 업데이트 되지 않는다.


<div v-html="rawHtml"></div>

v-html 디렉티브를 사용하면 원시 html을 사용 가능합니다.

머스터쉬는 텍스트로 인식됩니다.


웹사이트에서 임의의 HTML을 동적으로 렌더링하려면 XSS 취약점으로 쉽게 이어질 수 있으므로 매우 위험할 가능성이 있습니다. 신뢰할 수 있는 콘텐츠에서는 HTML 보간만 사용하고 사용자가 제공한 콘텐츠에서는 절대 사용하면 안됩니다.


<div v-bind:id="dynamicId"></div>

머스터쉬는 HTML속성으로 사용이 불가능합니다. v-bind디렉티브를 사용해야 합니다.


JavaScript 표현식 사용하기

{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id"></div>

Vue js 는 모든 바인딩 작업에서 JS의 표현식 사용이 가능하다.

<!-- 아래는 구문입니다, 표현식이 아닙니다. -->
{{ var a = 1 }}
<!-- 조건문은 작동하지 않습니다. 삼항 연산자를 사용해야 합니다. -->
{{ if (ok) { return message } }}


디렉티브

디렉티브는 v- 접두사가 있는 특수 속성이다.

디렉티브 속성 값은 단일 JS 표현식이 된다. v-for 은 예외

<p v-if="seen">이제 나를 볼 수 있어요</p>

여기서 v-if는 seen 의 값에따라 p태그를 추가할지 결정한다.


<a v-bind:href="url"></a>

v-bind는 웹 페이지가 반응적으로  HTML속성을 갱신되게 도와준다.

href는 전달인자, 엘리먼트의 href 속성을 v-bind로 url값을 바인드 한다.

<a v-on:click="doSomething">

DOM 이벤트리슨을 하는 v-on디렉티브다.

수식어

수식어는 .으로 표시되는 특수 접미사다.

디렉티브를 특별한 방법으로 바인딩 해야함을 나타날때 사용한다.

<form v-on:submit.prevent="onSubmit"></form>

submit하면 event.preventDefault() 를 호출합니다.

필터

Vue에서 일반 텍스트를 사용할때 사용이 가능하다.

머스터쉬 보간과 v-bind 표현식 에서 사용이 가능하다.

필터는 JS 표현식 끝에 표기해야 하며, 파이프 기호로 표시됩니다.

<!-- Mustaches 사용시 -->
{{ message | capitalize }}
<!-- v-bind 사용시 -->
<div v-bind:id="rawId | formatId"></div>
new Vue({
// ...
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
})

필터는 항상 표현식의 값을 첫번째 전달인자로 받는다.

{{ message | filterA | filterB }}

체이닝도 가능하다.

{{ message | filterA('arg1', arg2) }}

message,arg1,arg2이런식으로 인자가 전달된다.

약어

개발을 할때 속도를 내기위해 약어를 사용하면 좋다.

v-bind와 v-on에 약어를 제공한다.

<!-- 전체 구문 -->
<a v-bind:href="url"></a>
<!-- 약어 -->
<a :href="url"></a>
<!-- 전체 구문 -->
<a v-on:click="doSomething"></a>
<!-- 약어 -->
<a @click="doSomething"></a>

:와 @는 속성 이름에 유효한 문자다.

'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

2017-07-01 작업목록  (0) 2017.07.01
2017-06-30 작업 목록  (0) 2017.06.30
두 번째 ERD 모델링  (0) 2017.06.28
Vue 인스턴스  (0) 2017.06.28
시작하기  (0) 2017.06.26

친구랑 같이 작업 하기로한 프로젝트를 못하게돼서 DB모델링만 도와주기로 했다.


스크린샷은 수정전 ERD 다이어그램이다.


'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

2017-06-30 작업 목록  (0) 2017.06.30
템플릿 문법  (0) 2017.06.30
Vue 인스턴스  (0) 2017.06.28
시작하기  (0) 2017.06.26
ERD를 이용한 DB 모델링  (0) 2017.06.25

생성자

Vuejs는  Vue 생성자 함수로 root Vue를 인스턴스해 부트스트래핑 합니다.

var vm = new Vue({
// 옵션
})

Vuejs는 MVVM패턴에 영감을 받았습니다.

vm은 view model의 약자 입니다.


Vue인스턴스를 인스턴스화 할 때,

데이터, 템플릿, 마운트할 엘리먼트, 메소드, 라이프사이클 콜백 등의 옵션을 포함할 수 있는 option객체를 전달해야 한다.


Vue는 미리 정의된 옵션을 사용하는 컴포넌트 생성자를 사용할 수 있다.

var MyComponent = Vue.extend({
// 옵션 확장
})
// `MyComponent`의 모든 인스턴스는
// 미리 정의된 확장 옵션과 함께 생성됩니다.
var myComponentInstance = new MyComponent()


나중에 설명이 더 나온다는데, 지금은 모든 Vue의 컴포넌트가 본질적으로 확장된 Vue 인스턴스다.

속성과 메소드

var data = { a: 1 }
var vm = new Vue({
data: data
})
vm.a === data.a // -> true
// 속성 설정은 원본 데이터에도 영향을 미칩니다.
vm.a = 2
data.a // -> 2
// ... 당연하게도
data.a = 3
vm.a // -> 3

Vue인스턴스는 안에 data 객체들을 모두 프록시 처리합니다.


프록시 속성은 반응형 입니다.

레퍼런스가 같기 때문이다.


Vue에서는 유용한 인스턴스 속성 및 메소드를 제공한다.

이 프로퍼티들과 메소드는 접두사 $로 접근 가능합니다.

var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
})
vm.$data === data // -> true
vm.$el === document.getElementById('example') // -> true
// $watch 는 인스턴스 메소드 입니다.
vm.$watch('a', function (newVal, oldVal) {
// `vm.a`가 변경되면 호출 됩니다.
})

인스턴스 속성이나 콜백에서 화살표 함수를 사용하지 마십시오. (예: vm.$watch('a', newVal => this.myMethod())). 화살표 함수는 부모 컨텍스트에 바인딩 되어 있으므로 this는 Vue 인스턴스가 아니며 this.myMethod는 정의되지 않습니다.


람다식을 사용하면안된다.

인스턴스 라이프사이클 훅

각 Vue 인스턴스는 데이터 관찰을 설정하고, 템플릿을 컴파일하고, 인스턴스를  DOM에 마운트하고, 데이터가 변경될 때 DOM을 업데이트 해야할 때 일련의 초기화 단계를 거칩니다.


그 과정에서 사용자 정의 로직을 실행할 수 있는 라이플사이클 훅 도 호출됩니다.

created훅은 인스턴스가 생성된 후 실행됩니다.

var vm = new Vue({
data: {
a: 1
},
created: function () {
// `this` 는 vm 인스턴스를 가리킵니다.
console.log('a is: ' + this.a)
}
})
// -> "a is: 1"

created말고 여러가지의 훅도 존재한다.

라이프사이클 다이어그램


Lifecycle
Lifecycle

'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글

템플릿 문법  (0) 2017.06.30
두 번째 ERD 모델링  (0) 2017.06.28
시작하기  (0) 2017.06.26
ERD를 이용한 DB 모델링  (0) 2017.06.25
시작하기  (0) 2017.06.25

+ Recent posts