finerss's world!

이클립스 유용한 단축키 컬렉션.. 정리하니 너무 조아~

소스단축키
1. 클래스나 메소드,멤버를 상세하게 검색하고자 할때 : ctrl + 마우스커서(F3)
2. 해당클래스의 Hierarchy를 보려고 할때 : 클래스명 선택하고 F4

이동 단축키
1. 열린 파일 모두 닫기 : CTRL + SHIFT + F4
2. 한줄 삭제 : CTRL + D
3. 현재 줄 이동 : ALT + UP or DOWN
4. Editor 로 커서 이동(컴파일 중 에러등으로 포커스가 다른데로 갔을 때) : F12
5. 특정 줄번호로 가기 : CTRL + L
6. 다음 문제(오류부분으로 가기) : CTRL + .(점)
7. 이전 문제(오류부분으로 가기) : CTRL + ,(콤마)
8. 다음(이전) 편집창으로 이동(윈도우에서의 Ctrl+Tab 과 같은 기능) : CTRL + (Shift) + F6
9. 마지막 편집 위치로 가기(다른 이동 단축키를 써서 특정 지역으로 왔을 때 바로 전의 위치로 가기) : CTRL + Q
10. 해당 구문의 참조 부분 검색(함수나 변수위에 커서가 있을 때 이 함수나 변수를 호출,사용하는 곳 검색) : CTRL + Shift + G

찾기
1. 찾기 : Ctrl+F
2. 다음찾기 : Ctrl+K
3. 이전찾기 : Ctrl+Shift|K
4. Incremental Search : Ctrl+J (next:DownArrow, prev:UpArrow)
5. Selection Word Search : Ctrl+K, Ctrl+Shift+K(Reverse)
6. 자바 찾기(자바의 클래스, 타입, 함수 이름등으로 찾을 수 있다. 문자열을 찾으려면 File Search 탭을 이용한다.) : Ctrl+H

디버깅 단축키
1. 브레이크 포인트(현 커서의 위치에 브레이크 포인터 설정/해제) : CTRL + Shift + B
2. 디버깅 시작 F11
3. 디버깅 계속 F8
4. Step Over(한줄씩 실행) F6
5. Step Into(한줄씩 실행하되 함수일 경우 그 함수 내부로 들어감) F5
6. Step out(현재 함수를 빠져나온다) F7
7. Run to Line(현재 라인까지 실행) CTRL + R

기타 단축키
1. 저장(JDT) 및 컴파일 CTRL + S
2. 열려진 모든 파일 저장(JDT) CTRL + Shift + S
3. 빠른 오류 수정(-Quick Fix) CTRL + 1 Eclipse 가 찾을 수 있는 간단한 문법적인 오류를 해결할 방법을 알려줍니다
4. 코드에 필요한 패키지 자동 import CTRL + Shift + O 현재 코드를 위해 import 해야할 패키지를 자동으로 import 코드를 넣어줍니다
5. 주석 처리(제거) CTRL + /(\) 현재 줄 혹은 선택된 구역의 주석으로 만들거나, 주석을 제거
6. 코드 형식 맞추기 Ctrl+Shift+F

7. 선택 영역 주석처리 Ctrl+/
8. 선택 영역 주석풀기 Ctrl+/

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

Ctrl+Shift+F 코드 정리하기



이는 Eclipse에서 설정된 Code Formatter의 설정
프로젝트에서 개발된 모든 코드에 같은 코딩 규칙을 적용하고 싶다면..
결정된 Coding Convention에 따라 Code Formatter의 설정을 바꾼 다음,
[공통 템플릿(?)]
XML 파일로 Export하고, Import 시켜 적용

Ctrl+Shift+O

사용하지 않는 모든 import 문이 정리

한가지 유용한 기능은 같은 패키지 내에서 여러 개의 클래스를 import할 경우
예를 들어 한 패키지 내에서 4개 이상의 클래스를 import 한다면,
그것을 *로 합쳐서 표시하도록 하고 싶을 때...
window - preference 로 가서 java - code style - organize import에서
Number of imports needs for .*의 수를 4로 해놓으면,
같은 패키지에서 4개이상의 클래스가 임포트되면 *로 합쳐서 표시
(Apply 버튼 바로 위에 그 항목이 있습니다.)

전체 주석 처리
주석처리할 영역을 선택 한 다음 Ctrl+/
주석 해제 Ctrl+/

Ctrl+F6 많이 열려진 파일 쉽게 이동하기
해당 파일들 사이를 열려진 윈도우를 [ Alt+Tab ] 을 이용해서 이동하는 것 같은 기능

Ctrl+L 해당 라인으로 이동

줄번호가 항상 표시
window - preference -> Java - Editor -> "Show line numbers"를 체크

Javadoc 문서생성
Project 메뉴의 [ Generate Javadoc... ] 기능을 실행

전체 프로젝트를 백업
File 메뉴의 Export 기능을 실행
선택요소 중에서 ZIP 파일을 선택
일반적으로 자동 생성되는 JavaDoc 문서나 Classes 파일들은 백업하지 않음.
적당한 백업 파일 이름과 위치를 결정하고 Finish 버튼을 누르면 백업이 완료.

이클립스에서 유용한 단축키
Ctrl + e : 한줄지움

Ctrl + w : 메뉴보여줌

Ctrl + space : 클래스등 코드 도움

Ctrl + / : 한줄 주석 반대는 Ctrl + \

Ctrl + , : 찾기나, TASK항목 이동

Ctrl + . : 이동

Ctrl + F6 : Editor 선택

Ctrl + F7 : View 선택

Ctrl + F8 : Perspectieve 선택

Ctrl + F11 : 디버깅

Ctrl + 1 : QuickFix 실행

Ctrl + Shift + b : 브레이크 포인트

Ctrl + Shift + e : 현재 캐럿에서 끝까지 삭제

Ctrl + Shift + f : 코드 포맷팅

Ctrl + Shift + m : 자동 임포트

Ctrl + Shift + o : 임포트 자동 정리

Ctrl + Shift + space : 입력 파라미터 정보 보여줌

출처 : http://blog.naver.com/simz/



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

