[error D8016] '/ZI'과(와) '/GL' 명령줄 옵션이 호환되지 않습니다.

 

 

명령줄에 /GL /ZI 옵션이 같이 들어가 있다

 

속성 변경

 

 

변경 후 명령 줄

 

 

/GL 옵션이 사라짐

 

참고

https://msdn.microsoft.com/ko-kr/library/xbf3tbeh.aspx

 

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

 

1. 프로젝트 속성 페이지 대화 상자를 엽니다.  프로젝트 속성 사용 를 참조하십시오.

2. 구성 속성 폴더를 선택합니다. 

3. 일반 속성 페이지를 클릭합니다. 

4. 전체 프로그램 최적화  속성을 수정합니다.

 

 

 

 

 

'and so on > error' 카테고리의 다른 글

[LNK2019] 확인할 수 없는 외부 참조입니다.  (1) 2015.03.13
GetLastError 1406  (0) 2014.05.19
RegisterTaskDefinition 80070534 error  (0) 2014.03.04
버그. 에러, 예외  (0) 2013.01.25
F5 실행 Ctrl F5 결과 값 차이 발생  (0) 2012.12.07

멈추지마 다시 꿈부터 써봐



멈추지마 다시 꿈부터 써봐

저자
김수영 지음
출판사
웅진지식하우스 | 2011-02-19 출간
카테고리
시/에세이
책소개
KBS 「도전! 골든벨」에서 실업고 출신으로는 첫 골든벨을 울리...
가격비교



이 지구에서 한 번뿐인 유한한 삶을 충만하게 살 수 있는 방법은 무엇일까?

끝없이 배우고, 모험하고, 즐기고, 사랑하고, 성취하고 또 창조적으로 살고 싶었다. 


이 지구별을 무대로 하고 싶은 일을 하며 방랑하면서 살아가자고 결심한 뒤

나 자신을 이 지구별의 '쾌락주의자 유목민'이라고 명명했다.


'쾌락주의자'라고 해서 무조건 즐기는 것이 아니고, 

'유목민'이라고 해서 방향 감각을 잃고 무작정 돌아다니는 것이 아니다. 

내가 하고 싶은 걸 하기 위해서는 그만큼의 노력과 책임이 따랐고, 

길을 헤매지 않기 위해서는 끊임없이 앞뒤를 돌아보며 갈 길을 점검해야 했다.


-

이미 성공한 유색 인종 롤모델이 충분히 있으며 그들은 남들보다 더 많은 도전을 했고 

이겨냈기 때문에 성공할 수 있었다고, 이는 피부색과 전혀 관계가 없는 것이라고 거듭 강조했다.


"인종차별 핑계는 집어치워라. 당신을 성공하게 만드는 것도 당신이고 실패하게 만드는 것도 당신이다. 

그것은 피부색에 상관없이 보편적으로 적용되는 것이다. 당신을 가로막는 장애 때문에 포기할 것인가,

반대로 그 장애를 넘어서기 위해 노력할 것인가는 당신이 선택할 문제다.

먼 훗날 당신이 죽기 전에 손자손녀에게 당신의 삶을 이야기할 때 '나는 유색 인종이라서 이것밖에 못했어'라고 말하고 싶은가?

아니면 '유색 인종에게 주어진 어려움에도 불구하고 이렇게 성공했다'라고 말하고 싶은가?

'Because'라는 변명의 단어보다는 'Despite'라는 도전의 단어를 기억해라"


-


내 딴엔 매일매일 전투하듯 살고 있다고 생각했다. 

하지만 실제로 끔찍한 전쟁 속에서 고통스럽게 살아가고 있는 그들가 비교했을 때

나의 힘겨움은 부끄러운 어리광에 불과했다. 그들이 생사의 현장에서 살아가야 한다는 것이 너무나 안타까웠고, 

이제까지 세상에 이런 일이 있는 줄도 몰랐던가 하는 것 역시 충격이었다. 난 여수에서의 삶이 전부인 줄 알고 아등바등 살았는데,

대한민국이란 사실 이 세계의 아주 작은 땅덩어리에 불과하며 이 세계에는 정말 많은 사람이 다양한 모습으로 살고 있었던 것이다.


-


불평불만과 핑계를 늘어놓고 있을 시간에 어떻게 하면 돈을 벌고, 학위를 따고, 살을 빼 예버질 수 있을지 알아보고 실천에 옮기는 것이 더욱 현명하다. 꿈을 이루는 데 장벽이 있다면 그 장벽을 어떻게 뛰어 넘을 것인지를 고민해야지, 고민거리 자체를 고민한다고 뭐가 달라지지는 않는다. 

너무 어렵다고, 부족하다고, 시간이 없다고 , 늦어서 불가능하다고 핑계만 대고 살기에는 인생이 너무 짧다. 도전할 때 꿈은 현실에 한발짝 가까이 다가서지만 도전하지 않으면 꿈은 저 멀리 달나라 이야기에 불과하다. 꿈을 간절히 바라고 이루기 위해 노력하면 전 우주가 움직여서라도 그 꿈이 실현되는 기적이 만들어진다. 견우와 직녀의 끈질긴 애정이 까치들의 마음을 움직여 깊은 강물 위에 다리가 놓인 것 처럼.



사실 해보면 별것 아닌데도 나 자신을 둘러싼 틀을 깨고 나온다는 것이 쉽지가 않다. 


-


살다 보면 순간적으로 창피해서 망설이다가 못하는 일이 얼마나 많은가. 창피함은 순간이지만 후회는 평생이다.

