Technical Note/IT TREND

메인 PC가 맥으로 바뀐지 오래되었는데도

사용하는 단축키만 사용하게 되네... 


맥북 단축키 정리된 자료입니다. 맥북 키보드의 기능키와 단축키를 알아두면 편리합니다.


⌘(Cmd) : 스페이스바 옆의 커맨드키입니다. 주로 단축키 조합에 많이 쓰이며, 윈도우즈에서 쓰던 컨트롤키 대신 사용하면 많은 부분에서 대응이 됩니다.

⌥(Opt) : 옵션키(option)입니다.

⌃(Ctrl) : 컨트롤키입니다.

↩(return) : 리턴키입니다.

⇧(Shift) : 시프트키입니다.

⌫(Delete) : 딜리트키입니다.

⎋(esc) : 이스케이프키(escape)키입니다.

⏏(eject) : 미디어 추출키입니다.



1. 시동할 때 (시동 할 때 계속 누르고 있어야 합니다.)


[C] : CD로 시동

[D] : 첫번째 파티션으로 시동

[N] : 네트워크 서버로 시동

[T] : 맥을 파이어와이어 타겟 디스크 모드로 설정

[Shift] : 시작 아이템이 열리는 것을 방지

[Opt] : 모든 시동 디스크의 아이콘을 보여주며, 시동 디스크를 선택할 수 있음


[Cmd]+[Opt] + [Del] : 외장 드라이브로 시동

[Cmd]+[Opt]+[P]+[R] : PRAM (Parameter RAM)을 억제

[Cmd]+[Opt]+[O]+[F] : 열려 있는 펌웨어를 스크린에 보여줌

[Cmd]+[V] : 시동되는 동안 Unix 콘솔 메시지를 보여줌

[Cmd]+[S] : 1 사용자 모드로 시동

[마우스 버튼] : 안 나오는 CD/DVD를 추출

[Shift] (시동 후) : 커넬 확장자 (kernel extensions)를 끔

[Shift] (로그인 후) : 파인더와 시작 아이템이 열리는 것을 방지




2. 파인더 사용 시


[Cmd]+[W] : 활성화된 파인더 윈도우를 닫음

[Cmd]+[Q] : 활성화된 프로그램을 종료window에서 Alt+f4와 같음

[Cmd]+[Opt] + [W] : 모든 파인더 윈도우를 닫음

[오른쪽 방향키] : 목록 보기에서 선택된 폴더를 확장

[왼쪽 방향키] : 목록 보기에서 선택된 폴더를 축소

[Opt]+[오른쪽 방향키] : 목록 보기에서 선택된 폴더와 그 안의 모든 폴더를 확장

[Opt]+[왼쪽 방향키] : 목록 보기에서 선택된 폴더와 그 안의 모든 폴더를 축소

[Cmd]+[위 방향키] : 기본 파인더를 열음

[Cmd]+[Opt]+[Shift] + [위 방향키] : 데스크탑을 선택

[Cmd]+[아래 방향키] : 선택된 아이콘을 열음

[Cmd]+[Sift]+[A] : /Application 폴더열기 맥에서 이폴더는 윈도우에서 프로그램 폴더와 유사함. 많이쓰입니다.

[Cmd]+[Sift]+[U] : Utilly 폴더를 열기 

[Tab] : 알파벳 순으로 다음 아이콘 선택

[Shift]+[Tab] : 알파벳 순으로 이전 아이콘 선택

[Cmd]+[Del] : 선택된 아이콘을 휴지통으로 옮김 | 레퍼드에선 Cmd --> Opt

[Cmd]+[Sift] + [Del] : 휴지통 비우기 |레퍼드에선 Cmd --> Opt

[스페이스] : 훑어보기

[Opt] (CD를 삽입할 때) : 각 세션을 각각의 아이콘으로 보여줌




3. 전원키


[Ctrl]+[Cmd]+[eject] : 강제 재시동

[Ctrl]+[Opt]+[Cmd]+[eject] : 종료

[Opt]+[Cmd]+[eject] : 잠자기



4. 프로그램을 사용할 때


[Cmd]+[Tab] : 최근에 사용한 열려있는 프로그램을 앞뒤로 선택함

