달력

22025  이전 다음

  • 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

오라클 삭제하기

1. 오라클을 삭제하기 전에 서비스에서 동작하고 있는
   오라클(Oracle로 시작 되는것들)을 정지 시킨다..
2. uninstall한다.

오라클 레지스트리에서 삭제하기

1. 시작->실행->regedit 입력을 하면 레지스트리 편집기가 나온다..
   레지스트리에서
2. HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE 삭제
3. HKEY_LOCAL_MACHINE -> SYSTEM -> ControlSet001 -> Services
   HKEY_LOCAL_MACHINE -> SYSTEM -> ControlSet002 -> Services
   HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Services에서
   Oracle로 시작되는 것을 삭제.
4. HKEY_CLASSES_ROOT 에서 Oracle과 Ora로 시작되는 것을 삭제
   (주의:Ole로 시작되는 것은 지우지 마세요)
5. 윈도우를 재부팅후 Oracle폴더를 삭제한다.

 

'SQL' 카테고리의 다른 글

[mssql] 계층적 구조 표현하기.  (0) 2005.10.07
오라클 클라이언트 툴... aquafold....  (0) 2005.09.26
[mssql] 날짜 형식 convert  (0) 2005.08.26
MySQL 간단백업  (0) 2005.08.24
[ms-sql] 카테고리 만들던 중...(허접 -.-)  (0) 2005.08.01
Posted by tornado
|
[방문히트이벤트] 12000 히트를 잡아라! (이웃한정)
박종복님이 당첨되었습니다.
Posted by tornado
|

샘플입니다.

원하는 셀을 선택하고 하세요...

선택 안하고 하면 삑사리 날꺼 입니다..

 

그냥 몇가지 테스트 하니라..

 

만들어 놓아서.. 삑사리가 잘남니다..

 

소스 한번 보시고.. 각자 알아서 필요한 부분부분을 뜯어 와야 합니다. ^^

 

 

Posted by tornado
|

Incubus - Make Yourself (1999)

 

Brandon Boyd : 리드 보컬/퍼커션
Mike Einziger : 기타/백업 보컬
Dirk ‘Alex’ Lance : 베이스
Chris ‘DJ’ Kilmore  : 턴테이블
Jose Pasillas : 드럼

 

 

1집에서 보여준 코어 메탈 밴드로서의 이미지를 벗어던진 "변화" 란 단어를

새삼스레 각인시켜주는 앨범입니다.

빌보드 차트에 80주이상 잔존했던 앨범이기도 하구요.

빌보드가 모든것을 말해주진 않지만 그만큼의 역량이 존재하는 앨범이니 만치

뛰어난 음악을 들려줍니다.

 

그리고 개인적으로 역시나 렙메탈이나 코아류는 맞지 않기에

이쪽이 훠~얼~씬 정감스럽군요.

 

 

Drive

 

Sometimes I feel the fear of uncertainty
stinging clear And I can't help
but ask myself how much I'll
let the fear take the wheel and steer


It's driven me before it seems to have a vague

Haunting mass appeal Lately I'm beginning to find that

I should be the one behind the wheel

 

Whatever tomorrow brings I'll be there

With open arms and open eyes yeah

Whatever tomorrow brings I'll be there I'll be there

 

So if I decide to waiver my chance to be one of the hive

Will I choose water over wine and hold my own and drive oh oh

 

It's driven me before it seems to be the way

That everyone else get around

Lately I'm beginning to find that

when I drive myself my light is found

 

Whatever tomorrow brings I'll be there

With open arms and open eyes yeah

Whatever tomorrow brings I'll be there 'll be there

 

Would you choose ater over wine

Hold the wheel and drive

 

Whatever tomorrow brings I'll be there

With open arms and open eyes yeah

Whatever tomorrow brings I'll be there I'll be there

 


Posted by tornado
|
격투기동영상  |  격투기동영상
해당 게시판에 글쓰기 권한이 없습니다.해당 카페 지기/운영자에게 문의해 주세요. 해당 게시판에 글쓰기 권한이 없습니다.해당 카페 지기/운영자에게 문의해 주세요. 최신목록 | 목록 | 윗글 | 아랫글
세계최고영장류는 누구?? 효도르 VS 크로캅...
번호 : 9573   글쓴이 : 크로캅|
조회 : 4676   스크랩 : 0   날짜 : 2005.08.28 22:58
 

'이것저것 > 낙서장' 카테고리의 다른 글

[펌] NHK 다큐멘터리 - 블랙홀  (0) 2005.09.09
12000 히트 이벤트!!!  (3) 2005.09.06
[펌] 윈앰프 플러그인  (0) 2005.08.26
[펌] 세계 희귀동물 모음집!!!  (0) 2005.08.26
책샀음.  (0) 2005.08.24
Posted by tornado
|

http://koxo.com/

 

이런데가 있었다니.....

 

 

Posted by tornado
|

Winamp 플러그인

 

Monkey's Audio Player v3.99

.mpc Musepack plugin 0.99f

FLAC Decoder v1.1.2

Vorbis Decoder v1.40

WMA Plug-in v2.1

'이것저것 > 낙서장' 카테고리의 다른 글

12000 히트 이벤트!!!  (3) 2005.09.06
[펌] 지구사상 최강 영장류 대결, 크로캅 vs 효도르  (0) 2005.08.29
[펌] 세계 희귀동물 모음집!!!  (0) 2005.08.26
책샀음.  (0) 2005.08.24
에휴.. 올해는 웬지...  (0) 2005.08.23
Posted by tornado
|
[크림 고슴도치]
일반 고슴도치의 알비노[색소결핍]가 아니고 원래 하얀 종입니다.
그 증거로 눈이 까맣죠~ 아이구 귀여워요TT;; 희귀종이랩니다.

[하프 물범]
아이고 귀여워라 구르기전 구르기 후;;; 반만 있어서 하프가 아니라;;;
다 크면 등에 하프무늬가 생겨난다고 해서 하프물범입니다. 어미가 얼음위에서 새끼를
낳기 때문에 새끼때는 흰색인 보호색으로 덮여있다가 크면서 털이 빠져서
등에 하프무늬가 생긴다고 해요. 온난화와 모피를 얻는 포획때문에 살곳이 없어져서..
멸종위기 라고 합니다.

[금호]
호랑이 시리즈 1!! 금호 입니다. 백호의 줄무늬가 금색인 호랑이입니다. 일반 백호보다
좀 고급스러워 보이는건 착각인가요?[]
 
 
 
[왼쪽은 은호, 오른쪽은 백호.]
은호는 아예 줄무늬도 없는 새하얀 색. 백호는 털만 하얀 호랑이 입니다.
백색인 알비노와는 다르게 변종이라 백호나 은호는 눈이 푸른거 보면 정말 신기해요.
[파튤라 달팽이]
세계에서 16마리? 그정도 밖에 없는 달팽이.
2년에 한번 피는 꽃만 먹는다고 하던데...
 
[렛서팬더]
두발로 서서걷는 팬더!! 귀엽죠? 이름과는 다르게 팬더하고는 다른종이라네요..
역시 희귀동물.

[황금박쥐]
이름이 친숙한 그 이름 황금박쥐~
상당히 귀한 녀석들이죠. 이렇게 많이 모여찍은건 정말 행운일 듯.

[페어리펭귄]
귀엽죠? 이름만큼 작아서 페어리펭귄 입니다.
희귀동물이죠..

[팬더]
흔히들 보는 거지만.. 팬더는 세계 희귀동물 1순위입니다;

[콰가]
콰아콰아~ 하고 울어서 붙여진 이름이라는 콰가.
성질이 사납다고들..
이미 이 세상에 없는 동물입니다. 멸종해 버렸죠..

[오카피]
오가피같아서 피식피식 하는녀석. 팬더의 뒤를 이은 멸종위기동물 2순위!

[오리너구리]
포유류주제에 알을 낳는 신기한 녀석.
역시나 희귀동물 입니다.

[에뮤]
오스트레일리아에서 사는 대형조류. 사진귀엽죠?<<<
현생종은 딱 한종류라고 합니다.
 
[알바트로스]
한자로는 신천옹이라고 하죠? 날개가 2미터정도 된다고 들었어요.
몸보다 큰 날개때문에 지상을 걸을때 뒤뚱뒤뚱하면서 걷는답니다.

[사불상]
앗 친근한 이름!!;;[] ㅂ만화의 사불상은 사슴이었으나..[하마같지만]
진짜 사불상은 말인지 사슴인지... 이미 자연에는 없고,
동물원에만 있다고 합니다.

[블랙스완]
이름뜻은 검은 백조. 실제로도 붉은부리를 가진 검은 백조입니다.
오스트레일리아의 담수호에서 많이 보인다고 하는군요.
희귀동물입니다!!

[바바리사자]
저 검은색으로 변해가는 위엄있는 갈기..
사자중에서는 제일 몸집이 큰 종류라고 합니다.
이미 멸종해버렸...어요.

[메가마우스]
큰쥐인줄 알았는데 큰 입이군요;;;[] 하여튼 입한번 되게 큽니다..

[롤리키드]
장난감같아요! 앵무새같지만 앵무새는 아니구요,
호주의 희귀동물입니다.

[이라와디돌고래]
동글동글.. 백상어에게 당할뻔한 사람을 구해줬다고 합니다.
실제로 돌고래들이 그런 일을 많이 한다고 해요.

[딩고]
오스트레일리아의 야생개.. 왠만한 진돗개크기정도 된다고 하네요.
그곳의 원주민들이 종종 기르지만 커서는 놔준다고 합니다.
간혹 국내나 다른 곳에서도 입양으로 키우는 곳이 있다고 합니다.

[듀공]
초식성. 인도양이나 태평양의 열대해안에서 서식한다고 합니다.
고대 사람들이 목격하고는 인어라고 오해하기도 많이 했었죠.
 
[봉고]
에뮤랑 같이 한다속 1종이며 세계적으로 진귀한 동물로, 아프리카산림영양이라고도 한다..
라고 백과사전에 나와있군요;
 
[늑대]
그냥 늑대가 아니고 한국 토종늑대입니다. 남한은 이미 멸종해서 동물원에서나
볼수 있구요.. [아마 그것도 그냥 중국에서 들여온 형질만 같은 종일듯;;]
북한은 소수가 자생하고 있다고 합니다.
 
몇개 알비노종들이 더있지만 알비노야 뭐 그냥 허연거니까 생략!'ㅅ'*<<
스크롤압박 버틴분들께 감사해요~<<
에휴 이미 멸종해버린 녀석들 보면서 내심 그냥 가슴이 아프네요;
 
 
출처 블로그 무한 디거루프 Gogogo

'이것저것 > 낙서장' 카테고리의 다른 글

[펌] 지구사상 최강 영장류 대결, 크로캅 vs 효도르  (0) 2005.08.29
[펌] 윈앰프 플러그인  (0) 2005.08.26
책샀음.  (0) 2005.08.24
에휴.. 올해는 웬지...  (0) 2005.08.23
인라인 + 홍탁....  (2) 2005.08.22
Posted by tornado
|

[mssql] 날짜 형식 convert

SQL 2005. 8. 26. 11:56

select getdate()  라고 입력하면.... 2005-08-26 11:42:09.530  과 같이 출력된다.

내가 필요한거는 20050826 만 필요하다..

 

도움말 보니까.. convert 가 보임..

 

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

요런 문법인데.. style 옵션을 어케 주느냐에 따라 형식이 바뀐다..

 

select conver(varchar, getdate(), 112)

결과값은 20050826

 

 

Posted by tornado
|

MySQL 간단백업

SQL 2005. 8. 24. 18:51
MySQL 간단 백업

MySQL 백업하기
****************************************************

MySQL 의 백업에는 두가지가 있습니다.
테이블 내부의 데이터만 백업하는 방법과 어떤 데이터 베이스에서 각 테이블 구조와 데이터를
몽땅 백업하는 두가지의 방법입니다.
앞쪽의 내부 데이터만 백업하는 방법은 SQL LEVEL BACKUP 이라고 하구요.
MySQL 안에 들어가서 작업을 합니다.