크게 손해볼 일이 아니라면 수줍어하지 말고 용기내서 질러보는 편이 안 하고 후회하는 것보다 낫다는 게 나의 지론이다.

괜히 용감한 자가 미인을 얻겠는가?


-


꼭 어떤 큰 이상이 있어서라기보다는 어려움에 부딪히면 당장 도망가는 것은 쉬워 보이지만 장기적으로는 문제점을 해결하는 편이 훨씬 더 쉬운 법이다. 또한 그렇게 힘든 상황을 이겨내고 노력하다 보면 훨씬 더 좋은 결과를 이뤄내기도 한다.


-


<<10년 후 >>의 작가 그레그 레이드는 "꿈을 날짜와 함께 적어놓으면 목표가 되고, 목표를 잘게 나누면 계획이 된다. 계획을 실행에 옮기면 꿈이 현실이 된다"라고 했다.


-


내가 자꾸 남들을 미워하고 세상을 저주하면 할수록 불행과 고통이 되돌아왔다. 당연한 결과이다. 내가 세상을 저주하는데 세상이 내게 축복을 내릴 리가 없지 않는가. 그러나 내 마음이 감사와 겸허로 채워지면서 엉켜 있던 실타래가 풀리듯 상 일이 하나둘씩 풀리기 시작했고, 전혀 생각지도 못했던 훨씬 더 멋진 삶을 살기 시작했다.


-










이 책을 읽으면서 하고 싶은 일을 하는 사람의 모습이 

얼마나 반짝반짝 빛나는지 알 수 있었다.


보고 있지 않아도

자신감 넘치고 당당한 모습을 하고 있을 것이라는 것이 눈에 선했다.


실천력이 강한 것이 그녀의 큰 장점인 듯 보였다.


책에는 온통 그녀가 도전한 내용들로 가득찼고, 

그 도전들은 모두 성공한 듯 보였다.

아마 결과가 아닌 과정을 보여주었기 때문에 그렇게 보였을 것이다.


꿈을 써보라는 것이 거창한 것으로 보이겠지만

그녀의 73가지 꿈 중에는 

우리가 늘상 가지던 '일본어 실력 향상', '스페인어 배우기', '마라톤 뛰기' 와 같은 목록도 포함되어 있었다.


2015년이 다가오는 이 시점에서

새로운 꿈을 리스트업할 때가 온 것 같다.

'기록 > ' 카테고리의 다른 글

나는 죽을 때까지 재미있게 살고싶다  (0) 2014.10.18
2014 책  (0) 2014.08.06
ㅇㅇ  (0) 2013.05.16
인생학교: 일  (0) 2013.04.23
스크럼과 XP  (3) 2013.03.11

chapter01. 네트워크 프로그래밍과 소켓의 이해

1. 네트워크 프로그래밍에서 소켓이 담당하는 역할은 무엇인가? 그리고 소켓이라는 이름이 붙은 이유는 어디에 있는가?


2. 서버 프로그램에서는 소켓생성 이후에 listen 함수와 accept 함수를 차례대로 호출한다. 그렇다면 이들의 역할은 각각 무엇인지 비교해서 설명해보자.


3. 리눅스의 경우 파일 입출력 함수를 소켓 기반의 데이터 입출력에 사용할 수 있다. 반면 윈도우에서는 이것이 불가능하다. 그렇다면 리눅스에서는 가능하고, 윈도우에서는 불가능한 이유가 무엇인가?


4. 소켓을 생성한 다음에는 주소할당의 과정을 거친다. 그렇다면 주소할당이 필요한 이유는 무엇이며, 이를 목적으로 호출하는 함수는 또 무엇인가?


5. 리눅스의 파일 디스크립터와 윈도우의 핸들이 의미하는 바는 사실 같다. 그렇다면 이들이 의미하는 바가 무엇인지 소켓을 대상으로 설명해보자.


6. 저 수준 파일 입출력 함수와 ansi 표준에서 정의하는 파일 입출력 함수는 어떠한 차이가 있는가?


7. 본문에서 보인 예제 low_open.c와 low_read.c를 참조하여 파일 복사 프로그램을 작성하되, 저 수준 파일 입출력 함수를 기반으로, 그리고 ansi 표준 입출력 함수를 기반으로 각각 한번씩 작성해보자. 그리고 복사 프로그램의 사용방법은 여러분이 임의로 결정하기 바란다.

'and so on' 카테고리의 다른 글

라이브러리 사용 시 프로젝트 속성 설정  (0) 2015.04.15
[windbg] kb 명령어  (0) 2015.03.05
상속 vs 포함 (포함 예제)  (0) 2014.12.03
상속 vs 포함  (0) 2014.12.03
초성검색  (0) 2014.12.03

상속 vs 포함 (포함 예제)

///포함 관계라는 것은 클래스가 다른 클래스의 객체를 내부에 선언함으로써 포함된
///클래스의 기능을 공짜로 사용하는 것이다. 포함과 상속의 가장 큰 차이점은 다형성의
///발휘여부인데 상속은 클래스의 계층을 형성하여 다형성의 이점이 있지만 포함은
///코드를 한 번 재사용하는 정도의 기능 밖에 없다. 또한 상속은 protected 멤버를 자신의
///멤버처럼 자유롭게 액세스 하지만 포함은 그렇지 못하다.

 

using System;

 

class Human
{
    private string Name;
    private int Age;
    public Human(string aName, int aAge)
    {
        Name = aName;
        Age = aAge;
    }
    public void Intro()
    {
        Console.WriteLine("이름:" + Name);
        Console.WriteLine("나이:" + Age);
    }
}