[Cmd]+[Tab] (Cmd를 누른 상태에서) : Tab을 누를 때마다 열려있는 프로그램을 Dock에 있는 순서대로 선택함

[Cmd]+[Shift] (Cmd를 누른 상태에서) : Shift를 누를 때마다 열려있는 프로그램을 Dock에 있는 반대 순서대로 선택함

[Cmd]+[~] : 프로그램 내에서 다음 윈도우를 선택함

[Opt]+[Cmd]+[Esc] : "강제 종료" 대회창 열림

[Shift]+[Cmd]+[3] : 데스크탑에 현재 스크린 이미지를 png 파일로 캡쳐함

[Shift]+[Cmd]+[4] : 타겟 모양을 생성, 원하는 스크린 이미지를 드래그해서 캡쳐할 수 있음

[Cmd]+[스페이스] : 키보드 언어 전환(한/영전환)


[Opt]+"Empty Trash" : "확인" 대화창 없이 휴지통을 비움

[Opt]+Dock아이콘/윈도우 클릭 : 이 프로그램을 선택하고 이전 프로그램을 숨김

[Cmd]+[Opt]+[드래그] : 파인더 윈도우에서 아무 방향으로 스크롤할 수 있음

[Cmd]+[드래그] : 메뉴렛이나 툴바 아이콘을 재정리/삭제

[Cmd]+윈도우 제목 클릭 : 팝업 메뉴가 열리면서 그 폴더의 경로를 보여줌

[Opt]+Zoom 버튼 클릭 : 윈도우를 전체 화면으로 확대

[Opt]+Minimize 버튼 클릭 : 모든 파인더 윈도우를 최소화

[Opt]+Close 버튼 클릭 : 모든 파인더 윈도우를 닫음

[Shift]+Minimize/Close 버튼 클릭 :느린 동작으로 윈도우를 최소화/닫음


[Cmd]+[Opt]+[D] : Dock을 숨김/보여줌

[Cmd]+Dock 아이콘 클릭 : 파인더에 있는 실제 아이콘이 나타남

[Cmd]+[Opt]+Dock 아이콘 클릭 : 이 프로그램을 선택하고 나머지 프로그램들은 모두 숨김

[Ctrl]+Dock 아이콘 클릭 : 프로그램의 환경 메뉴를 열음

[Cmd]+아이콘을 Dock 아이콘으로 드래그 : Dock 아이콘이 움직이는 것을 방지해서 아이콘을 그 사이에 드랍할 수 있음

[Cmd]+[Opt]+아이콘을 Dock으로 드래그 : 드랍하는 아이콘을 바로 열게 함

[Cmd]+[Opt]+ 8 :화면을 확대 모드로 토글합니다. 

[Cmd]+[Opt]+ +/- :화면을 확대모드로 토글되상태에서 +/-를 누르면 마우스 포인터의 위치에서 확대되거나 축소됩니다. ([Ctrl]+마우스 휠 동작과 동일함)

[Cmd]+[Ctrl]+[Opt]+8 : 화면의 색상을 반전 시킵니다. 반저된 사진을 볼때 유용합니다.

Technical Note/etc

vi를 자주 사용하지만

항상 사용하는 단축키만 사용해서.. 이번기회에 다시 정리해본다


Terminal 설정 

% vi 라고 입력했을 때 에러(error)가 나는 경우 

csh(C Shell) : .login file에 setenv TERM vt100 

sh(Bourne Shell) : .profile file에 TERM=vt100; export TERM


Mode 

명령 모드 : 명령을 입력할 수 있는 모드 

입력 모드 : ‘I’를 입력하여 입력이 가능한 모드 

vi를 이용한 문서 작성 

% vi [작성할 file name] 

커서의 이동 

문자 단위의 이동 

대부분의 터미널에서는 화살표키로 이동 가능 

만약 화살표카가 지원되지 않는 경우는 다음의 키를 이용 

 

줄단위의 이동 

n : 현재 행으로부터 n번째 행으로 이동 

+ : 다음 행의 처음으로 이동 

- : 이전 행의 처음으로 이동 

단어, 문장 절 단위이동 

f 문자 : 다음에 나타나는 “문자”로 이동 