두번째방법인 전체 백업은 FULL BACKUP 이라고 하구요.
mysql 안에서 하는것이 아니고 mysqldump 라는 유틸리티를 이용해서 백업을 합니다.
이 방법은 테이블의 구조까지 다 백업을 해준다는 장점이 있습니다.

여러분들이 사용할때는 각각의 목적에 맞게 수행하셔야 합니다.
목적에 맞게 라는 말이 좀 그런데요. 각자의 상황에 맞게 대처하셔야 한다는 이야기입니다.
그럼 먼저 데이터만 백업하는 방법을 사용해 보도록 하겠습니다.
먼저 테이블을 하나 만들어 보져.

create table backupTest (
num int unsigned not null auto_increment primary key,
name varchar(20) not null,
email varchar(50) not null,
addr varchar(150) not null,
tel varchar(20) not null
);

insert into backupTest values
(null, '유희성','tornado@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '홍길동','hong@dolpung.pe.kr','한양 워디메쯤','02-202-2020'),
(null, '유오성','ohSung@dolpung.pe.kr','부산.. 칭구동.. 챔피언구','02-222-2020'),
(null, '송종국','song1@dolpung.pe.kr','주소 모름','02-202-2020'),
(null, '憫梔?,'park@dolpung.pe.kr','주소 모름','02-202-2020'),
(null, '희동구','ddink@dolpung.pe.kr','주소 모름','02-202-2020'),
(null, '안정환','ahn@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-5858'),
(null, '유상철','sangchul@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-4938'),
(null, '이을용','ul_yong@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '이천수','tenhand@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '최진철','choi1@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '김남일','kim111@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '이영표','pyo@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '홍명보','hong2@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020'),
(null, '황선홍','hwang@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');

select * from backupTest; 로 잘 들어갔는지 확인을 해봅니다.

잘 들어가 있다면 테이블의 자료들을 특정 File 로 백업을 하겠습니다.

구문은 아래와 같습니다.

mysql> select * into outfile '/tmp/backupTest.sql' from backupTest;
Query OK, 15 rows affected (0.00 sec)

mysql>

이제 백업이 되었는지 확인을 해 봐야 합니다.

터미널을 하나 더 띠우고 /tmp 디렉토리에 backupTest.sql 이 만들어져 있는지 확인을 해봅니다.

# vi /tmp/backupTest.sql 이라고 치시면
각내용이 보이게 됩니다.

[tornado@dolpung tornado]$ vi /tmp/backupTest.sql
1 유희성 tornado@dolpung.pe.k 서울시 뭐라구, 안들? 02-202-2020
2 홍길동 hong@dolpung.pe.kr 한양 워디메쯤 02-202-2020
3 유오성 ohSung@dolpung.pe.kr 부산.. 칭구동.. 챔피 02-222-2020
4 송종국 song1@dolpung.pe.kr 주소 모름 02-202-2020
5 박지성 park@dolpung.pe.kr 주소 모름 02-202-2020
6 희동구 ddink@dolpung.pe.kr 주소 모름 02-202-2020
7 안정환 ahn@dolpung.pe.kr 서울시 뭐라구, 안들? 02-202-5858
8 유상철 sangchul@dolpung.pe. 서울시 뭐라구, 안들? 02-202-4938
9 이을용 ul_yong@dolpung.pe.k 서울시 뭐라구, 안들? 02-202-2020
10 이천수 tenhand@dolpung.pe.k 서울시 뭐라구, 안들? 02-202-2020
11 최진철 choi1@dolpung.pe.kr 서울시 뭐라구, 안들? 02-202-2020
12 김남일 kim111@dolpung.pe.kr 서울시 뭐라구, 안들? 02-202-2020
13 이영표 pyo@dolpung.pe.kr 서울시 뭐라구, 안들? 02-202-2020
14 홍명보 hong2@dolpung.pe.kr 서울시 뭐라구, 안들? 02-202-2020
15 황선홍 hwang@dolpung.pe.kr 서울시 뭐라구, 안들? 02-202-2020
~
~

위와 같은 내용이 잘 들어가 있다면 성공하신 겁니다.
각각의 필드 사이에는 TAB 으로 구별이 되어있습니다.
데이터를 작성하실때도 TAB 으로 구별해서 작성하시면 다시 인서트가 가능합니다.

그리고 백업을 할때 꼭 TAB 으로 구별을 하라는 법은 없습니다.
백업 구문 뒷쪽에 옵션 하나를 붙여주게 되면 됩니다.
각각의 문자로 구별을 하실수 있습니다.

아래와 같이 쿼리문장을 수행합니다.

mysql> select * INTO OUTFILE
-> '/tmp/backupTest1.sql' FIELDS TERMINATED BY ','
-> from backupTest;
Query OK, 15 rows affected (0.00 sec)

mysql>

이제 결과 값이 어떻게 나왔는지 봅시다.
다른 터미널 창에서 아래와 같이 입력합니다.
# vi /tmp/backupTest1.sql

1,유희성,tornado@dolpung.pe.k,서울시 뭐라구, 안들?02-202-2020
2,홍길동,hong@dolpung.pe.kr,한양 워디메쯤,02-202-2020
3,유오성,ohSung@dolpung.pe.kr,부산.. 칭구동.. 챔피,02-222-2020
4,송종국,song1@dolpung.pe.kr,주소 모름,02-202-2020
5,박지성,park@dolpung.pe.kr,주소 모름,02-202-2020
6,희동구,ddink@dolpung.pe.kr,주소 모름,02-202-2020
7,안정환,ahn@dolpung.pe.kr,서울시 뭐라구, 안들?02-202-5858
8,유상철,sangchul@dolpung.pe.,서울시 뭐라구, 안들?02-202-4938
9,이을용,ul_yong@dolpung.pe.k,서울시 뭐라구, 안들?02-202-2020
10,이천수,tenhand@dolpung.pe.k,서울시 뭐라구, 안들?02-202-2020
11,최진철,choi1@dolpung.pe.kr,서울시 뭐라구, 안들?02-202-2020
12,김남일,kim111@dolpung.pe.kr,서울시 뭐라구, 안들?02-202-2020
13,이영표,pyo@dolpung.pe.kr,서울시 뭐라구, 안들?02-202-2020
14,홍명보,hong2@dolpung.pe.kr,서울시 뭐라구, 안들?02-202-2020
15,황선홍,hwang@dolpung.pe.kr,서울시 뭐라구, 안들?02-202-2020

아까는 각 필드의 구별이 TAB 으로 띠워져 있었습니다.
Fields TERMINATED BY ',' 라고 옵션을 붙였더니 TAB 대신 , 가
필드들의 구별자 역할을 해주는 것을 볼 수있습니다.
가끔 MYSQL 데이터를 MSSQL 이나 ACCESS 로 이전할때 각 필드의
공백문자를 인식 못할때가 있을 수 있습니다.
이때 위와 같이 필드 구별자를 지정하여 사용하시면 됩니다.

이제 데이터를 백업했으니 테이블에 집어 넣어야 합니다.
위에서 한 방법은 SQL 레벨 백업이라고 했습니다.
그러니 백업한 데이터를 복구할때도 SQL 차원에서 해결해야 합니다.

사용방법은 아래와 같습니다.

mysql> delete from backupTest;

mysql> LOAD DATA INFILE '/tmp/backupTest.sql'
-> INTO TABLE backupTest;
Query OK, 15 rows affected (0.00 sec)
Records: 15 Deleted: 0 Skipped: 0 Warnings: 0

mysql>
mysql> select * from backupTest;
+-----+--------+----------------------+----------------------+-------------+
| num | name | email | addr | tel |
+-----+--------+----------------------+----------------------+-------------+
| 1 | 유희성 | tornado@dolpung.pe.k | 서울시 뭐라구, 안들?| 02-202-2020 |
| 2 | 홍길동 | hong@dolpung.pe.kr | 한양 워디메쯤 | 02-202-2020 |
| 3 | 유오성 | ohSung@dolpung.pe.kr | 부산.. 칭구동.. 챔피 | 02-222-2020 |
| 4 | 송종국 | song1@dolpung.pe.kr | 주소 모름 | 02-202-2020 |
| 5 | 박지성 | park@dolpung.pe.kr | 주소 모름 | 02-202-2020 |
| 6 | 희동구 | ddink@dolpung.pe.kr | 주소 모름 | 02-202-2020 |
| 7 | 안정환 | ahn@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-5858 |
| 8 | 유상철 | sangchul@dolpung.pe. | 서울시 뭐라구, 안들?| 02-202-4938 |
| 9 | 이을용 | ul_yong@dolpung.pe.k | 서울시 뭐라구, 안들?| 02-202-2020 |
| 10 | 이천수 | tenhand@dolpung.pe.k | 서울시 뭐라구, 안들?| 02-202-2020 |
| 11 | 최진철 | choi1@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 12 | 김남일 | kim111@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 13 | 이영표 | pyo@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 14 | 홍명보 | hong2@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 15 | 황선홍 | hwang@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
+-----+--------+----------------------+----------------------+-------------+
15 rows in set (0.00 sec)

mysql>

잘 들어간걸 확인 하실 수 있습니다.
그럼 이번에는 두번째 백업한 파일인 backupTest1.sql 을 복구시켜보겠습니다.

기존에 들어가 있는 데이터를 다 지우고 Load Data 구문을 실행합니다..
mysql> delete from backupTest;
mysql> LOAD DATA INFILE '/tmp/backupTest1.sql'
-> INTO TABLE backupTest FIELDS TERMINATED BY ',';
Query OK, 15 rows affected (0.00 sec)
Records: 15 Deleted: 0 Skipped: 0 Warnings: 0

mysql>

이제 검사를 해봅시다.

mysql> select * from backupTest
-> ;
+-----+--------+----------------------+----------------------+-------------+
| num | name | email | addr | tel |
+-----+--------+----------------------+----------------------+-------------+
| 1 | 유희성 | tornado@dolpung.pe.k | 서울시 뭐라구, 안들?| 02-202-2020 |
| 2 | 홍길동 | hong@dolpung.pe.kr | 한양 워디메쯤 | 02-202-2020 |
| 3 | 유오성 | ohSung@dolpung.pe.kr | 부산.. 칭구동.. 챔피 | 02-222-2020 |
| 4 | 송종국 | song1@dolpung.pe.kr | 주소 모름 | 02-202-2020 |
| 5 | 박지성 | park@dolpung.pe.kr | 주소 모름 | 02-202-2020 |
| 6 | 희동구 | ddink@dolpung.pe.kr | 주소 모름 | 02-202-2020 |
| 7 | 안정환 | ahn@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-5858 |
| 8 | 유상철 | sangchul@dolpung.pe. | 서울시 뭐라구, 안들?| 02-202-4938 |
| 9 | 이을용 | ul_yong@dolpung.pe.k | 서울시 뭐라구, 안들?| 02-202-2020 |
| 10 | 이천수 | tenhand@dolpung.pe.k | 서울시 뭐라구, 안들?| 02-202-2020 |
| 11 | 최진철 | choi1@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 12 | 김남일 | kim111@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 13 | 이영표 | pyo@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 14 | 홍명보 | hong2@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
| 15 | 황선홍 | hwang@dolpung.pe.kr | 서울시 뭐라구, 안들?| 02-202-2020 |
+-----+--------+----------------------+----------------------+-------------+
15 rows in set (0.01 sec)

mysql>

위와 같이 들어갔다면 정상적으로 된것입니다.
만약 번호만 입력이 되고 데이터가 안들어갔다면 FIELDS TERMINATED BY 로 지정한
컬럼 구분자가 틀렸다는 이야기 입니다.
그것을 확인하시고 입력을 하신다면 데이터가 입력되는데 전혀 문제가 없을 것입니다.

이제 MySQL 의 풀레벨 백업을 해 보겠습니다.

/usr/local/mysql/bin 디렉토리를 보게 되면 mysqldump 라는 명령이 있습니다.
이 명령어를 이용해서 테이블 구조와 모든 레코드 들을 백업하겠습니다.

일단 MySQL 을 종료시켜야 합니다.
quit 나 q 를 쳐서 빠져 나옵니다.

# cd /usr/local/mysql/bin
# ./mysqldump -u root -p test > /tmp/fullBackup1.sql
Enter password:
#

-u 옵션은 유져를 지정하고
-p 는 패스워드를 지정합니다.
test 는 test 데이터베이스를 지정한 것이고
> 표시는 test 데이터 베이스의 내용을 /tmp/fullBackup1.sql 로 백업을 하겠다
라는 이야기 입니다.
만약 에러가 난다면 에러메세지를 잘 읽어보시고 대처하시기 바랍니다.

이제 vi editor 로 파일을 열어보겠습니다.
# vi /tmp/fullBackup1.sql

내용이 확실히 보이시지요??


아래의 쿼리를 다시 날려보고 먼저 백업한 파일과 비교를 하겠습니다.

# ./mysqldump --add-drop-table -u root -p test > /tmp/fullbackup1.sql

결과치의 일부분은 아래와 같습니다.


DROP TABLE IF EXISTS backuptest;
CREATE TABLE backuptest (
num int(10) unsigned NOT NULL auto_increment,
name varchar(20) NOT NULL default '',
email varchar(50) NOT NULL default '',
addr varchar(150) NOT NULL default '',
tel varchar(20) NOT NULL default '',
PRIMARY KEY (num)
) TYPE=MyISAM;

설명 없습니다.


아래는 -e 옵션을 붙인 겁니다.
-e 옵션은 빠른 insert 문으로 쿼리를 작성해 줍니다.

# ./mysqldump -e -u root -p test > /tmp/fullbackup2.sql


INSERT INTO backuptest VALUES (1,'유희성','tornado@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(2,'홍길동','hong@dolpung.pe.kr','한양 워디메쯤','02-202-2020')
,(3,'유오성','ohSung@dolpung.pe.kr','부산.. 칭구동.. 챔피언구','02-222-2020')
,(4,'송종국','song1@dolpung.pe.kr','주소 모름','02-202-2020')
,(5,'박지성','park@dolpung.pe.kr','주소 모름','02-202-2020')
,(6,'희동구','ddink@dolpung.pe.kr','주소 모름','02-202-2020')
,(7,'안정환','ahn@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-5858')
,(8,'유상철','sangchul@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-4938')
,(9,'이을용','ul_yong@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(10,'이천수','tenhand@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(11,'최진철','choi1@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(12,'김남일','kim111@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(13,'이영표','pyo@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(14,'홍명보','hong2@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020')
,(15,'황선홍','hwang@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');




-t 옵션을 줘서 한번 백업을 해보져
-t 옵션은 데이터만 백업합니다. 테이블 구조는 백업 안합니다.


# ./mysqldump -t -u root -p test > /tmp/fullbackup3.sql

아래와 같은 구조가 되겠지요.


--
-- Dumping data for table 'backuptest'
--

INSERT INTO backuptest VALUES (1,'유희성','tornado@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (2,'홍길동','hong@dolpung.pe.kr','한양 워디메쯤','02-202-2020');
INSERT INTO backuptest VALUES (3,'유오성','ohSung@dolpung.pe.kr','부산.. 칭구동.. 챔피언구','02-222-2020');
INSERT INTO backuptest VALUES (4,'송종국','song1@dolpung.pe.kr','주소 모름','02-202-2020');
INSERT INTO backuptest VALUES (5,'박지성','park@dolpung.pe.kr','주소 모름','02-202-2020');
INSERT INTO backuptest VALUES (6,'희동구','ddink@dolpung.pe.kr','주소 모름','02-202-2020');
INSERT INTO backuptest VALUES (7,'안정환','ahn@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-5858');
INSERT INTO backuptest VALUES (8,'유상철','sangchul@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-4938');
INSERT INTO backuptest VALUES (9,'이을용','ul_yong@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (10,'이천수','tenhand@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (11,'최진철','choi1@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (12,'김남일','kim111@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (13,'이영표','pyo@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (14,'홍명보','hong2@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');
INSERT INTO backuptest VALUES (15,'황선홍','hwang@dolpung.pe.kr','서울시 뭐라구, 안들리 3동','02-202-2020');



아래는 -d 옵션을 준겁니다. -d 옵션은 테이블만 덤프합니다.

# ./mysqldump -d -u root -p test > /tmp/fullbackup4.sql

결과는 다음과 같습니다.


-- MySQL dump 9.07
--
-- Host: localhost Database: test
---------------------------------------------------------
-- Server version 4.0.4-beta-max-nt

--
-- Table structure for table 'aaa'
--

CREATE TABLE aaa (
id int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

--
-- Table structure for table 'backuptest'
--

CREATE TABLE backuptest (
num int(10) unsigned NOT NULL auto_increment,
name varchar(20) NOT NULL default '',
email varchar(50) NOT NULL default '',
addr varchar(150) NOT NULL default '',
tel varchar(20) NOT NULL default '',
PRIMARY KEY (num)
) TYPE=MyISAM;

--
-- Table structure for table 'bbb'
--

CREATE TABLE bbb (
id int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;


즐 MySQL 합시다.
Posted by tornado
|

출처 : http://www.ihelpers.co.kr/webdevdoc/index.php

 

  웹개발 문서 모음

웹사이트 개발시에 필요한 문서 목록입니다.
해당 문서목록의 의견,문제점,궁금하신 점은 Q&A게시판에 올려주십시요.
공유를 원하는 유용한 웹개발문서를 받고 있습니다. 많이 많이 여기로 보내주세요.(다양한 업종의 스토리보드와 제안서 강추)

Q : 파일 다운로드시 한글파일의 경우 다운로드 되지 않거나 글자가 깨집니다.
A : 익스플로러 "도구 > 인터넷 옵션 > 고급 "에서 고급 UTF8옵션 해제하시면 됩니다.

* 버전 : v2.0
* 최종수정일자 : 2005.07.08 10:30:22

'JAVA > JSP_Servlet' 카테고리의 다른 글

jetty site  (0) 2005.10.12
[펌] myeclipse에서 xdoclet 설명  (0) 2005.10.04
[openlaszlo] 아래에 푸터 붙어있을때...  (0) 2005.07.05
jwebunit  (0) 2005.06.03
OSCache / Quartz ... 등등 좋은것들..  (0) 2005.06.03
Posted by tornado
|

***********************
아파치 가상호스트 설정하기
작성자 : 유희성
***********************


가상호스트란 하나의 IP 상에 여러개의 가짜 도메인을 구성하는 것이다.
이것은 아파치의 VirtualHost 라는 기능을 이용하는것인데 상당히 유용하다
도메인을 신청하면 www.yadong.com 이라는 형식으로 나오게 되는데
우리가 임의대로 2차도메인을 지정하고 그 이름이 들어왔을때 네임서버에서 일단
1차 도메인 쪽으로 연결을 시켜줍니다. 그리고 이것을 다시 아파치에서 받아들입니다.
이때 아파치에 설정되어있는 VirtualHost 부분에 설정되어있는 곳의 public_html
디렉토리를 연결시켜 주게 됩니다. 이런 방식으로 동작을 하기 때문에 각각의 사용자마다
2차 도메인을 가질수 있게 됩니다.

먼저 가상호스트를 만들기 위해 준비를 합니다.
네임서버가 잘 작동을 하는지 먼저 테스트 합니다.

nslookup 자기호스트.com 이라고 쳐서 잘 나오는지 확인합니다

잘 나왔다면 이제 네임서버 설정을 아주 약간만 고쳐줍니다. 먼저 /var/named/*.zone 파일을 고쳐줍니다.

vi /var/named/*.zone <--- 여러분은 yadong.com 이니까 yadong 을 써주면 되겠군요.

그럼 제일 아랫줄에 다음 라인을 추가 합니다.

first IN CNAME 211.108.242.host

위의 라인은 first.yadong.com 이라는 주소를 치고 들어왔을때 CNAME 클래스(CANONICAL NAME)를 이용하여
연결된 2차 도메인을 1차 도메인쪽으로 연결시켜 주는 부분입니다.
물론 A 클래스로 이용하여도 동작은 잘 됩니다.

이제 네임서버데몬 스크립트를 다시 restart 시킵니다.

/etc/rc.d/init.d/named restart

nslookup first.yadong.com 이라고 쳐서 cname 어짜고 저짜고 떴으면 된것입니다.
만약 안뜬다면 1차 네임서버 설정에 문제가 있을수도 있겠군요.

여기까지 잘 되었다면 이제 아파치를 설정합니다.

cd /usr/local/apache/conf
vi httpd.conf

이렇게 아파치 설정파일을 열고 줄 번호를 넣고 봅니다. set nu 하시면 됩니다.

#NameVirtualHost * <=== 약 970번 줄 근처에 있습니다.

이 부분의 주석을 풀어주고 뒤의 별표(*) 부분을 삭제한 후 자신의 아이피를 넣어줍니다.

그리고 아랫쪽에 보시면 VirtualHost 의 사용법에 대한 sample 이 있을것입니다.
이부분을 고치시는게 아니고 이걸 보고 아랫쪽에 새로 입력하여 작성합니다.

#<VirtualHost *>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

위와 같은 형식의 문장이 있습니다.
<VirtualHost *> <=== 가상호스트의 시작을 알리는 태그.
뒤의 별표는 삭제하고 자신의 호스트 주소를 적어줍니다.
211.108.242.host
ServerAdmin <=== 가상호스트 운영자의 메일주소가 들어갑니다.
DocumentRoot <=== HTML 문서나 PHP 문서가 위치하게될 디렉토리를 지정합니다.
ServerName <=== 자신의 가상호스트 이름을 적어줍니다.
ErrorLog <=== 호스트를 운영하게 되면 각종 Log 파일들이 쌓이게 되는데
가상 호스트 마다 log 를 지정해 주지 않으면 apache 기본 log 파일에
쌓이게 됩니다. 그럼 나중에 log 분석하기도 힘들게 될뿐더러 관리도
힘들어 지게 됩니다. 이곳에 Log 파일의 경로와 사용할 log 파일의
이름을 적어줍니다.
여기는 error log 에 관련된 거겠지요?? 거기에 걸맞는 이름을 적어줍시다.
CustomLog <=== 이곳은 위와 동일합니다. 성공적으로 아파치에 접속이 되었을 경우에
나타나는 로그들이 이곳에 저장됩니다. 경로와 파일을 적어줍시다.
</VirtualHost> <=== 가상호스트의 종료부분 태그.

위의 문장대로 제일 아랫줄에 가상 호스트 부분을 추가해 줍니다.

<VirtualHost 211.108.242.30>
ServerName www.kcr.pe.kr
</VirtualHost>
<VirtualHost 211.108.242.30>
ServerAdmin tornado@kcr.pe.kr
ServerName tornado.kcr.pe.kr
DocumentRoot /home/tornado/public_tornado/
UserDir /home/tornado/public_tornado/
CustomLog logs/apache.tornado.com-access_log common
ErrorLog logs/apache.tornado.com_error_log
</VirtualHost>

위 예제는 학원의 30번 PC 에서 현재 잘 가동이 되고 있는 서버의 상태입니다.
처음 가상호스트 부분을 보시면 위쪽에 설명 되어있는 부분과 상이한 부분이 있습니다.
이곳은 root 사용자의 홈페이지를 가상호스트로 정해준 부분입니다.
그러니까 www.kcr.com 이라고 치고 들어왔을때 보여주는 경로인 셈입니다.
로그 파일은 기본 로그파일을 사용하기 때문에 별도의 로그파일은 지정해 주지 않았습니다.

가상 호스트 부분에서는 public_html 이라는 디렉토리를 사용하지 않습니다.
public_2차도메인이름 이라는 형식을 사용합니다.
왜냐하면 각각의 디렉토리마다 public_html 을 사용하게 되면 이름도 헷갈릴뿐더러
작동하는데 문제가 생길수 있습니다.
aaa.yadong.com 을 치고 들어갔는데
bbb.yadong.com 의 public_html 디렉토리의 문서를 보여줄 상황도 발생 할 수 있기 때문입니다.


<VirtualHost 211.108.242.30>
ServerAdmin tornado@kcr.pe.kr
ServerName tornado.kcr.pe.kr
DocumentRoot /home/tornado/public_tornado/
UserDir /home/tornado/public_tornado/
CustomLog logs/apache.tornado.com-access_log common
ErrorLog logs/apache.tornado.com_error_log
</VirtualHost>

위의 부분이 정말 가상호스트 부분입니다.

ServerName 부분을 보시면 tornado.kcr.pe.kr 이라고 되어있습니다.
여기서 tornado 라는 2차 도메인은 네임서버의 *.zone 파일에 CNAME 클래스로 지정되어있습니다.

여러분이 웹브라우져에서 tornado.kcr.pe.kr 이라고 치고 들어오셨을때 네임서버에서
일단 CNAME 으로 걸러줍니다. 그리고 다시 아파치의 가상 호스트 부분으로 들어가게 됩니다.
이때 VirtualHost 부분에 해당 호스트의 설정이 작성되어있다면 작성된 설정의
DocumentRoot 부분의 디렉토리로 이동하여 해당 문서(index.html 등등)를 보여주게 됩니다.

여기까지 하셨다면 apache데몬을 다시 시작합니다.

/usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl start

이때 에러가 없어야 합니다.
이제 각 디렉토리들을 작성해 주셔야 합니다.
user를 등록합니다.


useradd tornado
passwd tornado
적당한 패스워드 입력

이제 home 디렉토리로 이동합니다.

cd /home
cd tornado
mkdir public_tornado
cd public_tornado

vi index.html
여기는 tornado 의 메인 페이지 입니다.

저장하고 종료

chmod 755 -r ~tornado

위와 동일한 방법으로 각각의 가상호스트 마다 설정을 하여 줍니다.

웹브라우져를 실행한 후에 지정한 2차 도메인으로 접속하여 봅니다.
문서가 제대로 보인다면 제대로 성공하신 것입니다.


*******************************
아파치 가상호스트 2
작성자 : 유희성
*******************************

우리는 지난 시간에 2차 도메인을 이용한 가상 호스트 설정을 하였습니다.
이번에 할 것은 같은 아이피에 1차 도메인을 두개 이상 연결시켜서 가상 호스트를 잡아주는 방법입니다.

작동 방식은 먼저 시간에 설명드린 것과 거의 비슷합니다.
그러나 네임서버 설정이 약간 다릅니다.
먼저 시간에 했던 방식은 aaa.yadong.com 으로 들어왔을때 yadong.com 으로 연결시켜주고
아파치 가상 호스트부분에서 치고 들어온 도메인으로 연결시켜주는 방법이였습니다.

이번에 설정은 named.conf 에 새로운 zone 영역을 등록시키고 /var/named 디렉토리에
새로운 zone 영역 파일을 만들어주는 방식입니다.
이때 reverse 영역은 새로 작성하지 않습니다. 어차피 한 IP를 가지고 사용하는 것이기 때문에
새로 작성한다는 것은 의미가 없습니다.

지금 하는것과 같이 같은 아이피에 등록시켜줘도 전혀 문제는 없습니다.
만약 한대의 피시에 여러개의 랜카드가 꼽혀 있고 각각의 아이피가 부여되어있는 상태라면
각각의 아이피 마다 도메인을 부여하여 아파치 설정을 통해 가상호스트 운영을 할수 있습니다.
또 하나의 랜카드에 가상 IP 를 부여하여(Aliase) 가짜 호스트를 마치 진짜 처럼 운영할수도 있습니다.

그럼 설정파일부터 보겠습니다.

vi /etc/named.conf 파일을 열어서
zone 영역을 하나 더 만들어줍니다.

zone "aaa.com" IN {
type master;
file "aaa.zone";
};

위와 같이 추가하시고 저장후 빠져나옵니다.

위의 설정에서 파일을 지정했기 때문에 /var/named 디렉토리에 해당 파일을 만들어 주어야 합니다.
파일은 기존의 설정을 복사하여 사용합니다.

cd /var/named
cp yadong.zone aaa.zone
vi aaa.zone

$TTL 86400
@ IN SOA ns.aaa.com. root.aaa.com. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns.aaa.com.
IN MX 10 mail.aaa.com.
IN A 211.108.242.30
ns IN A 211.108.242.30
www IN A 211.108.242.30


위와 같은 설정이 되겠군요. 저장하고 빠져나옵니다.

네임서버를 다시 가동합니다.
/etc/rc.d/init.d/named restart

nslookup aaa.com 이라고 치셔서 응답이 제대로 나와야 합니다.
안나온다면 다시 설정을 천천히 살펴봅니다.

위와 같이 설정한 후에 아파치 virtualHost 부분은 기존 VirtualHost 설정 부분처럼 합니다.
다 하셨으면 apache데몬을 다시 시작하시고 브라우져에서 각각의 주소를 쳐봅니다.
그래서 각각의 호스트 디렉토리에 있는 파일내용이 보이면 성공입니다.


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

예전에 학원에서 배운 내용인데.. 이제야 자료를 찾았습니다 ^^;

근데 예로 든 주소가 다 왜 이 모양인지 ;;

Posted by tornado
|

****************
 proftp 설치하기
 작성자 : 유희성
****************


http://www.proftpd.org 에서 최신 버젼을 다운로드 받는다(좌측 상단에 tar.gz형식)
기존의 wu-ftp나 proftp 중에 rpm으로 설치된것은 삭제한다.

rpm -qa | grep proftp  라고 해서 뭐가 나오면 지운다. (이거 그냥 써도 된다)
rpm -qa | grep wu-ftp  라고 해서 뭐가 나오면 지운다.

rpm -e --nodeps 나온패키지     <=== 삭제

항상 최신 버젼을 유지합시다.

다운받은 소스를 압축을 풉니다.

tar xvzf proftpd-xxx.tar.gz   
cd proftpd-xxx
./configure --prefix=/usr/local/proftp --enable-auto-shadow

여기서 prefix 부분은 설치될 경로이고 --enable-auto-shadow 는 리눅스에서 지원하는
쉐도우 패스워드를 자동으로 인식하게끔 해주는것이다. 보안상 반드시 넣어준다.
에러가 없다면
make; make install     해준다.

cd /usr/local/proftp  로 들어간다.
ls -R 이라고 친다. 그럼 각 디렉토리 별로 잘 보일꺼다.

bin 이라는 디렉토리는  ftpwho 라는 넘과 ftpcount 가 있다.
ftpwho 는 어느넘이 현재 접속해서 사용하는지 그 정보를 보여주고
ftpcount 는 몇놈이 접속되어있는지 카운트를 세어준다.

./ftpwho 라고 쳐본다.. 맨첨에는 암것도 없다.

sbin 이라는 곳에는 proftp 의 실행파일이 들어있다.
etc 에는 ftp 설정파일이 들어있다.
man 디렉토리는 아무래도 manual page 가 있는거 같다.. 이거 사용해도 되지만
그냥 man proftpd 라고 하면 매뉴얼 페이지가 뜰것이다... 와우리눅스는 proftp 기본탑재...

var 디렉토리에는 Log file 이 쌓이게 된다.... 몇번 사용해보고 이곳에 들어가면 로그파일이 자동 생성되어진걸 볼수있다.

이제 proftp의 설정파일을 고쳐주자...

cd /usr/local/proftp/etc 로 들어가서 vi proftpd.conf 로 설정을 바꾸자.

# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName   "ProFTPD Default Installation"
ServerType   standalone
DefaultServer   on

# Port 21 is the standard FTP port.
Port    21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask    022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances   30
# Set the user and group that the server normally runs at.
User    nobody
Group    nobody

# Normally, we want files to be overwriteable.
<Directory /*>
  AllowOverwrite  on
</Directory>

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
  User    ftp
  Group    ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias   anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients   10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin   welcome.msg
  DisplayFirstChdir  .message


  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>

</Anonymous>


약간 틀리겠지만 위 형식대로 입력이 되어있을것이다.

ServerName  "어쩌구... "   <=== 호스트 이름을 지정해준다. 바꾸고 싶으면 바꾼다.
ServerType  standalone    <=== 슈퍼데몬 환경에서 돌아갈지... 아니면 단독데몬으로 돌아갈지 결정한다.
        우리는 그냥 단독데몬으로 돌린다.
        xinetd 환경에서 돌리면 접속시 약간의 딜레이가 생길수도 있다.
        왜? 사용자가 요청을 하면 xinetd 를 통과해서 다시 proftp 로
        접속을 해주니까...
DefaultServer  on  <=== 이 부분은 걍 내둔다..
Port   21  <=== ftp 포트를 지정한다. 디폴트 값을 사용한다. 이부분을 바꿔주고 싶으면
     /etc/services 파일도 수정해 줘야 한다. 이 파일을 한번 열어본다.
     각 포트번호와 서비스들이 보일것이다.
Umast   022  <=== 기본 퍼미션을 지정한다. 777 에서 적혀 있는 값을 빼준것이 기본 퍼미션이다.
      755-022=755   기본 퍼미션이 755라는얘기다...
MaxInstance  30   <=== DoS(Deny of Service) 의 공격에 보호하기 위해서 proftp가
      Standalone 모드로 동작할때 생성되는 최대 자식 프로세스의 수를 지정.
      기본값으로 둔다.(보안상...)
User   nobody
Group   nobody  <=== 요기 두 부분은 ftp 에 접속한상태에서의 소유권을 지정해 준다.
          root 권한으로 proftpd 데몬을 띠우고 여기에 지정된 사용자, 그룹으로
          권한을 넘긴다.
          nogroup 로 되어있으면 nobody 로 고친다.
<Directory /*>
  AllowOverwrite  on <=== 이 부분은 새로 생성될 파일로 덮어씌우기를 결정해준다.
</Directory>     on 이면 덮어쓰기, off 이면 안되지..

<Anonymous ~ftp>

좌르르르륵
</Anonymous>   <=== 요기는 계정이 없는 사용자. 즉 익명사용자를 위한 공간을 할당해 주는 부분이다.

요기까지 고쳤으면 설정 끝이다.

그럼 proftpd 데몬을 띠운다.
아까 proftp 실행파일은 sbin 안에 있다고 하였다.
그럼 sbin 으로 이동한다.
cd /usr/local/proftpd/sbin  
./proftpd start   라고 했을 때 아무런 메세지가 없어야 한다.
에러 발생했으면 메세지 잘 보고 고친다.. 안되면 손가락 짤러..

ftp에 접속이 되는지 접속을 해보자.

ftp localhost  라고 한다.    ftp 211.108.242.host 라고 해줘도 똑같다.
그럼 유져와 패스워드를 입력하라고 한다.. 입력한다.. root 사용자는 보안상 못들어 가니까 접속하기 전에 계정을 하나 만들어주자.

login faild 만 안뜨면 된다.
이때 접속되는 디렉토리는 /home/ 디렉토리에 있는 각자의 계정에 접속이 되게 된다.


*************
  ftp 사용법
*************

사용법 : ftp <hostname | ip address>
ex >  ftp 211.108.242.69
 name : 자기 아이디 (계정이 없으면 anonymous) 
 password : 자기 패스워드(없으면 e-mail 주소 또는 @ )
      ftp>    <=== 일케 뜨면 된거다.

      help 또는 ? 를 입력한다.(도움말 출력)
     
      dir
      ls        디렉토리 리스트를 보여준다.
      size 파일의 크기를 출력
      mkdir (dir) 새로운 디렉토리 만들기
      rmdir 디렉토리 삭제
      delete <file> 파일삭제
      mdelete file1 file2....... 여러파일 삭제
      pwd 현재 경로 출력
      status 현재 상태 출력
      exit
      quit 종료
      get (file) ftp의 파일을 자신의 디렉토리로 가져온다.
      put (file) 자신의 파일을 원격 ftp로 전송
      mget (file1, file2, ........)  여러 파일 동시에 가져오기
      mpug (file1, file2, ........)  여러 파일 동시에 받기
      cd (dir) 디렉토리 이동
      nlist (dir) 원격  ftp의 dir 서브디렉토리 리스트 출력
      rename <name1  name2> ftp 상의 파일이름 바꾸기
      chmod 퍼미션 조정
      open 원격 ftp host 로 접속하기

      기타등등....... man으로 알아보세요..


이제 명령어도 보았으니 한번 테스트 해보자. 파일을 한개 올린다.

put 파일네임   <=== 이라고 치면 전송 상태가 text로 출력된다. 다 올라갔으면 ls 나 dir 로 업로드가 잘 되었는지 살펴보자.

그럼 자신의 directory 에 있는 파일(업로드한 파일)을 삭제하고 ftp에서 전송하자.
get 파일네임   <=== 파일이 잘 전송이 되었나??? 자신의 디렉토리에서 확인해 본다.

여기서 잠깐!!!!

지금 현재 상태에서 cd .. 을 계속 쳐본다.... 아마 자신이 접속한 곳 보다 상위 디렉토리로 이동을 하게 되는것을 봤을것이다.
이렇게 되면 당근 안된다. 모르는 사람이 내 디렉토리를 보게 되는것은 좀 기분이 나쁘다.
이런 현상을 막으려면 proftpd.conf 파일에 다음을 입력해준다.
DefaultRoot ~  라고 입력해 준다.  ~ 는 자신의 홈디렉토리가 된다.

이렇게 했는데도 같은 현상이면 DefaultRoot 부분을 <Global> 태그로 감싸준다.
<Global>
  DefaultRoot  ~
</Global>
이렇게 적어준다. Global 태그는 ftp 전체에 영향을 주는 전역을 선언하는 태그라고 되어있당.

DefaultRoot ~ aaa 라고 해주면 aaa 사용자 빼고 다른 넘들은 상위 디렉토리로 이동가능
DefaultRoot ~ !aaa 라고 해주면  aaa 사용자 빼고 다른사람들은 상위디렉토리로 이동 불가능.

이렇게 해서 계정 사용자들은 ftp를 이용하게 설정이 다 되었다. 하지만 계정이 없는 사용자.
익명사용자에 대해서도 ftp 를 사용할수 있게 해주어야 한다.
<Anonymous 경로>    <=== 이 부분이 익명사용자 설정이라고 위에 적어놨다.

이곳에 설정을 해 주면 된다.
일단 익명 사용자들은 거의 대부분 다운로드만 받게 설정을 해주어야 한다. 물론 읽기전용으로 해야쥐..

그럼 설정을 하자.
<Anonymous /home/ftp> 라고 경로를 고쳐준다. 그리고 ftp 라는 유저도 등록해 주자.. 그래야 알아먹지..


<Anonymous ~ftp>   <=== 요기처럼 ~ 로 줘도 된다.
  User    ftp <=== ftp 유져와 그룹을 지정한다.
  Group    ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias   anonymous ftp <=== anonymous 로 들어온 사용자를 ftp 라는 별칭을 부여해준다.

  # Limit the maximum number of anonymous logins
  MaxClients   10 <=== 익명사용자의 최대 접속수를 지정해주는 부분이다.

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin   welcome.msg <=== 익명 사용자의 환영 메세지이다.
  DisplayFirstChdir  .message


  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>  <=== 이 부분은 익명 사용자의 write 권한을 박탈한다.
    DenyAll  <=== 요기가 AllowAll 이라고 되어있으면 어케 될까?? 파일이 올라가게 된다.
  </Limit>
</Anonymous>

이제 대충 설정이 끝났다. 그리고 만약 익명사용자가 접근이 안된다면
<Anonymous > 태그 안에 아래처럼 적어준다.
RequireValidShell off

이 부분이 off 로 되어있어야 접속이 가능하게 된다. 이부분이 없어도 접속은 되지만
만약 익명 계정 접속이 안된다면 이부분부터 추가시켜준다.

그리고 만약 익명 사용자가 10명이 넘었을때 메세지를 보내야 하는데 아래와 같이 설정한다.

MaxClients  10 "미안허다. 10명밖에 못들어와.... 조금만 지둘려 ㅡ,.ㅡ"

이렇게 하면 10명이 넘은 사용자들에게는 따옴표 안의 문자가 출력될것이다.
그리고 성질급한 넘들은 브라우저 10개 띠워놓고 10개를 한 ftp 서버에 접속한 후에
파일다운로드를 시도하려 할수도 있다.
이때 이것을 막아주려면
MaxClientsPerHost 2 "이눔아.!! 좀 지둘려...."

이렇게 써주면 된다.

이제 환영메세지를 만들어보자.

아래의 내용을 /home/ftp/ 밑에 welcome.msg 에 입력한다.

vi welcome.msg
*****************************************************
어서오시게... 많이 가져가게나...
*****************************************************
proftp 1.2 %V
ftp://%L/

남은 용량 : %F
현재 사용자 수 : %N/%M (한 호스트당 1회 접속만 허용)
%R에서 %U님이 접속했습니다.
%T년에 접속.

불편한점은 메일로 보내주세요.
E-mailto:%E

*****************************************************

위의 내용중에 % 가 붙은 넘들은 아래와 같다.

%V 버젼 표시
%L 호스트 주소표시
%F 남은 용량
%N 현재 접속자수
%M 최대 접속자수
%R 접속한 호스트 주소
%U 유져이름 (anonymous 가 나오겠지???)
%T 접속한 날짜
%E 관리자 이메일주소(네임서버에 지정된 메일)

머 대충 이정도가 있다.. 더 알고 싶으면 proftpd.org 가보면 많다.


현재 계정사용자는 업로드/다운로드가 다 가능하지만 익명사용자는 다운로드만 가능하다.
만약 업로드까지 가능하게 해주려면 <Anonymous> 태그 안쪽에 아래와 같이 설정한다.

# 익명 사용자 업로드 디렉토리
<Directory incoming/*>    <=== /home/ftp/ 디렉토리 안에 incoming 라는 디렉토리를 만들어줘야한다. 퍼미션도 755로 변경해준다.
  AllowOverWrite on <=== on으로 해줘야 업로드가 가능하다.
  AllowRetriveRestart on <=== 요기랑 아래줄은 아마 이어올리기가 가능한 옵션일것이다. 생각 안나네.. ㅡ,.ㅡ;
  AllowStoreRstart on
  <Limit DELE RMD>   <=== 요기는 업로드 한 파일을 마음대로 지울수 없게 하기 위해서 지우는 속성을 박탈한 부분이다.
    DenyAll
  </Limit>
</Directory>

이렇게 해주면 익명계정의 사용자도 업로드가 가능하게 된다.

오늘은 여기까지... ^^



 

Posted by tornado
|

*********************
네임서버
작성자 : 유희성
*********************


Domain 이란 숫자화된 인터넷 주소인 IP주소를 대신하는 문자화된 별칭이다.
우리는 사이트에 접속을 할 때 http://www.yahoo.co.kr 이라고 입력하고 접속을 하게 된다.
여기서 www.yahoo.co.kr 을 도메인이라고 부르며 이것이 IP주소를 대신하는 인터넷주소이다.
위와 같이 도메인을 입력하게 되면 컴퓨터는 알아듣지 못하게 된다. 이렇게 입력된 도메인을
컴퓨터가 알아들을 수 있는 숫자형태로 바꾸어줘야 하는데 이 작업을 해주는 것이 DNS Server 이다.

도메인 이름 규격은 각 나라마다 약간씩 설정이 틀리지만
(음.. 한글도메인은 어케 되는지 저도 멀라영... 좀 알려줘여ㅡ,.ㅡ)
대부분 영문자와 숫자, 그리고 하이픈(-) 의 조합으로 사용되고 대소문자는 구별되지 않는다.
이름의 길이는 2글자에서 최대 63자까지 허용된다.
도메인 이름에는 콤마(,)나 언더바(_)등 기호를 사용하지 못한다.
그리고 도메인 이름은 전 세계에서 유일하여야 한다.

도메인 이름체계

이름체계는 Tree 구조로 이루어져있다.
제일 위에는 루트(ROOT) 도메인을 기준으로 3단계의 기본적인 단계로 구성된다.
루트 도메인이란 쩜! (.) 을 이야기 한다.
http://www.yahoo.co.kr. <== 요기처럼 kr 다음에 쩜(.) 이 하나 붙는데 이것을 루트 도메인이라고
한다. 이 루트 도메인 다음에 온 kr 이나 net, com, org 등등.. 이 1차 도메인이다.
이것은 우리가 임의로 정하는 것이 아니고 이것을 관리하는 INTERNIC 에 등록이 되어있는 것을 우리는
가져다가 쓰게 되는 것이다.

여기서 1차 도메인도 최상위 도메인과 국가도메인으로 나뉘어 지게 된다.
최상위 도메인이란 org, net, com, edu, gov, 등등이 되고, kr, jp. fr 등등 각 나라의
국가 도메인이 된다.
위의 www.yahoo.co.kr. 을 보면 처음 루트도메인 다음에 1차도메인 KR 이 오게 되었다.
그 다음에 존재하는 co 라는 부분이 2차 도메인에 해당된다.

2차 도메인은 사용자가 원하는 이름을 신청해서 사용할 수 있다. 하지만 kr이나 jp 등등의 국가도메인이
1차 도메인이 오면 국가에서 기관을 분류시키기 위해 미리 정의된 이름을 사용하기 때문에 이럴 경우에는
사용자가 직접 2차 도메인 이름을 지정하여 사용할 수 없다.
Oracle.com 같은 사이트는 최상위 도메인으로 이미 정해져 있는 것을 사용하였기 때문에 2차 도메인으로
oracle 이라는 이름을 지정하여 사용하였다… 유가릿??

3단계 도메인은 하위 도메인이라고 하며 우리가 만들고자 하는 yadong.pe.kr 같은 사이트에서
yadong 같은 녀석이 3차 도메인이 되게 된다. 왜 3차 인지 이해가 안되면 벽보고 반성한다.

자… 이렇게 도메인이 이루어졌다는 것을 알았다. 그럼 네임서버는 어떤 역할을 해주는 것일까…
네임서버는 위에서 말한 도메인 이름을 ip 주소로 바꾸어 주는 기능을 해준다.
반대로 ip 주소를 도메인 이름으로 바꿔주는 역할도 한다.

그럼 어떻게 작동 할까… (칠판에 그림참조)

일단 내가 브라우져에서 www.yahoo.com 이라고 입력을 한다.
그러면 이것은 네임서버로 질의를 보내게 된다. 만약 ADSL 이라면 인터넷공급회사에서 자동으로 네임서버가
지정이 되어있을 것이다.

일단 네임서버로 질의를 하게 되는데… 여기에는 당근 yahoo.com 의 정보가 없다.
그럼 로컬네임서버는 루트네임서버(.) 로 질의를 요청하게 된다.
그런데…. 루트 네임서버에서도 com 이라는 1차 도메인을 모르겠다고 하고… 질의를 com 네임서버를 참조하라고 한다.
그럼 다시 질의는 com 네임서버로 가게 된다… 여기서 열라 뒤진다. 이때 yahoo.com 이 정확하게 인터닉에 등록이
되어있는 도메인이라면 여기서 yahoo.com 의 아이피 주소를 우리가 맨 처음 질의한 로컬 네임서버에 알려주게 된다.
이렇게 알게된 IP 주소를 최종적으로 우리에게 알려주게 된다.
그런데 여기서… 맨 처음 질의를 할 때 ROOT 도메인부터 찾는다고 하였는데, 이때 제일 처음부터 찾으려면 서버는
쌩 노가다를 하게 된다. 그래서 CACHE 파일을 제공하여 주는데 /var/named/named.ca 라는 파일이다.
버전마다 약간 이름이 틀리다.

이 파일은 우리가 작성하는 것이 아니라 인터닉에서 제공을 하여 준다.
이 파일이 없다면 다른 PC 에서 복사를 하던지 인터닉에 접속해서 다운을 받던지 한다. 절대 수정금지..


/////////////////////
설 정 하 기
/////////////////////

네임서버를 구동하기 위해서는 bind 라는 패키지가 필요하다. 이 패키지는 웬만한 배포판에는 기본으로 들어있다.
현재 사용되는 버전은 bind8 과 bind9 이다.그럼 깔려있는지 살펴보자..

rpm -qa | grep bind <=== 라고 입력을 해서 뭐가 있으면 깔려있는 것이다.

거의 대부분 전체설치를 하기 때문에 자동으로 깔린다… 만약 없다면 linux cd 넣고 다시 깐다.
위치는 RedHat/RPMS 에 존재한다… source 로 깔고 싶다면 www.isc.org 에서 받던지 국내 Linux site 를 뒤져본다…


*********************
Bind 소스로 설치하기.
*********************

일단 RPM 패키지로 설치되어있는 bind 를 제거하여야 한다.
rpm -qa | grep bind 라고 쳐서 뭐가 나오면 지운다.

rpm -e 나온 패키지이름 <== 지운다.

이렇게 지운다음에 다운로드 받은 소스파일을 압축을 푼다.
/tmp/tar xvzf bind-9.2.0.tar.gz 라고 쳐서 압축을 푼다.
그리고 압축 풀린 디렉토리로 들어간다.

./configure -with-opens니
make; make install;
이렇게 설치가 되면 /usr/local/bind 디렉토리에 라이브러리 파일이 생성되고 바이너리 파일은
/usr/sbin 디렉토리에 생성된다.
설치 끝.

네임서버의 유형은 크게 세가지로 나뉘어진다.

1. primary name server : 1차 네임서버
2. secondary name server : 2차 네임서버
3. caching only server : 캐시 서버.

1차 네임서버는 당근 필수적이다. 2차 네임서버는 1차 네임서버에 주기적으로 접속하여 백업본을 유지한다.
일반적으로 2차 도메인은 1차 도메인이 다운되었거나 기타 다른 문제가 발생되었을 경우를 대비하여 같은
네트워크에 두지 않는다. 만일 같은 네트웍에 존재한다면 1차 네트웍이 죽으면 2차 네임서버도 작동을 안하게
될것이다. 그럼 뭐하러 2차를 만들어…

캐쉬 서버는 local DNS 에 접속하기 곤란한 상태에 있을 때 효과적으로 운영된다.
원거리에 위치한 같은 도메인을 사용하는 네트워크에 대해서 LOCAL DNS 를 시용하면 약간의 NETWORK DELAY가
발생하게 되므로 좋지 않은 상황이 된다.
이때 캐시 서버를 이용한다. Cache 서버는 이름을 IP 로 변환하는 작업만을 수행한다.


네임서버 설정 파일은 아래와 같다.

/etc/resolv.conf <== 기본 네임서버 지정. 여기에 기본 네임서버 설정이 없으면
네임서버 질의를 하지 못한다.
/etc/named.conf <== 이 파일은 /etc/hosts와 DNS 에 질의할 순서를 정한다.
/var/named/named.ca <== 루트 네임서버에 대한 정보가있는 데이터베이스파일
/var/named/named.local <== 루프백인 localhost 에 대한 설정파일
/var/named/파일이름.zone <== Public domain 에 대한 forward zone 파일
/var/named/파일이름.rev <== Inverse domain 에 대한 reverse zone 파일…


위의 파일중에 *.zone , *.rev 파일은 named.local 파일을 복사하여 사용한다.

먼저 named.conf 파일을 vi로 열어서 보자..

vi /etc/named.conf

options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};


제일 위에 보면 option 부분이 존재하고 그 안에는 directory "/var/named"; 라고 되어있다.
끝에는 항상 세미콜론이 붙는다. 이 부분은 여기에서 설정한 네임서버의 파일이 존재할 디렉토리를 말한다.
그러니까 여기서 기본 네임서버 설정을 하고 거기에 따른 부수적인 파일들은 /var/named 디렉토리에
위치하여야 한다는 이야기이다.

Zone 이라고 시작되는 부분은 zone 설정영역이라고 하며 이 부분에 캐쉬전용서버, 1차 , 2차 네임서버등에
관련된 설정을 해준다. 설정방법은 다음과 같다.

zone "데이터베이스" {
type (hint|master|slave);
file "존 파일명";
};

여기서 데이터베이스라고 되어있는 부분은 이 값에 따라 두개의 zone 으로 나누어지게 된다.
Option 부분 아래의 zone 부분을 보면 zone "." 이라고 되어있는데 쩜 (.) 이라고 되어있는
데이터베이스는 캐시서버를 의미한다.
윗부분의 zone "데이터베이스" 부분의 데이터베이스는 우리가 실제 설정을 할 진짜 도메인 이름을 넣어준다.
Yadong.com 좋다~~ (^O^)
이렇게 우리가 사용할 도메인 이름을 입력하면 이부분의 zone 영역은 Forward zone 데이터베이스가 된다.

그런데 앞의 설명에서 이름을 IP 주소로, IP주소를 이름으로 바꿔주는게 네임서버 역할이라고 하였다.
우리는 지금 이름을 IP 주소로 바꾸어주는 부분을 설정하였다. 그럼 반대의 경우도 설정을 해주면 된다.
방법은 아래와 같다.

zone "32.249.211.in-addr.arpa" { <== 이렇게 지정하면 reverse zone 이 된다.

};

이때 마지막의 호스트 부분은 적지 않는다. 왜? Network class 부분을 잘 생각해보자..
그렇다면 위의 두 가지 부분을 named.conf 파일에 추가하자..

zone "만들 도메인이름" {}
zone "아이피꺼꾸로.in-addr.arpa" {}

이렇게 설정이 되었다면 {} 안에 들어갈 부분을 작성해야 한다. 위쪽에 보니까 type 부분과 file 부분이 있다.
Type 부분은 hint, master, slave 중에 하나를 써주면 된다.
Hint 는 좌측 페이지의 첫번째 zone 영역을 보면 된다. 그러니까 cache 서버 라는 것을 알 수 있다.
master 부분은 1차 네임서버, slave 부분은 2차 네임서버이다. 2차 네임서버를 지정하여 줄때는
masters { 1차 네임서버 아이피 주소; }; 부분을 반드시 명시해 주어야 한다.

file "존 파일명"; 부분에는 directory 부분에 적혀있는 /var/named 디렉토리에 작성하게 될 zone 영역
파일들을 적어주면 된다.

file "만들도메인.zone"; <== 포워드 존 파일
file "만들도메인.rev"; <== 리버스 존 파일

거의 대부분 이런 형태로 zone 파일을 작성한다.

자 … 이렇게 작성이 되었다면 이제 /var/named 디렉토리로 이동하여 포워드존 , 리버스존 파일을 만들어 주자.
각 영역파일들은 named.local 파일을 복사하여 사용한다.

cp named.local 만들도메인.zone
cp named.local 만들도메인.rev

이렇게 복사를 하였으면 포워드 존 파일부터 수정한다.

vi /var/named/만들도메인.zone

$TTL 86400
@ IN SOA ns.211.249.32.119. root.ns.211.249.32.119. (
20020402 ; serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Mininum(TTL)

IN NS ns.211.249.32.119.

1 IN PTR localhost.


이런 형태의 파일이 보일것이다.
이제 차례대로 알아보자.
위쪽에 보면 @ 부분이 있는데 여기서 자주 헷갈리게 된다. 네임서버 설정에서의 @는 이메일을 보낼 때의
그 골뱅이가 아니고, 자기자신의 호스트를 가르키는 녀석이다.
골뱅이를 써도 되고 진짜 호스트 이름을 적어줘도 된다. 편의상 @로 사용한다.

@ IN SOA localhost.localdomain. root.localhost.

위의 부분은 책에 보니까 SOA 레코드는 해당 도메인에 대해 네임서버가 모든 리소스 레코드 권리를
가지고 있음을 알려주는 레코드. 라고 되어있다.
위에 골뱅이는 설명을 해 놨고 IN 은 네트워킹 어드레스 클래스를 의미하는 것으로 항상 리소스를
지정할 때 사용된다.
SOA 다음에는 1차 네임서버 주소와 관라자의 Email 주소가 있다. 이때 주의하여야 할 것은 여기서
적어주는 도메인은 완전한 도메인 이기 때문에 뒤에 반드시 쩜(.)을 찍어줘야 한다는 것이다.
쩜 빼고 울지말도록..
root.localhost 부분은 이 서버의 관리자 이메일 주소를 적어주는 부분이다.
이때 @를 사용하지 않는다. 이유는 위를 본다.

SOA <== Start of Authority
NS <== 네임서버 리소스
A <== 도메인에 IP 주소를 부여해 주는 레코드
MX <== 메일 익스체인저
CNAME <== 하나의 아이피에 여러 개의 별칭을 가질 수 있게 해주는 레코드

그리고 그 다음에 괄호 부분에는 각 설정 부분이 오게 된다.

20020402 ; serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Mininum(TTL)

여기서 세미콜론은 주석이다.

Serial 부분은 네임서버의 데이터 버전을 나타내는 부분이다. 보통 날짜를 년월일로 적어주지만 맘대로 적어도 된다.
이 부분은 2차 네임서버나 다른 네임서버에서 로컬 네임서버의 데이터를 불러올 때 자신이 가지고 있는 시리얼 넘버와
비교하여 자신의 것보다 높으면 업데이트 된 정보를 가져온다.

Refresh 부분은 2차 네임서버가 1차 네임서버에게 새롭게 업데이트된 정보가 있는지 요청 할 때까지의 시간을 지정한다.
단위는 초단위다. 60초 * 60분 * 3 = 10800 즉 세시간마다 요청을 보낼것이다.

Retry 부분은 2차에서 1차로 연결이 되지 않을 경우 재 연결할 때까지의 대기 시간이다.

Expire 부분은 2차 네임서버가 일정시간 동안 1차 네임서버에 접속하지 못했을 때 이전의 정보는 무의미하다는 것으로
간주하여 이를 파기할 시간을 정하는 부분이다.

Minimum(TTL) 이 부분은 각 zone 파일의 윗부분에 정의된 TTL 변수를 사용하고, 다른 변수에서 자신의 정보를
가져갔을 때 그쪽 서버의 캐시에 그 정보가 얼마나 오랫동안 머물것인지 정한다. 86400 초 후에 삭제된다.


NS 레코드는 해당 도메인에 대한 네임서버를 지정하는 레코드이다.

IN NS ns1.만들도메인.com. <==점 빼먹지 말자. 1차 네임서버

위처럼 지정해 주면 된다. 그리고, 우리는 위에서 적어준 도메인으로 메일도 받아야 한다.
앞 장에 보면 MX 라는 부분이 있다. 이 레코드를 사용하면 된다. 사용법은 아래와 같다.

IN MX 10 만들도메인.com.

MX 다음에 10 이라고 되어있는 부분은 1차 메일서버를 지정하게 된다. 2차 메일서버가 있다면
MX 20 2차도메인.com. <== 이렇게 추가한다.
이때 MX 레코드는 절대 IP 주소로 지정하지 않는다. 왜??? 안되니까… ㅡ,.ㅡ

우리는 지금 Forward zone 을 설정하는 부분이다. 이름을 치고 들어왔다면 그것을 IP로 바꾸어 주어야 하는데
지금은 1차 네임서버 이름만 지정을 하였다. 각 부분은 탭으로 띠어준다. 스페이스바는 사용하지 않는다.

먼저 /etc/named.conf 파일에 zone 영역에 yadong.com 이라고 적어줬다면 이것이 도메인이름이 될 것이다.
그럼 @ 를 써도 되겠지??

@ IN A 211.249.32.119 <==이 부분은 자기의 호스트
즉 /etc/named.conf 에서 yadong.com 이라고 적었다면
그 이름을 치고 들어왔을 때 바꾸어줄 아이피 주소를 적어준 것이다.

//////////////////////////////////////////
www.yadong.com 이라고 치고 들어왔을때는 ???
//////////////////////////////////////////

www IN A 211.249.32.119 <==이렇게 해주면 되겠지??
ns IN A 211.249.32.119 <==ns.yadong.com 이라고 치고 들어왔으면 이렇게 추가해주면 된다.


그럼 완성된 파일을 보자..

$TTL 86400
@ IN SOA ns. yadong.com. root. yadong.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yadong.com.
IN MX 10 yadong.com.
@ IN A 211.249.32.119
ns IN A 211.249.32.119
www IN A 211.249.32.119

위와 같은 형식이 될 것이다. 자~ 여기서 우리는 Forward zone 영역 파일의 설정을 끝냈다.
이제 Reverse Zone 영역을 작성해 보자.

$TTL 86400
@ IN SOA ns.yadong.com. root.yadong.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yadong.com.
119 IN PTR yadong.com.
119 IN PTR www.yadong.com.
119 IN PTR ns.yadong.com.

이렇게 작성하면 된다.
/etc/named.conf 에서 우리는 Reverse Zone 데이터베이스를 설정할 때
zone "0.0.127.in-addr.arpa" 이렇게 적어주었다.
자기 자신의 루프백 주소는 127.0.0.1 이다
이 부분을 잘 보면 마지막의 호스트부분인 1 을 생략하고 나머지 번호를 거꾸로 적었다는 것을 알 수 있다.
내가 사용하고 있는 IP 주소가 만약 211.249.32.119 이라면 뒷부분의 119 부분을 뺀 나머지 부분 211.249.32 를
거꾸로 써주면 되는 것이다. 그러니까 119를 뺀 나머지부분은 이미 설정이 되어있는 부분이기 때문에 IP 주소를
다 써 줄 필요가 없다는 말이다. 그냥 119 라고 적어주고 그 IP 가 들어왔을 때 변환시켜줄 도메인이름을 적어주면 된다.
그리고 PTR 레코드는 IP주소를 도메인 이름으로 변환해 주는 역할을 한다.

이렇게 해서 Reverse Zone 영역의 설정도 끝났다.
이제 막바지 작업이다.
/etc/hosts 에 자신의 도메인정보를 입력한다.
/etc/resolv.conf 에 자신의 도메인 정보를 입력한다.

/etc/rc.d/init.d/network restart 해주고
/etc/rc.d/init.d/named restart 라고 해준다. 에러가 없다면 네임서버 질의를 한다.

nslookup 자기도메인.com <== 이렇게 해서 호스트 이름과 아이피 주소가 나와야 한다.
물론 반대로 IP 주소를 쳐도 이상없이 나와야 한다.

Posted by tornado
|

************************************
SendMail  (http://www.sendmail.org)
작성자 : 유희성
************************************


전자메일이 작동하는 방식은 일반편지와 유사하다.
일반 편지는 종이에 편지를 써서 우체통에 넣어 받는 사람, 보내는 사람의 주소, 이름을 적어 우체통에 넣는다.
그러면 우체통을 우체국 직원들이 체크해서 우체국으로 가져간다.
우체국에서는 해당지역으로 배달되는 것과 외부로 나가는 것을 분리한다.
관할 지역의 메일은 다시 우체부가 집으로 배달해 주고 외부 편지는 중앙 우체국으로 보낸다.

MUA(Mail User Agent) : 연필과 종이에 해당된다.
MDA(Mail Delivery Agent): 편지를 전달하는 우체부
MTA(Mail Transfer Agent): 외부로 메일을 보내는데 사용하는 트럭, 비행기, 기차 등등....

MTA 로는 sendmail, zmail, MMDF 등등이 있다.

Sendmail 은 크게 프로그램인 sendmail과 config 파일인 sendmail.cf로 구분할 수 있다.

Config 파일은 ----  sendmail.cf
       |--  Queue file
       |--  Aliases File 로 나누어 진다.


전송방식 =>>>>>  칠판에 그림 참조.


POP  : 메일서버에서 사용자의 편지를 자신의 MDA로 완전히 이동시킴.
IMAP : 메일서버에서 사용자의 편지를 자신의 MDA로 복사(참조).

먼저 자신의 PC에 메일 프로그램이 깔려있는지 확인하자.

rpm -qa | grep sendmail 이라고 해서 뭐가 나와야 한다. 없다면 깔아야 한다.

rpm -qi sendmail   ===> sendmail 정보확인.
rpm -ql sendmail   ===> sendmail이 어디에 설치되어있나???

그런데 메일 프로그램만 깔려있으면 안된다. 편지를 받아보려면 imap 이라는 패키지가 설치되어있어야 한다.
(pop3 와 imap이 동시에 설치됨)

rpm -qa | grep imap
rpm -qi imap  이라고 체크해보자... (없으면 linux 시디 넣고 깔던지 다운로드 해서 깔던지 해야한다)

뭔가 나왔다면 이녀석들을 돌릴 준비를 해줘야 한다.
일단 우리는 슈퍼데몬(xinetd) 환경에서 돌려줄 것이다.
슈퍼데몬에서 돌아가는지 확인해 보자.

vi /etc/xinetd.d/ipops  에 보면

disable=no 라고 되어있어야 한다.  yes 라면 no 로 바꾸어준다.

vi /etc/xinetd.d/imaps   파일도 위와 같이 고쳐준다.

이제 슈퍼데몬을 restart 시킨다.

/etc/rc.d/init.d/xinetd restart  라고 실행한다.

telnet localhost 110   이라고 쳐서 ok 뜨면 된거다. 110번은 pop3 이다.
안된다면 /etc/xinet.d/ 에 있는 위의 설정파일을 확인해보자

빠져 나올때는 quit 라고 입력한다.

만약 위의 테스트중 계속 에러발생시 포트가 막혀있을 가능성도 있을수 있다.
/etc/services  파일을 보면 그 안에 각 포트 설정이 되어있는데
해당 포트에 주석처리(#)가 되어있는지 잘 살펴보기 바란다.

이제 편지를 받을준비와 보낼 준비는 되었다.
그럼 이제 sendmail 을 설정 해 주자. 설정 파일은 /etc/sendmail.cf 이다.

**************************
SENDMAIL 설정하기
**************************

vi /etc/sendmail.cf

내용이 무쟈게 길다... 줄번호를 붙여서 본다. :set nu 라고 vi 명령창에 쓴다.. 그럼 줄번호 보인다.

여기서 sendmail.cf 파일의 설정 규칙을 잠깐 짚고 넘어가자.

1. 빈 행은 무시한다.
2. # 으로 시작하는 행은 주석처리로 무시한다.
3. C,D,F,H,K,M,O,P,R,S,V 로 시작하는 행은 설정행이며 이들은 각각 하나의 설정명령이다.
4. 하나의 빈 공간 또는 여러개의 빈 공간(TAB) 으로 시작하는 행은 앞 행의 연장이다.

********************
센드메일의 설정 명령어
********************

C : 클래스 정의
D : 매크로 정의
E : 환경변수 지정
F : 클래스 정의 (file, pipe)
H : Header 정의(Format of header)
K : Key file 정의(map 정의)
M : mailer 정의
O : 옵션
P : Message Precedences
R : 덮어쓰기(Rewrite)
S : Ruleset(새로운 규칙지시자)
T : Truseted users( 사용자 지정)
V : 설정 파일 버전


81번째 줄 정도에 Cwlocalhost 이라고 되어있는 부분이 보일것이다.
이 부분은 C설정 명령으로 localhost를 w 클래스로 정의하는 행이다. 기본적으로 localhost가 설정되어있다.
C 명령어는 문자열을 정의한다.

설정 예 : Cwlocalhost yadong.com dolpung.pe.kr
(이때 각 도메인은 진짜 등록되어있어야 한다. 요즘에는 진짜 도메인 아니면 메일이 안간다.
그리고 네임서버 상에서도 제대로 설정이 되어있어야 한다)


84번째 줄 정도에 보면  fw/etc/mail/local-host-names 라는 부분이 보일것이다.
이 부분은 메일을 수신할 호스트 이름을 명시할 파일의 위치를 설정이다.
주석처리되어있으면 절대 안된다. (sendmail 8.9 이하 버젼은 아마 sendmail.cw 파일로 되어있을것이다.)

179번째 줄 근처에 보면
#MaxMessageSize=1000000  이라는 부분이 있는데 여기는 메일의 최대크기를
지정해 주는 문장이다. 그런데 지금은 주석처리가 되어있다. 이렇게 주석처리가 되어있다면 메일크기의
제한이 없다는 것이다. 이부분을 주석을 풀고 용량을 조절하면 개인당 메일용량을 조정할 수 있게 된다.
이곳은 최대 메세지 크기 제한이다.

만약 메일 공간의 용량을 제한하고 싶다면 sendmail.cf 파일의 제일 아랫부분(1484번째 줄인가??)에

Mlocal,         P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
                    M=10485760, T=DNS/RFC822/X-Unix,

이런 부분이 있을꺼다. 여러분의 현재 설정에서는 M=10485760 이라는 부분이 없을텐데
이 부분을 추가해준다. 쉼표도 찍어야겠죠?
이렇게 하면 받는 메일의 용량을 10Mb 로 제한을 하게된다.


274 번 째 줄 근처에
O QueueDirectory=/var/spool/mqueue   라는 부분이 있는데 이부분은 큐 디렉토리를 설정해준다.

293 번째 줄에 보면
O TimeOut.queuereturn=5d   라고 되어있는데 메일을 보내려는 호스트에 문제 발생시 큐 디렉토리에
                           저장하게 된다.

머 이밖에 많은 설정이 있지만 일단 생략하고 자세한것은 따로 책을 보기 바란다.

이제 sendmail.cf 파일의 설정은 대충(정말 대충이다 ㅡ,.ㅡ) 끝났다.

이제 해야할 일은 센드메일의 수신자를 설정하는 일이다. 위에서 sendmail.cf 파일을 설정할때 메일을 받을곳의
호스트 이름을 명시할 파일의 이름이 local-host-names 라는 파일이라는것을 우리는 알았다.
이 파일은 /etc/mail/ 디렉토리 안에 있다.
vi /etc/mail/local-host-names  라고 쳐서 아래와 같이 입력한다.

자기호스트.com      # yadong.com 이 되겠지요??

저장하고 나온다.

이렇게 하면 들어오는 메일의 수신자를 설정하게 된것이다.

이제 남은 설정은 센드메일로의 접근을 제어해 주는 일이 남았다.

/etc/mail/access 라는 파일이 그 역할을 해준다. 이 파일이 해주는 역할은 특정 호스트나 도메인의 접근을
허락, 거부 여부를 설정할수 있는 중요한 파일이다.

vi /etc/mail/access 라고 입력하자..

그럼 파일 내용중에 아래와 같은 부분이 있을것이다.

localhost.localdomain  RELAY
localhost   RELAY
127.0.0.1   RELAY

위의 상황은 자기 자신, 즉 localhost 에서 보내는 편지는 통과(RELAY) 시키겠다고 적어놓은 것이다(default값임)
위의 아랫쪽에 자기의 주소와 IP  번호를 입력하고 RELAY(통과) 시키자.

yadong.com   RELAY
211.108.242.host  RELAY

이렇게 해주게 됨으로써 yadong.com 에서 보내는 편지를 통과 시키겠다!!! 라고 설정이 끝났다.

만약 yadong.com   REJECT 라고 하면 어떻게 될까??
정답은 메일 수신이 안된다는 것이다... REJECT 는 특정호스트에서 오는 편지를 접근 못하게(REJECT) 하는 역할을 한다.

만약 스팸메일이나 받기 싫은 메일이 계속 오게 되면 이곳에 HOST 이름을 적어주던지 IP 번호를 적어주고 REJECT 시키면
메일이 거부된다.

참고로 이 파일(access)는 /etc/sendmail.cf 파일에서
'Kaccess hash -o /etc/mail/access' 로 지정되어있어야 한다.(default 값이니까 안건드려도 된당)

그리고 리눅스에서 센드메일은 기본적으로 localhost 이외의 모든 호스트에 대해서 RELAY 를 허용하지 않도록 설정
되어 있다. 그러니까 이 파일에 RELAY 시킬 호스트 이름과, REJECT 시킬 호스트 이름을 적어줘야 한다.


이제 수정이 끝난 access 파일을 데이터베이스화 시켜주어야 한다.
센드메일은 access 파일을 사용하지 않고 access.db  라는 dbm 파일을 이용한다.

cd /etc/mail
makemap hash /etc/mail/access < /etc/mail/access   라고 입력한다. 에러가 당연히 없어야겠징???

이렇게 다 했으면 센드메일 데몬을 다시 시작 시켜주자.

/etc/rc.d/init.d/sendmail stop
/etc/rc.d/init.d/sendmail start

라고 해주자... 물론 restart 해줘도 된다. 오케바리 떴으면 이제 메일을 보내보자.
수신자는 root@dolpung.pe.kr 로 보내주세요..

mail root@dolpung.pe.kr  이라고 입력한다.
subject:  <===  이부분에 제목을 입력하고 그냥 엔터친다.
프롬프트가 그냥 깜빡이고 있으면 내용을 좌아아아아악 적어준다.

다 입력을 하였으면 ctrl+d 를 살포시 눌러준다. 그럼 Cc:  라는 곳이 뜨는데 참조 이니까 그냥 엔터로 무시한다.


 

Posted by tornado
|

책샀음.

이것저것/낙서장 2005. 8. 24. 10:30


큰도서이미지보기
그린
20,000원18,000원 (10%↓)
540원 (3%)
8957270426
번역서 / 2005-07-30 / 561 쪽

 

 


큰도서이미지보기
Ken Henderson
이종철
Insight (인사이트)
28,000원22,400원 (20%↓)
670원 (3%)
8995300922
번역서 / 2002-11-01 / 724 쪽

 

딱 네번씩만 읽자!

'이것저것 > 낙서장' 카테고리의 다른 글

[펌] 윈앰프 플러그인  (0) 2005.08.26
[펌] 세계 희귀동물 모음집!!!  (0) 2005.08.26
에휴.. 올해는 웬지...  (0) 2005.08.23
인라인 + 홍탁....  (2) 2005.08.22
11000 히트 이벤트!!!  (3) 2005.08.20
Posted by tornado
|

상황..

부모창에는 select 가 있고..  새창을 띠워서 옵션에 들어가는 값을 선택한 후에

부모창의 select 에 add 시킨다.

 

자식창에는 이런 코드가 있다.

var opt = new Option();

opt.text = xxx;

opt.text = yyy;

 

opener.document.formName.select_1.options.add(opt);

opener.document.formName.select_1.selectedIndex = opener.document.formName.select_1.options.length - 1;

 

흠.. 여기서 문제 되는 부분이..

부모창에 있는 옵션에 add 하는 부분이다.

어찌나 에러가 팍팍 뜨던지...

 

알고보니.. Explorer 에서 안된단다. 버그래요 버그 ..

부모창에 자바스크립트 함수 만들어서 처리했음..

 

Posted by tornado
|

이상하게 올해에는 상가집에 자주 간다 ..

친구 어머니가 뇌수술 끝에... 막내 아들을 몰라보실 정도로

고통을 받으시다가 돌아가신게 1월달 ㅡㅡ;

그 뒤로.. 매달 상가집에 갔던것 같다 ..

7월에는 우리 아버지 상 치르고... 8월은 그냥 넘어가나 했더니..

친구 어머니 오늘 돌아가셨다..

친구 눈팅이는 하두 울어서 눈두덩이가 다 부어있다.

보라매 병원 장례식장에서 상을 치루는데..

아마도 내일밤에 가서 밤새고... 화장터 가야 할지도 모르겠다.

 

결혼식장은 안가도... 고인의 마지막 길인 장례식 장에는

어떤 고통이 따르더라도 가야 한다는 내 생각에는 변함은 없다.

'이것저것 > 낙서장' 카테고리의 다른 글

[펌] 세계 희귀동물 모음집!!!  (0) 2005.08.26
책샀음.  (0) 2005.08.24
인라인 + 홍탁....  (2) 2005.08.22
11000 히트 이벤트!!!  (3) 2005.08.20
[phpschool 펌] 죽이는 가습기  (2) 2005.08.18
Posted by tornado
|

JS 로 xml 파일 읽어오는 걸 만들다 보니.. 이것저것 손대게 되네 ^^

아래는 우편번호를 찾는 것인데..

그냥 찾는게 아니라.. 특정 주소를 입력하면 onkeyup 이벤트를 통해

ActiveXObject("Msxml2.XMLHTTP") 를 생성하고.. 그곳에서 XML 값을 리턴받아서

Table 에 add 시키는 것이다..

물론 Refresh 는 없다.

 

이상한거는 테이블이 길어지면 보기 안좋아서.. DIV 로 스크롤 바를 줬는데

테이블 바로 위에 공백이 생긴다 -.-;

 

우편번호는 postman.pe.kr 에서 받았고,

커넥션 풀은 proxool 로 했다.

 

 

화면에 디스플레이 되는 JSP 파일

FileName : Register.jsp

 

<%@ page language="java"
 pageEncoding="euc-kr"
 import="java.sql.*"
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <title>My JSF 'Register.jsp' starting page</title>

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 
<script language="javascript">

 function openDIV(divName){
 
  var obj = document.getElementById(divName);
  var x = event.clientX + parseInt(obj.offsetWidth);
  var y = event.clientY + parseInt(obj.offsetHeight);

  var _x = document.body.clientWidth - x;
  var _y = document.body.clientHeight - y;

  if(_x < 0){
   x = event.clientX + document.body.scrollLeft + x;
  }else{
   x = event.clientX + document.body.scrollLeft;
  }

  if(_y  < 0){
   y = event.clientY + document.body.scrollTop + _y + 20;
  }else{
   y = event.clientY + document.body.scrollTop;
  }

  obj.style.top = y + 30 ;
  obj.style.left = x ;
  obj.style.display = "";
  
  document.forms[0].query.focus();
 }

 

 function closeDIV(divName){
  var obj = document.getElementById(divName);

  if(obj.style.display != "none"){
   obj.style.display = "none";
  }
 }
  
 var req;
 
 function zipcode_check(frm){
  var inputVal = frm.query.value;

  if(inputVal.length < 2){
   return;
  }
    
  req = new ActiveXObject("Msxml2.XMLHTTP");
  if(req){
   req.onreadystatechange = processStateChange;   
   req.open("GET", "SearchAddr.jsp?dong=" + inputVal, false);
   req.send();
  } 
 } 
 
 function processStateChange(){
  if(req.readyState == 4){
   if(req.status == 200){
    var nodes = req.ResponseXML.selectNodes("//addr");
    FillNodes(nodes);    
   }else{
    alert("Ooops : " + req.statusText);
   }
  }  
 } 
 
 // XML 을 읽어들여서 테이블에 채운다.
 function FillNodes(nodes){
  var tableObj = document.getElementById("addrTbl");
  var tableBody = tableObj.childNodes[0];
  var tableRow, tableCell;
  
  if(tableObj.rows.length > 0){
   for(var i = 0; i < tableObj.rows.length; i++){
    tableObj.deleteRow(i);
   }
  }

  for(var i = 0; i < nodes.length; i++){

   var st = nodes[i].selectSingleNode("zipcode").text + " "
      + nodes[i].selectSingleNode("sido").text + " "
      + nodes[i].selectSingleNode("gugun").text + " "
      + nodes[i].selectSingleNode("dong").text + " "
      + nodes[i].selectSingleNode("ri").text + " "
      + nodes[i].selectSingleNode("bunzi").text;
     
   tableRow = document.createElement("TR");
   tableBody.appendChild(tableRow);
   tableCell = document.createElement("TD");
   tableRow.appendChild(tableCell);
   tableRow.runtimeStyle.cursor = "hand";   
   tableCell.innerHTML = st;
  }

  document.getElementById("addrTbl").ondblclick = SelectTR;
  
 }
 
 function SelectTR(element){
  var row ;
  
  if(element == null){
   element = window.event.srcElement;
  }
  
  row = findRow(element);
  
  AddrSelect(element.innerHTML);
  
  
 }
 
 function findRow(element){
  if(element.tagName == "TR"){
   return element;
  }else{
   return null;
  }
 }
 
 function AddrSelect(addr){
  document.forms[0].addr.value = addr;
  closeDIV('FindZipCodePanel');
 }

</script>
</head>
 
 <form name="registerForm" >
<table border="1" align="center" width="500" >
 <tr>
  <td>우편번호 :
   <input type="text" id="zip1" name="zip1" readonly size="3" /> -
   <input type="text" id="zip2" name="zip2" readonly size="3" />
   <input type="button" id="FindZipCodeBtn" name="FineZipCodeBtn" value="우편번호 찾기" onclick="openDIV('FindZipCodePanel')" />
  </td>
 </tr>
 <tr>
  <td>주 소 : <input type="text" id="addr" name="addr" readonly size="40" /></td>
 </tr>
 <tr>
  <td>상세 주소 : <input type="text" id="addrDetail" name="addrDetail" size="40" /></td>
 </tr>
</table>

<DIV id="FindZipCodePanel" style="POSITION: absolute; Display:none; BACKGROUND-COLOR: white; WIDTH:500PX; BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid;BORDER-LEFT: gray 1px solid; BORDER-BOTTOM: gray 1px solid; ">

<TABLE width="100%" align="center" border="1" cellpadding="0" cellspacing="0">
 <TR>
  <TD align="right" bgColor="#D7DED6" height="13"><a href="javascript:closeDIV('FindZipCodePanel');">X</a></TD>
 </TR>
 <TR>
  <TD>주소를 입력하세요</TD>
 </TR>
 <TR>
  <TD><input type="text" name="query"  onkeyup='zipcode_check(this.form)' ondblclick=""/></TD>
 </TR>
 <TR>
  <TD><div id="addrTableDIV" style="OVERFLOW-Y:scroll;WIDTH:100%;POSITION:relative;HEIGHT:200px;BORDER-TOP: gray 1px solid;">
   <table id="addrTbl" border="1" align="center" width="100%" ></table></div></TD>
 </TR>  
</TABLE>   

</DIV> 


<body>


</body>
</html>

 

Query String 을 통해 xml 형식으로 주소를 넘겨주는 JSP 파일

FileName : SearchAddr.jsp

 

 

<?xml version="1.0" encoding="ksc5601"?>
<Address>
<%@ page language="java"
 contentType="text/xml; charset=euc-kr"
 import="java.sql.*"
%><% 

 request.setCharacterEncoding("euc-kr");
 
 String dong = request.getParameter("dong");
 
 if(dong == null){
  return;
 }
  
 Connection conn = null; 
 Statement stmt = null; 
 ResultSet rs = null;
  
 try{
 
  conn =  DriverManager.getConnection("proxool.AjaxSample"); 
  stmt = conn.createStatement();
  
  String query = "select * from zipcode where dong like binary '%" + dong + "%'";
 
  rs = stmt.executeQuery(query);
  
  while(rs.next()){
%>
<addr>
<zipcode><%= rs.getString("zipcode") %></zipcode>
<sido><%= rs.getString("sido") %></sido>
<gugun><%= rs.getString("gugun") %></gugun>
<dong><%= rs.getString("dong") %></dong>
<ri><%= rs.getString("ri") %></ri>
<bunzi><%= rs.getString("bunzi") %></bunzi>
<seq><%= rs.getString("seq") %></seq>
</addr>
<%     
  }
  
 rs.close();
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  if(stmt != null) stmt.close();
  if(conn != null) conn.close();
 }
%></Address>

'DHTML > AJAX' 카테고리의 다른 글

[참고할곳] http://www.endless.com/  (0) 2007.01.19
The Lightbox Effect without Lightbox  (0) 2007.01.11
http://prototype-window.xilinus.com/  (0) 2006.11.30
[펌] AJAX (Asynchronous Javascript and XML)  (0) 2005.06.28
ajax 볼것....  (0) 2005.06.28
Posted by tornado
|

다채로운 테크닉으로 중무장한 키보드를 내세워 펼쳐내는 심포닉함과 클래시컬함!

스웨덴발 멜로딕데쓰메틀밴드 Skyfire을 이렇게 설명할 수 있겠다.

일본에서 널리 알려진 Skyfire는 국내에서도 공연을 가질 정도로 아시아권에서도 잘

알려진 그룹이다.

 

이들의 2003년 앨범 <Mind Revolution>에서 멜로딕데쓰의 화려함을 보여주는

동명 타이틀곡 'Mind Revolution'을 감상해 보자.

 

'이것저것 > 음악' 카테고리의 다른 글

[펌] 슈퍼마리오 아카펠라Ver.  (0) 2005.09.14
[펌] Incubus - Drive  (0) 2005.08.31
[펌] Metallica - Creeping death (Moscow Live)  (0) 2005.08.22
[펌] Tommy Emmanuel - Classical Gas  (0) 2005.08.22
[펌] Tommy Emmanuel  (0) 2005.08.22
Posted by tornado
|