RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

< 도스창에서 help 를 타이핑해보자. >


Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

I:\>help

특정 명령어에 대한 자세한 내용이 필요하면 HELP 명령어 이름을 입력하십시오.
ASSOC    파일 확장명 연결을 보여주거나 수정합니다.
AT       명령어와 프로그램의 실행을 스케줄합니다.
ATTRIB   파일 속성을 표시하거나 바꿉니다.
BREAK    확장된 CTRL+C 검사를 설정하거나 지웁니다.
CACLS    파일의 액세스 컨트롤 목록(ACL)을 표시하거나 수정합니다.
CALL     한 일괄 프로그램에서 다른 일괄 프로그램을 호출합니다.
CD       현재 디렉터리 이름을 보여주거나 바꿉니다.
CHCP     활성화된 코드 페이지의 번호를 표시하거나 설정합니다.
CHDIR    현재 디렉터리 이름을 보여주거나 바꿉니다.
CHKDSK   디스크를 검사하고 상태 보고서를 표시합니다.
CHKNTFS  부팅하는 동안 디스크 확인을 화면에 표시하거나 변경합니다.
CLS      화면을 지웁니다.
CMD      Windows 명령 인터프리터의 새 인스턴스를 시작합니다.
COLOR    콘솔의 기본색과 배경색을 설정합니다.
COMP     두 개 또는 여러 개의 파일을 비교합니다.
COMPACT  NTFS 분할 영역에 있는 파일의 압축을 표시하거나 변경합니다.
CONVERT  FAT 볼륨을 NTFS로 변환합니다. 현재 드라이브는 변환할 수 없습니다.
COPY     하나 이상의 파일을 다른 위치로 복사합니다.
DATE     날짜를 보여주거나 설정합니다.
DEL      하나 이상의 파일을 지웁니다.
DIR      디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줍니다.
DISKCOMP 두 플로피 디스크의 내용을 비교합니다.
DISKCOPY 플로피 디스크의 내용을 다른 플로피 디스크로 복사합니다.
DOSKEY   명령줄을 편집하고, Windows 명령을 다시 호출하고, 매크로를 만듭니다.
ECHO     메시지를 보여주거나, 명령어 반향을 켜거나 끕니다.
ENDLOCAL 일괄 파일에서 환경 변경의 지역화를 끝냅니다.
ERASE    하나 이상의 파일을 지웁니다.
EXIT     CMD.EXE 프로그램(명령 인터프리터)을 마칩니다.
FC       두 파일 또는 파일의 집합을 비교하여 다른 점을  표시합니다.
FIND     파일에서 텍스트 문자열을 찾습니다.
FINDSTR  파일에서 문자열을 찾습니다.
FOR      파일 집합에서 각 파일에 대해 지정된 명령을 실행합니다.
FORMAT   Windows에서 사용할 디스크를 포맷합니다.
FTYPE    파일 확장 연결에 사용되는 파일 형식을 표시하거나 수정합니다.
GOTO     Windows 명령 인터프리터가 일괄 프로그램에서 이름표가 붙여진 줄로 가게 합니다.
GRAFTABL Windows가 그래픽 모드에서 확장 문자 세트를 표시할 수 있게 합니다.
HELP     Windows 명령어에 관한 도움말을 제공합니다.
IF       일괄 프로그램에서 조건 처리를 수행합니다.
LABEL    디스크의 볼륨 이름을 만들거나, 바꾸거나, 지웁니다.
MD       디렉터리를 만듭니다.
MKDIR    디렉터리를 만듭니다.
MODE     시스템 장치를 구성합니다.
MORE     출력을 한번에 한 화면씩 표시합니다.
MOVE     하나 이상의 파일을 한 디렉터리에서 다른 디렉터리로 옮깁니다.
PATH     실행 파일의 찾기 경로를 보여주거나 설정합니다.
PAUSE    일괄 파일의 처리를 보류하고 메시지를 보여줍니다.
POPD     PUSHD 명령으로 저장된 디렉터리로 바꿉니다.
PRINT    텍스트 파일을 인쇄합니다.
PROMPT   Windows 명령 프롬프트를 바꿉니다.
PUSHD    현재 디렉터리를 저장한 후 디렉터리를 바꿉니다.
RD       디렉터리를 지웁니다.
RECOVER  불량이거나 결함이 있는 디스크에서 읽을 수 있는 정보를 복구합니다.
REM      일괄 파일 또는 CONFIG.SYS에서 주석을 기록합니다.
REN      파일 이름을 바꿉니다.
RENAME   파일 이름을 바꿉니다.
REPLACE  파일을 대체합니다.
RMDIR    디렉터리를 지웁니다.
SET      Windows 환경 변수를 보여주거나, 설정하거나, 지웁니다.
SETLOCAL 일괄 파일에서 환경 변경의 지역화를 시작합니다.
SHIFT    일괄 파일에서 바꿀 수 있는 매개 변수의 위치를 바꿉니다
.
SORT     입력을 정렬합니다.
START    지정된 프로그램이나 명령을 별도의 창에서 시작합니다.
SUBST    경로를 드라이브 문자로 지정합니다.
TIME     시스템 시간을 보여주거나 설정합니다.
TITLE    CMD.EXE 세션에 대한 창의 창 제목을 설정합니다.
TREE     드라이브 또는 경로의 디렉터리 구조를 그래픽으로 화면에 표시합니다.
TYPE     텍스트 파일의 내용을 보여줍니다.
VER      Windows 버전을 보여줍니다.
VERIFY   파일이 디스크에 올바로 쓰였는지 검증할지 여부를 지정합니다.
VOL      디스크 볼륨 이름과 일련 번호를 보여줍니다.
XCOPY    파일과 디렉터리 트리를 복사합니다.


! 빨간색은 일괄 파일(배치 프로그램) 안에서만 사용할 수 있는 명령어 이다. 명령어가 몇개 안되죠?


더 상세한 설명을 알고 싶다면 해당 명령어에 /? 를 하면 나올 것이다.

I:\>echo  /?
메시지를 보여주거나, 명령어 반향을 켜거나 끕니다.

  ECHO [ON | OFF]
  ECHO [메시지]

매개 변수 없이 'ECHO'라고 입력하면 현재 반향 설정값을 보여줍니다.

조낸 어렵게 해석된 말이 있다. 그 위대한 이름하야 반향... 한자어 중에서도 정말 어려운 말이다. 영어보다 우리말이 어째 더 어렵다. 우리말로 쉽게 풀어서 사용해야지..

반향이라는 요시꼬리한 한자를 해석해보자.


반향 [, echo]

음원()에서 나온 음파가 물체면에서 반사하여 다시 들려오는 현상.

말귀 알아듣게 쉽게... 울림, 메아리라는 뜻이다. 뜬금없이 반향이 왜 나오느냐? 컴퓨터는 우리가 입력한 어떠한 작업을 처리하면서 처리된 메세지를 밖으로 울리도록(표시 출력)하는 것을 말한다. 우리가 알아볼 수 있게 작업을 밖으로 출력을 할꺼냐 말꺼냐는 말이다.


##########################################################



요즘은 도스 명령어를 사용할 일이 거의 없다. 프로그래머들 조차도 말이다.

아 그렇지.. 그 당시 GW-BASIC이라는 언어를 배웠었는데 요게 향상된 게 요즘 쓰는 비주얼 베이직이다. GW-BASIC은 Visual Basic 의 어머니시지...

그 당시 GW-BASIC 과 함께 배우는 것이 도스 운영체제인 MS-DOS이다. 요건 내가 고등학교 1학년 때인가 잠깐 일주일에 1시간씩 들은 적이 있다.

매우 따분한 시간이었다. 그때 램은 8M 짜리였던가;; 그런 램도 있었을까? 지금은 1G를 넘는 램이 기본인데 말이다. 15년이 지난 지금  램은 그 때의 100배가 넘는다. 그만큼 컴퓨터의 성능이 획기적으로 개선되었다. 그리하여 현재의 그래픽 환경에서도 거뜬히 컴퓨터가 원활하게 작동할 수 있게 되었다.


batch 파일은 도스에서 순차적으로 명령을 실행하도록 하는 프로그램이다.

그냥 한줄씩 차례대로 실행한다. 한마디로 일자 무식한 넘이다. 쓰레드(한꺼번에 여러가지 작업)도 못하며, 아주 옛날 옛적에 만들어져서 객체지향 프로그래밍은 꿈도 꿀 수 없다.

그래서 나는 배치 프로그램을 원시인이라 부른다.

하지만 단순한 자동 실행 프로그램을 만들고 싶다면, 아주 금방 바로 만들 수 있어 유용하다.


#########################################################

## 각 새로운 도스창에 3가지 프로그램을 실행하는 일괄 프로그램이다.

@echo off
rem This is and auto-restart script for Emulator.
rem It will also keep the map OPEN after it crashes to that errors may be
rem more easily identified
rem Writen by romantic dog
echo Start script for Windoze
echo Edited by Evera (slightly) for SQL servers
start cmd /k logserv-sql.bat
start cmd /k charserv-sql.bat
start cmd /k mapserv-sql.bat


#########################################################


배치 프로그램이란 MS-DOS에서 실행 가능한 명령어를 순차적으로 처리하기 위하여 MS-DOS 명령어를 모아놓은 아스키 파일로, 일반적으로 BAT 확장명을 갖는다. 배치 프로그램은 흔히 배치 파일이라고도 한다.

배치 파일에서 사용할 수 있는 명령어는 MS-DOS에서 사용할 수 있는 모든 내부 외부 명령어, 배치 파일 전용 명령어로 구분된다. 배치 파일 전용 명령어란 프롬프트 상에서는 사용할 수 없고 배치 파일에서만 사용할 수 있는 명령어를 의미한다. 배치 파일에서는 BREAK, REM, SET 등 프롬프트 혹은 CONFIG.SYS 파일에서도 사용할 수 있는 공용 명령어와 2개의 특수 문자(@, ;)를 사용할 수 있다.

다음은 MS-DOS에서 사용되는 배치 프로그램 전용 명령어이다.

Call Choice Echo

For Goto If

Pause Rem Shift

SET 명령어는 프롬프트 상에서도 사용할 수 있는 명령어지만 주로 배치 프로그램에서 많이 사용되기 때문에 "프롬프트 명령어"에 포함하지 않고, 배치 파일 명령어에서 설명하기로 한다. 또한, REM 명령어도 CONFIG.SYS에서도 사용할 수 있는 명령어이지만 배치 파일 명령어에서 설명하기로 한다.

CALL

배치 프로그램에서는 COM이나 EXE 확장자를 가진 실행 파일은 해당 파일 이름을 입력함으로써 실행시킬 수 있다. 그러나 배치 프로그램은 이러한 방법을 사용하여 실행할 수 없다. 따라서 MS-DOS에서는 배치 프로그램을 실행하는 도중에 다른 배치 프로그램을 실행하기 위한 특별한 명령어를 준비하고 있다. 배치 프로그램에서 다른 배치 프로그램을 호출하기 위하여 사용되는 명령어는 CALL로써, 해당 배치 프로그램을 종료하지 않고 다른 배치 프로그램을 실행하기 위하여 사용한다.

배치 프로그램 안에서 다른 배치 프로그램을 호출할 경우에는 반드시 BAT 확장자를 생략하여야 한다. 즉, 배치 프로그램 안에서 실행 파일을 실행하기 위해서는 실행 프로그램의 이름만 입력하거나 확장자를 포함할 수 있었지만 배치 프로그램에서는 반드시 호출할 배치 프로그램의 파일 이름만 지정하여야 하는 것이다.

■ 사용법

CALL [[drive:][path]] filename [batch-para]

■ 옵션 및 매개변수

[drive:][path] filename 실행할 배치 파일의 경로와 이름을 지정한다. CALL 명령어를 사용하여 실행할 배치 파일은 반드시 BAT 확장자를 갖는 파일이어야 한다.

batch-para 배치 파일을 실행하기 위한 모든 변수를 지정한다. 지정할 수 있는 변수는 매개변수와 옵션을 포함한다.

■ 사용상 주의

☞ batch-para 사용하기

batch-para는 배치 파일에 전달할 수 있는 모든 정보를 포함할 수 있는데, 여기에는 옵션과 파일명, 그리고 %1∼%9까지의 변경할 수 있는 매개변수와 %band%와 같은 변수가 포함된다.

☞ 파이프(|)와 방향 전환 기호(>)의 사용

CALL 명령어에서는 파이프(pipes: |)와 방향 전환을 위한 방향 전환 기호(redirection symbols:>, <, >>, <<)를 사용할 수 없다.

☞ 반복적인 CALL 만들기

CALL 명령어를 사용하여 자신의 배치 파일을 호출함으로써 반복적인 배치 파일을 만들 수 있다. 이 경우처럼 반복적인 배치 파일을 만드는 경우에는 반드시 해당 배치 파일을 끝낼 수 있도록 설계되어야만 한다. 그렇지 않으면 무한 루프로 되어 해당 배치 파일을 영원히 끝나지 않게 된다.

■ 사용 예

HWPCHECK.BAT 파일을 다른 배치 파일에서 실행시키고자 한다면, 해당 배치 파일에 다음을 포함시킨다.

call hwpcheck

위의 예에서 현재 실행 중인 배치 프로그램에서 2개의 매개변수를 받은 다음 이를 실행할 배치 프로그램에 전달하고자 한다면 다음과 같이 뒤에 매개변수를 할당한다.

call hwpcheck %1 %2

CHOICE

이 명령어는 GOTO 명령어를 사용하여 다중 분기문을 작성하기 위하여 사용하는 것으로, 일반적으로 다중 배치 프로그램을 작성하기 위하여 사용되는 배치 프로그램 명령어이다.