F 문자 : 이전에 나타나는 “문자”로 이동 

( : 문장의 처음으로 이동 

) : 문장의 끝으로 이동 

; : 같은 방향으로 다음 “문자”로 이동 

{ : 커서가 인접한 패러그래프의 시작위치로 이동 

} : 커서가 인접한 이전 패러그래프의 시작위치로 이동 

화면 단위 이동 

^B : 이전 화면으로 이동 

^F : 다음 화면으로 이동 

^U : 반화면 앞으로 이동 

^D : 반화면 뒤로 이동 

z :커서의 위치를 화면의 Top으로 스크롤 

z. : 커서의 위치를 화면의 중앙으로 스크롤 

z- : 커서의 위치를 화면의 bottom으로 스크롤 

^L : 화면의 재 출력


삽입과 지우기, 복구, 교체 

삽입 

i : 현재 커서의 위치부터 삽입 

a : 현재 커서의 위치 다음부터 추가 시작 

A : 현재 줄의 마지막에 추가 시작 

I : 현재 줄의 처음에 추가 시작 

o : 현재 라인의 아래에 새로운 라인을 열어준다. 

O : 현재 라인의 위에 새로운 라인을 열어준다. 

지우기 

x : 커서 위치의 한 문자를 지운다. 

X : 커서 이전의 한 문자를 지운다. 

dd : 현재의 행을 지운다. 

ndd : n개의 라인을 지운다. 

dG : 현재 행부터 file의 끝까지 지운다 

d0(숫자 0) : 행의 시작부터 현재 앞 문자까지 지운다. 

d1G : 현재 행부터 file의 시작까지 지운다. 

dnG : 현재 행에서 n번째까지 지운다. 

복구 

p : 버퍼의 내용을 현재 줄 이전에 복구한다. 

P : 버퍼의 내용을 현재 줄 다음에 복구한다. 

VI -r [작업하던 file name] : 시스템이 갑자기 꺼졌을 때 복구 명령 

교체 

cw : 현재 위치에서 단어 교체 

cfc : 현재 위치에서 'c' 문자까지 변경 

' . ' : VI에서 마지막 명령을 반복하라는 뜻이다.


검색 치환 

검색 

/문자열 : 문자열을 앞으로 검색한다. 

?문자열 : 문자열을 뒤로 검색한다.


치환 

[범위]s/old/new/[cgi] : old를 new로 치환해 준다. 

[범위] : 숫자, $, .(현재 위치)등을 지정한다. 

[cgi] : c는 변경시 변경여부를 묻는 플래그 

g는 한 줄의 모든 것을 변경하는 것이고 I 는 검색시 대소문자를 구분하지 않는다. 

예) 10,$s/old/new/g : 10줄에서 파일의 끝까지 수행 

g/foobar/s/bar/baz/g : 전체 file에서 “foobar”를 찾아서 “foobar” 중 bar를 baz로 치환한다.

 

블록 명령 

블록을 file에 저장, 첨가 

명령모드 ":" 프롬프트 상에서 

: 10,20w [file name] : 블록을 file에 저장 

: 10,20w >> [file name] : 블록을 file에 추가


블록 읽어 오기 

: 10,20r [file name] : 10에서 20까지에 file을 읽어 현재 줄에 삽입


블록 자르기 

여러분이 수정을 하거나 삭제를 하면 버퍼에 그 내용을 복사를 합니다. 여기서 필요한 부분을 버퍼에 복사하는 것을 yank 라 합니다. 이 내용을 나중에 다시 불러와서 사용할 수 있습니다. 