class Student
{
    public Human H;             ///Human을 상속 받은것이 아니라 내부에 선언한것
                                ///즉, student 클래스 내부에 Human타입 객체 H를 포함
                                ///상속은 멤버를 바로 액세스 하지만, 포함한 경우는 객체의
                                ///이름을 통해야만 한다.
    protected int StNum;
    public Student(string aName, int aAge, int aStNum)
    {
        StNum = aStNum;
        H = new Human(aName, aAge);     ///Human의 Name과 Age변수를 호출
    }
    public void Intro()
    {
        H.Intro();                        ///Human의 메서드를 호출, 
        Console.WriteLine("학번:" + StNum);
    }
    public void Study()
    {
        Console.WriteLine("하늘 천 따지 검을 현 누를 황");
    }
}

class CSTest
{
    static void Main()
    {
        Student Kim;
        Kim = new Student("한석현", 29,0203446);
        Kim.Intro();
        Kim.Study();
    }
}


'and so on' 카테고리의 다른 글

[windbg] kb 명령어  (0) 2015.03.05
chapter01. 네트워크 프로그래밍과 소켓의 이해  (0) 2014.12.09
상속 vs 포함  (0) 2014.12.03
초성검색  (0) 2014.12.03
인덱싱  (0) 2014.12.03

상속 vs 포함

포함은 Has-a 관계다. A가 B를 가지고 있다면 (Has) 포함을 사용하라.

상속은 Is-a 관계다. A가 B라면(is) 상속을 사용하라

 

 

아래는 x,y 좌표를 저장하는 객체를 만든 모습입니다.

#include<iostream>
#include<cstring>
using namespace std;

class point{
private:
    int x,y;
public:
    point(int _x,int _y):x(_x),y(_y){};
    int getX(){
        return x;
    }
    int getY(){
        return y;
    }
};

int main(){
    point a(3,5);
    printf("%d %d",a.getX(),a.getY());
    return 0;
}

C++ 프로그래밍 경험이 있으신분들은 위 코드를 쉽게 이해하실거라 생각합니다.

아.. 생성자 부분에서 낯선부분이라고 생각하실 수 있는게..
point(int _x,int _y):x(_x),y(_y){}; // 이부분일까요?
point(int _x,int _y){
    x = _x;
    y = _y; 
} 와 완벽히 같은 내용입니다.

x = _x; // C style definition.
x(_x); // C++ style definition

위의 point 객체를 '포함' 하는 직사각형 객체 rectangle를 만들어봅시다.
단순히 point 객체를 변수로 가지는 직사각형 객체입니다.

#include<iostream>
#include<cstring>
using namespace std;

class point{
private:
    int x,y;
public:
    point(int _x,int _y):x(_x),y(_y){};
    int getX(){
        return x;
    }
    int getY(){
        return y;
    }
};

class rectangle{
private:
    point topLeft;
    point bottomRight; //point 객체 '포함'
public:
    rectangle(int a,int b,int c,int d):topLeft(a,b),bottomRight(c,d){};
    void print(){
        printf("Top Left : (%d , %d)\n",topLeft.getX(),topLeft.getY());
        printf("Bottom Right : (%d , %d)\n",bottomRight.getX(),bottomRight.getY());
    }
};

int main(){
    rectangle myRec(1,2,3,4);
    myRec.print();
    return 0;
}

rectangle 객체는 각 꼭지점의 위치를 point 객체를 이용하여 저장하고 있습니다.
객체가 다른 객체를 멤버변수로 사용하고 있는것을 '포함' 이라고 합니다.

 

아래는, 포함과 상속 모두를 사용한 예제입니다.
circle 객체는 point 객체를 '포함' 하여, 중심 좌표를 가지며
figure 객체를 상속하고 있습니다.
즉 circle 객체는 figure의 모든 public, protect 멤버에 대해서 접근이 가능합니다.
그중 protect는 상속받는 객체만이 public처럼 접근이 가능하고,
외부에서 protect변수는 private처럼 접근이 불가능합니다.
(circle이 figure을 상속받음)

#include<iostream>
#include<cstring>
using namespace std;

class point{
private:
    int x,y;
public:
    point(int _x,int _y):x(_x),y(_y){};
    int getX(){
        return x;
    }
    int getY(){
        return y;
    }
};

class figure{
private:
    char Name[20];
protected:
    char protect[50];
public:
    figure(char *_Name){
        strcpy_s(Name,_Name);
    }
    const char* getName() const{
        return Name;
    }
};

class circle : public figure // <-- 상속하는 부분
{
private:
    point center;
    int radius;
public:
    circle(int x,int y,int _radius)
        :center(x,y),figure("원"),radius(_radius){};
    void showData(){
        printf("%s 입니다.\n",getName()); //<-- figure 객체의 함수를 사용!
        printf("(x,y) : (%d,%d)\n",center.getX(),center.getY());
        printf("Radius : %d\n",radius);
        strcpy(protect,"protect는 마치 public처럼 접근가능!"); //Protect변수 접근가능
        printf("%s\n",protect);
    }
};

int main(){
    circle myCircle(5,5,5);
    myCircle.showData();
    return 0;
}


'and so on' 카테고리의 다른 글

chapter01. 네트워크 프로그래밍과 소켓의 이해  (0) 2014.12.09
상속 vs 포함 (포함 예제)  (0) 2014.12.03
초성검색  (0) 2014.12.03
인덱싱  (0) 2014.12.03
11/25 Build Your Own Webpage 1~6  (0) 2014.11.25

초성검색

