출처 : 참좋은군사
원문 : 한글 단축키


한글 단축키

기본단축키

1. Ctrl + O : 불러오기

2. alt +S : 저장하기

3. shift +방향키 : 블록설정

4. alt + 방향키(←→) : 메뉴이동, alt + 방향키(↑↓) : 서브메뉴

5. Ctrl +F10 : 문자표

6. Home : 문자열에서 가장 앞쪽으로 이동

7. End : 문자열에서 가장 뒤쪽으로 이동

8. Page Up : 페이지에서 가장 위쪽

9. Page Down : 페이지에서 가장 아래쪽

10. insert : 삽입, 수정 변환

11. Crtl + 마우스 가운데롤 : 화면배율 변환

12. Alt + L : 글자모양

13. Alt + T : 문단모양

14. Alt + Shift + E : 글자크기 커짐

15. Alt + Shift + R : 글자크기 작아짐

16. Alt + Shift + J : 장평이 줄어듬

17. Alt + Shift + K : 장평이 늘어남

18. Alt + Shift + A : 자간이 줄어듬

19. Alt + Shift + Z : 자간이 늘어남

20. F6 : 스타일

21. F7 : 편집용지

22. F8 : 맞춤법검사

23. Crtl + Shift + C : 가운데 정렬(Center)

24. Crtl + Shift + M : 양쪽정렬(Middle)

25. Crtl + Shift + L : 왼쪽정렬(Left)

26. Crtl + Shift + R : 오른쪽정렬(Right)

27. Alt + Shift + B : 글씨 진하게

28. Alt + Shift + I : 기울게

29. Alt + Shift + U : 밑줄

30. Crtl + N + T : 표만들기

※창이 열려진 상태에서 Alt키를 누르면 단축키가 나옴.



표단축키

※지금부터의 단축키는 블록을 설정한 후 누르셔야 됩니다.

※표는 되도록 글자처럼 취급하는 것이 편집하기 편함.(표의 모서리 선택 + P)

1. F5(한번 누름) : 블록설정-이동가능

2. F5(두번 누름) : 여러 셀을 블록으로 설정 할 수 있음.(다중선택)

※Tip : 표안에 셀을 전체 선택하기 위해서는 F5를 세 번을 누르고, 한줄을 선택하기 위해서는 처음 칸에 F5를 두 번 누른 후 End버튼을 누름.

3. 복사하기, 붙여넣기, 잘라내기 모두 기본과 동일

4. S : 셀나누기

5. W : 셀 너비를 같게

6. H : 셀 높이를 같게

7. Shift + 방향키 : 표전체 크기는 변하지 않고 셀 크기만 변함

8. Ctrl + 방향키 : 표전체 크기를 변하면서 셀 크기도 같이 변함

9. Alt + Delete : 셀 지우기

10. Alt + insert : 셀 추가하기

11. B : 셀테두리/배경

12. P : 표/셀 속성

안녕하세요? 바람돌이입니다.
이번에는 간략하게 프로그래밍을 할 때의 팁을 이야기 하겠습니다.

보통 프로그램을 작성하다보면, 디버깅을 위해서 printf문을 사용할 경우가 많습니다.
또한, 배포를 한 뒤에도, 남들이 자신의 코드를 보고 디버깅을 해야하는 경우가 종종있죠.
이를 위해서 상용적인 코드에는 다음과 같은 Tip을 종종 사용하곤 합니다.

다음과 같은 코드를 header 파일에서 보신적이 있으실 겁니다.

#ifdef XXX_DEBUG
   #define print_debug(A) printf(A)
#else
   #define print_debug(A)
#endif

정확한 명칭은 다를 수 있습니다.

간단하게 살펴보면, "#ifdef"는 뒤에 전처리기명이 정의 되어있으면, 이라는 뜻입니다.
즉, XXX_DEBUG가 선언이 되어있으면, 코드 내에 있는 print_debug(A) 부분은 모두 printf(A)로 치환됩니다.
그리고, 선언이 되어있지 않으면, print_debug(A)는 모두 사라지게 되는 것이죠.

보통 우리는 함수내에 printf(A)를 직접 삽입합니다.
그리곤, 필요없는 상황이 된다면, 삭제를 하지요. 그러나, 매우 귀찮을 일이 될 것이며, 실수로 삭제를 하지 않거나 하는 상황이 발생합니다.

그러나, 위의 코딩 기법을 사용하게 되면, XXX_DEBUG를 선언하지 않는 이상 실제 코드(컴파일한 파일)엔 debugging 코드는 존재하지 않게 되지요.

게다가 만약, 다시 디버깅을 해야하는 상황이 된다면, (다 완성이 되었다고 생각했는데, 오류가 있거나, 버전업을 할 경우) XXX_DEBUG만 다시 선언하면, 곧바로 Debugging을 수행할 수 있습니다.

조금만 더 기법을 사용한다면, debugging을 level 별로도 수행 가능할 것이라 생각합니다.
그 부분은 추후 기법으로 남겨놓죠. @^-^@



전처리기에 대한 것을 더 알고 싶으시다면, #ifndef , #ifdef , #endif #pragma 등등을 검색해 보시기 바랍니다.







우선 지금 설치하고자 하는 MySql의 버전을 확인하시기 바랍니다.
지금은 mysql 5.0.37 입니다.
메뉴얼에 나와있는 버전은 2.4.14.6 이네요.

* 설치 조건
1. windows 2000 , XP나 그 이후 버전에서 동작함
    단, vista에서는 Visual Studio 2005가 인스톨되어 있어야 함

2. CMake. CMake는 다음 경로에서 다운 받을 수 있음
   http://www.cmake.org/ 
   download에 가서 최신 버전을 다운 받으면 됨