buffer에도 이름을 부여하여 블록을 저장할 수 있습니다. ( " 사용) 

"name5dd : 현재 줄에서 5줄을 삭제하고 name으로(여러분이 부여한) 버퍼에 기록


블록 복사 

yw : 한 단어 버퍼에 기록 

y$ : 줄의 끝까지 기록 

yy : 현재 줄을 버퍼에 기록 

역시 name을 주어 buffer에 기록 할 수 있다.


블록 붙이기 

커서를 원하는 곳으로 이동한 후 

p : 현재 커서 위치 오른쪽에 추가한다. 

P : 현재 커서 위치 왼쪽에 추가한다. 

namep : buffer에 있는 name의 블록을 현재 위치에 추가


다른 file 편집 

% vi file file file file ...... 

다른 file로 이동할 때는 : 프롬프트 상에서 :n 이라 입력한다. 

: shell 이라 치면 VI를 종료하지 않고 shell 화면으로 나갈 수 있다. 

다시 VI로 이동할 때는 exit라 입력한다.


VI 환경 설정 

VI에도 환경을 설정할 수 있습니다. 

Vi 상태에서 :set all을 입력하면 현재 사용중인 VI의 옵션 지정상태를 볼 수 있습니다. 

이러한 옵션은 여러분의 HOME DIRECTORY에 .exrc란 file에 지정하지 않으면 디폴트값을 사용합니다. 

다음은 현재 저자의 .exrc 의 내용입니다. 

 

VI 중요한 옵션 옵션

 약자

 Default Value

 의미

 

autoindent ai noai 자동 들여쓰기, 즉 바로 전의 행과 시작을 같이함 

ignorecase ic noic 탐색에 있어 대소문자를 구별하지 않음 

magic   magic * [ ~ 등을 탐색 또는 정규 표현식의 와일드 카드로 또는 메타문자로 사용 

numver nu nonu 에디터 각 행에 행번호가 매겨짐 

redraw   noredraw 각 문자를 항상 알맞은 위치에 나타내 줌

noredraw은 1200보울 이하의 느린 터미널에 쓰임 

tabstap ts ts=8 Tab키 또는 Ctrl-I에 대응되는 공백의 개수 저장 

wrapscan ws ws / 또는 ? 연산자로 탐색을 하는 경우 사용됨 

wrapmargin wm ws=0 오른쪽 여백의 크기를지정

 명령모드 ( ! 대소문자 철저히 구별 ! )

* 커서 이동 하기 *

  

좌화살표키

  커서를 한 위치 앞으로 이동

  w

  커서를 다음 단어의 첫번째 문자로 이동

  

우화살표키

  커서를 한 위치 뒤로 이동

  ]]

  커서를 다음 단락 경계로 이동

  