Q) 초성으로 검색하는 기능을 추가하려고 합니다. 어떻게 구현하면 좋을까요?

     저는 트리를 이용한 검색을 설명했습니다.

RQ) 이 방법 보다는 인덱싱을 사용하면 좋을 것 같은데 어떻게 생각하나요? 재질문으로 인덱싱을 사용한 검색기능 구현법을 질문하셨습니다.

 

C++ 코드와 설명 출처: 데브피아

 

;- 유니코드 한글의 자모 분리법.
;
;
; 유니코드 완성형 한글 코드는 배치가 매우 잘되어 있어서 초성 중성 종성의 분리가 가능하다.
;
; wchar_t CompleteCode = L'가';
; 이렇게 완성형 코드가 있을 때
;
; wchar_t UniValue = CompleteCode - 0xAC00;
;
; 0xAC00은 한글 코드의 시작 값이다. 따라서 저 값을 빼면
; 우선적으로 우리가 원하는 한글 값만을 가지게 된다.
;
; 이제 저장한 UniValue로부터 종성을 분리한다.
; wchar_t Jong = UniValue % 28;
;
; 유니코드에서 사용가능한 초성은 19개, 중성은 21개, 종성은 28개이고
; 유니코드가 같는 값의 공식은
;
; 유니코드 완성형 값 = ( ( ( 초성 * 21 ) + 중성 ) * 28 ) + 종성 + 0xAC00;
;
; 이렇게 된다. 따라서 UniValue에서 28로 나눈 나머지는 종성이 된다.
;
; 이번에는 중성을 찾는다.
; wchar_t Jung = ( ( UniValue - Jong ) / 28 ) % 21;
; wchar_t Cho = ( ( UniValue - Jong ) / 28 ) / 21;
;
; 이렇게 하여 유니코드 완성형 값에서 초성, 중성, 종성의 값을 분리해낼 수 있다.
; 주의할 점은 저렇게 나오는 값은 인덱스 값이라는 점이다.
; 정확한 자모 값을 받기 위해서는 유니코드 한글 자모 코드표를 통해서
; 초성에는 초성 시작 값을 더해주고, 중성에는 중성 시작값을,
; 종성에는 종성의 시작값을 더해주어야 정확한 자모 값을 얻을 수 있다.
;
; 자, 이제 코드를 살펴보자...
;
; // unicode3.cpp
; #include <windows.h>
; #include <iostream>
; #include <locale>
;
; using namespace STD;
;
; INT main()
; {
;         wcout.imbue( locale("korean") );
;
;         wchar_t CompleteCode = L'개';
;         wchar_t UniValue = CompleteCode - 0xAC00;
;
;         wchar_t Jong = UniValue % 28;
;         wchar_t Jung = ( ( UniValue - Jong ) / 28 ) % 21;
;         wchar_t Cho = ( ( UniValue - Jong ) / 28 ) / 21;
;
;         cout << "초성 : " << Cho << "\t" << "중성 : " << Jung << "\t" << "종성 : " << Jong << endl;
; }
;
; 위와 같은 코드를 작성하여 살펴보면 '개'의 초성은 'ㄱ'이고, 중성은 'ㅐ', 종성은 없다.
; 따라서 'ㄱ'은 자모 코드 중 초성의 첫번째이므로 0의 값을 가지며,
; 'ㅐ'는 중성의 두번째이므로 1의 값을 가지고 종성은 없으므로 0의 값을 가지게 된다.
; 문제점은 종성의 0이다. 한글 코드는 초성이 없는 경우가 없고, 중성이 없는 경우는 없으나
; 종성이 없는 경우는 있다. 따라서 종성의 인덱스는 1부터 시작해야 한다.
; 저 위의 코드 중 L'개'를 L'객'으로 바꿔 살펴보면 종성 값이 1로 나오는 것을 확인할 수 있다.
;
; 유니코드의 자모값의 코드표에 대하여 알고 싶을 경우
;
 http://www.unicode.org/charts/PDF/U1100.pdf
;
; 그리고 한글 완성형 코드표에 대하여 알고 싶을 경우
;
 http://www.unicode.org/charts/PDF/UAC00.pdf
; 위의 링크에 가면 된다.


UniValue = Asc("객") - $AC00
Debug UniValue

 

jong = UniValue % 28
jung = ( ( UniValue - jong ) / 28 ) % 21
cho = ( ( UniValue - jong ) / 28 ) / 21

 

;각각의 인덱스 출력.
Debug cho
Debug jung
Debug jong

 

;실제 자모의 출력.
Debug Chr(cho+$1100)
Debug Chr(jung+$1161)
If jong   ;종성이 있으면 이하 처리.
  Debug Chr(jong+$11a7)
EndIf

 

 

실행 결과

 29
 0
 1
 1
 ㄱ
 ㅐ
 ㄱ

 

 

 

 

유니코드 전체 리스트
http://titus.uni-frankfurt.de/unicode/unitestx.htm

유니코드 한글 시작 부분 (AD00부터 시작)
http://titus.uni-frankfurt.de/unicode/unitestx.htm#UAD00

유니코드 한글 코드표(개인블로그)
http://sexy.pe.kr/tc/113

 

 


'and so on' 카테고리의 다른 글

상속 vs 포함 (포함 예제)  (0) 2014.12.03
상속 vs 포함  (0) 2014.12.03
인덱싱  (0) 2014.12.03
11/25 Build Your Own Webpage 1~6  (0) 2014.11.25
11/17 HTML Basics 1~8  (0) 2014.11.17

인덱싱