3. Microsoft Visual C++ 2005 Express Edition,
    Visual Studio .Net 2003 (7.1),
    Visual Studio 2005 (8.0)
    중에 하나의 Compiler System이 있어야 함 (VS 6.0은 안될 거 같네요. 저두 인스톨 중)

4. 만약 Visual C++ 2005 Expreess Edition을 사용한다면, 다음 싸이트에서 자신에 맞는 SDK를 다운받아서
   사용할 것
   http://msdn.microsoft.com/platformsdk/

5. 3GB~5GB의 여유 공간

이정도 입니다.


출처 : 쿠마님 네이버 블로그
원문 : ctags & cscope 설치 및 사용



1. ctags 란 ?

   = >  ctags는 프로그래밍 소스 코드의 태그 (전역변수 선언, 함수 정의, 메크로 정의)들의
          데이터 베이스(tags파일)을 생성하는 명령어입니다.
          커널 소스 분석등 작업에서 탁월한 성능을 발휘합니다

2. ctags 버전 확인하기

    = > (쉘에서)  $ctags --version 이라고 입력한다 설치 돼어 있는경우 버전 정보가 나옵니다
    cannat commond find  => 깔려 있지 않을시 에러 출력
    ( 대부분 기본리눅스에서 디폴트로 깔려 있지 않을것이다 처음 설치시 전체 설치 또는..
      선택 설치로 ctags를 설치 한경우라면 몰라도 디폴트로는 거의 안깔려 있습니다.
      특히 ubuntu 의 경우 원래 데스크탑용으로 개발 돼고 있어서.. 개발 툴이 하나도 안깔려 있기
      때문에 별또 설치를 필요로 합니다 )

3. ctags 설치하기
    => ubuntu 의 경우 레드헷 이나 페도라 등 다른 리눅스에 비해 비교적 쉽게 설치할수 있습니다
        레드헷일 경우 rpm 버전을 따로 다운 받아 설치 해야 하는 방면 데비안 계열 명령어
        apt-get으로 간편하게 설치가 가능합니다

    ubuntu 설치 하기
      (쉘에서) $apt-get install  ctags  (자동으로 최신 버전으로 설치 됩니다 )

    redhat 설치하기 http://sourceforge.net/projects/ctags (rpm 버전을 다운 받은후)
        (쉘에서) $rpm -ivf 다운받은 rpm 파일명 (으로 설치 하실수 있습니다)

    설치 완료 후 2번 과정 버전을 확인 하면 버전 정보가 재대로 나오면 재대로 설치가 되었습니다.
    레드헷 일 경우 lib.so 에러가 발생할수 있는데 버전이 안맞는 것을 깔면.. 설치가 재대로
    돼지 않는 문제점이 발생합니다 위 링크에서 최신버전 5.6.1 의 경우 페도라 5 용 이므로
    레드헷일 경우 5.0 버전 이나 찾아보시고 하위 지원 돼는 버전을 설치 해야 합니다..
    확인 결과 5.0.1 은 재대로 설치가 가능하더라고요..

4. tags 파일 만들기
    = > 우선 커널이 있는 폴더로 이동 합니다
           $cd /usr/src/linux/ <== ( 전 linux로 심볼릭 링크가 돼어 있습니다 안돼어 있다면
           심볼릭 링크를 만드셔도 돼고 직접 경로를 다 입력 하셔도 상관없습니다)
           심볼릭 링크 만들기 -> ln -s  /usr/src/커널폴더명 linux
           커널 폴더로 이동했으면 ctags -R 을 입력하여 tags 파일을 생성합니다
           시간이 좀 걸리는데 ls로  tags 파일이 생성 된걸 확인 합니다

          $cd /usr/include 폴더로 이동 합니다
           마찬가지로 ctags -R 명령으로 include 폴더도 tags 파일을 생성 합니다
           정상적으로 파일이 생성 되었다면 다음 단계로 넘어갑니다

5. ctags 설정 하기
    = > 설치 가 완료 되고 tags파일이 생성 되었다면 작업이 거의 끝난거나 마찬 가지 입니다.
           매번 vi 에서 ex모드 에서 입력하는거도 한계가 있으므로 .vimrc 파일에
           tags 를 설정 해두는게 편합니다
           vimrc 파일에 다음 라인을 입력 한후 저장합니다
           set tags=./tags,/usr/src/linux/tags,/usr/include/tags
           (linux 의 경우 심볼릭 링크 한경우)  직접 폴더를 입력 하신분은 경롱에 맞게 설정 합니다


사용하기         
=====================================================
여기 까지 했다면 설치 및 설정은 완료 되었습니다..

이제 사용 하는거만 남았는데
복잡하게 책에는 여러 옵션이 많지만 보통 잘안쓰는 옵션들은.. 거의 쓸일이 없고..
자주 쓰는 것만 다루겠습니다.

ex 모드 -> vi 에서 : 을 눌러서 명령을 입력 하는 모드를 말합니다
ex 모드에서 :tj 함수명 이나 구조체명 (왜 tj 인가 ?  tags jump 약어)
(찾고자 하는 함수명이나 구조체 이름등을 입력 하면 관력 이름 함수나 구조제..정보가 나타 납니다 )
보통 한두가개 아닌경우 스페이스바를 누르면 목록이 더나오며 d 를 누를 경우 한페이지씩..
보여 줍니다 나갈때는 q로 나갈수 있습니다 그럼 <CR> 이 나오는데 여기서 찾은 함수나 구조체
번호를 입력 하면 자동으로 점프합니다

다른 방법으로 가는 방법은 커널 소스를 vi열어서 분석하다가 함수 원형이나 구조체 이름에서
ctrl + ] 를 누르면 자동으로 태그를 찾아 갑니다
이전으로 다시 돌아 올때는 ctrl + t 를 사용 해서 돌아 올수 있습니다