이 명령어는 배치 프로그램에서 사용자가 지정한 프롬프트 상태를 유지하고 있다가 지정된 시간이 경과되거나 지정된 문자를 지정하면 다음 명령어를 실행한다. 이 경우 CHOICE 명령어는 에러 수준 종료코드를 운영 체제에 돌려주는데, 종료 코드와 GOTO 명령어를 이용하여 작업을 세분할 수 있다.

■ 사용법

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

■ 옵션 및 매개변수

text 사 용자가 선택하도록 기다리는 프롬프트 앞에 출력하고자 하는 문자열을 지정한다. 만약, 프롬프트 앞에 디스플레이될 문자열의 일부로 옵션 부호(/)를 사용하려면 따옴표를 사용해야 한다. 문자열을 지정하지 않는 경우에는 선택할 프롬프트만 디스플레이한다.

/c[:]choices 프 롬프트로 선택할 수 있는 문자를 지정한다. 다수의 문자를 지정하는 경우에는 콤마(.)를 분리 문자로 사용하며, 지정한 문자는 괄호안에 나타나고 물음표 다음에 디스플레이된다. /c 옵션을 지정하지 않는 경우 YN을 디폴트 값으로 사용한다. 콜론(:)은 선택적으로 생략할 수 있다.

/n 사 용자가 항목을 선택하도록 대기하는 프롬프트가 디스플레이되지 않도록 지정하기 위하여 사용한다. 그러나 프롬프트 앞의 문자열은 디스플레이된다. 만약, /n 옵션을 지정하지 않으면 CHOICE 명령어 라인에 지정한 선택 문자는 유효하다.

/s 대 소문자를 구분하여 받아들이도록 지정하기 위하여 사용하는 옵션이다. 만약, /s 옵션을 지정하지 않으면 사용자가 지정한 선택 문자의 대 소문자를 구분하지 않고 모두 받아 들인다.

/t[:]c,nn 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자와 기다리는 시간을 지정한다.

c 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자를 지정하고, 이 문자는 /c 옵션에서 지정한 선택 문자 안에 있는 것이어야 한다.

nn c 값을 디폴트로 선택하기 전에 대기할 프롬프트 시간을 지정한다. 지정할 수 있는 값의 유효 범위는 0∼99 값의 범위에서 초 단위로 지정한다. 만약, 0초를 지정하면 항상 디폴트 값이 사용된다.

■ 사용상의 주의

☞ 작업을 분할하기

CHOICE 명령어는 작업을 분할하기 위하여 사용한다. 즉, CONFIG.SYS 에서는 다중 부트 분할을 만들어 사용자가 원하는 시스템 구성으로 컴퓨터를 시작할 수 있다. AUTOEXEC.BAT에서는 이 명령어를 사용하여 다중 환경으로 구성할 수 있다.

CHOICE 명령어를 사용한 다중 부트 분할에 대해서는 다음에 설명할 "사용 예"를 참조하기 바란다.

☞ CHOICE의 메시지

다음은 배치 프로그램에서 CHOICE 명령어를 사용하는 방법과 그에 따른 메시지를 나타낸다.

CHOICE 명령어에 선택 문자만을 지정한 경우

명령어 줄 choice /c:ync

메시지 [Y,N,C]?

CHOICE 명령어에 선택 문자와 문자열을 지정한 경우

명령어 줄 choice /c:ync Yes, No, or Continue

메시지 Yes, No, or Continue [Y,N,C]?

CHOICE 명령어에 프롬프트를 생략하는 /n 옵션을 사용한 경우

명령어 줄 choice /n Yes, No, or Continue?

메시지 Yes, No, or Continue?

CHOICE 명령어에 /t 옵션을 사용한 경우

명령어 줄 choice /c:ync /t:y,5

메시지 [Y,N,C]?


#########################################


@echo


if not exist "D:\Program Files\Project A3\nul" (goto dhp)


:dhk
start /d"D:\Program Files\Project A3\" /normal A3.exe
exit


:dhp
@echo off


xcopy /D /Q /A /S /C /R /H /K /Y "\\file\on$\Program Files\Project A3\*.*" "D:\Program Files\Project A3\*.*"
start /d"D:\Program Files\Project A3\" /normal A3.exe
exit


##################################################


MS-DOS 기본 명령어

☆ 도스의 명령어는 크게 두 가지로 구분되어 있다.
컴퓨터가 부팅되면 기본적으로 실행이 가능한 '
내부 명령어'
와 별도로 만들어져 있는
프로그램을 이용하는 '
외부 명령어'가 있다

★ 명령의 기본 구조는 [명령어+내용+추가옵션]이다.
(예) copy *.* c: /y
◈ 모든 명령의 도움말은 [명령어 /?]로 볼 수 있다.
(예) dir /?
(1) 내부 명령어 (※ '\' 와 '₩' 는 같음)

명     령     어

의           미

사            용           예

DIR

파일 목록 출력

DIR : 현재의 디렉토리 내의 파일 목록 출력

DIR /P : 한 페이지씩 출력

DIR /W : 파일명과 확장명 만을 출력

DIR

DIR *.HWP

DIR C*.*

DIR *.EXE /W

DIR /W /P

MD

디렉토리 만듦

MD STUDY

MD C:\STUDY\HTT

MD C:₩STUDY₩HTT

CD

디렉토리 이동

CD STUDY

CD C:\STUDY\HTT

CD \

CD ..

RD

디렉토리 삭제

RD STUDY

RD C:\STUDY\HTT

COPY

파일 복사

COPY DOS.HWP A:

COPY FDISK.EXE A:\DOS

COPY C:\STUDY\HTT.EXE A:\

COPY C:\VB\*.EXE D:\TEMP

COPY A*.HWP C:\HWP\DOC

COPY K*.* B:\SAVE\ALL

COPY *.* A:\BACKUP

COPY ADD.TXT PRN

COPY CON AUTOEXEC.BAT

DEL

파일 삭제

DEL SWAP.TMP

DEL C:\DOS\READ.TXT

DEL *.BAK

DEL K*.HWP

DEL C:\TEMP\*.*

REN

이름 바꿈

REN SYS.COM SYSTEM.COM

REN *.HWP *.BAK

REN K*.COM A*.*

TYPE

파일 내용 출력

※ TYPE 명령은 일반 TEXT 파일의 내용만을 볼 수 있다.

TYPE README.DOC

TYPE C:\DOS\README.1ST

TYPE ME.TXT > PRN

기타 내부 명령어

CLS

화면을 깨끗이 지움


DATE

날짜 확인, 수정


TIME

시간 확인, 수정


PROMPT

프롬프트 변경


PATH

경로 설정


VER

도스 버전 확인


VOL

볼륨 레이블 확인


SET

환경 정보 확인/수정






(2) 외부 명령어

명     령     어

의           미

사            용           예

FORMAT

디스크 초기화

1. FORMAT /S : 시스템 파일 추가

FORMAT /Q : 빠른 포맷

FORMAT /4 : 360KB 디스크

FORMAT /U : 복구 자료 취소

FORMAT A:

FORMAT C: /S

FORMAT A: /Q /U

FORMAT A: /S /4

DISKCOPY

디스크 복사

DISKCOPY A: B:

DISKCOPY A:

LABEL

볼륨 레이블 수정

LABEL

LABEL A:

LABEL SAMPLE

ATTRIB

파일 속성 확인/변환

※ +는 설정, -는 취소

ATTRIB +(-)R : 읽기 전용 속성

ATTRIB +(-)A : 저장 속성

ATTRIB +(-)H : 숨김 속성

ATTRIB +(-)S : 시스템 속성

ATTRIB SYS.COM

ATTRIB +R C:\HNC\HWP.EXE

SYS

시스템 파일 복사

SYS A:

UNDELETE

삭제된 파일 복구

UNDELETE C:\SAM\KOEI.EXE

UNFORMAT

포맷 복구

UNFORMAT A:

XCOPY

COPY의 확장

※ XCOPY는 디렉토리까지 복사가 가능하다.

XCOPY /S : 서브 디렉토리 포함

XCOPY /E : 비어 있는 디렉토리까지 복사

XCOPY /A : 저장 속성을 가지고 있는 파일만 복사 (백업)

XCOPY *.* A: /S

XCOPY *.EXE C:\TEMP /A

CHKDSK

디스크 검사

※ 디스크 검사 및 에러 수정 가능

CHKDSK A:

CHKDSK C: /F

DOSKEY

키 기능 확장


FDISK

하드 디스크의 영역 나눔


FIND

지정된 파일에서 문자열 검색


MEM

현재 메모리 상태 출력

MEM/C/P

MIRROR

하드디스크의 기본 정보 기록

(UNFORMAT시 사용)

MODE

시스템 디바이스 상태 조정

MODE CO80

MORE

화면 단위로 쪼개어 출력

TYPE AUTOEXEC.BAT | MORE

SORT

주어진 자료를 정렬



# 도스 명령어

C:\>dir/p/w
디스크의 파일과 디렉토리를 한 화면씩 가로목록 형식으로 출력하는 명령어이다.

C:\>sys a:
3.5 디스켓을 넣고 부팅 가능하게 시스템 파일을A드라이브에 전송하라는 명령어이다. 만약 윈도우 98사용자라면 c:\windows\comand\ebd\폴더에 있는 파일을 전부 디스켓에 복사 하면 된다.

C:\DOS>copy .d:
C드라이브에 있는 DOS디렉토리의 모든파일(*.*과 같음)을 D드라이브에 카피하라는 명령어이다.

C:\>xcopy . d: /s
하드카피와 비슷한 명령어로 C드라이브에 있는 디렉토리와 파일들을 D드라이브로 복사한다는 명령어 이다.

C:\>diskcopy a: a:
A드라이브의 플로피 디스크의 내용을 다른 플로피 디스크에 똑 같이 복사할 때 사용하는 명령어 이다.

C:\>move sys.com d:\win
C드라이브에 있는 SYS.COM이라는 파일을 D드라이브에 있는 win디렉토리에 이동시킨다는 말이다.

C:\>ren kkn.txt kim.doc
파일의 이름을 kkn.txt에서 kim.doc로 바꾼다는 명령어 이다.

C:\>del . /P
C드라이브에 있는 루트 파일들을 확인 절차를 한후 전부 지운다는 명령어이다.

C:\>deltree windows
C드라이브의 windows디렉토리의 하위 폴더까지 전부 삭제하는 명령어다.

C:\>undelete command.com
지워진 command.com이라는 파일을 복구하라는 명령어이다.(도스에서 사용하고 윈도우 9x부터는 휴지통의 개념을 사용한다)

C:\>edit autoexec.bat
autoexec.bat 파일의 편집을 하기위한 명령어이다.

C:\>cd windows
windows디렉토리로 체인지 할 때 사용하는 명령어이다.

C:\>md 게임방
게임방 이라는 디렉토리를 만들려고 할 때 사용하는 명령어이다.

C:\>doskey
매크로를 만들 때 사용하는 명령어로서 그전에 입력했던 명령어를 화살표키로 출력시킬 수 있다.

C:\>fdisk
도스를 사용할 수 있도록 하드디스크의 파티션을 설정합니다.

C:\>format c: /q/s
하드디스크를 빠른 포맷하고 시스템파일을 복사하라는 명령어 이다.

C:\>chkdsk c: /f
C드라이브를 검사하여 오류가 있으면 수정하라는 명령어 이다.

C:\>scandisk /all
모든 지역 드라이브를 검사하고 오류가 있으면 수정하라는 명령어이다.

C:\>attrib -r -s -h msdos.sys
msdos.sys라는 파일의 숨김속성을 읽기,시스템파일속성,숨김파일 속성을 지정할 때 사용하는 명령어 이다.

C:\>attrib +r +s +h msdos.sys
msdos.sys라는 파일의 숨김속성을 읽기,시스템파일속성,숨김파일 속성을 해제 할 때 사용하는 명령어 이다.

C:\>mshbios /u 또는 hbios /u
한글 바이오스를 메모리에서 삭제하라는 명령어 이다.

C:\>nlsfunc
국 가별 정보를 로드할 때 사용하며 이 키가 autoexec.bat파일에 지정이 안되있으면 국가별 언어코드가 전환되지 않는다. 만약 국가별 코드전환이 안되면 autoexec.bat에 loadhigh c:\windows\ command\nlsfunc.exe c:\windows\country.sys라는 항목이 설정되어있는지 확인한다.

C:\>mem /c/p
시스템의 사용 중인 메모리와 사용할 수 있는 메모리 양을 유형별로 한페이지씩 보여 주는 명령어 이다.

※컴퓨터가 부팅되는 동안 도스가 수행하는 동작

ⓐ 본체에 전원을 넣는다
ⓑ 하드웨어 테스트 를 거친다(롬바이오스를 통해서)
ⓒ MSDOS.SYS , IO.SYS , COMMAND.COM시스템파일이 실행된다
ⓓ CONFIG.SYS 파일을 참고하여 시스템 환경설정 루틴을 실행한다.
ⓔ AUTOEXEC.BAT파일 내용을 실행한다.(파일에 관련된 정보)
ⓕ 도스가 실행되고 프롬프트가 나타난다.

2006/12/18 12:33 2006/12/18 12:33
이 글에는 트랙백을 보낼 수 없습니다
Window  2006/12/18 12:31

bat(배치)파일 문법
일괄처리(Batch) 파일 #1

1.배치파일(Batch File, 일괄처리용 화일)

1.1. 배치파일?
Batch(배치)는 '한 묶음','한벌'의 의미하며, 배치파일은 여러 가지 명령어를 한 파일에 모아 작업하는 파일, 즉 하나의 일을 처리하기 위해 여러번 내리는 명령어를 한 번만에 처리할 수 있도록 만들어 놓은 실행파일이다.

  ① 확장자 이름은 반드시 'BAT'이어야 한다.
  ② 파일명은 도스의 내부명령어 이름을 피하라.
  ③ COM, EXE 파일의 이름을 피하라.

  ④ 명령어 이름이 서로 같아 충돌할 때, DOS는 도스키-->내부명령-->외부명령( *.COM-->*.EXE)-->*.BAT) 순으로 실행한다.

    다만 '파일명.BAT'라고 확장자 이름까지 써서 명령을 내리면 이런 문제는 해결된다.

  ⑤ BAT파일은 표준 ASCII 문장(Text) 파일이어야 한다.


