풀스택 개발 공부로그

Indexing detail

|

Indexing detail

인덱스 1

이것이 MySQL이다 09. MySQL 인덱스(1) - YouTube

9:39 인덱스의 종류 클러스터링 : 영어사전 (알파벳순으로 책 내용전체가 정렬이 되어있다), 그렇기 때문에 테이블당 한 개만 생성가능 보조인덱스 : 책 맨 뒤에 있는 특정 단어들이 위치해 있는 페이지를 알려주는 ‘찾아보기’ 기능, 테이블에 여러개 보조 인덱스를 설정 가능

12:00 자동으로 생성되는 인덱스 PK를 지정하면 PK를 기준으로 클러스터형 인덱스가 생성된다.

16:11 테이블 생성시 제약 조건으로 PK를 지정하면 클러스터형 인덱스가, unique를 사용하면 보조 인덱스가 생성된다.

21:40 unique + not null = primary key

인덱스 2

이것이 MySQL이다 09. MySQL 인덱스(2) - YouTube


내부 작동 B-tree B-Tree Tutorial - An Introduction to B-Trees - YouTube


8:12 클러스터형 인덱스와 보조인덱스의 구조

9:50 pk(primary key), 클러스터형 데이터 페이지(리프 페이지) 또한 인덱스 페이지가된다. 영어사전은 ‘찾아보기’가 따로 없는걸 생각해보면 이해하기 쉽다.

12:07 유니크, 보조인덱스 데이터 영역은 클러스터형과 달리 따로 정렬되지 않는다.

14:47 검색 예시

16:07 클러스터형과 비 클러스터형의 비교 클러스터형의 장점 : 범위검색에 좋다.

인덱스 3

이것이 MySQL이다 09. MySQL 인덱스(3) - YouTube

3:00 혼합 인덱스 내부 구성

5:12 보조 인덱스에 데이터가 다 들어있다면 생기는 문제점, 단점

9:00 실습시작

Database Terminology

|

DB Term

Relation

meaning

Understanding the Meaning of a Database Relation

A common term used in database design is a “relational database”—but a database relation is not the same thing and does not imply, as its name suggests, a relationship between tables. Rather, a database relation simply refers to an individual table in a relational database.

일반적으로 데이터베이스를 설계하는데 사용되는 관계형 데이터베이스(relational database)라는 용어는 테이블 사이의 관계입니다. 그에반해 database relation은 관계형 데이터베이스에 있는 각각의 테이블을 의미합니다.

Relation schema

릴레이션 스키마

  • 스키마(schema)은 릴레이션의 논리적 구조이다.
  • attribute, 속성, columns

Relation instance

릴레이션 인스턴스

  • 인스턴스(instance)는 릴레이션에 존재하는 투플들의 집합이다.
  • 릴레이션 스키마 에서 정의하는 각 속성 에 대응하는 실제 값
  • tuple, record

KEY

Super key

수퍼키 유일성을 만족하는 속성들의 집합. 속성이 몇 개로 구성되어있든 상관없다. 유일성만 만족한다면

Candidate key

후보키 각 tuple의 유일성을 보장하기 위해 필요한 최소한의 속성들로 구성된 집합. 그러므로 수퍼키들 중 최소성을 만족하는 것이 후보키가 된다.

Primary key(PK)

기본키 하나의 테이블 안에 여러개의 후보키가 존재할 수 있다. 하지만 여러 후보키를 모두 사용할 필요는 없고 데이터베이스 사용 환경을 고려하여 하나를 골라 PK로 설정한다.

Foreign key(FK)

특정 릴레이션(A table)의 속성이 다른 릴레이션(B table)의 기본키가 되는 키, 다시말해 다른 릴레이션(B table)의 기본키를 참조하는 속성의 집합.

Indexing 2

|

DB indexing

youtube

SQL Unplugged 2013 쉽고 재미있는 인덱스 이야기/ 씨퀄로 이장래 - YouTube

3:09 기본 용어 및 약

4:25 페이지(pages) -데이터 파일을 구성하는 논리단위 -페이지 내에 행이 많을 수록 I/O 효율 증가

6:49 인덱스 이해

10:35 인덱스의 장점 -빠른 검색 -데이터 중복 방지(PK, UNIQ 제약) -잠금 최소

11:14 인덱스 단점 select는 인덱스를 좋아함 insert는 싫어함 데이터가 적다면 효과보다 유지관리 비용 비율이이 더 커진다.

12:50 인덱스 유지관리의 필요성 -조각화 문제 해결 필

13:38 테이블과 인덱스

15:25 힙 이란?

19:11 부자 인덱스 이야기, 클러스터 형 인덱스

23:11 인덱스 구

24:10 클러스터형 인덱스의 유일성 지정

25:23 클러스터 형 인덱스는 만능이 아님 -전화번호 부에서 암사동 주민을 찾아