인덱스를 효율적으로 사용하면 MS SQL 서버의 쿼리 성능을 향상시킬 수 있지만, 이는 인덱스를 어떻게 구현하느냐에 달려있다. 그렇다면 데이터베이스 성능을 향상시킬 수 있는 인덱스 구현 방법은 어떤 것일까?

관계형 데이터베이스에서 인덱싱은 장단점이 있다. 즉 인덱스를 많이 사용하면 시스템에서 데이터를 빨리 추출할 수 있지만, 대신 새로운 데이터를 입력할 때 더 많은 시간이 소요된다. 이 글에서는 MS SQL 서버가 지원하는 다양한 인덱스 종류와 구현 방법에 대해 살펴 보고, 이를 통해 성능을 향상시키는 방법을 알아 본다.

인덱스의 정의
인덱스란 특정 레코드를 탐색할 때 데이터 전부를 탐색하지 않고도 데이터를 추출할 수 있는 데이터베이스 툴이다. 인덱스는 특정 데이터를 쉽게 추출할 수 있도록 데이터를 변경하는 것이 특징인데, 특히 열 형태로 구성되어 있어, 데이터베이스가 인덱스된 열의 값들을 추출하는데 용이하다.

인덱스의 종류
MS SQL 서버가 지원하는 인덱스는 클러스터 방식과 비클러스터 방식의 두 가지다. 먼저 클러스터 인덱스는 테이블에 저장된 데이터의 물리적 순서를 따른다. 테이블은 단일한 물리적 순서를 갖고 있기 때문에 테이블 당 하나의 클러스터 인덱스만 존재할 수 있다. 클러스터 인덱스는 데이터가 이미 물리적 순서를 갖고 있기 때문에 특정 범위의 데이터를 찾을 때 효율적이다.

비클러스터 인덱스는 물리적 스토리지에 영향을 주지 않고, 특정 데이터 행의 포인터들로 구성돼 있다. 만약 클러스터 인덱스가 존재하면, 비클러스터 인덱스의 포인터들은 클러스터 인덱스를 참조하는데, 이는 실제 데이터보다 크기가 작아, 더 신속하게 조사할 수 있다.

인덱스 생성 방법
일부 인덱스는 데이터베이스에 의해 자동으로 생성된다. 예를 들어 MS SQL 서버는 UNIQUE 제약조건에 따라 하나의 인덱스를 자동으로 생성하는데, 이는 중복 데이터가 입력되지 않도록 하는 기능을 담당한다. 이밖에도 CREATE INDEX 명령이나 인덱스 구축 마법사가 포함된 SQL 서버 엔터프라이즈 매니저를 통해 인덱스를 생성할 수 있다.

성능 향상
성능 향상에 관한한 인덱스는 일장일단이 있다. 예를 들어 SQL 서버는 테이블당 56개의 비클러스터 인덱스를 생성하는데, 인덱스가 메모리와 디스크 드라이브에 추가 공간을 차지한다는 사실을 감안하면 그리 바람직한 것은 아니다. 인덱스를 사용하면 데이터 추가시에도 성능 저하가 나타나는데, 이는 사용 가능한 가장 빠른 공간에 저장하는 것이 아니라 인덱스에 따라 데이터가 추가되기 때문에, 인덱스가 많아질수록 삽입이나 갱신 명령을 실행하는데 더 시간이 걸리는 것이다.

따라서 이처럼 MS SQL 서버에서 인덱스를 구축할 때는 아래와 같은 가이드라인을 참조하라. 

적절한 데이터 유형을 선택하라 : 데이터 유형 가운데에는 인덱스에 더 효율적인 유형이 있다. Int, bigint, smallint와 tinyint 등은 인덱스하기에 적합한 크기로 정의됐을 뿐만 아니라 비교 연산이 수월해 데이터 유형으로 안성맞춤이다. 반면 Char나 varchar와 같은 유형은 수학 연산이 쉽지 않고 비교에도 오랜 시간이 걸리므로 인덱스 유형으로는 비효율적이다.</li>

인덱스가 실제 사용되지는 확인하라 : 일부 클러스터 열을 포함한 질의를 수행할 경우에 데이터의 사용 방식에 주의해야 한다. 특정 명령이 데이터 열에 적용되는 경우 정렬의 이점을 상쇄하기 때문이다. 예를 들어 특정 데이터 값이 인덱스 되어 있는데 이를 비교하기 위해 문자열로 변환하면, 인덱스된 데이터 값은 이 질의에 사용되지 않는다.</li>

다중열 인덱스를 구축하는 경우 열의 순서에 유의하라 : 인덱스는 첫째 열을 기준으로 정렬된 이후에는, 추가된 열을 기준으로 정렬된다. 데이터 유일성이 떨어지는 열들은 인덱스에서 가장 앞에 나열되는데, 이는 인덱스 전체를 검토하면서 데이터 정렬이 이루어지도록 하기 위해서다.</li>

클러스터 인덱스의 열 수를 제한하라 : 클러스터 인덱스의 열 개수가 늘어날수록 클러스터 인덱스를 참조하는 비클러스터 인덱스에는 더 많은 데이터가 저장된다. 이는 인덱스를 포함한 테이블 크기를 증가시켜 인덱스 기반 검색 시간도 늘어나게 된다.</li>

업데이트가 잦은 열은 클러스터 인덱스를 피하라 : 비클러스터 인덱스는 클러스터 인덱스에 의존하기 때문에, 클러스터 인덱스 관련 열들이 자주 업데이트 되면 비클러스터 인덱스에 저장된 행 위치자들 역시 빈번하게 업데이트된다. 이와 같은 업데이트 과정 중에는 해당 열들이 ‘잠금 상태’가 되는데, 이런 상태는 모든 열에 대한 질의 성능을 떨어뜨린다.</li>