1.2. BAT파일 만드는 방법.
일반 도스 명령어와 배치전용 명령어를 사용하여 다음의 3가지 방식을 사용하여 아스키 문장파일 형식으로 만든다.

  ① COPY명령사용 ....  C:\>COPY CON XXXX.BAT
  ② 문서편집기 이용 ... 'EDIT', 'SAN'
  ③ 문서 작성기(WordProcessor) ..  아래한글,훈민정음 등


작성 예①)  C:\>COPY CON SAMPLE.BAT  <엔터>
─────       CLS
                DIR A:
                V3 C:
                ^Z
                1 File(s) Copied

<설명1> COPY 명령을 사용하여 텍스트 파일 만드는 방법을 이용한다.
CON은 장치 파일명으로 여기서는 키보드를 지칭한다.키보드로 입력한 문자를 SAMPLE.BAT라는 파일명으로 복사.출력하라는 뜻이다.

입력한 배치 내용을 보면
  화면을 깨끗이지우고(CLS), A드라이브의 파일목록을 보이라, 그리고 C 디스크에 바이러스 감염 여부를 점검.치료하라는 명령이다.

줄을 바꿀 때는 항상 엔터하면 된다. 끝낼 때는 언제나 Ctrl+Z 또는 F6키를 누르고 엔터하면 1개 파일이 복사되었다는 메시지가 나오면서 C루트에 SAMPLE.BAT란 파일이 1개 생긴다.

<실행> C:\>SAMPLE <엔터>하면 배치파일 내용 순서데로 명령을 실행한다.

-----

작성 예②)  C:\>EDIT <엔터>

     도스 편집기 화면이 뜬다.  이때  ESC키를 한번 눌러 메시지 상자를 제거하고 깨끗한 화면에다 첫째 줄부터 입력하되, 줄을 바꿀 때는 엔터한다.

               CLS
               DIR A:
               V3 C:

끝내려고 저장글쇠(@F,S)를 누르면 파일이름을 써넣으라고 상자자 나온다. SAMPLE.BAT라고 입력하고 <엔터>하여 저장한 후, 에디트를 끝(@F, X)낸다.그러면 C루트 디렉토리에 SAMPLE.BAT 라는 배치파일이 생긴다.

<실행> C:\>SAMPLE <엔터>하면    C루트에 있는 SAMPLE.BAT 파일이 실행된다.


******* 배치파일 내용에 파일스펙 경로명을 쓸 때 주의점.****

ⓐ 배치파일 내용 중에
  C:\GAME\SUPER\SUPER.EXE 라고 해놓으면

현재 도스 작업방을 바꾸지 말고 C:\GAME\SUPER\ 방에있는 SUPER.EXE를 실행하라는 뜻이기 때문에 경우에 따라서는 실행이 되지 않는다.

ⓑ 배치 내용을 아래와 같이 하면 틀림없이 실행하게 된다.
  C:
  CD\GAME\SUPER
  SUPER

현재 도스작업방이 먼저 C드라이브로 바뀌고,절대경로명 CD\GAME\SUPER
디렉토리로 이동한 후에 SUPER.EXE 파일을 실행한다            ******


1.3.배치파일 명령어들

① 일반적인 도스명령를 그대로 사용한다.

  CLS  COPY  DEL  DIR  DATE  TIME   PAYH   PROMPT  CHKDSK 등등.

② 배치에만 사용하는 전용 명령가 있다.
  ECHO   REM   PAUSE  CALL   GOTO    CHOICE   IF   FOR   SHIFT
(메아리)(설명) (쉼)  (부름) (가기)   (선택) (조건)(순환) (옮김)


ⓐ REM
  [베치파일 속에 달고 싶은 설명.주석]....설명이 화면에 나옴.

ⓑ PAUSE
  배치파일 실행중 일시 멈추게함.
  화면에 'Press any key to continue...'
          (계속하려면 아무키나 누르세요)

  배치실행을 중단하려면 Ctrl+C키를 누른다. 그러면 화면에
           'Terminate batch job (Y/N)?'
          (배치작업을 끝내겠읍니까?)  Yes / No

ⓒ ECHO 명령
형식> ECHO 문자열
      에코명령 다음에 오는 문자열을 화면에 나타낸다.

    ECHO ON
      이후부터 '명령어'라인을 화면에 보인다.(도스 초기값)

    ECHO OFF
      이후 실행되는 명령어 라인을 화면에 나타내지 않는다.
      화면이 깨끗하고, 화면출력속도.가독성 증가한다.
      'ECHO OFF'라는 그 자체까지 보이지 않게 하려면 @ 을 앞에 쓴
      다.( @ECHO OFF )

    ECHO
      현재 ECHO ON/OFF 상태를 확인한다.


<예> C:\>COPY CON EDIT2.bat
  ECHO OFF
                 이후에 실행되는 명령어는 화면에 나타나지 않는다.
                 화면에 ECHO OFF 자체는 나타난다.

  TB
                 태백한글을 메모리에 상주 띄우기.
                 각자 지원되는 다른 한글코드(HANME,HT,DKBY 등)를
                 실행하면 된다.
                 한글도스인 때는 HBIOS.COM을 실행한다.

  PAUSE
               잠시 중지. 엔터하면 다시 진행한다.

  CLS
              화면청소

  ECHO 'This is Hangul Edit.'
                            '문자열'을 화면에 출력한다.

  PAUSE
  REM NOW,DOS EDIT IS HANGUL EDITOR.

                REM 다음에 오는 설명은 화면에 나오지 않는다. 다만
                사용자가 배치파일 내용을 볼 때 참고할 내용이다.

  ECHO ON
              이후에 실행되는 명령어는 화면에 나타남

  EDIT
              도스 에디터 화면이 나오면 한글로 문서를 작성.저장한
              후 끝낸다.

  @ECHO OFF

             이후에 실행되는 명령어는 화면에 나타나지 않는다.
             ECHO OFF자체도 나타나지않음.

  TB/U
            태백한글 메모리서 제거한다.

  CLS
  ^Z
           CTRL+Z 또는 F6를 누른다.

  1 File(s) Copied

  실습을 위하여 일부러 여러가지 명령 종류를 써 보았으며,한글로 설 명을 하느라고 줄이 떨어졌으나 각자 실습할 때는 영문글자 부분만 쓰고 엔터하여 줄울 바꾸고 줄간격을 붙여가며 쓴다.

<실행 예>  C:\>EDIT2 <엔터> 하면

위의 내용을 순서데로 실행하고 도스 문서편집기가 화면에 나타난다. 문서작성기를 끝내면 한글프로그램을 메모리에서 제거하고 도스로 나온다.  (계속)


제14장 배치파일 #2 (계속)

1.4 배치파일 전용 명령에서
? 판단과 분기에 관한 명령  ....  CALL, CHOICE, IF, GOTO

앞에서 공부한 배치파일의 경우는 입력된 명령어들의 순서데로 실행되었었지만, 판단과 분기의 명령들은 명령어의 실행의 흐름을 사용자가 임의로 변경,지정할 수있어 배치파일의 기능을 보다 강력하게 한다.

분기 명령..배치파일의 순차적 수행을 필요에 따라 변경할 때 사용하며
          배치파일에 프로그램적 기능을 갖게하는 명령이다.

조건분기(Conditional Branching).......IF명령

무조건분기(Unconditional Branching)...GOTO명령

① CALL [배치파일 인자]

배치파일 실행 중 다른 배치파일을 도중에 호출하여 실행시키고 다시
원래 배치파일로 돌아오게 하는 명령이다.

<예>  H1.BAT의 내용이 'DIR C:\ > A:MDIRLIST.TXT' ( C루트의 파일목
록을 A드라이브에 MDIRLIST.TXT 란 파일로 출력하라) 이라고 하자.

  C:\>COPY CON H2.BAT
    CALL H1.BAT
    TYPE A:MDIRLIST
    ^Z

<실행> C:\>H2 엔터하면 H1.BAT란 배치파일을 불러(CALL) 실행하여 MDIRLIST.TXT 파일을 A드라이브에 만든 후, 다시 H2.BAT 파일로 돌아와서 A드라이브의 'MDIRLIST.TXT' 파일을 화면에 타이프해 보인다.


②  IF 조건

주어진 조건에 따라 명령을 선별적으로 선택.실행케 하는 명령이다.

IF EXIST [파일이름] [명령]
         찾는 파일이 존재하면 명령을 실행하라

IF NOT EXIT [파일이름] [명령]
         찾는 파일이 없으면 명령을 실행하라

<예> IF EXIST *.BAK DEL *.BAK
       BAK라는 백업파일이 있으면 모두 지워버리라.


IF [NOT] "문자열1" == "문자열2" [명령]
    "문자열1"과 "문자열2"가 서로 일치 [불일치] 하면 명령을 실행하라.                     (양쪽 비교 문자열의 영문 대소문자를 구분한다)
    ==은 EQ로, !=은 같지 않다는 부호인데 NE로 대신할 수 있다.
  문자열은 " " 으로 반드시 구분하고 부호와는 한 칸 띈다.

<예> C:\>COPY CON TEST1.BAT
    @ECHO OFF
    IF "%1" == "A" ECHO TESTING A
    IF NOT "%1" == "A" ECHO IT IS NOT EQUAL.
    ^z

<실행> C:\>TEST1 A 엔터하면 화면에 TESTING A 라고 표시한다.
      C:\>TEST1 C 엔터하면 A와 같지 않으므로 IT IS NOT EQUAL 라고 표시한다.

IF [NOT] ERRORLEVEL [값] [명령]
     IF명령 바로 앞에서 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드(ExitCode)를 검사하여 지정 값보다 크면(작으면) 명령을 실행하라는 뜻이다.

종료코드를 발생하는 명령어(FORMAT,XCOPY,COPY,BACKUP,RESTORE 등 일
반 도스명령어들 메뉴얼 참조)들은 0~255 범위에서 종료코드(EXITCODE)
값을 가지는데
에를 들면 XCOPY명령에서 성공적 수행일 때는 0, 화일이 없을 때 1, CTRL+C로 중단하면 2, 초기화 오류발생 때는 4, 디스크 에러에는 5를 반환하는 식으로 정해저 있다.

예>  C:\>COPY CON XY.BAT
        XCOPY %1 A:
        IF NOT ERRORLEEVEL 0 ECHO COPY FAILED !
        IF ERRORLEVEL 0 ECHO SUCCESSFULLY !
        ^Z

실행> C:\>XY *.* 엔터하면 성공적 수행여부에 따라  'FAILED !' 또는
                         'SUCCESSFULLY !' 라는 메시지가 나온다.

③ GOTO [레이블이름]
  레이블 이름이 있는 행으로 실행 순서를 옮긴다.
  '레이블(Label)'은 8자이 내로, 레이블 앞에는 콜론(:)을 사용한다.

<예> 현재 디렉토리에 *.HWP 파일을 C:\HNCDOC 디렉토리로 옮겨주는
     배치파일을 만들어 보자.

  C:\>COPY CON HWPMV.BAT
      @ECHO OFF
      IF NOT EXIST *.HWP GOTO FIRST
      MOVE /-Y *.HWP C:\HNCDOC
      ECHO HWPFILE MOVE DONE !
      GOTO END
      :FIRST
      ECHO *.HWP FILE NOT FOUND !
      :END
      ^Z

실행> C:\>HWPMV  엔터하면 C루트 디렉토리에 있는 모든 HWP 파일을 C:\HNCDOC 디렉토리로 옮기고 'HWP 파일을 모두 옮겼다'는 메시지를 화면에 보이고 END(끝) 레이블로 와서 도스상태로 빠저나 온다. 옮길 HWP 파일이 없으면 ' HWP 파일을 찾지 못했다'는 메시지가 나오고 끝(END) 낸다.

     GOTO 문에서는 항상 END 레이블로 배치를 끝낸다.

  배치 안에서 COPY,XCOPY,MOVE 명령은 /-Y 스위치를 써야 만이 목적지에 같은 이름의 파일이 있을 경우 덮어 쓸지여부를 확인하는 메시지를 출력한다.

④ 의사변수(Dummy Variables 가상의 변수)

바꿔 쓸 수 있는 인자(Replaceable Parameter)를 의사변수라 하며,
  %0 ~ %9(10개)으로 표시한다.

형식> C:\>명령어 파일1 파일2   "    "   "   "   "   " 파일9
           %0    %1    %2    %3   %4  %5  %6  %7  %8  %9

작성예1> C:\>COPY CON DIRALL.BAT
           DIR %1
           pause
           DIR %2
           pause
           type %0
           ^Z

실행예> C:\>DIRALL A: B: (엔터)

설명> 위 '실행 예'에서 명령어 DIRALL(.BAT)은 %0, A:은 %1, B:은 %2 에 해당하므로 '작성예1'의 내용 중 %1,%2,%0에 대입하여 명령을 수행한 결과가 화면에 나오게 된다. 즉 화면에는 'DIR A:'과, 'DIR B:'이 차례로 출력되고 멈췄다가 'DIRALL.BAT' 파일 내용이 출력된다.


작성예2> C:\>COPY CON EDIT2.BAT
             @ECHO OFF
             CLS
             TB          .....tb라는 프로그램을 메모리에 설치
             EDIT %1     ......%1은 '지정 파일'로 대체된다.
             TB/U        .......태백 한글을 메모리에서 제거
             ^Z