25:50 가난한 인덱스 이야기, 비 클러스터형 인덱스

Vue.js, Nuxt.js Vuex

|

Vuex overview

참조 : https://vuex.vuejs.org

Vuex is a state management pattern + library for Vue.js applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion. It also integrates with Vue’s official devtools extension to provide advanced features such as zero-config time-travel debugging and state snapshot export / import.

Vuex는 state 관리 패턴이자 라이브러리 입니다. 모든 components에서 접근할 수 있도록 중앙에서 관리하는 store로서 기능을 수행합니다. state값의 변경을 보장하는 규칙들이 있고 예상 가능한 방식으로 진행됩니다.

nuxt

참조 : Vuex Store - NuxtJS

Using a store to manage the state is important for every big application. That’s why Nuxt.js implements in its core.Vuex

To get started, simply export the state as a function, and the mutations and actions as objects in store/index.js:

state는 함수로, mutations와 actions는 객체로 export한다.

export const state = () => ({
  counter: 0
})

export const mutations = {
  increment (state) {
    state.counter++
  }
}

access state from another module in Nuxt

Access State from Another Module in Nuxt - Justin - Medium

Having set your store using module option, the ideal place to access state from another module is in action handler. There we have access to the rootState property that is exposed by the context received in the function. It is worthy of note that rootState is only available in modules option.

모듈 옵션을 사용해서 store를 세팅할 때 다른 모듈로부터 state에 접근하기 위한 좋은 곳은 action handler이다. 여기서 함수에서 받은 context에 의해 노출되는 rootState 속성에 접근할 수 있다.

Assuming you want to access state.users in users.js from admin.js

//users.js
export const state = () => ({
	users :'',
})
//admin.js
export const actions = {
	setUsers({ rootState }) {
		Let users = rootState.users.users
	}
}

Vue.js, Nuxt.js Middleware (for authentication)

|

Vuejs Authentication

routing

midleware

Routing - NuxtJS

Middleware lets you define custom functions that can be run before rendering either a page or a group of pages.

미들웨어는 페이지가 렌더링 되기 전에 실행되야하는 함수를 정의할 수 있도록 해줍니다.

Every middleware should be placed in the middleware/directory. The filename will be the name of the middleware (middleware/auth.js will be the auth middleware). A middleware receives the context as first argument:

미들웨어는 컨텍스트를 첫번째 인자로 받습니다.


context 란?

The context provides additional objects/params from Nuxt to Vue components and is available in special nuxt lifecycle areas like* asyncData , fetch , plugins , middleware and nuxtServerInit .

컨텍스트는 객체나 매개변수를 넉스트에서 vue components로 전달하고 asyncData, fetch 등과 같은 lifecycle areas에서 사용가능합니다.


In universal mode, middlewares will be called server-side once (on the first request to the Nuxt app or when page refreshes) and client-side when navigating to further routes. In SPA mode, middlewares will be called client-side on the first request and when navigating to further routes.

  • universal 모드 : 다른 경로로 이동할 때 미들웨어는 서버사이드(첫번 째 요청이나 page 새로고침하는 경우)와 클라이언트 사이드에서 호출됩니다.
  • SPA 모드 : 다른 경로로 이동할 때 미들웨어는 클라이언트 사이드(첫번째 리퀘스트)에서 호출됩니다.

The middleware will be executed in series in this order: 미들웨어는 다음 순서로 순차적으로 실행됩니다.

  1. nuxt.config.js (in the order within the file)
  2. Matched layouts
  3. Matched pages

A middleware can be asynchronous. To do this, simply return a Promise or use the 2nd callback argument:

미들웨어는 비동기입니다.

example

// middleware/stats.js
import axios from axios

export default function ({ route }) {
  return axios.post(http://my-stats-api.com’, {
    url: route.fullPath
  })
}

Then, in your nuxt.config.js , use the router.middleware key:

Then, in your nuxt.config.js , use the router.middleware key:

//nuxt.config.js
export default {
  router: {
    middleware: stats
  }
}

Now the stats middleware will be called for every route change.

이제 stats midleware는 라우트가 바뀔 때마다 실행됩니다.

You can add your middleware to a specific layout or page as well: pages/index.vue or layouts/default.vue 특정 페이지나 레이아웃에만 미들웨어를 추가할 수 있습니다.

export default {
  middleware: stats
}

API: The middleware Property

참고 : API: The middleware Property - NuxtJS

Named middleware

You can create named middleware by creating a file inside the middleware/ directory, the file name will be the middleware name.

//middleware/authenticated.js
export default function ({ store, redirect }) {
  // If the user is not authenticated
  if (!store.state.authenticated) {
    return redirect(/login)
  }
}
//pages/secret.vue
<template>
  <h1>Secret page</h1>
</template>

<script>
export default {
  middleware: authenticated
}
</script>

Auth External API : JWT

Auth External API (JWT) - NuxtJS