출처 : http://lhs0806.wowdns.com/tt/lhs/200
===== 실행 =====
1. Ctrl + F11 : 바로 전에 실행했던 클래스 실행
===== 소스 네비게이션 =====
1. Ctrl + 마우스커서(혹은 F3) : 클래스나 메소드 혹은 멤버를 상세하게 검색하고자 할때
2. Alt + ->, Alt + <- : 이후, 이전
3. Ctrl + o : 해당 소스의 메소드 리스트를 확인하려 할때
4. F4 : 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.
===== 문자열 찾기 =====
1. Ctrl + k : 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.
2. Ctrl + Shift + k : 역으로 찾고자 하는 문자열을 찾아감.
3. Ctrl + j : 입력하면서 찾을 수 있음.
4. Ctrl + Shift + j : 입력하면서 거꾸로 찾아갈 수 있음.
5. Ctrl + f : 기본적으로 찾기
===== 소스 편집 =====
1. Ctrl + Space : 입력 보조장치(Content Assistance) 강제 호출 => 입력하는 도중엔 언제라도 강제 호출 가능하다.
2. F2 : 컴파일 에러의 빨간줄에 커서를 갖져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공한다.
3. Ctrl + l : 원하는 소스 라인으로 이동
로컬 히스토리 기능을 이용하면 이전에 편집했던 내용으로 변환이 가능하다.
4. Ctrl + Shift + Space : 메소드의 가로안에 커서를 놓고 이 키를 누르면 파라미터 타입 힌트를 볼 수 있다.
5. 한줄 삭제 CTRL + D
6. 파일 닫기 : CTRL+W
7. 들여쓰기 자동 수정. (3.0 NEW) : CTRL+I
8. 블록 주석(/*..*/) 추가.(3.0 NEW): CTRL+SHIFT+/
8.1 Ctrl + / 해주면 여러줄이 한꺼번에 주석처리됨. 주석 해제하려면 반대로 하면 됨.
9. 위(아래)줄과 바꾸기 : ALT+UP(DOWN)
10. 블록 선택하기. : ALT+SHIFT+방향키
11. 메소드의 파라메터 목록 보기. : CTRL+SHIFT+SPACE
12. 자동으로 import 하기 : CTRL+SHIFT+O
13. 열린 파일 모두 닫기 : CTRL + SHIFT + F4
14. 블록 주석 제거 : CTRL+SHIFT+
15. 전체화면 토글 : CTRL+M
16. 한줄(블럭) 복사 : Ctrl + Alt + 위(아래)
17. 다음 annotation(에러, 워닝, 북마크 가능)으로 점프 : Ctrl + , or .
18. 퀵 픽스 : Ctrl + 1
19. 메소드 정의부로 이동 : F3
20. 하이어라키 ㅤㅍㅏㅍ업 창 띄우기(인터페이스 구현 클래스간 이동시 편리) : Ctrl + T
21. 메소드나 필드 이동하기 CTRL + O
22. ULTRAEDIT나 EDITPLUS 의 CTRL+TAB 과 같은 기능. : CTRL+F6
===== 템플릿 사용 =====
1. sysout 입력한 후 Ctrl + Space 하면 System.out.println(); 으로 바뀐다.
2. try 입력한 후 Ctrl + Space 하면 try-catch 문이 완성된다.
3. for 입력한 후 Ctrl + Space 하면 여러가지 for 문을 완성할 수 있다.
4. 템플릿을 수정하거나 추가하려면 환경설정/자바/편집기/템플리트 에서 할 수 있다.
===== 메소드 쉽게 생성하기 =====
1. 클래스의 멤버를 일단 먼저 생성한다.
2. override 메소드를 구현하려면 : 소스->메소드대체/구현 에서 해당 메소드를 체크한다.
3. 기타 클래스의 멤버가 클래스의 오브젝트라면 : 소스->위임메소드 생성에서 메소드를 선택한다.
===== organize import =====
1. 자바파일을 여러개 선택한 후 소스 -> 가져오기 체계화 해주면 모두 적용된다.
===== 소스 코드 형식 및 공통 주석 설정 =====
1. 환경설정 -> 자바 -> 코드 스타일 -> 코드 포멧터 -> 가져오기 -> 프로파일.xml 을 불러다가 쓰면 된다.
2. 또한 다수의 자바파일에 프로파일을 적용하려면 패키지 탐색기에서 패키지를 선택한 후 소스 -> 형식화를 선택하면 된다.
3. 환경설정 -> 자바 -> 코드 스타일 -> 코드 템플리트 -> 가져오기 -> 템플리트.xml 을 불러다가 쓰면 된다.
===== 에디터 변환 =====
1. 에디터가 여러 파일을 열어서 작업중일때 Ctrl + F6 키를 누르면 여러파일명이 나오고 F6키를 계속 누르면 아래로
2. Ctrl + Shift + F6 키를 누르면 위로 커서가 움직인다.
3. Ctrl + F7 : 뷰간 전환
4. Ctrl + F8 : 퍼스펙티브간 전환
5. F12 : 에디터로 포커스 위치

'공부 > 기타' 카테고리의 다른 글

토드 단축키  (0) 2012.01.04
Crontab 설정  (0) 2011.12.15
L4 로드밸런싱  (3) 2011.11.08
조인쿼리 정리  (0) 2011.06.13
OpenAPI OAuth  (0) 2011.06.13

토드 단축키

공부/기타2012. 1. 4. 09:34

--TOAD 메뉴얼--

toad 사용법
SQL EDITOR상에서의 편리한 단축키

ESC: 열린 윈도우 닫기
F1: 모든 단축키를 보여준다.
F2: FULL SCREEN
F4: Table, View, Proc, Funct, Package를 DESC(테이블명에 커서를 둔 상태에서 해야함)
F6: SQL Editor와 결과창간의 전환
F7: 화면을 모두 CLEAR
F8: 실행했던 SQL들의 HISTORY
F9: 모든 쿼리 실행(Ctrl+Enter는 현재 쿼리만 실행)
Ctrl+F9: 실제 쿼리를 실행하지 않고 validate함
Ctrl+. : table Completion (매칭되는 테이블목록 출력)
Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)
Alt+Up : History Up (리눅스 bash의 UP키와 같다.)
Alt+Down: History Down (리눅스 bash의 DOWN키와 같다.)
Ctrl+Tab: MDI Child윈도간 전환

그냥 'desc 테이블명' 을 치면, 팝업윈도로 해당 테이블의 컬럼목록윈도가 표시된다.
이때, 해당 컬럼을 double-click하면 SQL Editor로 반영된다.

"테이블명."까지 입력하고 좀 있으면, 해당 테이블의 컬럼목록이 표시된다.
마치 프로그래밍툴에서 클래스내 멤버들의 목록을 표시하듯이..
Ctrl+T는 출력된 목록을 취소했을 경우, 다시 불러낼때 쓰인다.

test, member 2개의 테이블이 있다고 하자.
select * from t까지 입력하고 Ctrl+.를 치면 select * from test로 테이블명을 완성시켜준다.
system계정에서는 안되더군.. 일반계정만 가능했다.

SQL문을 실행시

Ctrl+Enter
현재 커서의 SQL문 실행
여러개의 SQL문이 있을때, SQL문들을 개행문자로 분리해주면 된다.
해당 커서에서 개행문자가 있는 곳까지만 하나의 SQL문으로 간주한다.

F9
SQL Editor의 SQL문 실행하여 Grid에 출력.
여러 SQL문들을 개행문자로 구분하지 않는다는 것을 제외하면, 위의 Ctrl+Enter와 동일하다.
에디터내의 모든 SQL문은 하나로 취급하므로, 여러 개의 SQL문이 있으면 실행할 SQL문만 Selection하여 실행(F9)해준다.

F5
SQL Editor내의 모든 SQL문 실행. 여러개의 SQL문들을 모두 실행하여 SQL*PLUS와 같이 출력해준다.
이것은 출력이 Grid로 표시되지 않고 Editor윈도에 표시되므로, SQL*PLUS의 출력과 같이,
다른 편집기로의 복사/붙여넣기 할때 사용하면 유용하다

'공부 > 기타' 카테고리의 다른 글

이클립스 단축키  (0) 2012.01.27
Crontab 설정  (0) 2011.12.15
L4 로드밸런싱  (3) 2011.11.08
조인쿼리 정리  (0) 2011.06.13
OpenAPI OAuth  (0) 2011.06.13

Crontab 설정

공부/기타2011. 12. 15. 15:43

출처 : http://linuxgazette.net/151/prestia.html