ex모드 : sts 함수명 , 구조체명
위에서 설명한 tj와 비슷 하지만 한가지 다른점이 수평창분활을 해서 결과를 보여 줍니다

이외 명령이 더 있지만 실제 이거만 알아도 충분 합니다 나머지 이전으로 돌아가기 이런건..
거의 실제 사용 되지도 않습니다 위에 설명한 4가지 방법이 주로 쓰는 방법입니다.


[tip] 헤더 파일 바로 읽어 오기

#include <linux/kernel.h> <- 헤더파일 이름에 커서를 위치 한후

Ctrl + wf 를 누르면 창이 수평 분할되어 헤더파일이 열립니다


====================================================



cscope 를 이용한 2%로 채우기
    ctags만으로도 커널소스와 소규모 프로젝트롤 분석하는데 부족함은 없지만..
    2%로 부족한게 있다 ctags만으로는 지역변수나 전역변수가 사용된곳 은 찾기가 힘들다
    이때 cscope 사용하면 됩니다

cscope 설치 하기
    ubuntu = > $apt-get install cscope 로 간단히 설치 할수 있다 (데비안 계열의 강점)
    redhat
    (다운 로드)
    wget http://belnet.dl.sourceforge.net/sourceforge/cscope/cscope-15.3-1.i386.rpm
    설치 하기
    $rpm -ivf cscope-15.3-1.i386.rpm

cscope 설정 하기
  
cscope 설정은 좀 손이 많이 갑니다 (ctags에 비해...)
    우선 mkcscope.sh 파일을 만들어야 합니다
  ============ mkcscope.sh 파일 내용 ================
    #!/bin/sh
    rm -rf cscope.files cscope.files

    find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name

    '*.S' \) -print > cscope.files
    cscope -i cscope.files
    ============================================
    파일 생성 후 파일 퍼미션 설정
    $chmod 755 mkcscope.sh
    $mv mkcscope.sh /usr/bin
    디렉토리 이동
   
$cd /usr/src/linux (심볼릭 링크 아닐시 전체 경로)
    mkcscope.sh 실행  하면 빌드 돼면서 데이터가 만들어 집니다
    빌드 종료시 값을 입력 하는게 나오는데 ctrl + d를 눌러서 종료 합니다.
   
    이후 .vimrc 파일에 다음 내용을 추가 합니다
    =============================================
    set csprg=/usr/bin/cscope
    set csto=0(숫자 0)
    set cst
    set nocsverb

    if filereadable("./cscope.out")
       cs add cscope.out
    else
       cs add /usr/src/linux/cscope.out
    endif
    set csverb
   ==============================================
   이제  설정은 끝이 났습니다

   사용하기 ( cscope 의 명령 형식 )
    :cs find {질의종류} {심벌}
    ex) cs find s start_kernel

  
cscope 의 질의 종류
    0 or s  - > Find this C symbol
    1 or g  - > Find this definition
    2 or d  - >
Find functions called by this function
    3 or c  - > Find functions calling this function
    4 or t  - > Find assignments to
    6 or e  - > Find this egrep pattern
    7 or f   - > Find this File
    8 or i   - > Find files #including this file


cscope 를 활용 함으로써 더 완벽히 커널소스를 분석할수 있지만 ctags 만 사용하는거 보다
cscope 를 같이 사용 하니까 찾는데 시간이 더 오래 걸리는거 같네요..
.vimrc 파일에서 cscope 세팅 부분을 주석으로 해두고 사용하다가..
더 깊게 찾을 필요가 있을때 사용 하는게 더 편할듯 싶은데..
그냥 설정 된 체로 ctrl + ] 를 남발하면  ctags만 있을때는 더이상 찾을게 없으면
그냥 위치에서 멈처 있는데 cscope 가 세팅 돼어 있다면 계속 해서  파일을 검색해서
검색하는데 시간이 좀 걸려서..^^;; 거슬릴때가 있네요..

정리 할겸 만들어 봤는데 생각보다 시간이 오래 걸리는듯..
해보시고 안돼는거 있으면 댓글 달아 주세요..


기존 내용에서 추가 된 부분입니다..

Tlist 내용이 빠져서 다시 수정합니다..

뭐 크게 달라지는 내용은 없고요.. Tlist 가 먼지 모르는 분도 있을테니까요..

간단하게 Tlist 를 설명하지면 TagList 약자로써.. 이름에서 설명하는거 처럼..