가능한 한 연산을 분할하라 : 삽입과 갱신, 판독이 자주 발생하는 테이블에서는 가능한한 테이블을 분리하는 것이 좋다. 삽입과 갱신은 인덱스 없이 가능하며, 데이터 판독에 최적화되어 무수한 인덱스를 갖는 테이블은 그 이후에도 복제해 생성할 수 있다.</li>

적절하게 인덱스를 재구축하라 : 비클러스터 인덱스는 클러스터 인덱스로의 포인터를 포함하기 때문에 클러스터 인덱스에 의존적이다. 클러스터 인덱스를 재생성하는 방법은 기존 인덱스를 삭제하고 CREATE INDEX 명령을 이용하거나, CREATE INDEX 명령에 DROP_EXISTING 문을 포함시키는 방법 등이 있다. 비클러스터 인덱스는 전자처럼 삭제와 생성 절차를 별도로 하면 여러번 재생성을 하지만 후자를 사용하면 단 한번으로 끝난다.</li>
채움 요소를 현명하게 사용하라 : 데이터는 일정한 크기의 연속된 페이지에 저장된다. 이미 꽉찬 데이터 페이지에 새로운 행들이 추가되면 시스템은 데이터의 반을 새로운 페이지로 옮기는 페이지 분리를 수행한다. 이는 시스템 부하를 증가시키고 데이터 파편화를 초래하는데, 이 때 채움 요소(fill factor)를 활용하면 인덱스 생성시 데이터 사이에 빈 공간을 유지해 데이터 삽입에 따른 페이지 분할 회수를 감소시킨다.

이 빈 공간은 인덱스를 생성할 때만 유지되며 데이터를 추가하거나 갱신할 때는 적용되지 않는다. 이 때문에 인덱스는 채움 요소를 계속 활용하기 위해 주기적으로 재생성할 필요가 있다. 또한 채움 요소로 남겨진 빈 공간은 데이터 판독시 디스크 읽기 부하를 높여 성능저하를 초래하므로, 판독 회수가 쓰기 회수보다 작은지를 비교해 기본 채움 요소 값 이외의 다른 값을 사용할지 결정해야 한다.</li>


이처럼 인덱스를 효율적으로 활용하면 MS SQL의 질의 성능을 향상시킬 수 있다. 그러나 효율적인 인덱스 사용은 인덱스 생성 과정에 따라 좌우되며, 특히 인덱스의 성능 측면에서 접근해야 개선을 기대할 수 있다. 지금까지 살펴 본 가이드라인을 활용하면 독자들의 데이터베이스 환경에 적합한 올바른 결정을 내릴 수 있을 것이다. @

[출처] 인덱싱|작성자 sang_it


'and so on' 카테고리의 다른 글

상속 vs 포함  (0) 2014.12.03
초성검색  (0) 2014.12.03
11/25 Build Your Own Webpage 1~6  (0) 2014.11.25
11/17 HTML Basics 1~8  (0) 2014.11.17
windows 톰캣 설치  (0) 2014.04.21

11/25 Build Your Own Webpage 1~6

1. What you'll be making

우리는 코드의 무리를 작성하기 전에, 무엇을 당신이 이 프로젝트에서 만들 것인지 정확히 보는 것이 도움이 될 것이라고 생각한다.


index.html 파일을 확인해라. 그리고 예제의 결과로 생긴다. - 우리는 우리 자신의 웹 페이지를 만들었다.


*instructions

자신의 빌딩의 시작하기 위해 save& submit code를 눌러라


2. 모든 집은 프레임이 필요하다

HTML 페이지는 집과 같은 종류이다 : 이것은 작동하기 위하여 어떤 일정 수의 구조를 필요로 한다


집 처럼, HTML 페이지는 구조를 필요로 한다. 당신의 프레임은 <!DOCTYPE>, <html>, <head>, <body>태그로 만든다.


*instructions

당신의 웹페이지는 비어있다. 이것은 새로 태어났다! 다섯가지의 것들을 추가해보자

01. <!DOCTYPE> 태그

02. <html> 태그

03. <head> 태그

04. <title> 태그(당신이 좋아하는 어떤 타이틀!)  head 태그 사이에

05. <body>태그 


03. 헤더가 있는 것이 낫다

당신의 웹페이지는 body 태그 사이에 <h1> 헤더가 필요하다, 모두가  페이지가 당신에 관한것이라는 것을 알게


*instructions

<h1>태그를 body 태그 안에 생성해라 모두가 볼 수 있게 <h1></h1>사이에 당신의 이름을 적어라!


04. 너 자신에 대하여 말해라

당신의 페이지는 따라오고 있다. 그러나 아직 그것은 우리에게 말한게 아니다


당신은 문단이나, 당신의 관심사, 무엇을 위해 살아가는지, 얼마나 HTML을 배우는 것을 사랑하는지 등등 두가지에 관하여 말 할 수 있다.


*instructions

세개의 <p> 태그를 <h1> 태그 다음에 삽입해라( </body> 태그 전에 )

각각 세개의 단락에 당신 자신에 대하여 조금 적어라 

당신은 무엇이든지 당신이 원하는 것을 말할 수 있다. 이것은 당신의 웹페이지니까!



05. 사진은 천개 단어의 가치를 가진다

Nice work! 너의 페이지는 여전히 약간 spare로 보이긴 하지만 이미지나 두개의 깔끔한 것을 올리면 낫다