실행예> C:\>EDIT2 SAMPLE.TXT (엔터)
             %0    %1

설명> 위 '실행예'에서 명령어(EDIT2.BAT)는 %0, 파일1(SAMPLE.TXT)은 %1 에 해당하므로, '작성예2'의 배치파일 내용중 %1 대신에 SAMPLE.TXT라는 텍스트 파일이 대입된다.

화면은 한글을 읽고 쓸 수 있도록 태백한글을 메모리에 상주시킨다. 편집기는 SAMPLE.TXT 라는 파일을 읽어 화면에 띄워 수정.삽입 등 편집하고 저장할 수 있다. 편집을 끝내면 한글코드가 메모리에서 제거된다.


⑤ SHIFT

쉬프트는 옮김,변위를 의미하는 데 10개 이상의 대체 인자(Replaceable
Paramete)도 사용 가능하다. 대체인자를 한 자리씩 왼쪽으로 이동한다.

작성예> 지정한 문장(text) 파일들을 차례로 TYPE시키는 배치파일 예.

A:\>COPY CON TELLME.BAT
    @ECHO OFF
    :BEGIN
    IF NOT EXIST %1 GOTO END
    TYPE %1
    SHIFT
    GOTO BEGIN
    :END
    ECHO 더이상 파일이 없습니다.
    ^Z

실행예> A:\>TELLME AAA.TXT BBB.TXT CCC.TXT .........   엔터
           %0     %1       %2      %3     ........%15

설명> 위 '실행예'의 텍스트 파일명은 특정해야 하며 Wildcard문자(*,?)는 사용할 수 없다. 지정된 여러 파일들에 %1 변수가 차례로 SHIFT(변위)되면서 파일을 대입시켜 내용을 출력한다.
즉 AAA.TXT가 먼저 %1이 되고, 다음 BBB.TXT, 또 CCC.TXT, .....등이 %1에 대입된다. 계속 10개 이상의 변수도 지정할 수 있다.

지정된 파일이 모두 옮겨 대입되고 나면 배치파일이 끝나게 된다. 배치파일 내용 중 GOTO 명령에서 BEGIN 레이블로 가서 다시 시작하게하는 것을 LOOP(고리)라고 한다.


⑥ FOR
FOR 명령은 지정된 횟수 만큼 배치파일이 같은 명령을 계속 반복하게하는 명령, 즉 반복수행 (Looping) 명령이다.

형식)  FOR %%변수 IN (셋트 파라미터) DO [명령어] %%변수

     '(셋트 파라미터)'는 일련의 많은 갯수의 파일들을 말하고, '%%변수'는 SET에 명시된 각 파일에 순차적으로 설정되어 명령을 실행하는 대입변수이다.

     셋트 파라미터에 와일드카드문자(*,?)를  사용할 수 있다.

작성예> 확장명이 BAT,DOC,TXT,CAP인 문장 파일 모두를 차례로 화면에 출력(TYPE)되게 배치파일을 만들어 보자.

  C:\> COPY CON TYPEALL.BAT
       FOR %%Z IN (*.BAT *.DOC *.TXT *.CAP) DO TYPE %%Z
       ^Z

<실행>  C:\>TYPEALL C:\MDIR\*.BAT 엔터

  (*.BAT,  *.DOC,  *.TXT,  *.CAP 중에서 한 종류 파일만 지정한다.)

위 TYPEALL.BAT 파일을 실행할 때는 파일스펙(경로특정)이 있어야 한다.


2. 자동형 배치파일 (Aautoexec.bat)

일반배치파일 만들기와 동일하며 다만 이름만 AUTOEXEC.BAT로 한다.

컴퓨터를 구입할 때 이미 작성되어 있으므로 그 내용만 자기 필요에 따라 변경하면 될 것이다. 만약을 위해 원본 파일을 다른 곳에 백업해 놓고 필요시 다시 복사하면 좋을 것이다.

<작성예>  C:\>COPY CON AUTOEXEC.BAT
         @ECHO OFF
         CLS
         SMARTDRV
         LH V3RES
         PROMPT $P$G
         PATH=C:\;C:\DOS;C:\MDIR;C:\V&P
         LH DOSKEY
         M
         ^Z
         1 FIle(s) Copied

①  컴퓨터가 부팅할 때 DOS 시스템 프로그램을 메모리에 상주시킨 후
  곧 바로 자동실행 배치파일의 내용의 명령들을 실행한다.


아래 링크 출처 --  http://naver.com/mokomoji

배치화일로 파일 내에 문자쓰기
http://blog.naver.com/mokomoji/130001367333

배치파일로 폴더 내의 여러 파일을 각각 압축하기
http://blog.naver.com/mokomoji/130001367394

배치화일 수동 초이스 만들기 
http://blog.naver.com/mokomoji/130001367431

html 배치화일 특수문자 해결
http://blog.naver.com/mokomoji/130001367445

배치화일 명령어
http://blog.naver.com/mokomoji/130001367473

[본문스크랩] 네트워크 드라이브 자동 연결하기
http://blog.naver.com/mokomoji/130003167299

[본문스크랩] IP 자동 변경 스크립트
http://blog.naver.com/mokomoji/130003167289

[본문스크랩] 반복적인 ip 변경은 Bat 파일을 이용하여 간단하게
http://blog.naver.com/mokomoji/130003167083

[펌] 윈도우 콘솔 명령어들
http://blog.naver.com/mokomoji/130001368352

배치파일로 폴더 내의 여러 파일을 각각 압축하기
http://blog.naver.com/mokomoji/130001367394

폴더 분기
http://blog.naver.com/mokomoji/120019472999

[펌] 날짜 및 시간 얻어오기 배치파일
http://blog.naver.com/mokomoji/120016354197

배치화일 오늘날짜 폴더 생성
http://blog.naver.com/mokomoji/120014798527

배치화일 bat 화일 자동처리 1
http://blog.naver.com/mokomoji/120014798176

2006/12/18 12:31 2006/12/18 12:31
이 글에는 트랙백을 보낼 수 없습니다


질문 패턴 01. 영화 보러 갈래?
Do you want to see a movie tonight?
이걸 원해? 말만 해! 다 해 줄 테니~ 상대방의 의향을 물을 땐, Do you~?

질문 패턴 02. 조용히 좀 해 줄래?
Can you keep it down?
밥 좀 사줄래? 청소 좀 도와줄래? 어려운 일을 부탁할 땐, Can you~?

질문 패턴 03. 얘기 좀 해도 될까?
Can I talk to you?
그것 좀 해도 돼? 상대방의 허락을 구하거나 부탁할 일이 있을 땐, Can I~?

질문 패턴 04. 여기 사인해 주시겠어요?
Would you signature here, please?
점잖고 격조 있고 교양 있게 말하고 싶을 땐, Would you~?

질문 패턴 05. 진심이야?
Are you serious?
행복하다고? 긴장된다고? 상대방의 상태를 묻고 싶다면, Are you~?

질문 패턴 06. 내가 먼저 전화해야 하나?
Should I call him first?
제가 어찌 하오리까? 무언가 해야 하냐고 나의 의무를 물을 땐, Should I~?

질문 패턴 07. 그녀에게 데이트 신청할 작정이야?
Are you going to ask her out?
뭔가 할 예정이라고 이미 마음먹은 일을 통보할 땐, Are you going to~?

질문 패턴 08. 전화해도 돼요?
Is it okay if I call you?
무엇이든 괜찮은지 아닌지 묻고 싶을 땐, Is it okay if~?

질문 패턴 09. 인터넷으로 주문하지 그래?
Why don't you order it online?
내 이름은 권해요! 상대방에게 무언가 권유할 땐, Why don't you~?

질문 패턴 10. 근처에 화장실이 있나요?
Is there a bathroom around here?
어이, 거기 누구 없소? Is there~?

질문 패턴 11. 누굴 사랑해 본 적 있어요?
Have you ever loved someone?
해봤어? 먹어봤어? 가봤어? 경험을 물어볼 땐, Have you~?

질문 패턴 12. 좀 도와줘?
You need some help?
평서문으로도 물어볼 수 있다? 상대방에게 물어보고 싶은 것이 있을 땐 무조건 You~?

질문 패턴 13. 그렇게 생각 안 해?
Don't you think so?
넌 안 그러니? 상대방의 동의를 구하고 싶을 땐, Don't you~?

질문 패턴 14. 저한테 메시지 온 거 있어요?
Any messages for me?
무언가 있는지 물어볼 때 Any~?를 써도 된다고?

질문 패턴 15. 무슨 일 있어?
What happened to you?
뭘 했는지, 뭘 좋아하는지. ‘무엇’이 들어가는 질문을 할 땐 무조건, What~?

질문 패턴 16. 너희 둘은 어떻게 만나게 되었는데?
How did you two meet?
‘어떻게’라는 말이 들어가는 표현을 할 땐 무조건, How~?

질문 패턴 17. 오늘 언제 퇴근해요?
When do you get off today?
시간에 관한 질문을 할 땐 언제나, When~?

질문 패턴 18. 어디 가고 싶어?
Where do you want to go?
어디 가고 싶다고? 어디 있는 거야? ‘어디’가 들어가는 질문을 할 땐, Where~?

질문 패턴 19. 누가 이랬어?
Who did this?
‘누가’ 했는지 묻고 싶을 땐 무조건, Who~?

질문 패턴 20. 왜 나한테 키스했어?
Why did you kiss me?
왜 그랬는데? 도대체 왜 그랬어? 이유를 묻고 싶을 땐 언제나, Why~?

2006/12/18 12:25 2006/12/18 12:25
이 글에는 트랙백을 보낼 수 없습니다

EXPLAIN 사용함으로써 인덱스가 적절히 사용되고 있는지 검토할 있다. 인덱스가 잘못 사용되고 있다면 ANALYZE TABLE 사용하여 테이블을 점검하라.
이것은 테이블의 상태를 갱신하며 옵티마이저의 동작에 영향을 준다.

옵티마이저가 SELECT 기록된 순서대로 조인을 행하게 강제하려면 SELECT 대신에 SELECT STRAIGHT_JOIN 사용하라.

EXPLAIN SELECT 문에 사용된 테이블당 하나의 행을 리턴한다. 나열된 순서는 MYSQL 쿼리처리에 사용하는 순서대로 출력된다.

MYSQL 모든 조인을 single-sweep multi-join 방식을 사용하여 해결한다. 이것은 MYSQL 첫번째 테이블에서 한행을 읽고, 두번째 테이블에서 매치되는 행을 찾고, 세번째 테이블에서 매치되는 행을 찾고.. 그러한 방식이다. 모든 테이블들이 처리된 추출된 컬럼을 출력하고 다시 처음 테이블로 돌아가서 조인을 계속한다. 이런식으로 첫번째 테이블에 더이상 남는행이 없을때까지 실행한다.

(어느것이 첫번째 테이블이 될지는 mysql 옵티마이저가 결정할 문제이다. STRAIGHT_JOIN 명시하지 않았다면 유저가 입력한 순서와는 관련이 없다.)

MYSQL 4.1 버전에서 EXPLAIN 출력포멧이 UNION subquery, derived table 다루기에 효과적으로 변경되었다. 무엇보다 중요한 것은 id , select_type 컬럼이 추가된 것이다.

EXPLAIN 행은 하나의 테이블에 대한 정보를 보여주며 다음과 같은 컬럼들로 구성된다.

  • id

SELECT 번호, 쿼리내의 SELECT 구분번호이다.

  • select_type

SELECT 타입, 다음과 같다.

    • SIMPLE

단순 SELECT (UNION 이나 서브쿼리를 사용하지 않음)

    • PRIMARY

가장 외곽의 SELECT

    • UNION

UNION 에서의 두번째 혹은 나중에 따라오는 SELECT

    • DEPENDENT UNION

UNION 에서의 두번째 혹은 나중에 따라오는 SELECT, 외곽쿼리에 의존적이다.

    • UNION RESULT

UNION 결과물.

    • SUBQUERY

서브쿼리의 첫번째 SELECT

    • DEPENDENT SUBQUERY

서브쿼리의 첫번째 SELECT, 외곽쿼리에 의존적이다.

    • DERIVED

SELECT 추출된 테이블 (FROM 내부의 서브쿼리)

  • table

나타난 결과가 참조하는 테이블명.

  • type

조인타입, 아래와 같다. 우수한 순서대로 뒤로갈수록 나쁜 조인형태이다.

    • system

테이블에 하나의 행만 존재(시스템 테이블). const join 특수한 경우이다.

    • const

많아야 하나의 매치되는 행만 존재하는 경우. 하나의 행이기 때문에 컬럼값은 나머지 연산에서 상수로 간주되며, 처음 한번만 읽어들이면 되기 때문에 무지 빠르다.
PRIMARY KEY
UNIQUE index 상수와 비교하는 경우.
아래의 경우에서 tbl_name const table 조인된다.

SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM
tbl_name
WHERE
primary_key_part1=1 AND primary_key_part2=2;

    • eq_ref

조인수행을 위해 테이블에서 하나씩의 행만이 읽혀지는 형태. const 타입이외에 가장 훌륭한 조인타입니다.
조인연산에 PRIMARY KEY UNIQUE index 인덱스가 사용되는 경우.
인덱스된 컬럼이 = 연산에 사용되는 경우. 비교되는 값은 상수이거나 이전조인결과의 컬럼값일수 있다.
다음 예에서 MySQL ref_table 처리하는데 eq_ref 조인을 사용한다.

SELECT * FROM
ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1= other_table.column
AND ref_table.key_column_part2=1;

    • ref