Cronttab(이하 크론탭)은 작업을 일정한 시간에 주기적으로 실행시키기 위해서 사용하는 task 스케쥴링 프로그램이다. 이와 비슷한 프로그램으로 at(1)와 anacron(1)이 있다. at는 원하는 시간에 명령을 한번만실행 시키며, crontab과 같이 주기적으로 실행시키는 기능은 가지고 있지 않다. anacron은 이름에서알 수 있듯이 crontab와 거의 동일하게 사용할 수 있다. 다른점은 시스템 다운이나 anacron 프로그램의 다운 등의 이유로 해당시간에 실행되어야할 프로그램이 실행되지 않았다면, 이를 확인해서 다시 실행시켜준다는 점이다.

다음은 at의 간단한 사용예이다.
# echo "점심시간" | at "12:00"  

joinc는 많은 프로그램들이 주기적으로 돌아간다. 대략 다음과 같은 프로그램들이 주기적으로 작동하고 있다.
  1. 매 5분간격으로 rrd 통계데이터를 생성한다.
  2. 매 5분간격으로 spam 데이터들을 삭제한다.
  3. wiki log 파일을 파싱해서 title에 사용할 색인데이터를 생성한다.
  4. 매 10분 간격으로 cpu 사용율을 측정해서 rrd에 저장한다.
  5. 매 시간주기로 teamblog의 category 정보를 갱신한다.
  6. 매 시간주기로 teamblog에 등록된 블로그RSS정보를 수집한다.
이러한 프로그램들은 특성상 daemon 프로세스로 개발을 해야 할 것인데, 개발하고 관리하기가 보통 까다로운 작업이 아닐 것이란걸 예상할 수 있다. crontab을 사용하면 간단하게 주기적으로 실행하도록 할 수 있다.