기억해라 이미지를 웹 에서 올리려면 당신은 오른쪽 클릭을 해서 "Copy image URL"을 필요로 한다. 그러면 그 URL을 <img> 태그에 사용한다.


*instructions

<img>태그를 body 태그 사이에 삽입해라. 어디든 놓을 수 있다. (우리 생각에는 <h1> 태그 아래, <p> 전에가 가장 최적으로 보인다)

당신은 src를 만들 수 있다.


06. Link me!

Great! 단지 한개의 문제가 있다: 당신의 웹페이지는 문이 없는 집과 같다. 

들어가거나 나가는 방법이 없다. 우리는 한 쌍의 링크로 고칠것이다.


한번 당신은 당신의 링크를 성공적으로 추가한다. 그리고 클릭하여 실행시킨다. 그럼 끝! 


아직도 약간 기초로 보이면 걱정마라. 우리는 곧 당신의 웹페이지가 sharp처럼 보이도록 만들기 위해 CSS를 가르쳐줄 것이다.


*instructions

2개의 링크를 추가해라

당신은 이미지나 약간의 텍스르로 링크를 추가할 수 있다. <p> 태그안에 추가할 수 있다


<a>태그를 어떻게 동작싴는지 잊었다면 힌트를 확인해라




'and so on' 카테고리의 다른 글

초성검색  (0) 2014.12.03
인덱싱  (0) 2014.12.03
11/17 HTML Basics 1~8  (0) 2014.11.17
windows 톰캣 설치  (0) 2014.04.21
마크다운 (MARKDOWN) 문법  (0) 2014.04.14

11/17 HTML Basics 1~8

1. HTML을 왜 배우는가

모든 웹페이지는 HTML이라고 불리는 언어로 쓰여져 있다. 

당신은 HTML에 관하여 모든 웹페이지 구조의 골격으로써 생각할 수 있다.

이 과정에서 우리는 HTML을 단락, headings, 이미지 그리고 웹페이지 링크를 추가하기 위하여 사용할 것이다


오른쪽에 보이는 에디터에 test.html 이라고 불리는 탭이 있다. 

이것은 우리가 HTML로 입력하기 위한 파일이다. 

코드에 있는 <>들을 보면? 그것은 HTML 이다! 

다른 언어 처럼 이것은 그들만의 특별한 문법을 가진다


우리가 저장&제출 코드를 누르면 결과 탭은 인터넷 브라우저처럼 행동할 것이다 (eg 크롬, 파이어폭스, IE)

브라우저의 일은 test.html의 코드를 인식할 수 있는 웹페이지로 전송하는 것이다

그것은 HTML 문법을 따르는 레이아웃 페이지로 변할지 알고 있다


2. HTML & CSS

HTML은 Hyper Text Markup Language를 나타낸다. Hypertext 의 의미는 "test with links in it" 이다

어느때나 단어를 클릭하면 새로운 웹페이지로 데려간다 당신은 hypertext를 클릭했다


Markup language는 페이지에 있어 텍스트가 더 많은 일을 할 수 있도록 하는데 사용되는 프로그래밍 언어이다.

: 이것은 텍스트가 이미지, 링크, 표 리스트 그리고 더 많은 것으로 전환될 수 있다.

HTML은 markup language 이다 

우리는 이걸 배울 것이다


웹페이지를 멋지게 만드는 것은 무엇인가?

그것은 CSS - Cascading style sheets. 


우리가 가장 먼저 할 일은 페이지의 뼈대를 설정하는 것이다. 


a. 항상 첫줄에 <!DOCTYPE html>을 적는다

이것은 브라우저가 어떤 언어를 읽는지 말해준다

b. 항상 <html>을 그 다음줄에 적는다 이것은 HTML 문서의 시작이다.

c. 항상 </html>을 마지막 라인에 적는다 이것은 HTML 문서의 종료이다.



3. 기본 용어

HTML에 관해 더 배우기 위해 우리는 HTML에 관해 어떻게 이야기 하는지 배워야 한다.

이미 당신은 <>를 많이 사용하는 것을 봐왔다.


01. <>안에 있는 것들은 tags라고 불린다

02. tags는 거의 항상 쌍으로 온다 : 오프닝태그 & 클로징 태그

03. 오프닝태그 예 : <html>

04. 클로징태그 예 : </html>


당신은 이미 존재하는 괄호 처럼 태그를 생각할 수 있다 : 하나를 열때마다 그것을 닫아야 한다.

tags 또한 한 세트이다. 그래서 너는 그것들을  / 로 닫아야 한다. : 가장 최근 열었던 태그는 가장 먼저 닫아야 한다

<first tag><second tag> Some text! </second tag></first tag>



마지막 예제는 우리의 HTML 파일을 어떻게 설정하는지 가르쳐준다.

우리가 지금 하는 모든 것은  <html> 과 </html> 사이로 간다



4. head 만들기

우리의 모든 HTML 파일은 오프닝 <html>과 클로징 </html> 태그 사이에 이동한다


HTML 파일은 항상 두개의 파트가 있다: head 와 body 

head를 시작해보자


head는 타이틀 처럼 html 파일에 관한 정보를 포함하고 있다 타이틀은 브라우저의 타이틀바나 페이지의 탭에서 볼 수 있는 것이다. 

예를들어 이 페이지의 타이틀은 "HTML Basics | Codecademy"이다


*instructions

우리의 웹페이지에 타이틀이랑 head를 추가해보자. 

01. 오프닝 <head>태그와 클로징 </head> 태그 추가

02. <head>태그들 사이에 오프닝 <title>태그와 클로징</title> 태그를 추가한다