이전 테이블과의 조인에 사용될 매치되는 인덱스의 모든행이 테이블에서 읽혀진다. leftmost prefix 키만을 사용하거나 사용된 키가 PRIMARY KEY UNIQUE 아닐때( 키값으로 단일행을 추출할수 없을때) 사용되는 조인.
만약 사용된 키가 적은수의 행과 매치될때 이것은 적절한 조인 타입니다.
ref
인덱스된 컬럼과 = 연산에서 사용된다.
아래 예에서 MySQL ref_table 처리에 ref 조인 타입을 사용한다.

SELECT * FROM
ref_table WHERE key_column=expr;
SELECT * FROM
ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1= other_table.column
AND ref_table.key_column_part2=1;

    • ref_or_null

ref 같지만 NULL 값을 포함하는 행에대한 검색이 수반된다.
4.1.1
에서 새롭게 도입된 조인타입이며 서브쿼리 처리에서 대개 사용된다.
아래 예에서 MySQL ref_table 처리에 ref_or_null 조인타입을 사용한다.

SELECT * FROM ref_tableWHERE key_column=expr OR key_column IS NULL;

See Section 7.2.7, “How MySQL Optimizes IS NULL.

    • index_merge

인덱스 병합 최적화가 적용되는 조인 타입.
경우, key 컬럼은 사용된 인덱스의 리스트를 나타내며 key_len 컬럼은 사용된 인덱스중 가장 key 명을 나타낸다.
For more information, see
Section 7.2.6, “Index Merge Optimization”.

    • unique_subquery

이것은 아래와 같은 몇몇 IN 서브쿼리 처리에서 ref 타입대신 사용된다.

value
IN (SELECT primary_key FROM single_table WHERE some_expr)

unique_subquery 는 성능향상을 위해 서브쿼리를 단순 index 검색 함수로 대체한다.

    • index_subquery

unique_subquery 마찬가지로 IN 서브쿼리를 대체한다. 그러나 이것은 아래와 같이 서브쿼리에서 non-unique 인덱스가 사용될때 동작한다.

value
IN (SELECT key_column FROM single_table WHERE some_expr)

    • range

인덱스를 사용하여 주어진 범위 내의 행들만 추출된다. key 컬럼은 사용된 인덱스를 나타내고 key_len 사용된 가장 key 부분을 나타낸다.
ref
컬럼은 타입의 조인에서 NULL 이다.
range
타입은 컬럼이 상수와 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN 또는 IN 연산에 사용될때 적용된다.

SELECT * FROM tbl_nameWHERE key_column = 10;SELECT * FROM tbl_nameWHERE key_column BETWEEN 10 and 20;SELECT * FROM tbl_nameWHERE key_column IN (10,20,30);SELECT * FROM tbl_nameWHERE key_part1= 10 AND key_part2 IN (10,20,30);

    • index

타입은 인덱스가 스캔된다는걸 제외하면 ALL 같다. 일반적으로 인덱스 파일이 데이타파일보다 작기 때문에 ALL 보다는 빠르다.
MySQL
쿼리에서 단일 인덱스의 일부분인 컬럼을 사용할때 조인타입을 적용한다.

    • ALL

테이블과의 조인을 위해 풀스캔이 된다. 만약 (조인에 쓰인) 첫번째 테이블이 고정이 아니라면 비효율적이다, 그리고 대부분의 경우에 아주 느린 성능을 보인다. 보통 상수값이나 상수인 컬럼값으로 row 추출하도록 인덱스를 추가함으로써 ALL 타입을 피할 있다.

  • possible_keys

컬럼값은 MySQL 해당 테이블의 검색에 사용할수 있는 인덱스들을 나타낸다.
주의할것은 explain 결과에서 나타난 테이블들의 순서와는 무관하다는 것이다.
이것은 possible_keys 나타난 인덱스들이 결과에 나타난 테이블 순서에서 실제 사용할 없을수도 있다는 것을 의미한다.
이값이 NULL 이라면 사용가능한 인덱스가 없다는 것이다. 이러한 경우에는 인덱스를 where 절을 고려하여 사용됨직한 적절한 컬럼에 인덱스를 추가함으로써 성능을 개선할 있다. 인덱스를 수정하였다면 다시한번 EXPLAIN 실행하여 체크하라.
See
Section 13.2.2, “ALTER TABLE Syntax”.

현재 테이블의 인덱스를 보기 위해서는 SHOW INDEX FROM tbl_name. 사용하라.

  • key

컬럼은 MySQL 실제 사용한 key(index) 나타낸다.
만약 사용한 인덱스가 없다면 NULL 값일 것이다. MySQL possible_keys 나타난 인덱스를 사용하거나 사용하지 않도록 강제하려면 FORCE INDEX, USE INDEX, 혹은 IGNORE INDEX 함께 사용하라.
See
Section 13.1.7, “SELECT Syntax”.

MyISAM BDB 테이블에서는 ANALYZE TABLE 옵티마이저가 더나은 인덱스를 선택할 있도록 테이블의 정보를 갱신한다.
MyISAM 에서는 myisamchk --analyze 같은 기능을 한다.
See
Section 13.5.2.1, “ANALYZE TABLE Syntax” and Section 5.7.2, “Table Maintenance and Crash Recovery”.

  • key_len

컬럼은 MySQL 사용한 인덱스의 길이를 나타낸다. key 컬럼값이 NULL 이면 이값도 NULL 이다.
key_len
값으로 MySQL 실제 복수컬럼 키중 얼마나 많은 부분을 사용할 것인지 있다.

  • ref

컬럼은 행을 추출하는데 키와 함께 사용된 컬럼이나 상수값을 나타낸다.

  • rows

값은 쿼리 수행에서 MySQL 예상하는 검색해야할 행수를 나타낸다.

  • Extra

컬럼은 MySQL 쿼리를 해석한 추가적인 정보를 나타낸다.
아래와 같은 값들이 나타날 있다.

    • Distinct

MySQL 매치되는 첫행을 찾는 즉시 검색을 중단할 것이다.

    • Not exists

MySQL LEFT JOIN 수행함에 매치되는 행을 찾으면 더이상 매치되는 행을 검색하지 않는다.
아래와 같은 경우에 해당한다.

SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.idWHERE t2.id IS NULL;

여 기서 t2.id NOT NULL 이고, 이경우 MySQL t1 을 스캔한 후 t1.id 값을 사용해 t2 를 검색한다. MySQL t2 에서 매치되는 행을 찾으면 t2.id NULL 이 될 수 없으므로 더이상 진행하지 않는다. , t1 의 각 행에 대해 t2 에서 매치되는 행이 몇개가 있던지 한개만 찾으면 된다.

    • range checked for each record (index map: #)

MySQL 사용할 좋은 인덱스가 없다. 그러나 선행된 테이블의 컬럼값에 따라 몇몇 인덱스를 사용할 있다. 선행된 테이블의 개개 행에 대해 MySQL range index_merge 접근법을 사용할 있는지 체크할 것이다.
적용가능성의 핵심은 Section 7.2.5, “Range Optimization” and Section 7.2.6, “Index Merge Optimization” 모든 선행된 테이블의 값이 명확하거나 상수인 때를 예외로 하여 기술되어 있다.
이것은 그리 빠르진 않으나 인덱스가 없는 조인의 경우보다는 빠르다.

    • Using filesort

MySQL 정렬을 위해 추가적인 과정을 필요로한다. 정렬과정은 조인타입에 따라 모든 행을 검색하고 WHERE 절에 의해 매치된 모든 행들의 키값을 저장한다. 그리고 저장된 키값을 정렬하여 재정렬된 순서로 행들을 추출한다.
See
Section 7.2.10, “How MySQL Optimizes ORDER BY.

    • Using index

컬럼정보가 실제 테이블이 아닌 인덱스트리에서 추출된다. 쿼리에서 단일 인덱스된 컬럼들만을 사용하는 경우이다.

    • Using temporary
      MySQL 결과의 재사용을 위해 임시테이블을 사용한다. 쿼리 내에 GROUP BY ORDER BY 절이 각기 다른 컬럼을 사용할때 발생한다.

    • Using where
      WHERE 절이 다음 조인에 사용될 행이나 클라이언트에게 돌려질 행을 제한하는 경우이다. 테이블의 모든 행을 검사할 의도가 아니라면 Extra 값이 Using where 아니고 조인타입이 ALL 이나 index 라면 쿼리사용이 잘못되었다.
    • 쿼리를 가능한 빠르게 하려면, Extra 값의 Using filesort Using temporary 주의해야 한다.
    • Using sort_union(...) , Using union(...) , Using intersect(...)
      이들은 인덱스 병합 조인타입에서 인덱스 스캔이 병합되는 형태를 말한다.

See Section 7.2.6, “Index Merge Optimization” for more information.

    • Using index for group-by

이블 접근방식은 Using index 같다. MySQL 실제 테이블에 대한 어떠한 추가적인 디스크 접근 없이 GROUP BY DICTINCT 쿼리에 사용된 모든 컬럼에 대한 인덱스를 찾았음을 말한다. 추가적으로 각각의 group 단지 몇개의 인덱스 항목만이 읽혀지도록 가장 효율적인 방식으로 인덱스가 사용될 것이다.
For details, see
Section 7.2.11, “How MySQL Optimizes GROUP BY.

EXPLAIN 출력내용중 rows 컬럼값들을 곱해봄으로써 얼마나 효과적인 join 실행하고 있는지 있다. 값은 MySQL 쿼리수행중 검사해야할 행수를 대략적으로 알려준다. 만약 max_join_size 시스템 변수값을 설정하였다면 값은 또한 여러테이블을 사용하는 select 어느것을 먼저 실행할지 판단하는데 사용된다.
See
Section 7.5.2, “Tuning Server Parameters”.

다음 예는 다중테이블 조인이 EXPLAIN 정보를 통해 점차적으로 개선되는 과정을 보여준다. 만약 아래와 같은 select 문을 EXPLAIN 으로 개선한다면 :

EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,            tt.ProjectReference, tt.EstimatedShipDate,            tt.ActualShipDate, tt.ClientID,            tt.ServiceCodes, tt.RepetitiveID,            tt.CurrentProcess, tt.CurrentDPPerson,            tt.RecordVolume, tt.DPPrinted, et.COUNTRY,            et_1.COUNTRY, do.CUSTNAME        FROM tt, et, et AS et_1, do        WHERE tt.SubmitTime IS NULL            AND tt.ActualPC = et.EMPLOYID            AND tt.AssignedPC = et_1.EMPLOYID            AND tt.ClientID = do.CUSTNMBR;

예에서 아래와 같은 가정이 사용되었다.:

  • The columns being compared have been declared as follows:

Table

Column

Column Type

tt

ActualPC

CHAR(10)

tt

AssignedPC

CHAR(10)

tt

ClientID

CHAR(10)

et

EMPLOYID

CHAR(15)

do

CUSTNMBR

CHAR(15)

  • The tables have the following indexes:

Table

Index

tt

ActualPC

tt

AssignedPC

tt

ClientID

et

EMPLOYID (primary key)

do

CUSTNMBR (primary key)

  • The tt.ActualPC values are not evenly distributed.

먼저, 개선되기 전의 EXPLAIN 다음과 같은 정보를 보여준다.:

table type possible_keys key  key_len ref  rows  Extraet    ALL  PRIMARY       NULL NULL    NULL 74do    ALL  PRIMARY       NULL NULL    NULL 2135et_1  ALL  PRIMARY       NULL NULL    NULL 74tt    ALL  AssignedPC,   NULL NULL    NULL 3872           ClientID,           ActualPC      range checked for each record (key map: 35)


각 테이블의 type ALL 을 나타내므로, MySQL 이 모든 테이블의 카티션곱(Cartesian product) 를 생성한다는 것을 나타낸다.
각 테이블의 행의 조합이 모두 검사되어야 하기 때문에 이것은 아주 오랜 시간이 소요될 것이다.

실제로 결과는 74 * 2135 * 74 * 3872 = 45,268,558,720 행에 달한다.
만약 테이블이 크다면 얼마나 소요될지 상상할 수도 없을 것이다.
여기서 우선적인 문제는 MySQL 같은 타입으로 선언된 컬럼의 인덱스를 효과적으로 사용할 있다는 것이다. (ISAM 테이블에서는 같은 타입으로 선언되지 않은 인덱스는 사용할 없다.) 여기에서 VARCHAR CHAR 길이가 다르지 않다면 같은 타입이다.
tt.ActualPC
CHAR(10) 이고 et.EMPLOYID CHAR(15) 선언되어 있으므로 길이의 불일치가 발생한다.

이러한 컬럼 길이의 불일치 문제의 해결을 위해 ALTER TABLE 사용하여 ActualPC 컬럼을 10 글자에서 15 글자로 변경하자 (길이를 늘리는것은 데이타 손실이 없다.)

mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);

이제 tt.ActualPC et.EMPLYID 는 모두 VARCHAR(15) 이다. 다시 EXPLAIN 을 실행해보면 다음 결과와 같다.

table type   possible_keys key     key_len ref         rows    Extratt    ALL    AssignedPC,   NULL    NULL    NULL       3872    Using             ClientID,                                         where             ActualPCdo    ALL    PRIMARY       NULL    NULL    NULL        2135      range checked for each record (key map: 1)et_1  ALL    PRIMARY       NULL    NULL    NULL        74      range checked for each record (key map: 1)et    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC 1

훨씬 좋아졌지만 아직 완벽하지 않다. 행의 곱은 이제 74 만큼 줄었다.

쿼리는 이제 몇초만에 실행될 것이다.

두번째 작업은 tt.AssignedPC = et_1.EMPLYID tt.ClientID = do.CUSTNMBR 에서의 컬럼길이의 불일치를 수정하는 것이다.

mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),    ->                MODIFY ClientID   VARCHAR(15);

이제 EXPLAIN 다음과 같은 결과를 보여준다.