해당 파일의 정의된 함수명,변수(#define), 등을 이름으로 효율적으로 보여주는 유틸리티 입니다.

ctag & cscope 와 연동해서 사용하면 무척 효율적이죠..

말로 설명하는게 감이 안오시는분은.. Visual C++에서요 Cpp 확장자로 작업하시면..

클레스 별로.. 함수 이름이 나와서 관리 할수 있잖아요.. 그거랑 똑같다고 보시면 돼요..

관련 문서는 인터넷에서 검색하면 쉽게 찾을수 있고요..

못찾겠다 싶은 분들은 제 게시판에 잘설명된게 있어서 퍼와서 올려 뒀어요.. 참고하세요..^^

http://blog.naver.com/ikariksj/140026617491




=== 2차 수정부분 === [ 2006/09/21 ]
mkcscope.sh 파일 생성시  띄워쓰기 주의를 하지 않으면..
문제가 발생하는게 확인 돼었습니다..
한줄로 붙여서 쓰면 보기 불편해서 두줄로 짤라뒀는데..
그부분을 그대로 복사해서 붙여 넣으면 오류가 발생하네요..
물론 직접 코딩하는거면 띄위쓰기 주의하면서 하면 괜찮은데..ㅎ
작성된지 좀됀문서인데도 요즘도 간간히 스크랩 돼는걸 보면..
필요하신분을이 있을지 모르니.. mkcscope.sh 를 새로 첨부 해둘께요..


참 노파심에 한말씀 드린다면 네이버에서 블로그 자료 올리면 자동으로 아이이가..
붙게 돼는데 받은 파일에서 아이디 부분을 지워야 합니다..
mkcscope.sh 로 변경해서 사용하세요..
출처 : 한국리눅스유저그룹
원문 : MySQL 소스 인스톨 완전해부

MySQL 소스 인스톨 완전해부

MySQL 소스 인스톨  

[EUC_KR 정렬옵션 추가  및 한글 메시지 사용]

MySQL에서 한글 캐릭터 셋으로 정렬을 하기 위해서는 소스 컴파일을 해야 한다. 바이너리 배포판은 Latin1으로 설정되어 있어 한글로 정렬이 제대로 되지 않는다. 검색이 되지 않는 것은 아니다

컴파일 전에 반드시 확인해야 할 사항은  C 컴파일러의 버전이다 gcc 2.7.x 버전은 버그가 있으므로 MySQL을 설치하기 위해서는 꼭 2.8.x 버전으로 업그레이드하자.
레드햇 6.0  이상의 LINUX 라면 전혀 문제가 없다.

1) 설치준비

우선 http://www.mysql.org에서 최신 버전의 소스를 받아온다.
이 글을 쓰고 있는 현재 최신 버전은 3.23 베타 버전과 3.22.25 버전이다.
/tmp에 소스배포판이 있다고 가정하고 컴파일을 시작하자 먼저 압축을 푼다

압축풀기 : zcat mysql-version.tar.gz | tar xvf -
[root@localhost /tmp]# zcat mysql-3.22.23b.tar.gz | tar xvf -
                       mysql-3.22.23b/
                       mysql-3.22.23b/Makefile.in
                       mysql-3.22.23b/README
                       mysql-3.22.23b/stamp-h.in
                       mysql-3.22.23b/Makefile.am
                ...
                ...
                 ...
                mysql-3.22.23b/support-files/mysql.spec.sh
                mysql-3.22.23b/support-files/my-example.cnf.sh
                mysql-3.22.23b/support-files/mysql-log-rotate.sh
                mysql-3.22.23b/support-files/mysql.server.sh
                mysql-3.22.23b/support-files/binary-configure.sh

2) configure 스크립트 실행

압축이 풀린 디렉토리로 이동한후 cofigure 를 실행한다 사용가능한 옵션을 자세히 보려면 --help 를 붙여주면 된다.

[root@localhost /tmp]# cd mysql-3.22.23b
[root@localhost mysql-3.22.23b]# ./configure --help
            Usage: configure [options] [host]
            Options: [defaults in brackets after descript-xions]
            Configuration:
              --cache-file=FILE       cache             test results in FILE
              --help                              print this message
              --no-create                         do not create output files
              --quiet, --silent       do             not print `checking...' messages
              --version                           print the version of autoconf that created configure
              ...

다른 옵션은 모두 디폴트 값을 쓰고 --prefix=PREFIX 와  --with-charset=CHARSET 두가지만 설정을 하겠다.

--prefix : 컴파일이 끝난 후 파일들이 인스톨되는 디렉토리를 정해준다.
--with-charset  : 정렬에 사용될 캐릭터 셋을 정해 준다. 한글정렬을 위해 필요하다.
 
기본적으로 정해진 값은 latin1 이며 다음 값들 중 하나로 설정해 줄 수 있다.

 use specified charset (default is latin1, must be one of: big5 danish cp1251 cp1257 croat czech dec8 dos euc_kr german1 hebrew hp8 hungarian koi8_ru koi8_ukr latin1 latin2 swe7 usa7 win1251 win1251_ukr ujis sjis tis620)

그럼 두 가지 옵션을 주고 configure 스크립트를 실행하자. 설치될 디렉토리는 /usr/local/mysql 로 하고 euc_kr 정렬 옵션을 준다

                #./configure --prefix=/usr/local/mysql --with-charset=euc_kr

 loading cache ./config.cache
            checking host system type... i586-pc-linux-gnu
            checking target system type... i586-pc-linux-gnu
            checking build system type... i586-pc-linux-gnu
            checking for a BSD compatible install... (cached)
            ...
            ...
            ...
           
MySQL has a Web site at http://www.tcx.se/ which carries details on the latest release, upcoming
features, and other information to make your work or play with MySQL more productive. There you can
also find information about mailing lists for MySQL discussion.

Remember to check the platform specific part in the reference manual for hints about installing on your platfrom. See the Docs directory.
           
Thank you for choosing MySQL!

3) make


이제 본격적으로 컴파일할 준비가 끝났다. 마음을 가다듬고 컴파일을 시작하자

[root@localhost mysql-3.22.23b]# make
                          make  all-recursive
                   make[1]: Entering directory `/tmp/mysql-3.22.23b'
                   Making all in Docs
                   make[2]: Entering directory `/tmp/mysql-3.22.23b/Docs'
                   make[2]: Nothing to be done for `all'.
                   ...
                   ...
                   ...

컴파일 시간은 AMD K6-2 350MHz, 64M RAM을 가진 PC에서 5분 20초 정도 가 소요되었다. 참고로 예전에 3.21.20 버전을 486DX66 , RAM 16M의 리눅스 머신에서 컴파일 했을 때는 2 시간 30분 정도 걸렸던 기억이 난다. 만일 컴파일 중에 문제가 발생하면 INSTALL-SOURCE 파일을 참고한다. 여러 가지 상황별로 문제 해결 방법이 자세히 설명되어 있다.