crontab는 시스템 프로그램으로 리눅스 배포판에 관계없이 기본적으로 설치가 된다. 크론탭은 내부적으로 자체관리하는 설정파일을 가지고 있는데, 이를 이용해서 크론탭이 사용할 , 에디터 등과 주기적으로 실행할 스크립트를 지정할 수 있다.
[root@localhost ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/  # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly [root@localhost ~]#  

환경변수 영역

첫번째 영역에서는 몇가지 변수를 설정한다.

SHELL
등록된 프로그램을 실행시킬 쉘프로그램을 지정한다. 정의 하지 않을 경우 /bin/sh이 쉘 프로그램으로 지정된다.
PATH
cron은 별도로 쉘을 띄우귀 때문에, 쉘에서 프로그램을 찾기 위한 PATH도 지정해줄 필요가 있다. 왜냐하면 로그인을 해서 shell을 실행시키지 않으므로, 로그인과정에서의 PATH변수를 사용할 수 없기 때문이다.
MAILTO
cron이 수행한 작업의 결과를 mail로 보낼 수 있다. 위의 경우 root유저에게 메일을 전송한다. 만약 MAILTO를 설정하지 않으면 crontab의 실행유저에게 메일이 전송된다.
HOME
cront의 home 디렉토리경로를 설정한다. 기본적으로는 crontab의 실행유저의 홈디렉토리로 /etc/passwd에 설정된 경로를 따른다.

크론탭 포맷

크론탭은 총 6개의 필드로 구성되어 있다. 앞의 5개의 필드가 시간 지정을 위한 필드이고, 마지막 필드에 스케쥴링할 명령어를 지정한다. 아래와 같이 사용한다.
# min             hours        day        month          day      command    34               2           *            *             *       sh /root/backup.sh  
위의 예는 "sh /root/backup.sh"를 매일 2시 34분에 실행한다.

시간은 아래와 같이 5개의 단위로 분류된다.
0-59
0-23
1-31
1-12
주/일 0-6 일요일이 0이다.

별표 (*)는 all을 의미한다.

crontab 설정

크론탭은 유저별로 설정이 가능하다. 해당 유저로 로그인한 다음 "-e"옵션과 함께 crontab을 실행하면 된다. 이때 미리 설정된 에디터가 실행되어서 크론탭 정보를 편집할 수 있는 상태가 된다.
[root@localhost ~]# crontab -e  * * * * * /usr/bin/wall "Hello From Crontab"  
내용을 저장하고 정료하면 다음과 같은 메시지가 출력된다.
crontab: installing new crontab [root@localhost ~]#  
잠시 후, 아래의 메시지가 출력되는 걸 확인할 수 있을 것이다.
Broadcast message from root (Thu Apr  3 14:52:01 2008):  Hello From Crontab  
이 메시지는 매 분마다 출력된다. 왜냐하면 시간 필드의 모든 값을 *로 설정해서, "매월, 매일, 매시간, 매분 마다 실행"하기 때문이다. 어떤 이유로 크론탭을 정지시키고 싶다면 "-r"옵션과 함께 실행하면 된다.
[root@localhost ~]# crontab -r  

Now, say at a certain time in the future you need to start the Apache 'httpd' Web server. We could use a cron job to do this. First, we'll check to see that httpd is not running. Then, we'll do a "date" command to get the current time, so we can set the service to run in the future.

root@localhost ~# service httpd status
httpd is stopped
root@localhost ~#
root@localhost ~# date
Thu Apr 3 15:45:32 MST 2008
root@localhost ~#

We can now easily figure out what 10 minutes from now will be, execute crontab -e in the editor, and write a simple crontab file, remembering the format.

# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-6) command

55 15 * * * /sbin/service httpd start

For now, just use stars for the day, month, and day of week, and only one space between elements; some distros complain if you have more spaces. So, enter something like this:

55 15 * * * /sbin/service httpd start

root@localhost ~# crontab -e
crontab: Installing new crontab

If you made any mistakes, 'crontab' will tell you about it right as you close the editor. Assuming that everything was right, though, we will have the Apache Web server running less than ten minutes from now. You can use "crontab -l" to list your jobs at any time, to see what is in your crontab and when these jobs are set to run:

root@localhost ~# crontab -l
55 15 * * * /sbin/service httpd start

Yours should look similar. What this means, though, is that 'httpd' is still set to run every single day at the specified time. Again, we'll remove it by executing "crontab -r" to delete all the entries in the file.

root@localhost ~# crontab -r

The combinations seem endless. There are also additional variations for specifying time: "20-27" specifies a range; "3,4,7,8" mean just those intervals for that selection; and */5 would be every 5th interval. Another feature of cron is that, upon completion of a job, it will mail the command output to the user who set up the cron job unless that feature is disabled.
Some more samples

This crontab entry would run the command every 15 and 30 minutes after every hour, during the month of May:

15,30 * * 5 * /usr/bin/command

To run a backup script on just Sundays, Mondays, and Tuesdays at 2:12 AM, the entry would be:

12 2 * * 0-2 sh /root/backup.sh

To run a script at 12 minutes after every 3rd hour of every day, the entry would look like this:

12 */3 * * * sh /root/script.sh

To get cron to write the output of the commands to a log, you can append something like this to the command entry:

12 */3 * * * sh /root/script.sh >> /root/script.log 2>&1

To have cron suppress the e-mail:

12 */3 * * * sh /root/script.sh > /dev/null 2>&1

This is a sample of cron output that would end up in the mail

From root@localhost.localdomain Thu Apr 3 12:08:01 2008
Date: Thu, 3 Apr 2008 12:08:01 -0700
From: root@localhost.localdomain (Cron Daemon)
To: root@localhost.localdomain
Subject: Cron <root@localhost> sh /root/s.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env:<SHELL=/bin/sh>
X-Cron-Env:<HOME=/root>
X-Cron-Env:<PATH=/usr/bin:/bin>
X-Cron-Env:<LOGNAME=root>
X-Cron-Env:<USER=root>

test

Some tips for using cron:

  • Always use absolute paths.
  • If you're not sure your cron job completed, check your mail.
  • Remove unneeded cron entries from old cron jobs.
  • Make sure 'crond' is running.

Commands:

crontab -e - Edits the current crontab, or creates a new one.
crontab -l - Lists the contents of the crontab file.
crontab -r - Removes the crontab file.
crontab -u - Edits user's crontab.



/////

RONtab

/etc/cron, /usr/spool/cron/crontabs/*

/etc/cron" 프로그램 주기적으로 어떤 프로그램을 수행시키는데 사용된다.

이때 주기적으로 수행되어질 프로그램은 "/usr/spool/cron/crontabs" 디렉토리

밑에 사용자의 사용자명과 같은 이름으로 생성된다.

화일은 만드는 방법은 아래 명령을 사용하면 된다.

% crontab -l root : /var/spool/cron/crontabs/root 내용 display

% crontab -e root :

명령을 root 수행했으면 /var/spool/cron/crontabs/ DIR 하위에

"root" 라는 이름의 화일이 생성된다)

또는 vi 편집

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

)

# more /var/spool/cron/crontabs/root

# minute hour day month week

# 0~59 0~23 1~31 1~12 0~6 (0=sunday, 1=monday)

#

15,45 3 * * * find / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune

5 9 * * 6 /usr/lib/newsyslog >/dev/null 2>&1

15 0,8 16 * * find /var/preserve/ -mtime +7 -a -exec rm -f {} \;

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

crontab 화일의 앞의 5번째 칼럼까지에는 명령이 수행되어질 일시와 요일이다.

지정한 것들은 아래와 같은 의미를 갖는다.

시간 날짜 요일 : 구분은 Space

15,45 3 * * * : 매일 3 15분관 45분에 수행

5 9 * * 6 : 매주 금요일 9 5분에 수행

15 1,18 16 * * : 매달 16 115분과 오후 6 15분에 수행

1) /var/spool/cron/crontabs/root (root계정으로 가정할때..)

파일을 편집하여 원하는 스케쥴을 설정/편집 한다.

2) ps -ef|grep cron : 현재 cron deamon 돌고 있는지 확인

3) kill -9 "pid of cron" : cron deamon kill

4) rm /usr/lib/cron/FIFO : lock파일제거(/usr/lib/cron directory /etc/cron.d 링크되어있음)

5) /usr/sbin/cron : deamon 재실행( 편집한 명령대로 수행함)

) vi /var/spool/cron/crontabs/root

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

#Min Hour Day Month Day Command

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

15 4 * * * find /var/preserve/ -mtime +7 -a -exec rm -f {} \;

0 23 * * * sh `sed -n 1p /etc/Alis`/janitor

0 * * * * /usr/lib/acct/ckpacct

10 12 * * 1-6 /usr/lib/acct/dodisk

20 12 1 * * /usr/lib/acct/monacct

30 12 * * 1-6 /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log

log /var/cron/..... 생성됨

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

1. 개요 (cron이 뭐하는 것인지 전혀 모르는 분들만)

cron(크론)은 원하는 시간에 명령(프로그램)을 시키기 위한 데몬이다.
서버는 늘 깨어있다는 것을 이용한 최대한의 활용법이 될 수 있다.

- 내가 새벽 3시에 서버에 특정 작업을 해줘야하는데 그 때 깨어있을 수 있는가?
- 또는 30분간격으로 HDD의 사용량을 운영자에게 알리도록 해야한다면?
- 매월 초에 자료를 백업 받고 싶다면?

바로 이럴 때 cron은 최고의 해결책을 제시한다.
cron은 항상 지정한 시간이 되었는지 확인을 하여 해당 명령어을 실행하는 것이다.

2. cron 설정

1) crontab 파일 위치 및 조회

작업 설정 파일을 crontab 파일이라고 부르며, 이 파일의 위치는 OS별로 차이가 있다.
리눅스는 /var/spool/cron/ID, 솔라리스는 /var/spool/corn/crontabs/ID 에 위치한다.
그럼 이 파일을 직접 수정해야 하는가? 그렇지 않다. crontab 명령을 통해 설정과 조회를 한다.

설정 내용을 조회해 보자. (-l 옵션)


$ crontab -l
no crontab for truefeel


설정한 적이 없어 아직 비어있다.

2) crontab 파일 형식


------ -------- ---------------------------------------------------
필 드 의 미 범 위
------ -------- ---------------------------------------------------
첫번째 분 0-59
두번째 시 0-23
세번째 일 0-31
네번째 월 1-12
다섯번째 요일 0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째 명령어 실행할 명령을 한줄로 쓴다.
------ -------- ---------------------------------------------------


- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다.

설정을 해보자. (-e 옵션)
crontab -e 을 하면 vi 에디터가 나온다.(환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있다.)

$ crontab -e
# /home 디렉토리를 /BACKUP/home 으로 백업해둠
#
# 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일
30 4,12 * * * /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1
#
# 파일/디렉토리 퍼미션 설정
# 40분, 새벽 1시, 매주 일요일
40 1 * * 0 /root/bin/perm_set.sh > /dev/null 2>&1



위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.

vi 에디터를 통해 설정을 하므로 중요한 몇 가지 에디터 사용법은 익혀야 한다.

---- -----------------------------------------------------------------------------
키 의미
---- -----------------------------------------------------------------------------
i 현재 칸에 글을 넣는다.
o 다음줄에 글을 넣는다.
dd 한줄을 삭제한다.
:wq 저장하고 빠져나온다.
ESC 설정중에 명령어 모드(위의 i, o, dd 등을 사용할 수 있는 상태)로 빠져 나온다.
---- -----------------------------------------------------------------------------


3) 설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.

- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다.
(2~10까지 3간격으로. 즉, 3,6,9를 의미함)



원하는 시간 형 식
매주 토요일 새벽 2:20 20 2 * * 6 명령어
매일 오후 4,5,6시 0 4-6 * * * 명령어
매일 2시간간격으로 5분대에 5 */2 * * * 명령어
매월 1일 새벽 1:15 15 1 1 * * 명령어
1,7월 1일 새벽 0:30 30 0 1 1,7 * 명령어


3. FAQ

1) cron 설정한 후에는 crond 데몬을 재실행해야 하나요?

아닙니다. crontab -e 으로 설정 후 빠져나오면 바로 적용됩니다.

2) truefeel 사용자는 cron을 못 쓰게 하고 싶습니다.

/etc/cron.allow : 허용할 사용자 ID 목록
/etc/cron.deny : 거부할 사용자 ID 목록

cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
cron.deny 파일이 있으면 이 파일에 들어있는 ID는 사용 불가

따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.

3) > /dev/null 2>&1 이 무슨 뜻입니까?

지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.

'공부 > 기타' 카테고리의 다른 글

이클립스 단축키  (0) 2012.01.27
토드 단축키  (0) 2012.01.04
L4 로드밸런싱  (3) 2011.11.08
조인쿼리 정리  (0) 2011.06.13
OpenAPI OAuth  (0) 2011.06.13

L4 로드밸런싱

공부/기타2011. 11. 8. 16:21

L4 로드밸런싱 설정 및 운용

2010/03/11 08:57 / 네트워크
사용자 삽입 이미지