table type   possible_keys key      key_len ref           rows Extraet    ALL    PRIMARY       NULL     NULL    NULL          74tt    ref    AssignedPC,   ActualPC 15      et.EMPLOYID   52   Using             ClientID,                                         where             ActualPCet_1  eq_ref PRIMARY       PRIMARY  15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY  15      tt.ClientID   1

이것은 이제 거의 최적의 결과가 같다.

남아있는 문제는 MySQL 기본으로 tt.ActualPC 컬럼의 값이 균등하게 분포되어 있다고 가정한다는 것이다. 하지만 tt 테이블은 실제로 그렇지 않다.

다행히도 MySQL 분포를 검사하도록 하는것은 매우 쉽다.

mysql> ANALYZE TABLE tt;

이제 완벽한 조인이 되었다. EXPLAIN 결과는 다음과 같다.

table type   possible_keys key     key_len ref           rows Extratt    ALL    AssignedPC    NULL    NULL    NULL          3872 Using             ClientID,                                        where             ActualPCet    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC   1et_1  eq_ref PRIMARY       PRIMARY 15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY 15      tt.ClientID   1

EXPLAIN 결과의 rows 컬럼값이 나타내는 MySQL 최적화에 의해 예측된 행수에 주목하라.

나타난 숫자가 실제 행수에 근접한지 체크해야 한다. 그렇지 않다면 STRAIGHT_JOIN 사용고 FROM 절에서 테이블의 순서를 변경함으로써 나은 성능을 얻을 있다.

2006/12/11 19:42 2006/12/11 19:42
이 글에는 트랙백을 보낼 수 없습니다
서브쿼리란 무엇인가?

서브쿼리는, 핵심적으로, 다른 SELECT 구문의 부분으로서 자주 사용 되는 SELECT 구문이다. 물론 INSERT, UPDATE, DELETE나 다른 구문과 함께 사용 될 수 있다. 서브쿼리는 다양한 최적화를 위하는 것과 마찬가지로, 매우 복잡한 검색이나 복잡한 보고서를 저장하기 위하여 사용된다. 우리는 GROUP BY 절의 모든 개수 핵심적으로 갖고, 여러분의 결과를 좀더 세밀히 구별하기 위해 SELECT의 FROM 절로 사용할 수 있다.

시작하기

mysql에서 서브쿼리를 사용하기 위해서, 여러분은 MySQL 4.1의 버전이 필요할 것이다. 다만 4.1 alpha 버전만 제외하고, 어떤 버전이든 상관없다(4.1 이상으로). 여러분은 최신 버전을 원할 것이다. 만약 없다면, 이 기사를 읽어보고, 가서 mysql 공식 사이트에 가서 다운받자.

이 기사에 있는, 모든 여제는 world database을 이용할 것이다. 그것은 world.sql.gz으로 mysql 웹 사이트에서 사용할 수 있다.
http://www.mysql.com/get/Downloads/Manual/world.sql.gz/from/pick/

초 간단 예제

음. 처음 볼 것은 가능한한 가장 간결한 서브쿼리이다

SELECT (SELECT 1);

 +------------+
 | (SELECT 1)  |
 +------------+
 |          1     |
 +------------+

이것은 정말 간단하다.

SELECT (SELECT (SELECT 1));

 +---------------------+
 | (SELECT (SELECT 1))  |
 +---------------------+
 |                   1           |
 +---------------------+

어떤가? 그러나 별로 쓸모있진 않다.

보다 쓸모있는 예제
지금부터, 보다 효율적인 방법(JOINs같은)으로 될 수 있는 것들은 무시하자, 그리고 약간의 가능한 서브쿼리과 그 결과를 주목하자. 처음으로, 우리는 다른 방법의 개수가 되게 할수 있는 매우 간결한 쿼리를 볼 것이다.

SELECT name, headofstate
 FROM Country
 WHERE code=(SELECT "SWE");

 +--------+-----------------+
 | name   | headofstate          |
 +--------+-----------------+
 | Sweden | Carl XVI Gustaf     |
 +--------+-----------------+

그래, 나는 인정할 것이다. 그것은 별로 쓸모있지 않다. 가지말고 나와 함께 놀아죠.(Stay with me here!). 만약 여러분이 비슷한 쿼리를 시도한다면, 좀더 유용하게 시간을 써보자. 가장 인구가 많은 도시의 정보를 알아보자.
(population은 인구, head of state는 시장/대통령이라는 뜻)
SELECT name, headofstate, population
 FROM Country
 WHERE population=(SELECT MAX(population) FROM Country);

 +-------+-------------+------------+
 | name  | headofstate | population     |
 +-------+-------------+------------+
 | China | Jiang Zemin | 1277558000    |
 +-------+-------------+------------+