4) make install

컴파일에 의해 만들어진 파일들을 인스톨하자

[root@localhost mysql-3.22.23b]# make install      
                   Making install in Docs
                   make[1]: Entering directory `/tmp/mysql-3.22.23b/Docs'
                   make[2]: Entering directory `/tmp/mysql-3.22.23b/Docs'
                   make[2]: Nothing to be done for `install-exec-am'.
                   /bin/sh ../mkinstalldirs /usr/local/mysql/info
                   mkdir /usr/local/mysql
                   ...
                   ...
                   ...
                   make[2]: Leaving directory `/tmp/mysql-3.22.23b'
                   make[1]: Leaving directory `/tmp/mysql-3.22.23b'
[root@localhost mysql-3.22.23b]#

5) 권한 테이블 초기화 :  mysql_install_db 실행

인스톨이 완료된 MySQL 디렉토리로 이동한다

[root@localhost mysql-3.22.23b]# cd /usr/local/mysql 

그 다음은 MySQL 데이터베이스의 각종 권한을 관리하는 데이터베이스 mysql에 테이블을 생성하는 스크립트를 실행해야 한다. 

/usr/local/mysql/bin에 있는 mysql_install_db 스크립트가 그 역할을 한다.

참고로 바이너리 베포판은 이 파일이 script-xs 디렉토리에 있다.

기본 테이블 생성 : ./bin/mysql_install_db
[root@localhost mysql]# ./bin/mysql_install_db
                 Creating db table
                 Creating host table
                 Creating user table
                 Creating func table
                 Creating tables_priv table
                 Creating columns_priv table

To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system
           
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
    /usr/local/mysql/bin/mysqladmin -u root password 'new-password'
See the manual for more instructions.
           
Please report any problems with the /usr/local/mysql/bin/mysqlbug script-x!

The latest information about MySQL is available on the web at http://www.mysql.com
            Support MySQL by buying support/licenses at http://www.tcx.se/license.htmy.
           
[root@localhost mysql]#
 
데이터 파일의 위치는 /usr/local/var 이며 데이터베이스는 디렉토리로 테이블은 파일로 존재한다. 참고로 바이너리 인스톨 시에는 데이터 디렉토리는  /usr/local/mysql/data 이다.

권한 테이블들이 만들어졌으면 먼저 MySQL root 유저의 패스워드를 변경해야 한다.
시스템의 root와는 전혀 상관이 없는 MySQL 의 기동, 권한관리, 데이터베이스 사용자 등록 등의 작업을 하는 사용자 이다.

MySQL root 암호 변경방법
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'

위와 같은 방법으로 변경한다.

그러나 다음과 같은 에러가 발생할 것이다.
[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -u root password '1234'
 /usr/local/mysql/bin/mysqladmin: connect to server at 'localhost' failed
 error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)'
 Check that mysqld is running and that the socket: '/tmp/mysql.sock'  exists!
 [root@localhost mysql]#

원인은 MySQL 의 데이터베이스 서버 데몬이 동작하지 않기 때문이다.

6) MySQL 서버 데몬의 기동 : safe_mysqld

safe_mysqld 스크립트는 서버 데몬인 mysqld (MySQL 디렉토리의 libexec 에 있다) 를 시작하거나 비정상적으로 종료된 경우 재시작 한다.

먼저 데몬을 기동 시키자. 한글로 메시지를 보기 위해  옵션을 줄 수 있다.

# ./bin/safe_mysqld --language=korean &
     
=====
팁 : MySQL 의 각종 메시지를 한글로 보기를 원하면 --language=korean 옵션을 이용한다.
======

그리고 서버 데몬을 백그라운드로 동작시키기 위해 반드시 명령 뒤에 &를 붙여준다

[root@localhost mysql]# ./bin/safe_mysqld &                                               
                       [1] 24879

[root@localhost mysql]# Starting mysqld daemon with databases from  
                        /usr/local/mysql/var  <- enter 를 한번 쳐준다
[root@localhost mysql]#

프로세스를 확인해 보자

[root@localhost mysql]#  ps -ef | grep mysql
 root     24879   634  0 23:33             pts/1    00:00:00 sh ./bin/safe_mysqld
 root     24891 24879  0 23:33 pts/1                00:00:00 /usr/local/mysql/libexec/mysqld
 root     24893 24891  0 23:33 pts/1                00:00:00 /usr/local/mysql/libexec/mysqld
 root     24894 24893  0 23:33 pts/1                00:00:00 /usr/local/mysql/libexec/mysqld
 root     24909   634  0 23:41             pts/1    00:00:00 grep mysql
     
위와 같이 3개의 데몬이 떠 있으면 정상이다.

pstree 명령으로도 확인해 보자

[root@localhost mysql]#  pstree  
           
            init-+-atd
                 :
                 |-hanterm---bash-+-pstree
                 |                            `-safe_mysqld---mysqld---mysqld---mysqld
                 :


7) 관리자 암호 변경
이제 데몬이 기동 되었으니 다시 한번 암호변경을 시도해 본다.

[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -u root password '1234'
[root@localhost mysql]#
     
언제나 그렇듯이 무소식이 희소식이다.


8) 테스트

정상적으로 동작하는지 몇 가지 테스트를 해보자. 우선 mysql 이라는 클라이언트 프로그램을 이용해 권한관리 데이터베이스인 mysql에 접속해 보자

사용법 : ./bin/mysql [OPTIONS] [database]

더 많은 옵션을 알고 싶으면 ./bin/mysql --help 라고 입력하면 된다.

[root@localhost mysql]# ./bin/mysql mysql                               
ERROR 1045: 'root@localhost' 사용자는 접근이 거부 되었습니다. (Using password: 아니오)