한마디로 말하면,

L4의 핵심은 'IP, 포트, 세션' 을 기반으로한
로드 밸런싱(Load Balancing)이다!

라고 말하고 싶네요. L4에서 가장 중요한건 역시 4계층답게
포트(port)라는 생각이 드네요.

2계층의 MAC
3계층의 IP
그럼 4계층은 바로 포트 입니다.

그리고 이 포트와 맞물려 로드 밸런싱이라는 개념이 등장 합니다.

L4 스위치는 마치 포트와 로드밸런싱의 오묘한 조합이랄까요.

L4 스위치 = 포트 + 로드밸런싱(물론 IP,세션도 중요합니다)

L4스위치가 로드밸런싱을 수행하는 장비이기 때문에 L4스위치를
다른말로 로드 밸랜서(Load Balancer) 라고도 합니다.

로드밸런싱은, 동일한 역할을 수행하는 서버 그룹을 VIP를 통해 관리하며,
서버로 향하는 트래픽을 일단 VIP를 가진 L4스위치로 수신한 후
분배정책에 따라 적절한 서버에 분배해 주는 것을 말합니다.

VIP는 Virtual IP의 약자로, 서버그룹의 대표 IP라 할 수 있습니다.
이 VIP를 로드밸런싱을 수행하는 L4 스위치가 가지고 있습니다.
서버와 통신하고자 하는 클라이언트는 VIP를 향해 트래픽을 전송하고
L4스위치가 이 트래픽을 받아 적절한 서버에 로드밸런싱 해주는 것이
L4스위치의 역할입니다.

한마디로, L4 스위치는 부하분산 장비입니다.
요즘 웬만한 사이트는 서버 한 대로 사용자들의 트래픽을 감당하기
어렵기 떄문에 동일한 역할을 수행하는 서버를 여러 대 두어서 사용자들의
트래픽이 많아져도 유연하고 안정적으로 사이트를 운영하기 위해
L4스위치를 통한 로드밸런싱
을 하는걸로 알고 있습니다.

L4스위치, 즉 로드밸란서가 없어도 네트워크를 하는데 지장은 없습니다.
하지만 IT가 발전하고 트래픽이 과도해지면서 로드밸런서 없이는 안정적인
네트워크를 구성하는것이 불가피해지고 있다는 생각이 드네요.


이 그림에서 보는바와 같이,
클라이언트와 서버 사이에 로드밸란서가 위치하여 서버 2대에 대해
로드밸런싱을 수행합니다.
즉, 로드밸런서가 트래픽을 왼쪽 서버로 보낼 수도 있고, 오른쪽 서버에 보낼
수도 있습니다.


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

그러면 L4를 왜 쓰느냐??

2가지 이유가 있습니다.

첫 번째 로드를 분산하기 위해서 입니다.(로드 발란싱)

예를 들어 한 서버에 웹 서비스(80)를 하는 서버가 있습니다.

그런데 서버에 부하 때문에 서버를 증설 해야 합니다.

하지만 서버를 분리 시키면 IP가 하나 더 필요하게 되고 IP가 늘어나면 기존 서비스와 IP가 달라지는 문제가 생깁니다.

이 때 사용하는 것이 L4장비의 VIP입니다.

예를 들어 기존에 사용하는 서버의 IP가 128.x.x.1이라고 합시다.

이 IP를 L4장비에 VIP로 할당합니다. 128.x.x.1 for 80 128.x.x.1 regarding 80

(VIP는 가상의 아이피를 말합니다.)

기존 서버에는 128.x.x.2 와 새로운 서버에는 128.x.x.3을 할당합니다.

(물론 기존 서버와 새로운 서버는 데이타가 동기되어 있어야 합니다.)

그리고 L4장비에 로드발란싱이 가능하게 세팅합니다.


그러면 이제 128.x.x.1로 요청하는 응답에 대해서 L4가 처리 하게됩니다. (대표IP로 서버여러대를 가지치기 할수 있다.)

L4는 로드발란싱 규칙에 따라서 기존 서버에서 응답하게 할 수도 있고 신규 서버에서 응답하게 할 수도 있습니다.


간단하게 L4에서 홀수 번째 요청은 기존 서버에서 짝수 번째 요청은 신규 서버에서 응답하게 설정 할 경우 요청에 대한 응답을 정확하게 반으로 나눌수 있습니다.


이렇게 한 서버의 요청건수를 줄여주어 실제로 한대의 서버가 처리해야 할 요청을 두대(여러 대)의 서버가 처리하게 되는 것을 로드 발란싱이라고 합니다.

알테온으로 설명 드리면, 웹서버 두대를 로드밸런싱 하려면 먼저

웹서버를 각각 real server 로 각각 ip를 등록합니다.
그리고 웹서버 즉 real server ip 두개 를 group1 에 소속시킵니다.
그리고 virtual ip (vip=대표ip)를 하나 등록해서 그 ip로 오는
패킷중에 http(80) 패킷에 대해서는 group1으로 보내면
설정된
matric(hash, 라운드로빈, least connection, weighted )값에 의해
로드밸런싱 되는것입니다. 대부분 hash 방식을 사용하죠...


이렇게 하면 128.x.x.1 for 80 은 오직 80 포트만을 받고, 다른 포트는 filtering 된다.. 쓸데없는 포트로 들어오는 공격을 막을수 있다.


그리고 L4의 두번째 기능으로 무결성을 위한 fail over기능입니다.


흔히 가장 안정적으로 서비스되는 서버는 일년에 다운타임(동작 불능시간)이 50분 미만인 서버라고 합니다.

(1년동안 50분 정도 다운되면 최고로 안정적인 서버가 되는 것입니다.)


서버역시 기계인 것이라 영원히 죽지 않는 서버는 존재하지 않습니다.

그러나 사람들은 좀더 서버가 안정적으로 동작하길 윈하게 되죠

아주 중요한 서버(예를 들면 정치 관련 홈페이지나 은행과 같은 금융 그리고 그 외 쇼핑몰등)의 경우 일년에 50분의 다운이라도 서비스에 큰 타격을 입을 수 있습니다.


예를 들어 128.x.x.1이라는 서버가 있습니다.

그러나 이 서버는 중요한 서버라 절대 서버에 장애가 있으면 안됩니다.

이럴경우 사용하는 장비가 L4입니다.


L4에 VIP를 이용해서 128.x.x.1이라는 IP를 할당합니다.

기존 서버의 IP를 128.x.x.2로 변경합니다.

새로운 서버에 128.x.x.3으로 할당합니다.(물론 기존 서버와 자료가 같도록 동기화 되어 있어야 합니다.)


L4에 fail over기능을 이용 할 경우

128.x.x.1로 오는 모든 요청에 대해서 L4는 128.x.x.2가 응답하게 합니다.

그리고 128.x.x.2에 장애가 있을 경우(서버가 다운될 경우)에는 128.x.x.3서버가 자동으로 응답하게 처리하게 됩니다.


이렇게 미리 동일한 서버를 준비해 놓고 L4를 이용해서 fail over로 연결하면 첫번째 서버(마스터)에 장애가 있을 경우라도 미리 준비해 놓은 서버(슬래이브)가 동작하게 되므로

실제로 서비스에는 문제가 없게되는 것입니다.


Alteon L4 스위치 기본 설정방법