LIMIT를 왜 않쓰냐고?, 그러나 LIMIT는 MySQL-한정적이다, 그래서 다른 데이터베이스에 포터블한 해결책이 아니다. 그리고 항상 아주 정확한 결과가 되지 못한다. (ORDER BY와 LIMIT으로 하면, 만약 정확히 같고, 가장 인구가 높은 두 국가 중 하나만 선택(selete)된다. 위의 서브쿼리는 대부분의 데이터베이스에 호환성이 높다. 보다 복잡한 걸 해보자, 공식언어로 국가에 관한 정보이다.

테이블을 속여보자
FROM 절에서, 서브쿼리는 새로운 서브쿼리 지원하는 가장 유용한 특징중 하나이다. 특히, 그것은 쿼리의 FROM 부분에서 입력을 허락하게 되는 간결한 쿼리문이다. MySQL이 쿼리문을 처리할 때, 그것은 서브쿼리의 결과는 실제로는 다른 테이블이다. 처음에는 간결한 예제로 보자, 내 말을 보여주겠다.

SELECT foo
 FROM (SELECT 1 AS foo) AS tbl;

 +-----+
 | foo   |
 +-----+
 |   1   |
 +-----+

여러분들은 끝 부분을 주목할 것이다. 'FROM (SELECT 1 AS foo) AS tbl' 은 테이블의 목록을 찾기위한 입력이다. 여러분은 또한 내가 AS tbl로 서브쿼리(메인 쿼리 부분) 를 대응하는 것을 주목할 것이다. FROM 절에서, 모든 서브쿼리는 어떤 것이 모든 것이 대응할 것이다. 한편 여러분은 에러를 볼것이다. 모든 테이블은 이름이 있어야 하고 서브쿼리도 예외는 아니다.

만약 우리가 보다 어려운 (그러나 유용한) 예제로 옮긴다면, 우리는 서브쿼리의 힘을 보기시작할 것이다. 모든 국가에서 가장 많은 공식언어가 몇개인지 찾아보자.

/* 1 */
/* AS는 MAX()함수로 나온 값의 임시 필드명을 지정하는 것입니다. */
 SELECT MAX(tbl.nr) AS nr
 FROM
   (
     /* 2 */
     SELECT countrycode, COUNT(*) AS nr
     FROM CountryLanguage
     WHERE isofficial='T'
     GROUP BY countrycode
   ) AS tbl;

 +---------+
 | MAX(nr)   |
 +---------+
 |       4   |
 +---------+

다시, MySQL 전문가인 여러분들 중 몇몇은 ORDER BY 와 LIMIT로 찾았을 같은 결과를 주목할 지도 모른다. 다시, 필자는 서브쿼리 부분을 별명(alias)을 불러야 한다. 그리고 필자는 AS tbl을 선택했다. 서브쿼리 없이 쉽게 할 수 없는 것을 해보자: 공식언어의 최대 개수로 그의 국가에 대한 정보를 얻어보자.


/* 1 */
 SELECT name, population, headofstate, top.nr
 FROM
   Country,
   (
     /* 2 공식언어(official languages)의 개수에 기반한 국가 코드(country codes)를 비교한다.*/
     SELECT countrycode, COUNT(*) AS nr
     FROM CountryLanguage
     WHERE isofficial='T'
     GROUP BY countrycode
     HAVING nr=(
       /* 3 SELECT #4 번으로부터 nr_official_language의 최대크기를 알아낸다. */
       SELECT MAX(summary.nr_official_languages)
       FROM
         (
           /* 4 모든 국가와 각각의 공식언어(official languages)의 개수를 찾는다. */
           SELECT countrycode, COUNT(*) AS nr_official_languages
           /* CountryLanguage 테이블에서 */
           FROM CountryLanguage
           /* 공식언어가 있는 경우에만 */
           WHERE isofficial='T'
           /* countrycode 순서로 */
           GROUP BY countrycode
          /* 원래의 테이블 이름 AS 별칭으로 임시로 쓸 이름 */
         ) AS summary
       )
   ) as top
 WHERE Country.code=top.countrycode

 +--------------+------------+-------------+----+
 | name         | population | headofstate | nr         |
 +--------------+------------+-------------+----+
 | Switzerland  |    7160400 | Adolf Ogi   |  4          |
 | South Africa |   40377000 | Thabo Mbeki |  4       |
 +--------------+------------+-------------+----+

이 쿼리문은 간결하지 않다. 그것은 복잡한 결과를 얻기 위해 네개의 SELECT 구문으로 다른 부분으로 감쌌다. 필자는 /* 1 */ 이런 형식의 주석을 추가했다. 그래서 우리는 논리적으로 쿼리문은 분할할수 있다. 만약 우리는 숫자로 분리된 각 쿼리문을 보고, 역순으로, 이해하면 가장 쉽다.
(복잡한 서브쿼리문을 볼떄는 안에서 바깥으로 보면 쉽다는 얘기입니다)

4. 이 SELECT 문은 모든 국가와 각각의 공식언어(official languages)의 개수를 찾는다.
3. 이 SELECT 문은 SELECT #4 번으로부터 nr_official_language의 최대크기를 알아낸다. 동시에, 최대크기를 위해 countrycode 컬럼을 얻는 방법은 SQL-표준이 아니다.  
2. 이 SELECT에서, 우리는 공식언어(official languages)의 개수에 기반한 국가 코드(country codes)를 비교한다.
1. 마지막으로 우리는 매칭한(matching) 국가에 관해 국가정보(country information)를 찾기 위한 국가(country) 테이블에 기대어 JOIN을 사용할 수 있다.

필자는 여러분은 무언가를 배웠기를 희망한다. 그리고 필자는 서브쿼리에 관해 여러분 스스로 읽기를 바란다, 이 시리즈의 다음 기사는 Correlation, ANY, EXISTS를 논의할 것이다.

역자 한마디..
오류가 많으니 읽으시는 분들이 좀 주의해서 읽어 주시면 감사하겠습니다.

http://www.phpschool.com/ 에서 활동하고 계신 김영진님의 글입니다.
2006/11/29 12:34 2006/11/29 12:34
이 글에는 트랙백을 보낼 수 없습니다

아이덴티티(Identity : 2003)
다중인격(정신분열)을 소재로 하여, <와일드 씽>에서 선보였던 반전에 반전을 거듭하는 지능적인 범죄 스릴러물. 스토리가 대단히 매력적이다. 맨골드 감독 영화의 대부분과 <스크림> 시리즈를 제작했던 캐시 콘래드가 제작을 담당한 이 영화에는, 존 쿠색 외에 <나크(Narc)>에서 열연한 레이 리오타, <나인 야드>의 아만다 피트, <요람을 흔드는 손>의 레베카 디모나이 등이 공연하고 있다. 미국 개봉에선 2,733개 극장으로부터 1,623만불의 수입을 올리며 1위에 올랐다.
폭풍우가 몰아치던 어느날. 리무진 운전사(쿠색), 80년대 TV 스타(디모나이), 살인자(제이크 비지)를 수송중이던 경찰(리오타), 콜걸(피트) 등 서로 일면식이 없는 10명의 이방인들이 외딴 사막의 호텔로 모여든다. 시간이 지나면서 이들은 한 명씩 살해되고, 남아있는 이들은 서로를 의심하며 누가 살인범인지를 찾으려 애쓴다.
미국 개봉시 호러영화치고는 평론가들의 반응은 상당히 우수했다. 달라스 모닝 뉴스의 필립 원치는 "효과적이고, 매우 정교하게 만들어진 스릴러물."이라고 치켜세웠고, 시카고 선타임즈의 로저 이버트는 "내가 본 많은 영화들은 처음 3분의 2까지는 흥미진진하다가 마지막 3분의 1은 전형적인 결말을 나타내는 것들이었다. '아이덴티티'는 진기하게도, 처음 3분의 2는 전형적인 방식으로 진행되다가 마지막에 가서는 모든 것을 뒤집어 관객들이 지금까지 있었던 모든 일들을 다시 생각하게 만든다. 이 얼마나 단순하면서도 독창적인 방법인가?"라고 엄지손가락을 들어주었으며, LA 타임즈의 케빈 토마스는 "제임스 맨골드의 빈틈없는 연출력과 마이클 쿠니의 깊이있는 대본은 이 영화가 이탈하는 것을 방지한다."고 고개를 끄덕였다.
출연 :  존 쿠삭John Cusack(에드), 레이 리요타Ray Liotta(로디스),
       아만다 피트Amanda Peet(파리스) 

   







디 아더스 (The Others, 2001)

1950년대 영국의 외딴 대저택을 배경으로 펼쳐지는 심령 스릴러 영화로, <식스 센스>처럼 라스트의 반전에 핵심을 둔 작품. 니콜 키드만이 주연하고 그녀와 헤어진 전남편 톰 크루즈가 기획에 참여하여 두 부부가 마지막으로 함께 한 영화라는 점에서 영화 외적으로 화제가 되기도 했다. (크루즈와 키드만은 이 영화의 언론 시사회장에서 동석했으나 서로 피하는 눈치가 역력했다고 외신은 전한다.) 스페인 감독 알레한드로 아메나바르에겐 첫 영어권 영화로서, 그는 연출 뿐만 아니라 음악과 각본까지 담당했다. 니콜 키드먼과 아역 배우들의 연기가 훌륭하며, 미술과 무대 세트, 음향 효과 등 많은 부분이 수준급이다. 2001 제58회 베니스 국제영화제 경쟁부문 '베네치아 58' 초청, 2001 유럽 영화제 작품상 노미네이트. 원제는 '타인' 즉 '나 이외의 집안을 둘러싼 보이지 않는 존재'를 뜻하여 관객들로 하여금 이것을 추리하는 묘미를 갖게 한다.
2차대전이 종전된 직후, 1년전 남편이 전쟁에 참전한 뒤 아무런 소식이 없는 상태에서 그레이스(니콜 키드먼)는 그녀의 아픈 두 아이를 데리고 영국 남부해안의 아름다운 빅토리아풍 저택으로 이사한다. 햇빛 알레르기가 있는 그레이스의 아이들은 하루종일 어두운 집안에서 살아야 하고, 어쩔 수 없이 이들 가족은 외부와 단절된 시간을 보낸다. 하지만 그레이스의 딸이 유령과 대화하는 등, 그레이스 가족은 곧 이 집안에 자신들 외에 또 다른 존재가 있음을 느끼게 된다. 이들은 도대체 누구이고 그레이스 가족에게 무엇을 원하는가? 모든 것이 밝혀지는 라스트 10분. 충격적인 반전이 기다리고 있는데.

출연 :  니콜 키드먼Nicole Kidman(그레이스 스튜어트) , 피오눌라 플라나건 Fionnula Flanagan, 크리스토퍼 에클리스턴 Christopher Eccleston



   




메멘토 (Memento, 2000)

전직이 보험 수사관이었던 레너드에게 기억이란 없다. 자신의 아내가 강간당하고 살해되던 날의 충격으로 기억을 10분 이상 지속시키지 못하는 단기 기억상실증 환자가 되었던 것이다. 때문에 그가 마지막으로 기억하고 있는 것은 자신의 이름이 레너드 셸비 라는 것과 아내가 강간당하고 살해당했다는 것, 그리고 범인은 존 G 라는 것이 전부이다. 중요한 단서까지도 쉽게 잊고 마는 레너드는 자신의 가정을 파탄 낸 범인을 찾기 위한 방법으로 메모와 문신을 사용하게 된다. 즉, 묵고 있는 호텔, 갔던 장소, 만나는 사람과 그에 대한 정보를 폴라로이드 사진으로 남기고, 항상 메모를 해두며, 심지어 자신의 몸에 문신을 하며 기억을 더듬는 것이다.
하지만 시간이 지남에 따라 자신의 기억마저 변조되고 있음을 스스로도 알지 못한다. 그의 곁에는 '나탈리'라는 웨이트리스와 '테디'라는 직업을 알 수 없는 남자가 주위를 맴돌고 있다. 그들은 레너드를 잘 알고 있는 듯 하지만 레너드에게 그들은 언제나 새로운 인물이다.(그도 그럴 것이 레너드는 그들을 만났다는 것을 늘 잊고 만다.) 마약 조직의 오해를 받으면서까지 정보를 제공하는 나탈리는 테디가 범인임을 암시하는 단서를 보여주고, 테디는 절대 나탈리의 말을 믿지 말라는 조언을 한다. 과연 누구의 말이 진실인가?

출연 :  가이 피어스(레나드 쉘비), 캐리 앤 모스(나탈리), 조 판토리아노(테디 갬멜)


   



엑스텐션 (Switchblade Romance, Haute Tension, 2003)

고립된 대지 위에 선 외딴집. 메리가 친구 알렉스의 집을 방문한다. 도착 첫날 밤, 피에 굶주려 거리를 배회하던 의문의 남자가 집에 찾아오고 알렉스의 가족은 모두 살해된다. 알렉스를 데리고 어디론가 떠나는 살인마. 메리는 알렉스를 구하기 위해 그를 뒤따른다. 처절한 싸움 끝에 그를 죽이고, 알렉스를 구한 메리. 하지만, 알렉스는 미친 듯이 칼을 휘두르며 그녀를 거부한다.
"저리가, 니가 우리 가족을 죽였어!" 도대체, 누가 살인자인가? 두 소녀와 한 남자, 세 사람의 1:1 지능살인, 그 비밀은 무엇일까?



    







쏘우 (Saw, 2004)

어느 캄캄한 지하실. 자신들의 발목에 쇠줄이 묶인 채 마주하게 된 ‘아담’(리 웨넬)과 닥터 ‘고든’(캐리 엘위즈). 둘은 자신들이 왜 잡혀왔는지, 서로가 누군지조차 모르고 있다. 어떻게든 빠져나가려고 갖은 애를 써보지만 소용이 없다. 주머니 속에는 8시간 내에 고든이 아담을 죽이지 않으면 둘은 물론 고든의 부인과 딸까지 죽이겠다는 범인의 음성이 담긴 테이프가 들어 있을 뿐.
한편, 연쇄살인을 추적하던 ‘탭’형사(대니 글로버)는 닥터 ‘고든’을 범인으로 지목하고 그 뒤를 쫓는다. 범인의 윤곽은 좀처럼 드러나지 않고, 예정된 시간은 점점 가까워져 오는데..


    







식스 센스 (The Sixth Sense, 1999)
아동 심리학자 말콤 크로우(Malcolm Crowe: 브루스 윌리스 분)가 뛰어난 의사라는 칭송과 함께 상을 받고 부인 안나(올리비아 윌리암스 분)와 함께 자축을 하는 밤, 오래전에 치료를 받았던 환자가 미친 듯이 찾아와 말콤에게 총을 쏜 후 자살한다. 다음 해 가을, 닥터 크로우는 여덟살 난 콜 시어(Cole Sear: 할리 조엘 오스멘트 분)의 정신상담을 맡게 된다. 자신의 무성의한 치료에 앙심을 품고 총구를 겨눈 뒤 자살한 환자의 영혼을 달래주기 위하여 닥터 크로우는 정성을 다하여 콜의 상담 치료를 맡는다.
콜은 현재 정신적인 충격에 빠져있다. 그의 눈에 죽은 자들의 모습이 나타나기 때문이다. 문제는 죽은 자들이 나타났다가 그냥 사라지는 것이 아니라 자신들의 억울한 죽음에 대해 콜에게 뭔가를 호소한다는 점이다. 자살했던 환자의 증세와 비슷함을 감지한 말콤는 자신의 죄의식을 지워버리고자 소년에게 충실한 정성을 보이며 또 다른 비극을 막기 위하여 노력한다. 소년은 늘 우울하고 버림받은 듯한 모습으로 군인장난감을 가지고 놀면서 격한 그림과 글을 쓰고, 때로는 환영을 본다는가 묘한 소리를 들으므로 항상 위압당하는 곤혹을 표한다.
부모의 이혼으로 충격을 받은 것으로 말콤은 이해하려 하지만, 소년은 깊히 간직된 진실한 두려움의 원인을 말콤은 물론 엄마(토니 콜렛 분)에게도 밝히기를 꺼려한다. 치료과정이 심도를 더해 가면서 소년은 말콤을 신뢰하게 되고, 자신이 또 다른 감각을 지녔음을 그에게 알린다. 소년은 죽은 사람들을 볼 수 있을 뿐만 아니라 그들과 이야기를 할 수 있는 지각을 가진 것이다. 죽은 소녀가 나타나 토하면서 메시지를 전하고, 죽은 여인은 남편을 향해 소리지르는 듯이 콜에게 자신의 억울함을 털어놓는가 하면, 100년전 교수형에 처해졌던 가족의 처참한 모습이 소년에게 보이는 것이다. 말콤은 믿을 수 없는 사실에 의혹을 품으면서도 모든 수단을 이용하여 소년의 고난스러운 세계로 함께 파고든다.
한편 말콤은 개인적인 사생활의 위기도 맞는다. 그의 아내는 결혼식때 찍은 비디오만을 계속 보면서 과거 남편과의 즐거웠던 시절만을 그리며 생활할 뿐, 말콤과는 더 이상 대화를 하지 않고, 젊은 남자를 만나면서 외도를 범하는데.


   







유주얼 서스펙트 (The Usual Suspects, 1995)
산페드로 부두(San Pedro, California), 27명이 사망하고 9,100만달러가 증발하는 유혈극이 벌어진다. 수사관 데이브 쿠얀(Dave Koian: 채즈 팰민터리 분)은 유일한 생존자인 범죄자 버벌로부터 5인의 6주 동안의 범죄 행각에 대한 진술을 들으며 영화는 교차 진행된다.
6주전, 범죄 전문가 5명이 총기트럭 탈취 혐의에 대한 용의자들로 경찰에 불려온다. 그들은 키튼(Keaton: 가브리엘 바이른 분), 타드 하크, 절름발이 버벌(Verbal: 케빈 스페이시 분), 맥마이너스(McManus: 스테판 볼드윈 분), 펜스터(Fenster: 베니치오 델 토로 분)로서, 유치장에서 하루밤을 보내면서 의기투합, 범죄를 모의한다. '뉴욕 제일 택시회사'가 부패한 뉴욕 경찰들과 결탁, 밀수품과 마약을 전국에 운송해주고 있는데, 에메랄드 밀수업자 남미인을 태운 택시를 강탈한 뒤 이를 언론에 유출하여 부패한 경찰들만 체포되고 만다. 5명은 물건을 장물아비인 레드풋 일당과 거래하는데, 그들에게서 정보를 얻어 보석상 사울을 지하 주차장에서 털게 되는데, 이 과정에서 버벌이 사울을 죽이고 만다. 이때 이들은 턴 가방에는 돈과 보석이 아닌 마약이 있자 화가 나 레드풋 일당을 찾아간다. 레드풋은 자신도 어떤 다른 사람의 지시를 받았다고 하는 것인데.
한편 이들 앞에 코바야시(Kobayashi: 피트 포스틀스웨이트 분)라가 자가 나타나 자신의 보스가 전설과도 같은 무시무시한 지하 범죄 조직의 두목 카이저 소제(Keyser)라며 그가 키튼 일행을 고용하겠다는 제안을 해 온다. 그는 키튼 일행 5명의 범죄 행로를 모두 알고 이를 미끼로 삼고자하는데, 이에 분노한 펜스터가 소제에게 살해된다. 보복을 위해 4명은 코바야시를 미행하여 소제라는 자가 있는 빌딩으로 잠입한다. 하지만 키튼은 이미 카이저 소제가 여류변호사인 자신의 애인 이디 피너란(Edie Finneran: 수지 에이미스 분)에게 일을 의뢰하여 인질로 삼고 있었고 결국 카이저 소제가 원하는 대로 일을 하게 된다. 그것은 산페드로 부두에서 9천만불 상당의 마약을 거래하게 될 아르헨티나 조직을 치고 선적된 마약을 빼앗아오는 것이었다. 키튼 일행이 마약 조직을 덮쳤을 땐 마약은 없었고 일행 타드 하크와 맥 마이너 마저 죽고 만다. 그리고 마침내 키튼 앞에 카이저가 나타나 죽음을 당했다는 것이 버벌의 진술이었는데..


   

2006/11/15 20:40 2006/11/15 20:40
이 글에는 트랙백을 보낼 수 없습니다

SSH 기타 세팅 및 scp, sftp 사용


SSH 기타 세팅 및 scp, sftp 사용에대해 알아보자

특정 사용자 및 그룹의 로그인 제한

]# man sshd
AllowGroups
            This keyword can be followed by a list of group name patterns, separated by spaces.  
            If specified, login is allowed only for users whose primary group or supplementary group
            list matches one of the patterns.  `*' and `'?  can be used as wildcards in the patterns.  
            Only group names are valid; a numerical group ID is not recognized.  
             By default, login is allowed for all groups.
            (지정된 그룹에 포함된 사용자만이 SSH 로그인을 할 수 있다.
             그룹명은 공백으로 구분하여 와일드 문자(*, ?)를 사용 할 수 있다.)

AllowUsers
            This keyword can be followed by a list of user name patterns, separated by spaces.  If specified,
            login is allowed only for users names that match one of the patterns.  `*' and `'?  can be
            used as wildcards in the patterns.  Only user names are valid; a numerical user ID is not
            recognized.  By default, login is allowed for all users.  If the pattern takes the form USER@HOST
            then USER and HOST are separately checked, restricting logins to particular users from particular
            hosts. (지정된 사용자만이 SSH 로그인을 할 수있다.. 사용법은 AllowGroups과 같다.)

DenyGroups
            This keyword can be followed by a list of group name patterns, separated by spaces.  Login is
            disallowed for users whose primary group or supplementary group list matches one of the
            patterns. `*' and `'?  can be used as wildcards in the patterns.  Only group names are valid; a
            numerical group ID is not recognized. By default, login is allowed for all groups.
            (지정된 그룹에 대한 로그인을 거부한다.)

DenyUsers
            This keyword can be followed by a list of user name patterns, separated by spaces.  Login is
            disallowed for user names that match one of the patterns.  `*' and `'?  can be used as wildcards
            in the patterns.  Only user names are valid; a numerical user ID is not recognized.  By default,
            login is allowed for all users. If the pattern takes the form USER@HOST then USER and HOST are
            separately checked, restricting logins to particular users from particular hosts.
            (지정된 사용자에 대한 로그인을 거부한다.)

6. 원격지 호스트로의 로그인


[in4mania@ilinuxbay in4mania]$ ssh in4mania@192.168.1.154
in4mania@192.168.1.154's password:
Last login: Sun Sep  7 18:36:21 2003 from ns.ilinuxbay.net