접속이 거부되었다는 에러가 발생하였다. 당연하다 위에서 이미 MySQL 관리자 암호를 변경했기 때문에 암호를 이용해야 한다.

[root@localhost mysql]#  ./bin/mysql -p1234 mysql

위와 같이 passwd를 의미하는 -p 옵션 뒤에 공백 없이 암호를 입력하면 된다.

다음과 같이 -p옵션을 이용하고 나중에 암호를 입력하는 방식이 좀더 바람직하다.

[root@localhost mysql]# ./bin/mysql -p mysql   
Enter password:

암호가 맞는다면 다음과 같은 화면이 여러분을 반길 것이다.

  Reading table information for completion of table and column names
  You can turn off this feature to get a quicker startup with -A
  Welcome to the MySQL monitor.  Commands end with ; or g.
  Your MySQL connection id is 5 to server version: 3.22.23b

  Type 'help' for help.
         
  mysql>

           
몇 가지 명령을 각자 테스트  해 보자
           
mysql> status
      --------------
      ./bin/mysql  Ver 9.32 Distrib 3.22.23b, for pc-linux-gnu (i586)
Connection id:                      6
            Current database:       mysql
            Current user:                       root@localhost
            Server version                      3.22.23b
            Protocol version        10
            Connection                          Localhost via UNIX socket
            UNIX socket                         /tmp/mysql.sock
            Uptime:                             8 min 43 sec

Threads: 1  Questions: 37  Slow queries:             0  Opens: 10  Flush tables: 1  Open tables: 6
            --------------

mysql> select pi()*4/10 ;
            +------------+
            | pi()*4/10  |
            +------------+
            | 1.25663706 |
            +------------+
            1 row in set (0.00 sec)

mysql> select 'Hello World? I'm MySQL' AS string1;
            +------------------------+
            | string1                |
            +------------------------+
            | Hello World? I'm MySQL |
            +------------------------+
            1 row in set (0.00 sec)

           
mysql> select now() ;
            +---------------------+
            | now()               |
            +---------------------+
            | 1999-07-16 00:05:42 |
            +---------------------+
            1 row in set (0.00 sec)

           
mysql> use mysql
       Database changed
       mysql> desc user ;
       +-----------------+---------------+------+-----+---------+-------+
       | Field           | Type          | Null | Key | Default | Extra |
       +-----------------+---------------+------+-----+---------+-------+
       | Host            | char(60)      |      | PRI |         |       |
       | User            | char(16)      |      | PRI |         |       |
       | Password        | char(16)      |      |     |         |       |
       | Select_priv     | enum('N','Y') |      |     | N       |       |
       | Insert_priv     | enum('N','Y') |      |     | N       |       |
       | Update_priv     | enum('N','Y') |      |     | N       |       |
       | Delete_priv     | enum('N','Y') |      |     | N       |       |
       | Create_priv     | enum('N','Y') |      |     | N       |       |
       | Drop_priv       | enum('N','Y') |      |     | N       |       |
       | Reload_priv     | enum('N','Y') |      |     | N       |       |
       | Shutdown_priv   | enum('N','Y') |      |     | N       |       |
       | Process_priv    | enum('N','Y') |      |     | N       |       |
       | File_priv       | enum('N','Y') |      |     | N       |       |
       | Grant_priv      | enum('N','Y') |      |     | N       |       |
       | References_priv | enum('N','Y') |      |     | N       |       |
       | Index_priv      | enum('N','Y') |      |     | N       |       |
       | Alter_priv      | enum('N','Y') |      |     | N       |       |
       +-----------------+---------------+------+-----+---------+-------+
       17 rows in set (0.00 sec)

mysql> select Host, User ,Password , Select_priv, Insert_priv from user ;
     +-----------------------+------+------------------+-------------+-------------+
     | Host                  | User | Password         | Select_priv | Insert_priv |
     +-----------------------+------+------------------+-------------+-------------+
     | localhost             | root | 446a12100c856ce9 | Y           | Y           |
     | localhost.localdomain | root |                  | Y           | Y           |
     | localhost             |      |                  | N           | N           |
     | localhost.localdomain |      |                  | N           | N           |
     +-----------------------+------+------------------+-------------+-------------+
     4 rows in set (0.00 sec)

           
mysql> q
       Bye
[root@localhost mysql]#
     
9) MySQL 서버 중지
MySQL서버의 동작을 중지시키기 위해서는 다음의 명령을 사용한다.

==============================
서버 중지 :  ./bin/mysqladmin  shutdown
=============================
[root@localhost mysql]# ./bin/mysqladmin -p shutdown                    
                       Enter password:
[root@localhost mysql]# mysqld daemon ended

[1]+  Done
./bin/safe_mysqld --language=korean

[root@localhost mysql]# 
     
이상으로 소스배포본의 컴파일 작업은 모두 끝났다. 뒷부분에서 MySQL에  대해 더욱 자세히 다룰 것이다.


He can do, She can do, why not me?
1. mysql 각종 설정 확인

mysql> status



2. database확인
 
mysql> show databases;
+--------------------+
| Database                |
+--------------------+
| information_schema |
| mysql                     |
| test                        |
+--------------------+
3 rows in set (0.00 sec)
mysql>



3. database 선택

mysql> use test



4. database 내에 table 확인 (먼저 use를 통해 database를 선택해야 함)

mysql> show tables;


5. database  생성 및 table 생성

mysql> create database [database 이름];
mysql> use [database 이름];
mysql> create table [table 이름] ([Attr 이름] [Attr 타입] , [Attr 이름] [Attr 타입] ... );

6. table의 schema 보기

mysql> describe [table 이름];