상화살표키

  커서를 한 위치 위로 이동

  [[

  커서를 이전 단락 경계로 이동

  

하화살표키

  커서를 한 위치 아래로 이동

  )

  커서를 다음 문장의 앞으로 이동

  

-

  커서를 앞 라인 시작위치로 이동

  (

  커서를 다음 문장의 앞으로 이동

  

+

  커서를 다음 라인 시작위치로 이동

  }

  커서를 다음 절의 앞으로 이동

  

0(영)

  커서를 현재 라인의 시작위치로 이동

  {

  커서를 이전 절의 앞으로 이동

  

$

  커서를 현재 라인의 끝으로 이동

  H

  커서를 편집버퍼의 첫번째 라인으로 이동

  

^

  커서를 현재 라인의 탭으로 이동

  L

  커서를 편집버퍼의 마지막 라인으로 이동

  

b

  커서를 이전 단어의 처음 문자로 이동

  M

  커서를 편집버퍼의 중간 라인으로 이동

  

e

  커서를 다음 단어의 마지막 문자로 이동

   

   

  

* 편집버퍼를 통해 이동하기 *

  

ctrl B

  한 화면 위로 이동

  nG

  n 번째 라인으로 이동

  

ctrl D

  반 화면 아래로 이동

  1G

  첫번째 라인으로 이동

  

ctrl F

  한 화면 아래로 이동

  G

  마지막 라인으로 이동

  

ctrl U

  한 화면 위로 이동

   

   

 

 

* vi 편집 명령 1 *

  

~

  활자체를 변경한다

  dd

  현재 라인을 삭제한다

  

move

  새 텍스트를 삽입하여 커서 위치에서  대치한다

  :line

  지정된 라인의 시작으로 간다

  

cc

  새 텍스트를 삽입하여 라인 전체를 대치한다

  :lined

  지정된 라인을 삭제한다

  

C

  새 텍스트를 라인 끝에 대치한다

  D

  커서에서 행끝까지 삭제

  

ddp

  두 라인의 순서를 바꾼다

  x

  커서의 위치에 있는 문자를 삭제

  

r

  한 문자를 대치하나 입력모드로 가지않는다

  X

  커서의 왼쪽에 있는 문자 삭제

  

s

  삽입에 의해 현재라인을 대치한다

  :liner 파일명

  지정된 라인뒤에 파일내용 삽입

  

xP

  두 문자의 순서를 바꾼다

  :r 파일명

  현재 라인뒤에 파일내용 삽입

  

deep

  두 단어의 순서를 바꾼다

  :r !command

  현재 라인뒤에 명령실행 출력 삽입

  

.

  마지막 명령을 반복한다

  :liner !command

  지정된 라인뒤에 커맨드 출력 삽입

  

u

  마지막 명령을 취소한다 (uu는취소를 취소)

  :linecotarget

  지정된 라인을 복사하고 타겟뒤에 삽입

  

U

  현재 라인을 복구

  :line,linecotarget

  지정된 범위를 복사하고 타겟뒤에 삽입 

  

ctrl I

  화면을 리프레쉬

  :linemtarget

  지정된 라인을 이동하고 타겟뒤에 삽입

  

dmove

  커서의 움직임으로 삭제한다

  :line,linemtarget

  지정된 범위를 이동하고 타겟뒤에 삽입

  

dG

  현재 라인에서 버퍼의 끝까지 삭제한다

   

   

 

 

*  vi 편집 명령 2 *

  

:!command

  vi를 멈추고 지정된 쉘 명령을 실행

  :w

  vi를 끝내지 않고 원래 파일에 저장

  

:!!

  vi를 멈추고 이전 쉘 명령을 실행

  :w 파일명

  지정된 파일명에 저장

  

:sh

  vi를 멈추고 쉘을 시작

  :w>   파일명

  지정된 파일의 끝에 데이타 저장

  

:!csh

  vi를 멈추고 C쉘을 시작

  :q

  저장하지 않고 끝내기

  

 

   

  ZZ

  데이터를 자장하고 끝내기

 

 

* vi에서  입력 모드를 호출하는 명령 *

  

a

  현재 커서뒤에 새 텍스트를 추가

  I

  현재 라인의 처음부터 새텍스트를 삽입

  

A

  현재 라인의 끝에 새 텍스틀 모드를 추가

  o

  현재 라인의 앞에 새라인을 오픈하고 추가시작

  

c

  변경을 시작한다

  O

  현재 라인의 뒤에 새라인을 오픈하고 추가시작

  

C

  라인의 끝에서 변경을 시작

  R

  새문자들로 텍스트를 덮어쓴다

  

i

  커서 위치 앞에서 텍스트를 삽입

   

   

 


vi 환경설정

 

홈디렉토리에 .exrc파일에서

..  set nocompatible " Vim 디폴트 기능들을 사용함 

set backspace=2 " 삽입 모드에서 백스페이스를 계속 허용 

set autoindent " 자동 들여쓰기 

set cindent " C 언어 자동 들여쓰기 

set smartindent " 역시 자동 들여쓰기 

set textwidth=76 " 76번째 칸을 넘어가면 자동으로 줄 바꿈 

set nowrapscan " 찾기에서 파일의 맨 끝에 이르면 계속하여 찾지 않음 

"set nobackup " 백업파일을 만들지 않음 

set novisualbell " 비주얼벨 기능을 사용하지 않음 

set nojoinspaces " J 명령어로 줄을 붙일 때 마침표 뒤에 한칸만 띔 

set ruler " 상태표시줄에 커서 위치를 보여줌 

set tabstop=4 " <Tab> 간격 

set shiftwidth=4 " 자동 들여쓰기 간격 

"set keywordprg=edic " K를 눌렀을 때 실행할 명령어 

set showcmd " (부분적인) 명령어를 상태라인에 보여줌 

set showmatch " 매치되는 괄호의 반대쪽을 보여줌 

set ignorecase " 찾기에서 대/소문자를 구별하지 않음 

set incsearch " 점진적으로 찾기 

set autowrite " :next 나 :make 같은 명령를 입력하면 자동으로 저장 

set title " 타이틀바에 현재 편집중인 파일을 표시

Technical Note/etc

CGLIB 는 코드 생성 라이브러리 (code Generator Library) 런타임에 동적으로 자바 클래스의 프록시를 생성해 주는 기능을 제공

CGLIB를 사용하면 매우 쉽게 프록시 객체를 생성할 수 있음, 성능 또한 우수하다.

더불어 인터페이스가 아닌 클래스에 대해서 동적 프록시를 생성할 수 있음

Hibernate는 자바민 객체에 대한 프록시를 생성할때 CGLIB를 사용하며, Spring은 프록시 기반의 AOP를 구현할 때 CGLIB를 사용하고 있음


Proxy에 대하여 : 핵심 기능은 원하는 메서드가 호출될때 이 메서드를 가로채어 우리가 원하는 특정 기능을 추가할 수 있도록 지원하는 것


Spring AOP는 두가지 Type의 Proxy를 지원하고 있다. 

1. JDK의 Proxy 기능 이용

2. CGLIB의 Enhancer 클래스 이용


JDK의 Proxy 

: JDK의 Proxy는 인터페이스에 대한 Proxy만을 지원하며, 클래스에 대한 Proxy를 지원할수 없다는 것이 큰 단점,

또한 이미 구현되어 있는 애플리케이션에 Proxy 기능을 추가할때 JDK Proxy를 사용한다면 클래스로 구현되어 있는 소스에서 인터페이스를 추출한 다음 Proxy를 적용할 수 밖에 없다는 것이 단점

JDK Proxy가 가지는 또 하나의 단점은 Target 클래스에 Proxy를 적용할 때 PointCut에 정보에 따라 Advice되는 메서드와 그렇지 않은 메서드가 존재한다. 그러나 JDK Proxy를 사용할 경우 Target 클래스에 대한 모든 메서드 호출이 일단 JVM에 Intercept한 다음 Advice의 invoke 메소드를 호출하게 된다. 그 후에 이 메서드가 Advice되는 메서드 인지 그렇지 않은지를 판단하게 된다. 이과정에서 JVM에 의하여 Intercept한 다음 Invoke 메소드를 호출할 때 JDK의 reflection을 호출하게 되는것이다. 이는 Proxy를 사용할 때 실행 속도를 상당히 저하시키는 원인이 된다.


CGLIB Proxy

: 이 또한 JDK Proxy처럼 Runtime시에 Target 메서드가 호출될때 해당 메서드의 Advice 적용 여부를 결정함

그러나 CGLIB는 메서드가 처름 호출되었을 때 동적으로 bytecode를 생성하여 이후 호출에서는 재사용 과정을 거침. 그러므로 두번째 호출 부터는 실행 속더의 향상을 가져옴



Technical Note/etc

Sonar 

http://blog.naver.com/PostView.nhn?blogId=stonedragony&logNo=50100178043


- codehaus에서 개발한 코드 품질 관리 플랫폼으로 유명한 오픈 소스 툴

- PMD, Checkstyle, FindBugs 에서 가져온 룰셋을 기본으로 사용 하고, rullset import도 가능 

- 소스 코드 분석은 maven을 활용하여 maven plusgin을 통해서 분석하는 듯 (maven script(pom.xml)가 필요)

- 이렇게 분석된 정보는 sonar 가 바라보는 DB(일반적으로 Derby란 DB 내장)에 저장

(참고 Derby : Apache Project 중 하나로, Java 기반으로 구현된 오픈 소스 RDB) 


기본 동작 아키텍처 

Sonar 웹 페이지 : http://docs.codehaus.org/display/SONAR/Install+Sonar

Sonar 다운로드 : http://www.sonarsource.org/downloads/

Maven 다운로드 : http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0-bin.zip


사진이야기

생각이 나면 바로 행하라

왜냐면.. 나란 놈은 돌아서면 까먹는 

단기 기억상실증을 앓고 있기 때문이다.


닭이 먼저냐 달걀이 먼저냐 라는 놀란에서 빠져 나올 수 있는 방법은 지금 당장 실행 할 수 있는 것을 하면서 그것이 닭인지 달걀인지

스스로 알아가는 것이 최선이라 생각한다. 

1 ··· 8 9 10 11 12 13 14 ··· 48
블로그 이미지

zzikjh