7. Allowusers, Denyusers 옵션을 적용한 원격지 로그인 실습
/etc/ssh/sshd_config 파일에 Allowusers와 Denyusers 두개의 옵션을 이용해 각각의 유저를 추가 한 후
원격지에서 ssh 서버에 접근이 가능한지 테스트 해본다.

8. scp 사용법
scp는 자신의 컴퓨터에서 원격의 컴퓨터로 또는 원격의 컴퓨터에서 자신의 컴퓨터로 간단하게
파일을 전송할 수 있는 프로그램이다.
다음은 현재 디렉토리에 있는 sshd.txt 라는 파일을 IP가 192.168.1.154 인 컴퓨터에 root 라는 계정으로
접속하여 /usr/local/src/ 디렉토리 밑에 복사해 넣는 명령이다.


[root@in4nux root]# scp ./sshd.txt root@192.168.1.154:/usr/local/src/

다음은 IP가 192.168.1.154 인 컴퓨터에 root 라는 계정으로 접속하여 /usr/local/src/ 디렉토리 밑에 있는
sshd.txt 라는 이름의 파일을 자신의 컴퓨터로 현재 위치한 디렉토리에 복사하는 명령이다.


[root@in4nux root]# scp root@192.168.1.154:/usr/local/src/sshd.txt ./

9. sftp 사용법

sftp는 대화식의 파일전송 프로그램으로 ftp와 비슷하며, 모든 작동은 암호화된 ssh 전송상에서 실행이 된다.


[root@in4nux ssh]# sftp in4mania@192.168.1.152
Connecting to 192.168.1.152...
in4mania@192.168.1.152's password:
sftp>

10. 윈도우용 ssh
http://www.ssh.com => download => Evaluation Versions => SSH Secure Shell for Workstations

2006/11/14 13:48 2006/11/14 13:48
이 글에는 트랙백을 보낼 수 없습니다


많이 빨라졌습니다.
2006/11/13 18:49 2006/11/13 18:49
이 글에는 트랙백을 보낼 수 없습니다

-

이 테스트는 미국의 ULLA ZANG 이라는 한국계 미국인에 의해 개발된 것으로, 색깔과 형태등은 여러해에 걸쳐 전 세계인을 대상으로 테스트 되었습니다. 이 그림들은 9가지의 기본적인 성격 유형을 나타냅니다.

그럼 지금부터 위의 그림에서 제일 눈길이 가는 그림을 하나 고르세요.


1.내성적 (Introspective) 민감 (Sensitive) 사려가 깊은 (Harmonious)
당신은 당신 자신과 당신의 환경에 대해 대부분의 다른 사람들에 비해 보다 많이 고민하는 편입니다. 당신은 피상적인 것을 싫어해서 다른 사람과 이런 저런 잡담을 하기보다는 차라리 혼자 있기를 좋아합니다. 친구를 매우 주의 깊게 사귀는데 이로 인해 당신은 내적 평화와 안정감을 얻습니다. 그렇지만 당신은 아무리 오래 혼자 있더라도 조금도 지루함을 느끼지는 않는 성격입니다.

-----------------------------------------------------------------------
2.독립 (Independent) 얽매이지 않음 (Unconventional) 속박을 싫어함( Unfettered)
당신은 당신 스스로 자신의 인생행로를 선택할 수 있게끔 자유롭고 얽매이지 않길 바랍니다. 당신은 직장생활 또는 여가활동 심지어는 공부까지도 예술가적인 성향을 나타냅니다. 당신이 가지고 있는 자유에 대한 열망으로 인해 당신은 때때로 주위 사람들이 바라는 것과 정반대의 행동을 하기도 합니다. 당신의 라이프 스타일은 매우 개성적이기 때문에 유행을 무조건 모방하진 않습니다. 반면, 당신은 비록 대세를 거스르는 일이 있더라도 당신 스스로의 생각과 신념에 의해 행동하길 바랍니다.

-----------------------------------------------------------------------
3.역동적 (Dynamic) 활동적 (Active) 외향적 (Extroverted)
당신은 재미를 느끼고 다양한 경험을 하기 위해서는 다소의 위험을 감수하고서라도 그 일에 빠져들기를 서슴지 않는 사람입니다. 일상적인 것은 당신에게 무미건조한 것에 지나지 않습니다. 당신은 무슨 일이든지 주도적으로 하길 좋아하고 그렇게 할 때 당신의 진취적인 성격은 더욱 빛을 발합니다.

-----------------------------------------------------------------------
4.현실적 (Down to Earth) 편파적이지 않음  (Well-Balanced) 남과 잘 어울림 (Harmonious)
당신은 이상보다도 일상생활에 비중을 두고 있으며 사랑도 복잡하게 얽히고 섥히는 것보다는 평범한 사랑을 추구합니다. 당신은 모든 문제를 현실적인 바탕위에서 생각하기 때문에 당신 친구들은 당신으로부터 현실감각을 느끼는 것은 물론 여유로움 또한 느끼게 됩니다. 따라서 당신은 주위사람들로부터 따뜻하고 인간적인 사람으로 인정받고 있습니다. 또한 화려한 것과 진부한 것 모두 싫어하기 때문에 변덕스럽게 변하는 유행을 회의적인 시각으로 바라보며 옷입는 것 역시 실용적이면서도 단정하고 품위있게 입기를 좋아하는 타입입니다.

-----------------------------------------------------------------------
5.프로기질 (Professional) 실용주의적 (Pragmatic) 자기 만족적 (Self-Assured)
당신은 그 누구보다도 당신 자신을 믿으며 우연한 행운보다는 당신이 스스로 한 행위를 더 믿습니다. 당신은 당신에게 주어진 일을 현실적이면서도 단순한 방법으로 해결합니다. 즉 일상생활속에서 당신의 생활 태도는 매우 실용주의적인 관점을 유지합니다. 이런 이유로 사람들은 당신을 의지할만한 사람으로 평가하기도 합니다. 그러다 보면 본의아니게 해야할 일이 많아질 때도 있습니다. 이러한 당신의 의지는 매우 단호하기 때문에 다른 사람들이 당신을 자신에 대한 신뢰가 강한 사람으로 평가하는 일도 있습니다. 또한 당신은 당신이 생각했던 것이  현실화되기 전까지는 좀체 만족하려 들지 않는 성격입니다.

-----------------------------------------------------------------------
6.평온 (Peaceful) 신중 (Discreet) 온순 (Non-Aggressive)
당신은 태평스러우면서도 매사에 사려가 깊은 사람입니다. 그리고 당신은 친구를 사귀는데 별 어려움을 느끼지 않으면서도 프라이버시를 즐기며 자유를 누립니다. 당신은 모든것으로부터 한발짝 떨어져 인생의 의미를 심사숙고해보기도 하지만 인생 자체를 즐기기도 합니다. 당신은 삶의 여유를 추구하기 위해 당신만의 은신처로 도피하기도 하지만 당신은 결코 외로운 사람은 아닙니다. 당신 자신과 세상은 평화롭게 공존하며 이 세상이 당신에게 주는 혜택에 감사하며 당신 자신의 삶을 사랑하며 살고 있습니다.

-----------------------------------------------------------------------
7.낙천적 (Carefree)  놀기 좋아함 (Playful)  쾌활 (Cheerful)
당신은 자유롭고 충동적으로 살기를 좋아합니다. 그리고 당신은 "인생의 단 한번뿐" 이라는 좌우명에 따라 최대한 인생을 즐기려 합니다. 당신은 매우 호기심이 많아 새로운 것이면 무조건 개방적입니다. 물론 지루한 것은 아주 질색입니다. 따라서 당신은 주위 환경으로부터 매우 다양한 경험을 할 뿐아니라 뜻밖의 일들도 즐깁니다.
-----------------------------------------------------------------------

8.낭만적 (Romantic) 몽상가적 기질 (Dreamy)  감성적 (Emotional)
당신은 매우 감정이 풍부한 사람입니다. 당신은 사물은 냉정하고 이상적인 관점에서 보기를 싫어하며 당신이 느끼는 감정에 따라 생각하고 행동합니다. 또한 당신은 인생을 살아가면서 꿈을 잃지 않는 것을 매우 중요하게 생각합니다. 따라서 당신은 인간의 낭만을 배척하고 오직 이성에 의해서먼 살아가야한다고 생각하는 사람들을 싫어합니다. 당신은 당신의 다양한 기분과 풍부한 감정을 한두마디로 정의하는 어떠한 시도도 거부합니다.

-----------------------------------------------------------------------

9.분석적 (Analytic)  믿음 (Trustworthy)  자기 만족적 (Self-Assured)
당신의 끊임없는 감수성은 지속적이면서도 가치있는 무언가를 추구하고 있다는 것을 나타냅니다. 다시 말해 당신은 다른 사람들이 별 흥미를 보이지 않는 자신만의 작은 '보석'들에 둘러싸여 있기를 좋아합니다. 그래서 당신은 자신만의 독특한 행동방식과 가치관에 따라 행동합니다. 당신은 변덕이 심한 유행과는 상관없이 스스로 개발한 자신만의 고상한 행동방식을 갖고 있습니다. 당신이 당신의 인생의 토대로 두고 있는 이상은 자신만의 행동양식에서 오는 즐거움입니다. 당신은 당신이 사귀고 있는 사람들을 문화적인 수준이 어느 정도인가 하는 기준으로 평가합니다.

2006/11/13 10:24 2006/11/13 10:24
이 글에는 트랙백을 보낼 수 없습니다
HTML  2006/11/03 15:49

iframe 태그 속성


1. src

  IFRAME 에 들어갈 파일의 주소(URL)를 입력
  예) src=http://cafe.naver.com/swingme.cafe

2. width, height

  IFRAME 창의 가로, 세로의 길이를 결정하는 요소

  숫자를 입력해야 하며, 단위는 픽셀(Pixel)

  예) width="500", height="600"


3. align

  IFRAME 을 페이지안에 추가할때 좌,우,중앙 정렬을 어떻게 할것이지 결정

  화면왼쪽은 left, 오른쪽은 rignt, 중앙은 center

  예) align="left"


4. frameborder

  웹 페이지안에 iframe 을 추가할때 iframe 의 테두리선을 보이게 할것인지 아닌지를 결정

  보이게 할려면 1 또는 yes, 안보이게 할려면 0 또는 no

  예) frameborder="0"


5. scrolling

  IFRAME 내부에 상하스크롤을 나타나게 할 것인지 아닌지를 결정

  'Yes' 라고 하면 페이지 내용의 많고 적음에 상관없이 스크롤이 생기고,
  'No' 라고 하면 무조건 스크롤이 생기지 않음
  'Auto' 로 설정하면 내용에 따라 자동으로 스크롤의 생성 여부를 결정


6. name

  IFRAME 도 FRAME 이기 때문에 FRAME 에서 사용하는 NAME 속성이 존재한다.
  그래서 만약 IFRAME 의 NAME 을 "swingme" 이라고 설정한 후,
  다른 프레임의 하이퍼링크에서 TARGET="swingme" 와 같이 설정한다면
  이 링크를 눌렀을 때 IFRAME 안에 있는 페이지가 링크를 따라 이동하게 된다.


7. marginwidth, marginheight

  이 기능은 IFRAME 내부 페이지의 간격(여백)을 설정
  즉, IFRAME 의 테두리와 내부 페이지 내용 사이에 어느 정도의 간격을 둘 것인가를 설정
  숫자가 클 수록 테두리와 내용 사이의 거리는 멀어지게 되고, 숫자가 작을 수록 내용이

   테두리와 가까워짐

  예) marginwidth="10", marginheight="5"


8. allowtransparency

  iframe 은 다른 페이지의 내부에 입력되므로 해당 페이지의 디자인 또는 색상에

  영향을 받는다.

  즉, swingme.html 페이지의 배경색상이 파랑 이라면 iframe 의 배경색도 파랑색으로 된다.


  예를 들자면 하나의 iframe 을 a.html 과 b.html 에 삽입할때

  a.html 은 배경색이 파랑, b.html 은 배경색이 빨강일 경우 어떻게 될까?

  이럴때 유용하게 사용하는 속성이 바로 allowtransparency 속성이다.

  이 속성은 현재 iframe 페이지의 배경색을 투명하게 만들어주는 속성으로

  a.html 에 넣으면 파랑으로 b.html 에 넣으면 빨강으로 보여지게 된다.

  ( 참고로 이 속성은 Internet Explorer 5.5 버전 이상부터 지원 )

  아이프레임으로 불러올 문서의 배경색을 우선
  bgcolor="transparent" 로 해주세요~
  그리고 아이프레임을 삽입하실때 아래처럼 적어주세요~
  <
iframe src="불러올 문서주소"   allowTransparency="true">

9. hspace, vspace

  가로,세로 여백을 정함


예)

<iframe src="http://cafe.naver.com/swingme.cafe" frameborder="no" width="565" height="800"

align="left" scrolling="no"></iframe>

<IFRAME language=javascript dataFld=dataField class=blue lang=ko id=iframeId dir=ltr title="iframe 제목" style="BORDER-RIGHT: blue 1px dotted; BORDER-TOP: blue 1px dotted; BEHAVIOR: url(../public/hilite.htc); BORDER-LEFT: blue 1px dotted; BORDER-BOTTOM: blue 1px dotted" dataSrc=dataUrl border=1 name=iframeName align=center marginWidth=0 marginHeight=0 src="http://trio.co.kr/club/public/clock.html" frameBorder=0 width=114 scrolling=no longDesc="IFRAME 설명을 위한 예제" height=25 cite="iframecite" hasMedia="false" timeContainer="none" systemLanguage="ko" systemCaptions="on" systemBitrate="5000" label="iframelabel" blockDirection="ltr" end="99" begin="0"><span>자식 SPAN 안보임</span></IFRAME>

2006/11/03 15:49 2006/11/03 15:49
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2025/04   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)