이번에 졸업 논문에 MySql을 사용하게 되었다.
때문에 여기저기 돌아다니다가 겨우 알게 된 링크.
영어실력이 부족해서인가... 왜이리두 찾기 어려웠던지...

운영체제 별로 정리되어 링크가 있다.
링크의 제일 마지막에 가면 windows & linux 용 소스 코드도 있다.

이제 이걸 어떻게 인스톨하는지는 해보고 나서 다시 올려야징... 아웅...

오늘은 여기까징!

http://dev.mysql.com/downloads/mysql/5.0.html

이번에 KCC 2007 학술대회에 참가했다.
플래시 메모리 기반 데이터베이스에 대해서 발표를 했다.
그런데, 하필 좌장이셨던, 이우기 교수님께서 TPC-C에 대해서 질문을 하셨고, TPC-C를 잘못 알고 있던 나는 잘못 대답을 하고 말았다.
그 순간, "그게 아니고..." 라는 이우기 교수님의 말씀에, 얼마나 창피하던지...
ㅋㅋ, 가만히 있으면, 중간이라도 간다고... 하필, 대답을 해서리... ㅋㅋ @^-^@
하긴... 그때 분위기가 가만 있을 수 없는 분위기이긴 했다.
그때, 이우기 교수님의 표정은, "어서 대답을 해보게나." 라는 눈빛이였기 때문에 어쩔 수가 없었다.
아무튼, 다신 TPC에 대해서는 잊지 않으리라!!!

정리 들어갑니다.!!!
대부분은 네이버에서 가져온 겁니다. 쩌비... 제가 멀 아나요... 흑흑

1. TPC란?
   트랜잭션 처리 성능 평의회(Transaction Processing Performance Council)에서 발표한 벤치마크(benchmark) 테스트 모델들이다. 보통 TPC라고 하면, 트랜잭션 처리 성능 평의회를 뜻하지만, TPC-alphabet 으로 표기 하여, 벤치마크 테스트 모델을 이야기 한다. TCP는 온라인 트랜잭션 처리(Online Transaction Processing) 시스템의 처리 성능을 평가하는 기준이 된다.

2. 트랜잭션 처리 성능 평의회란?
온라인 트랜잭션 처리(OLTP) 시스템의 처리 성능을 측정하는 성능 평가 기준의 표준 규격을 제정하기 위해 1988년에 결성된 비영리 단체. 사무국은 미국 캘리포니아 주의 산호세에 있다. 미국의 탠덤, DEC, IBM, 영국의 ICL, 일본의 NEC 등 OLTP 시스템 제조업체 34개사와 반도체 제조업체, 사용자 단체 등이 참가하여 OLTP 시스템의 성능 평가 기준을 ‘TPC 벤치마크’라는 이름으로 발행하고 있다. 1989년에 발표한 TPC 벤치마크 A 모델을 시작으로 TPC-A, TPC-B, TPC-C, TPC-D 등 4종류의 표준 규격을 결정했으나 이들은 이미 구형이 되었고, TPC-H(애드 혹 결정 지원), TPC-R(비즈니스 보고 결정 지원), TPC-W(웹 전자 상거래) 등이 새로이 규격화되었다. TPC 벤치마크를 공표하기 위해서는 TPC 위원회에 완전 공개 보고서(FDR:Full Disclosure Report)를 제출하여 승인을 받아야 한다. FDR에는 테스트 실시 시의 시스템 구성이나 가격을 명시해야 한다. TPC 벤치마크는 네트워크를 포함하는 하드웨어 성능과 운영 체계(OS)를 포함하는 소프트웨어 성능을 종합해서 평가할 수 있는 것이 특징이다. TPC 벤치마크의 결과는 성능치와 가격 대 성능비로 표시된다.

3. TPC-A
1989년에 최초로 발표된 규격으로, 은행 창구 업무를 모델로 한 OLTP 시스템 전체의 기본적인 성능을 측정하는 것이다.

4. TPC-B
1990년에 발표되었는데, TPC-A 모델과 대체로 같으나 온라인 처리의 부하를 테스트 내용에서 제외했다. 측정 결과는 tps(초당 트랜잭션 수)로 표시한다. 단말 장치 등을 포함하는 시스템 전체의 가격 공표를 의무화하고 있어서 다른 벤더들의 시스템을 가격 대 성능비로 비교할 수 있다.

5. TPC-C
1992년에 발표되었는데, TPC-A 모델이나 TPC-B 모델보다 복잡한 유통업의 수주·발주 온라인 시스템의 성능 평가를 위한 것이다.

6. TPC-D
트랜잭션 처리 성능 평의회 TPC 에서 제정하여 발표하는 온라인 트랜잭션 처리 OLTP 시스템의 처리 성능을 측정하는 벤치 마크 표준 규격의 D 모델 의사 결정 지원 시스템 DSS 의 성능을 평가하기 위한 것이다



어째, 다 가져다 붙인거 같은 느낌이 들긴 하지만, 한 눈에 보고 정리하시길...
근데, 당최 내가 잘못 대답한 웹에서 여러 유저들이 동시에 게시판에 접근하는 질의를 평가하는 모델은 어떤거얌???
보아하니, TPC-A~D 에는 없는거 같은데... 아놔~~~
출처 : 테터 묻고 답하기
원문 : 카테고리를 항상 펼쳐지게 하고 싶은데요.

skin.html의 코드 안에 원하는 곳에 다음의 코드를 삽입해주면 됩니다.

<script language="JavaScript">try{expandTree();}catch(e){}</script>

출처 : 낭만주의 프로그래머
원문 : 왜 코드에 주석을 달고 계십니까?

프로그래밍을 배울 무렵에는 누군가 옆에서 "코드에 주석을 달아야지" 하고 말하는 것을 한번 쯤 들어본 적이 있을 거라고 생각합니다. 혹시 코드에 왜 주석이 필요한지에 대해서 되물어 보신 적이 있나요?