03. <title>태그들 사이에 너의 페이지를 위한 타이틀을 적는다 ex) "My Webpage"

04. "Save & Submit Code" 누르기



5. body 용어

그레이트잡! THML 파일은 head랑 body 둘다 가지고 있다.

head는 타이틀과 같이 당신의 html 파일에 관한 정보를 넣는다.

  

body는 텍스트, 이미지, 링크와 같은 당신의 content을 넣는다

body 안에 있는 content는 실제 페이지에 보여질 것이다. 


body는 <html>테그 사이에, <head> 오른쪽 다음에 간다

아래와 같이 

<html>

<head>

<title> My webpage</title>

</head>

<body>

</body>

</html>


*instructions

01. </head>태그 아래에 <body>태그와 </body> 태그를 넣는다

02. body 안에 두개 용어를 넣는다 <p></p> 우리는 저 태그 사이에 내용을 적을 수 있다

<body>

<p>Hello world!</p>

</body>


6. 단락과 머리글

우리는 확실히 좋은 진전을 보이고 있다!

우리는 언제, 그리고 왜 우리가 HTML을 사용하는지 배웠다. 우리는 또한 어떻게 사용하는지 배웠다:


a. tag를 사용한 HTML 파일 설정

b. 웹 페이지의 타이틀(<head>안에)

c. 단락 생성(<body> 안에 <p >태그 이용하여)


다음 단계는 단락 머리글에 heading tags를 사용해주는것이다.

<h1> 태그를 시작한다. 이 태그 사이에 있는 내용은 커질 것이다!


*instructions

01. body 섹션 안에, 머리글을 생성한다. <h1> 태그 생성 =

02. 내용 추가

03. <h1>으로 닫는다(너의 내용은 지금 <h1>과 <h2> 사이에 있어야 한다)

04. 머리글 태그 아래에 두개의 <p>태그를 이용하여 너가 좋아하는 내용 무엇이든지 생성한다. 


<!DOCTYPE html>

<html>

<head>

<title>

Headings & Paragraphs

</title>

</head>

<body>

<h1> heading</h1>

<p>hello world</p>

<p>hello world too </p>

</body>

</html> 



7. more about headings!

HTML은 실제로 하나 이상의 제목 크기를 가지고 있다.

6개의 머리글 크기가 있다.<h1>은 제일 크고 <h6>은 작다!


<h1> - The CEO

<h2> - VP

<h3> - Director

<h4> - Middle management

<h5> - Lowly assistant

<h6> - gets coffee for everyone


*Instructions

01. 당신의 코드는 현재 <h1>머리글과 두개의 문단을 가지고 있다

02. <h3> 머리글을 두개의 문단 전에 추가한다 

03. <h5> 머리글을 두개의 문단 다음에 추가한다. 그리고 새개의 문단을 이 머리글 다음에 추가해라



<!DOCTYPE html>

<html>


<head>

<title>

Headings & Paragraphs

</title>

</head>

<body>

<h1>h1 heading</h1>

<h3>h3 heading </h3>

<p>hello world</p>

<p>hello world too </p>

<h5>h5 heading </h5>

<p>third paragraph hello world</p>

</body>

</html> 



8. 모든 머리글 사용하기

nice work!


*instructions

01. 3개 이상의 머리글 추가 하기. <h2>, <h4> 그리고 <h6>. 모든 태그를 닫았는지 확인해라!

02. 각 머리글 아래에 작은 문단을 추가해라. 문단은 <p></p>태그가 필요하다는 것을 잊지 말아라

'and so on' 카테고리의 다른 글

인덱싱  (0) 2014.12.03
11/25 Build Your Own Webpage 1~6  (0) 2014.11.25
windows 톰캣 설치  (0) 2014.04.21
마크다운 (MARKDOWN) 문법  (0) 2014.04.14
doxygen - 표  (0) 2014.03.19

나는 죽을 때까지 재미있게 살고싶다



나는 죽을 때까지 재미있게 살고싶다

저자
이근후, 김선경 (엮음) 지음
출판사
갤리온 | 2013-02-01 출간
카테고리
시/에세이
책소개
죽음의 위기를 몇 차례 넘기고 일곱 가지 병과 더불어 살아가면서...
가격비교



늙는 것에 대한 두려움이 컸다 


특히 여자로써 늙는 다는 것에 대하여

여성은 아름다움이 매력이라고 생각하는데

늙음은 아름다움이랑 반비례하다는 마음이 커서 

그랬던 것 같다. 


저자처럼 늙는 것에 대해서 받아드릴 수 있어야 한다.

늙어서도 여성으로써 아름다우면 좋겠지만

그렇지 않다고 해도 어쩔 수 없는 것이다. 


나이가 먹어서 얻어지는 것도 있으니

거기에 대하여 만족하고, 행복할 수 있어야 한다.


받아드리고, 인정하는 것이 어렵겠지만

그래야 한다


본받을 것이 많은 분이라고 생각한다

내가 나이 든다면 이렇게 살아도 괜찮겠다 싶다

이 책은 두고 40~50쯤에 다시 읽어야지 


이 책에 대해서 하고 싶은 말이 많은데 

정리가 되지 않는다 

결국은 이렇게 살고 싶다 겠지만 ㅋㅋ


'기록 > ' 카테고리의 다른 글

멈추지마 다시 꿈부터 써봐  (0) 2014.12.13
2014 책  (0) 2014.08.06
ㅇㅇ  (0) 2013.05.16
인생학교: 일  (0) 2013.04.23
스크럼과 XP  (3) 2013.03.11