- Real 서버가 2대이고 1개의 그룹으로 설정, vitural 서버는 1개 사용
- metric(분산알고리즘) 미설정 시 default는 leastconnection
- health 체크 미설정 시 default는 tcp, inter=2(매 2초마다 체크), retry=4(4번 실패 체크 시 down으로 정의)
- DAM(Direct Access Mode)가 default로 disable (Real IP를 통한 직접 서비스 안됨)
※ 즉, 여기서는 Real IP를 이용한 http(80번 포트) 접속 안됨
(하지만 Load Balance와 무관한 서비스는 각각 가능: ssh, 터미널 접속,... 등)

Main#
Main# /cfg/l3 ; 스위치 IP 설정...
(또는 Main# /cfg/ip)
Layer 3# if 1 ; 스위치 자체 IP 설정...
IP Interface 1# addr 1.2.3.4 ; IP address 할당
IP Interface 1# mask 255.255.255.0 ; subnet mask 할당 (필요시)
IP Interface 1# ena ; IP address 활성화

IP Interface 1# /cfg/l3/gw ; default gateway 설정...
Enter default gateway number: (1-255) 1 [Enter] ; gateway 번호 입력 (필요시)
Default gateway 1# addr 1.2.3.1 ; default gateway 할당
Default gateway 1# ena ; gateway 활성화

Default gateway 1# /cfg/slb/real 1 ; 첫번째 real 서버 설정...
Real server 1# rip 1.2.3.5 ; real 서버 IP address 할당
Real server 1# ena ; 첫번째 real 서버 활성화

Real server 1# /cfg/slb/real 2 ; 두번째 real 서버 설정...
Real server 2# rip 1.2.3.6 ; real 서버 IP address 할당
Real server 2# ena ; 두번째 real 서버 활성화

Real server 2# /cfg/slb/group 1 ; real 서버 그룹 설정...
Real server group1# add 1 ; 등록된 real 서버 1번을 그룹에 추가
Real server group1# add 2 ; 등록된 real 서버 2번을 그룹에 추가

Real server group1# /cfg/slb/virt 1 ; virtual 서버 설정...
Virtual server 1# vip 1.2.3.2 ; virtual 서버 IP address 할당
Virtual server 1# ena ; virtual 서버 활성화
Virtual server 1# service http ; http 서비스 설정...
Virtual server 1 http Service# group 1 ; http 서비스를 real 서버 그룹에 할당
(필요시 Virtual server 1 http Service# rport 8080 ; http 서비스를 real 서버의 8080 포트에 매핑)

Virtual server 1# /cfg/slb/port 1 ; L4의 물리적인 포트 1번 설정...
SLB port 1# server ena ; 포트 1번을 서버 포트로 할당
SLB port 1# /cfg/slb/port 2 ; L4의 물리적인 포트 2번 설정...
SLB port 2# server ena ; 포트 2번을 서버 포트로 할당

SLB port 8# /cfg/slb/port 8 ; L4의 물리적인 포트 8번 설정...
SLB port 8# client ena ; 포트 8번을 클라이언트 포트로 할당

SLB port 8# /cfg/slb ; SLB 설정...
Layer 4# on ; Server Load Balancing 모드 On
Layer 4# apply ; 변경된 설정값 적용
Layer 4# cur ; 현재 설정값 확인
Layer 4# save ; FLASH 메모리에 현재 설정내용 저장
Layer 4# /info/slb/dump ; SLB 정보 확인


------------------------------------------------------
| ㅁ1 ㅁ2 ㅁ3 ㅁ4 ㅁ3 ㅁ4 ㅁ5 ㅁ6 ㅁ5 ㅁ6 ㅁ7 ㅁ8 | --> Alteon L4 스위치
--+---+--------------------------------------+--------
| | |
| | |--> 클라이언트 포트 (외부 연결)
| |
| |--> 서버 포트 (서버 연결)
|
|
|--> 서버 포트 (서버 연결)

사용자 삽입 이미지

※ 설정 시 port 9번은 미사용


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



L4/L7 스위치 개요 (로드밸런서)

from 이유있는 코드 2010/02/01 14:05

스위치의 분류 :

L2 : OSI 레이어 2에 속하는 MAC 어드레스를 참조하여 스위칭하는 장비


L3 : OSI 레이어 3에 속하는 IP주소를 참조하여 스위칭하는 장비


L4 : OSI 레이어 3~4에 속하는 IP 주소 및 TCP/UDP 포트 정보를 참조하여 스위칭하는 장비


L7 : OSI 레이어 3~7에 속하는 IP 주소, TCP/UDP 포트 정보 및 패킷 내용까지 참조하여 스위칭함





L4/L7 스위치의 용도 :


일반적으로 서버들의 로드밸런싱을 위해 사용됨


복수개의 웹서버가 있을 때, 임의의 웹서버에 접속을 시도하면, 스위치가 각 서버의 부하를 고려하여


적당한 서버와 연결시켜준다.


설정에 따라 순차적 연결 또는 접속이 가장 적은 서버에 연결하는 방식 등이 있다.



L4 스위치 :


Layer 4에서 패킷을 확인하고 세션을 관리하며, 로드밸런싱을 제공하는 스위치

TCP/UDP 패킷 정보를 분석해서 해당 패킷이 사용하는 서비스 종류 별로 처리(HTTP, FTP, SMTP...)

세션관리, 서버/방화벽 로드밸런싱, 네트워크 서비스 품질 보장


L7 스위치 :

L4 스위치의 서비스 단위 로드밸런싱을 극복하기 위해 포트 + 데이터 페이로드 패턴을 이용한 패킷 스위치

(e-mail 내용/제목, URL ...)

connection pooling(시스템 부하 감소), Traffic Compression (컨텐츠 압축 전송), 보안 기능


L4 vs L7 :
공통점 : 스위치로 들어온 패킷을 적절한 목적지로 전송해줌 (불필요한 패킷은 drop시킴)

차이점 :
기능과 역할은 동일하나 패킷을 분석하는 인텔리전스가 다름

L7은 보안 기능 강화

(DOS/SYN 공격 방어, CodeRed/Nimda 등 감염 패킷 필터링, 네트워크 자원 독점 방지 등)

L7 스위치에 대한 오해 :
L7 스위치는 레이어 7 계층을 위한 스위치이다.

: 기본적으로 L2, L3 및 부분적으로 L4 스위치를 지원한다. 레이어5 세션 계층 위주이다.

L7 스위치는 URL 기반 스위치다.

: L7 스위치 기능에 대한 일부분을 말한 것이다.

L7 스위치는 모든 TCP/UDP 포트(0-65535)에 대한 인지가 가능하다.

: 알려진 일반 포트에 대한 세션처리는 가능하지만, 순간적으로 사용하는 임시 포트는 제한적이다.

sticky session :
L4 스위치를 통해 분배된 서비스 세션은 하나의 연결 요청에 1~n 중에 한 대의 서버에 분배된다.
여러 번 시도해도 그 때마다 1~n 중에 한 대에 분배되므로, 같은 서버에 접속될 확률은 1/n이 된다.
그러나 처음에 접속했던 서버와 같은 서버에 계속 연결시킬 수 있다.
바로 sticky 옵션이다.
(일반적인 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 3번서버

(sticky 상태)
사용자A -> L4 -> 1번서버
사용자A -> L4 -> 1번서버

기존 사용자의 세션 상태를 timeout 시간 내에는 계속 유지시켜주는 것이 sticky session이다.

timeout 시간은 60분 이내로 조절 가능하다.
sticky session의 문제점 :

L4 스위치의 가장 큰 목적(?)인 로드밸런싱이 제대로 동작하지 않을 수 있다.
개별 사용자가 사용할 경우에는 세션 timeout이 있으므로 어느 정도 로드밸런싱을 충족시킨다.
하지만 프록시서버를 사용하는 경우 문제가 된다.
예를 들어 회사에서 외부로 나가는 경우 각 PC의 IP가 아니라 프록시서버의 IP를 달고 나간다.
여러 사람이 timeout 시간 내에 접속하는 경우, 계속해서 한 서버에만 로드가 집중된다.
(외부에서 보기에는 동일한 사람으로 보이므로)


대안 :

SSL이나 기타 다른 보안모듈을 이용해서 인증된 특정 사용자에 대해서 Cookie/DB에 기록 후
해당 사용자에 대해서만 세션을 유지하도록 한다. (단점 : performance 저하 및 기타 cost)
그래서 L7 스위치를 사용한다.

< L7 스위칭 방식 >

URL 스위칭 :

URL 주소에서 특정 String을 검사하고, 검색된 문자열을 기준으로 부하를 분산시키는 방식이다.
http://www.test.com/test.html 이라는 주소로 사용자들이 웹페이지를 요청한다.
해당 페이지는 이미지가 빈번히 변경되고, 이미지 크기도 크다. (전체적으로 로딩이 느리다)
이런 경우, client의 http request 내용에 html이 들어가면, 메인 웹서버로 전송하고..
해당 request에 jpg 등의 이미지를 요청하는 경우 이미지 웹서버로 분산할 수 있다.

Cookie 스위칭 :
Http header의 cookie 값에 따른 특정 String을 기준으로 부하를 분산하는 방식이다.
Cookie 값 필드를 보고 설정된 분류 기준에 따라 어느 서버로 보낼지 결정한다.


Content 스위칭 :
legacy한 L7 스위칭은 URL/Cookie 스위칭을 사용했으나,
최근 L7 스위칭은 Content 스위칭 방식을 이용한다.
기존에는 제한적인 기능, 즉 호스트네임, URL, Cookie 를 기준으로 로드밸런싱을 하였으나,
L7 content 스위칭은 추가적인 기능을 지원한다.
Http header 의 모든 필드를 기반으로 한다.
XML content를 기반으로 한다.
XML tags 나 multiple Http header를 기준으로 복잡한 로드밸런싱을 구현한다.
Cookie 와 http header의 insertion과 deletion을 포함한 contents-rewrite 기능을 지원한다.
alternate한 url이나 도메인의 redirecting request를 지원한다.



'공부 > 기타' 카테고리의 다른 글

토드 단축키  (0) 2012.01.04
Crontab 설정  (0) 2011.12.15
조인쿼리 정리  (0) 2011.06.13
OpenAPI OAuth  (0) 2011.06.13
ORA-00918: column ambiguously defined 원인 및 해결방법  (0) 2011.06.13

1. 자연 조인 (NATURAL JOIN)
Equi 조인과 동일
두 테이블의 동일한 이름을 가지는 칼럼은 모두 조인된다.
SQL> select employee_id, last_name, department_name
2 from employees natural join departments
3 where department_name ='Sales';
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
174 Abel Sales
176 Taylor Sales
2 rows selected.



2. 내부 조인 (INNER JOIN)
일반 조인의 , 를 생략하고 INNER JOIN 를 사용하며 ON절을 사용해야 한다.
Wrote file afiedt.buf
1 SELECT E.EMPLOYEE_ID, E.LAST_NAME, D.DEPARTMENT_NAME
2 FROM EMPLOYEES E inner join DEPARTMENTS D
3 ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
4* where e.job_id = 'IT_PROG'
SQL> /
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
103 Hunold IT
104 Ernst IT
107 Lorentz IT
3 rows selected.



3. 외부 조인 (OUTER JOIN) - left
일반 조인에서 외부조인은 두 테이블에서 공통된 값이 없다면 테이블로부터 데이터를 리턴하지 않기때문에 그 외의 컬럼들을 보기 위한 조인이다.

LEFT OUTER JOIN 은
좌측 테이블과 우측 테이블에서 조건이 같은 컬럼은 모두 출력되며 , 우측 테이블의 컬럼은 모두 출력된다.
SQL> ed
Wrote file afiedt.buf
1 SELECT E.LAST_NAME, E.DEPARTMENT_ID ,D.DEPARTMENT_ID , D.DEPARTMENT_NAME
2 FROM EMPLOYEES E left outer join DEPARTMENTS D
3 ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
4* ORDER BY E.DEPARTMENT_ID
LAST_NAME DEPARTMENT_ID DEPARTMENT_ID DEPARTMENT_NAME
-------------------- ------------- ------------- ------------------------------
Whalen 10 10 Administration
Hartstein 20 20 Marketing
Fay 20 20 Marketing
Mourgos 50 50 Shipping
Vargas 50 50 Shipping
Matos 50 50 Shipping
Davies 50 50 Shipping
Rajs 50 50 Shipping
Lorentz 60 60 IT
Ernst 60 60 IT
Hunold 60 60 IT
Abel 80 80 Sales
Zlotkey 80 80 Sales
Taylor 80 80 Sales
De Haan 90 90 Executive
King 90 90 Executive
Kochhar 90 90 Executive
Gietz 110 110 Accounting
Higgins 110 110 Accounting
Grant
20 rows selected.



4. 외부 조인 (OUTER JOIN) - right
RIGHT OUTER JOIN은
좌측 테이블과 우측 테이블에서 조건이 같은 컬럼은 모두 출력되며, 좌측 테이블의 컬럼은 모두 출력된다.
SQL> ed
Wrote file afiedt.buf
1 SELECT E.LAST_NAME, E.DEPARTMENT_ID ,D.DEPARTMENT_ID , D.DEPARTMENT_NAME
2 FROM EMPLOYEES E right outer join DEPARTMENTS D
3 ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
4* ORDER BY E.DEPARTMENT_ID
SQL> /
LAST_NAME DEPARTMENT_ID DEPARTMENT_ID DEPARTMENT_NAME
-------------------- ------------- ------------- ------------------------------
Whalen 10 10 Administration
Hartstein 20 20 Marketing
Fay 20 20 Marketing
Davies 50 50 Shipping
Vargas 50 50 Shipping
Rajs 50 50 Shipping
Mourgos 50 50 Shipping
Matos 50 50 Shipping
Hunold 60 60 IT
Ernst 60 60 IT
Lorentz 60 60 IT
Taylor 80 80 Sales
Zlotkey 80 80 Sales
Abel 80 80 Sales
De Haan 90 90 Executive
King 90 90 Executive
Kochhar 90 90 Executive
Higgins 110 110 Accounting
Gietz 110 110 Accounting
190 Contracting
20 rows selected.


5. 셀프 조인 (SELFT JOIN)
1 select e.last_name "Employee", m.last_name "Reports To"
2 from employees e left outer join employees m
3* on e.employee_id = m.manager_id
SQL> /
Employee Reports To
------------------------- -------------------------
King Kochhar
King De Haan
De Haan Hunold
Hunold Ernst
Hunold Lorentz
King Mourgos
Mourgos Rajs
Mourgos Davies
Mourgos Matos
Mourgos Vargas
King Zlotkey
Zlotkey Abel
Zlotkey Taylor
Zlotkey Grant
Kochhar Whalen
King Hartstein
Hartstein Fay
Kochhar Higgins
Higgins Gietz
Vargas
Matos
Fay
Rajs
Abel
Ernst
Whalen
Lorentz
Davies
Gietz
Taylor
Grant
31 rows selected.
혹은
1 SELECT e.EMPLOYEE_ID , e.LAST_NAMe, e.JOB_ID, e.MANAGER_ID
2 FROM EMPLOYEES e, employees m
3* where e.employee_id = m.manager_id
SQL> /
EMPLOYEE_ID LAST_NAME JOB_ID MANAGER_ID
----------- ------------------------- ---------- ----------
100 King AD_PRES
100 King AD_PRES
100 King AD_PRES
100 King AD_PRES
100 King AD_PRES
101 Kochhar AD_VP 100
101 Kochhar AD_VP 100
102 De Haan AD_VP 100
103 Hunold IT_PROG 102
103 Hunold IT_PROG 102
124 Mourgos ST_MAN 100
124 Mourgos ST_MAN 100
124 Mourgos ST_MAN 100
124 Mourgos ST_MAN 100
149 Zlotkey SA_MAN 100
149 Zlotkey SA_MAN 100
149 Zlotkey SA_MAN 100
201 Hartstein MK_MAN 100
205 Higgins AC_MGR 101
19 rows selected.





6. 크로스 조인(cross join)
카티션 프로덕트 값을 얻을때 사용한다.
모든 컬럼의 곱한 값으로 조인되어 출력된다.
SQL> select last_name, department_name
2 from employees
3 cross join departments;
LAST_NAME DEPARTMENT_NAME
------------------------- ------------------------------
Abel Administration
Davies Administration
De Haan Administration
Ernst Administration
Fay Administration
Gietz Administration
.
.
.
.
Zlotkey Contracting
160 rows selected.
Elapsed: 00:00:00.06


'공부 > 기타' 카테고리의 다른 글

토드 단축키  (0) 2012.01.04
Crontab 설정  (0) 2011.12.15
L4 로드밸런싱  (3) 2011.11.08
OpenAPI OAuth  (0) 2011.06.13
ORA-00918: column ambiguously defined 원인 및 해결방법  (0) 2011.06.13

OpenAPI OAuth

공부/기타2011. 6. 13. 18:02

OAuth란?

  • OAuth 프로토콜은 웹사이트나 프로그램(컨슈머)에서 API를 통해서 컨슈머에 대한 사용자 확인 없이 웹서비스(서비스 프로바이더)의 보호된 리소스에 접근할 수 있게 해줍니다. 더 일반적으로, OAuth는 자유로운 구현과 일반적인 API 인증법을 만들수 있게 해줍니다.
  • 예를 들면, printer.example.com(컨슈머) 출력 서비스에서 photos.example.net(서비스 프로바이더)의 사용자 인증 요청없이 개인적인 사진을 출력할 수 있게 해줍니다.
  • OAuth는 사용자 인터페이스나 상호작용과 서비스 프로바이더에서 사용자 인증하는 방벙에 대한 명세가 OpenID처럼 필요없습니다.
  • OAuth 의 목표는 커뮤니티 중심 프로토콜과 웹서비스의 통합인증을 구현하는 것입니다. OAuth는 존재하는 프로토콜과 독립적으로 구현된 여러 웹 사이트 중에서 모범사례를 바탕으로 구현되었고, 개방형 표준과 크고 작은 업체들이 모두 지원하는 개발자와 사용자에게 일관되고 신뢰할 수 있는 경험을 장려합니다.

용어 정의

설명에 들어가기 앞서 일단 사용하는 용어에 대해 알아봅시다.

서비스 프로바이더(Service Provier)
OAuth를 통해서 접근을 허용하는 웹 애플리케이션.
사용자(User)
서비스 프로바이더에 계정을 가지고 있는 개인.
컨슈머(Consumer)
OAuth를 사용해서 사용자를 대신해 서비스 프로바이더에 접근하는 웹사이트나 애플리케이션.
보호된 리소스(Protected Resource)
컨슈머가 인증을 통해 접근할 수 있는 서비스 프로바이더의 데이터.
컨슈머 개발자(Consumer Devloper)
컨슈머를 규현하는 개인이나 단체.
컨슈머 키(Consumer Key)
컨슈머가 서비스 프로바이더에 자신을 나타내는 값. - 컨슈머 개발자가 서비스 프로바이더에서 발급
컨슈머 시크릿(Consumer Secret)
컨슈머가 컨슈머키의 소유권을 입증하는데 사용하는 시크릿. - 컨슈머 개발자가 서비스 프로바이더에서 발급
Request 토큰
컨슈머가 사용자에게 인증을 획득하기 위해 사용하는 값. 접근 토큰으로 교체됨. - 컨슈머가 서비스 프로바이더에 요청
Access 토큰
컨슈머가 서비스 프로바이더의 사용자 인증을 사용한 사용자 대신 보호된 리소스에 접근 권한을 얻는데 사용되는 값. - 컨슈머가 서비스 프로바이더에 요청
토큰 시크릿(Token Secret)
컨슈머가 토큰의 소유권을 입증하는데 사용하는 시크릿. - 컨슈머가 서비스 프로바이더에 요청
OAuth 프로토콜 파라미터(OAuth Protocol Parameter)
이름이 "oauth_"로 시작하는 파라미터.


일단 용어만 익숙해지고 인증 방식을 이해하면 서비스 프로바이더의 내용, 예를들어 다음 블로그나 까페의 글 제목, 내용등을 가져오는 간단한 로직은 그리 어렵지 않다

밑은 OAuth 개념설명 프리젠테이션 할때 간단히 만들었던 예제 소스와, ppt 자료인데
이곳저곳에서 잘설명돼어있는것을 퍼와서 재구성한것이니
보는데 어렵지 않게 이해할수있을 것이다~

 
 

OAuth.pptx

OauthTutorial.war

'공부 > 기타' 카테고리의 다른 글

토드 단축키  (0) 2012.01.04
Crontab 설정  (0) 2011.12.15
L4 로드밸런싱  (3) 2011.11.08
조인쿼리 정리  (0) 2011.06.13
ORA-00918: column ambiguously defined 원인 및 해결방법  (0) 2011.06.13


원인은 SELECT 컬럼에 동일 컬럼명이 2개 나온경우 발생한다.


단일 쿼리시에는 문제가 없지만 서브 쿼리의 경우 위의 문제가 발생함

SELECT A.ID , B.ID
FROM TEST A JOIN IMSI B ON B.ID= A.ID
;

위의 경우 아무런 문제가 되지 않으나 아래처럼 서브쿼리로 묶은경우

SELECT X.ID
FROM ( SELECT A.ID , B.ID
FROM TEST A JOIN IMSI B ON B.ID= A.ID
) X
;

서브쿼리 내에서 2개의 컬럼이 조회가 되어 어떤 컬럼을 써야 할지 모르는 경우

해결 방법은 SELECT 절에 컬럼명이 동일한 컬럼이 있는지 확인한다.

또한 AS 를 통한 ALIAS 도 자세히 살펴보아야 한다.

'공부 > 기타' 카테고리의 다른 글

토드 단축키  (0) 2012.01.04
Crontab 설정  (0) 2011.12.15
L4 로드밸런싱  (3) 2011.11.08
조인쿼리 정리  (0) 2011.06.13
OpenAPI OAuth  (0) 2011.06.13