코드에 주석을 다는 것은 몇 가지 이유가 있을 수 있습니다.

첫 번째는 코드의 동작에 대해서 설명을 하기 위해서 주석을 다는 경우입니다.
두 번째는 코드의 작성자라든지 소유권이라든지 또는 개정이력 등의 정보를 남기기 위한 경우입니다.
세 번째는 미래에 코드에 추가해야 할 사항이나 고쳐져야 할 내용 등을 잊지 않기 위해서 주석을 남기는 경우입니다.
네 번째는 코드의 문서화를 위한 주석을 다는 경우가 있을 것입니다.
그 밖에도 이유가 있을 수 있겠지만 이러한 범주에서 벗어나지 않을 것 같습니다.

위의 경우 중 어느 경우에 주석을 가장 많이 사용하고 계시나요? 아마도 첫 번째 경우일 것이라고 생각합니다. 물론 저도 그랬었고, 지금도 많은 경우에 첫 번째 용도로 주석을 사용하고 있습니다. 하지만 가장 주석을 달지 말아야 할 경우를 꼽는다면 역시 첫 번째 경우를 꼽겠습니다.

코드를 설명하기 위해서 주석을 다는 경우는 바꾸어서 말한다면 코드 자체로서 코드의 내용이 설명이 되지 않는다는 이야기와 같습니다. 거창한 이야기는 아닙니다. 코드를 작성할 때 변수 이름이나, 함수 이름을 조금만 신경을 써서 선택하기만 해도 코드를 설명하기 위한 주석이 필요 없어지는 경우도 많습니다.

예를 들면 for loop 를 사용할 때 loop를 돌기 위한 변수로 흔히 'i' 라는 변수명을 사용합니다. 코드가 단순하다면 상관없지만 조금만 코드가 복잡해지더라도 왜 loop 를 돌아야하는지 헷갈리는 경우가 많습니다. 더군다나 루프가 중첩이 될 때 i, j, k 와 같은 식의 변수명을 사용한다면 더욱 이해하기 어려워지게 되죠. 이런 경우에 i, j, k 대신에 왜 루프를 돌고 있는지 알려 줄 수 있는 확실한 변수명을 사용한다면 코드가 좀 더 명확해지고 별도로 주석을 달지 않더라도 무슨 동작을 하는 코드인지 확실해집니다.

코드가 이해하기 쉽고 명확하더라도 사람이 이해할 수 있는 언어로 주석을 달아서 무슨 동작을 하는 것인지 알려준다면 더 좋지 않겠는냐고 생각할 수 있습니다. 맞는 말입니다만 한 가지 반드시 지켜야하는 전제조건이 있습니다. 코드가 변경이 되었을 경우 주석도 반드시 변경이 되어야한다는 것입니다.

코드란 한번 작성하고 끝인 경우는 거의 없습니다. 일단 작성이 되면 작성한 사람이 변경을 하던지 아니면 다른 사람이 변경을 하던지 지속적으로 변경이 되는 경우가 대부분입니다. 애초에 주석을 남긴 사람이 코드를 변경할 경우 주석도 같이 변경을 하게 되는 경우가 많지만(자신의 코드에 애정이 있는 경우죠), 그렇지 않은 경우에 많은 경우 코드만 변경이 되고 주석은 변경이 되지 않는 경우가 허다합니다. 이러한 경우는 주석이 없느니만 못하게 됩니다. 코드에 주석이 달려있을 경우 코드를 처음 보는 사람은 주석을 믿게 되는 경우가 많은데 코드와 주석이 불일치한다면 코드의 동작을 오해(?)하게 되기 때문입니다. 극단적인 경우의 예로 코드를 볼 때 주석부터 지우고 본다는 분의 얘기도 들은 적이 있습니다. 주석이 코드와 일치하지 않을 경우 오히려 코드를 이해하는데 방해가 되기 때문일 겁니다.

마틴 파울러가 쓴 'Refactoring'에서는 리팩토링이 필요한 코드에서는 냄새가 나기 때문에 그 냄새를 잘 포착해서 코드를 리팩토링해야한다고 얘기하는데 그 냄새 중의 하나가 바로 코드에 주석이 필요한 경우라고 얘기했습니다. 사람이 이해할 수 없는 코드는 깔끔하게 설계되지 않은 코드이며 그러한 코드의 경우 사람이 이해하기 위해서 주석이 필요하기 때문입니다.

스티브 맥코넬의 'Code Complete' 에서는 주석부터 작성하고 코드를 작성하는 법에 대한 내용을 설명하는 부분이 있습니다. 코드의 알고리즘을 주석으로 먼저 작성을 하여 주석을 line by line 으로 코드로 대체할 수 있을 정도가 되었을 때 주석에 해당하는 코드를 작성하면 결국 코드 자체가 주석의 역할을 하여 스스로 설명하는 코드가 된다는 것입니다. 접근방법은 다르지만 결국 스스로 설명할 수 있는 코드가 훌륭한 코드라는 것에는 뜻을 같이 하는 것 같습니다.

설명을 위한 주석을 남기지 말라는 것은 아닙니다. 다만 지엽적인 코드를 설명하기 위해서 주석을 다는 것은 옳지 않다는 얘기입니다. 코드를 설명하기 위한 주석은 프로그램의 전체적인 구조라든지, 핵심 알고리즘 등을 설명하기 위한 정도가 적당한 것 같습니다. 물론 이러한 경우에도 주석 없이 설명이 가능한 것이 최선이라고 생각합니다.

마지막으로 리팩토링의 한 구절을 인용합니다.

컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다.
좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다.

+ Recent posts