즐거운 토요일 여차저차 이렇게 저렇게 해서 산이가 아빠회사에 왔습니다.
다음에도 또 온다고 합니다...뭔가 산이맘에 드는게 있었나 봅니다.





사무실 파티션 한쪽에 내가 가장 사랑하는 사람들의 사진을 붙여놓았습니다.
정리를 안해서 정신없고 난리가 난.. 거의 피난민촌같은 분위기지만
짜증나고 힘들때 고개를 돌리고 잠시 쳐다보면...그렇게 힘이 될수가 없습니다.

'Photo Album > Family' 카테고리의 다른 글

20060717 서대문견문록 - 단체사진  (0) 2006.07.17
20060715 아웃백에 갔어요  (0) 2006.07.15
20060707 Sushi  (0) 2006.07.07
20060615 신포만두  (0) 2006.06.15
20060606 양재 시민의 숲  (0) 2006.06.06
0.9x.. 처음 시작이 어느버젼이었는지도 기억이 나지않습니다.
오래전부터 개인적으로  Win2K + IIS5.0 + MS-SQL2K 를 사용하는 개발서버에 청소를 좀 해서
PHP를 붙이고 MySQL을 세팅해서 나만의 블로그를 돌리기 시작했었습니다.

그전까지 한참 싸이에 올렸던 데이터도 다 긁어모아서.. 우리 아들들의 자라나는 모습을 담아놓는 블로그를 만들고 싶었고 지금까지 군데군데 구멍이 좀 보여도 나름대로 풍성한 사진을 가진 블로그(사실은 포토로그 인가?) 를 만들었습니다....

뭐 여차저차 해서... 티스토리까지 오게 되었습니다.
기존에 올렸던 데이터가 마이그레이션 되서 홀랑 올라가니 맘은 편합니다.

1.x 버젼대를 사용하시던 기존 태터 유저분들은 아직 티스토리가 부족하다 말씀하시지만..0.96 쓰다가 티스토리를 쓰는 제게는 훨씬 편한 UI와 기능들이 맘에 듭니다...

이제 위치로그와 태그 정리하러 가야겟숨다~

허름한 내집 팔고 새 아파트 전세로 들어가는 기분....
그래도 새집이라..아직 보수할건 많아도... 새집이라 기분은 좋습니다..

이참에 개발서버도 함 밀어버려야겠슴다... 정리못한지 몇년째인지..^^

'Talk About > Dsus4’s Mind' 카테고리의 다른 글

Faith in Motion  (0) 2006.09.29
나는 운전이 무섭다  (2) 2006.08.16
사진을 올려야 하는데~  (0) 2006.02.17
기념 [記念·紀念, 기념하다, 기념되다]  (0) 2005.10.30
개념 [槪念, concept]  (0) 2005.10.20
산이엄마가 땡긴다고 해서 간만에 사고치러 갔습니다.



'Photo Album > Family' 카테고리의 다른 글

20060715 아웃백에 갔어요  (0) 2006.07.15
20060715 아빠회사  (0) 2006.07.15
20060615 신포만두  (0) 2006.06.15
20060606 양재 시민의 숲  (0) 2006.06.06
20060419 PS2 삼매경  (2) 2006.04.19
쫄면을 먹으러 신포만두에 갔슴다..



'Photo Album > Family' 카테고리의 다른 글

20060715 아빠회사  (0) 2006.07.15
20060707 Sushi  (0) 2006.07.07
20060606 양재 시민의 숲  (0) 2006.06.06
20060419 PS2 삼매경  (2) 2006.04.19
20060411 HomeGround  (0) 2006.04.11
교회에서 연합승천예배를 갔습니다...
간만에 우리식구들도 나들이를 갔지요~



'Photo Album > Family' 카테고리의 다른 글

20060707 Sushi  (0) 2006.07.07
20060615 신포만두  (0) 2006.06.15
20060419 PS2 삼매경  (2) 2006.04.19
20060411 HomeGround  (0) 2006.04.11
20050411 COFFEE & DONUTS  (0) 2006.04.11
산이랑 강이랑... 강이꺼는 고장난 패드인데...
자꾸 형님꺼에 눈독을...



'Photo Album > Family' 카테고리의 다른 글

20060615 신포만두  (0) 2006.06.15
20060606 양재 시민의 숲  (0) 2006.06.06
20060411 HomeGround  (0) 2006.04.11
20050411 COFFEE & DONUTS  (0) 2006.04.11
20060408 진해 벗꽃나들이  (0) 2006.04.08
누가 뭐래도 집이 젤 편합니다.



'Photo Album > Family' 카테고리의 다른 글

20060606 양재 시민의 숲  (0) 2006.06.06
20060419 PS2 삼매경  (2) 2006.04.19
20050411 COFFEE & DONUTS  (0) 2006.04.11
20060408 진해 벗꽃나들이  (0) 2006.04.08
20060330 다시 일상으로  (0) 2006.03.30
DUNKIN DONUTS 에 갔슴다...






'Photo Album > Family' 카테고리의 다른 글

20060419 PS2 삼매경  (2) 2006.04.19
20060411 HomeGround  (0) 2006.04.11
20060408 진해 벗꽃나들이  (0) 2006.04.08
20060330 다시 일상으로  (0) 2006.03.30
20060121 이번에도 산이는 ㅜ.ㅜ  (0) 2006.01.21
온가족이 함께 진해꽃구경 다녀왔어요...
물론 갔다와서 어처구니없이 퍼져버렸지만...
좋아하는 산이,강이 모습에...











'Photo Album > Family' 카테고리의 다른 글

20060411 HomeGround  (0) 2006.04.11
20050411 COFFEE & DONUTS  (0) 2006.04.11
20060330 다시 일상으로  (0) 2006.03.30
20060121 이번에도 산이는 ㅜ.ㅜ  (0) 2006.01.21
20060118 닭집 할아버지와 만나다...  (0) 2006.01.18
다시 일상이 시작됩니다...
늘 위태위태 하지만... 그래도 이넘들을 보고 있으면..


'Photo Album > Family' 카테고리의 다른 글

20050411 COFFEE & DONUTS  (0) 2006.04.11
20060408 진해 벗꽃나들이  (0) 2006.04.08
20060121 이번에도 산이는 ㅜ.ㅜ  (0) 2006.01.21
20060118 닭집 할아버지와 만나다...  (0) 2006.01.18
20051102 형님몰래 아웃백에  (0) 2005.11.02
그간 찍어놓은 사진들을 또 올려야겠는데..

메모리 리더기가 가출을 했따...

젠장..

그나마 바빠서 사진도 얼마 못 찍었는데..

리더기가 없어서 이러지도 저러지도 못하는 상황...

설상가상 사면초가..업친데 덥치고...

음.... 리더기를 찾아야지..
별다른 설명이 없는 많은 사진들... 봅시다~




'Photo Album > Family' 카테고리의 다른 글

20060408 진해 벗꽃나들이  (0) 2006.04.08
20060330 다시 일상으로  (0) 2006.03.30
20060118 닭집 할아버지와 만나다...  (0) 2006.01.18
20051102 형님몰래 아웃백에  (0) 2005.11.02
20051012 첨봐?  (0) 2005.10.12
닭집 할아버지와 친해졌습니다... 버거임금님과의 관계는 좀 소홀해졌죠...
다음에 갔을때 임금님이 없어졌습니다.
에이...있을때 잘해줄껄..



'Photo Album > Family' 카테고리의 다른 글

20060330 다시 일상으로  (0) 2006.03.30
20060121 이번에도 산이는 ㅜ.ㅜ  (0) 2006.01.21
20051102 형님몰래 아웃백에  (0) 2005.11.02
20051012 첨봐?  (0) 2005.10.12
20050922 두 못난이...  (0) 2005.09.22
2005년의 마지막 날이 좀전에 시작되었다...

정말 간만에 미친듯이 일도 해봤고...
2005년은 시작부터 마칠때까지 늘 날 긴장하게 했다...

아직도 끝나지 않았다... 마지막 하루...

또 뭐가 내 등에 칼을 꼽을것인가....

등에 구멍이 숭숭~ 뚧어진듯 하다...

올한해..정말 아내에게 미안하고.... 그 미안한 마음때문에...
그리고 그 힘들어하는 모습에 ... 마지막에 와서 더욱더 일에 매달렸는지도..

내년엔 행복했으면 좋겠다...

늘 하는 신년인사처럼 올한해도 늘 행복하고 즐겁게...보냈으면..

다른 무언가로 인해서 아파하지 않았으면...슬퍼하지 않았으면..





다른 누군가로 인해서 상처받지 않았으면...

'Talk About > Life Story' 카테고리의 다른 글

엄마닮아서 이쁘답니다....  (1) 2006.09.25
나의 왼발  (1) 2006.08.10
첫출근 ㅡㅡ;  (0) 2005.10.10
두달간의 공백, 새로운 시작  (0) 2005.06.21
불이야!~  (1) 2004.10.25
IIS의 디폴트 버퍼가 작아서 큰 데이터가 리퀘스트 될때 에러가 납니다. 그게 파일이던 폼 데이터이던 간에 한방에 에러를 잡아봅시다.


1. IIS6.0 콘솔에서 컴퓨터이름 > 속성 > 메타베이스 직접 편집 허용 체크합니다.

2. C:WINDOWSsystem32InetsrvMatabase.xml 을 NotePad로 엽니다.

3. AspBufferingLimit="4194304" 값을 크게 변경

4. AspMaxRequestEntityAllowed="204800" 값을 크게 변경

5. IIS를 Reset 한 후 확인해보십시오.
서버에 오피스2003이 깔려있는 관계로 CreateObject("Excel.Application") 명령어를 써서
엑셀파일을 업로드 하여 DB를 통채로 갈아엎어볼라고 했더만
난데없는 권한오류가 떡하니 나타난거시당...

한참을 삽질후에 GOOGLE을 거쳐 WROX사이트에서 답을 발견하였으니..

어쨋던 이래서 난 빨간책 팬인가보다...

http://p2p.wrox.com/topic.asp?TOPIC_ID=24857

1. From command prompt type "dcomcnfg.exe"

2. You will see Component Management window

3. Component Services --> Computer--> My Computer--> DComConfig

4. From the tree view select Microsoft Excel Application?

5. Right-Click on it & select Properties.

6. From the property window select the Security Tab.

7. Then for all the three options select Customize Radio button (or according to your need)

8. Add ASPNET user account to all the three

9. Give appropriate permission to them

10. Then click Apply.


짤없음.. 앞으로 다른 DCOM 서비스도 문제가 되면 한방에 ^^

2003은 당췌 파고 또 파도... 알수가 없는게 너무 많다.
- FCKeditor (http://sourceforge.net/projects/fckeditor/)
* IE의 Editor Object 를 이용하여 제작
* jsp, php, asp에 대응하는 이미지 업로드 및, 브라우징 기능
* 미리 정의된 3가지 형태의 툴바 형태제공
* 간편하게 기존 소스에 추가 가능
* 테이블 편집 기능 지원
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요
* 다양한 언어 지원(한글포함)
* 완성도 높음.. 강추!

- HTMLarea (http://sourceforge.net/projects/itools-htmlarea)
* 이미지 업로드 지원 안함
* 풀스크린 편집 지원
* 영문메뉴만 지원
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음
* PHP Image Editor 지원 (http://sourceforge.net/projects/imgmngedt/)
* 한글화 및 이미지업로드만 커스터마이징하면 FCK에 떨어지지 않을듯

- SPAW web-based WYSIWYG editor control (http://sourceforge.net/projects/spaw/)
* 예쁜 디자인
* 이미지 라이브러리 기능
* 이미지 업로드 지원 안함
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음
* 디자인만 놓고 보면 최고! 그러나 이미지삽입부분이 맘에 들지 않고, 사소한 버그가 좀 있는듯.

- hypertextarea (http://sourceforge.net/projects/hypertextarea/)
* 기본적인 기능만 제공
* 이미지 업로드 지원 안함
* 심플한 디자인
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음
* 바로 갖다 쓰기엔 스크립트에러의 압박이 심함..

- RichText-editor (http://sourceforge.net/projects/richtext/)
* 브라우저 언어설정이 한글인경우 문제있음(한글지원 커스터마이징 필요)
* 이미지 업로드 지원 안함
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음
* 한때는 꽤 잘나가는 녀석이었는데... 이제는 경쟁력이 떨어짐.. 가져다 쓰려면 고쳐야 할것도 많음.

- aynHTML (http://sourceforge.net/projects/aynhtml/)
* 이미지업로드 지원
* 이미지 저장소 지원
* 깔끔한 디자인
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음
* 나름대로 깔끔함.. 소스보기시 컬러링도 해주고.. 간단히 쓰기엔 좋을듯

- XsDhtmlEditor (http://sourceforge.net/projects/xsdheditor/)
* 심플한 디자인
* 이미지 업로드 지원
* 타 사이트 내용 copy&paste시 이미지 경로 변경 필요 없음
* 바로 쓰기에는 버그가 좀 있음.

- bpEditor ( http://sourceforge.net/projects/bpeditor/)
* 만들다 만듯..ㅡㅡ


출처 : http://tong.nate.com/kiskim/7016143
산이가 없을때 아웃백을 갔어요~


'Photo Album > Family' 카테고리의 다른 글

20060121 이번에도 산이는 ㅜ.ㅜ  (0) 2006.01.21
20060118 닭집 할아버지와 만나다...  (0) 2006.01.18
20051012 첨봐?  (0) 2005.10.12
20050922 두 못난이...  (0) 2005.09.22
20050921 유치원 놀이터  (0) 2005.09.21
기념(記念·紀念)[명사][하다형 타동사][되다형 자동사]
1.뒤에 어떤 일을 상기할 근거로 삼음, 또는 그 물건.
¶졸업 기념으로 사진을 찍다.
2.지난 일을 상기하여 기억을 새롭게 함.
¶개교 30주년을 기념하다.

기념 단어장에 추가
기념 記念 commemoration; remembrance; memory
하다 [사물을] commemorate; [사람을] be in memory of (사물이 주어)
·기념하는 in commemorative; memorial
·기념으로 in remembrance of; as a memento[keepsake]; in token of; in commemoration of (사물을); in memory of (사람을)
·기념할 만한 날 a memorable day






기념..............................................젠장...

'Talk About > Dsus4’s Mind' 카테고리의 다른 글

티스토리로 이주를 완료했습니다.  (0) 2006.07.12
사진을 올려야 하는데~  (0) 2006.02.17
개념 [槪念, concept]  (0) 2005.10.20
* 행복한 부부는 이렇게 *  (0) 2005.08.31
스킨변경 및 주저리  (3) 2005.01.17
Firefox를 사용해야 하는가?
“...nothing short of a revelatory experience.”
- Maximum PC
“...a breath of fresh air... Microsoft should be worried.”
- FORBES

팝업 차단
원치 않고 방해가 되는 광고 팝업을 차단 시켜 줄 뿐 아니라 스파이웨어로 인한 팝업이 없어져 원활한 웹서핑이 가능해집니다.

탭 브라우징
여러 개의 웹사이트를 방문 할 때 각자 창을 열어 사용했지만 탭브라우징을 통해서 한개의 창에서 각 웹사이트를 모두 볼 수 있으며 쉽게 이동이 가능합니다.

스마트 검색
도구 모음에서 바로 구글 검색을 할 수 있으며, 필요한 경우 원하는 검색엔진을 정해서 자신 만의 검색이 가능합니다. 또한 "사전 단어" 형식의 스마트 검색도 가능합니다.

개인 정보 보호 및 보안
파이어폭스는 스파이웨어나 악의적인 ActiveX가 설치되는 것을 원천적으로 차단 합니다. 암호 관리자, 보안 관리자 항목을 통해 손쉽게 보안 설정을 하실 수 있습니다.

강력한 다운로드 기능
파일이 기본적으로 바탕화면에 저장되어 찾기 쉬우며, 다운로드 일정 및 재시도 등 강력한 파일 다운로드 관리 기능이 내장되어 있습니다.

편리한 웹브라우징
웹브라우징에 필요한 북마크, 방문 기록, 전체 화면, 화면 확대 축소 등 모든 기능이 망라되어 있습니다.

나만의 브라우저
Firefox는 내 취향에 맞게 모든 설정을 바꿀 수 있는 브라우저입니다. about:config를 통해 브라우저 속성을 변경할 수 있으며, 수백개의 확장 기능과 브라우저 테마를 추가할 수 있고 원하는 검색 엔진에서 검색이 가능합니다.

빠른 설치 프로그램
4.7MB (윈도우) 정도의 용량인 파이어폭스는 다운로드와 설치가 매우 쉽고 Internet Explorer와의 연동이 바로 이루어 지며, 버전 업그레이드 시 이전 프로필을 바로 사용할 수 있습니다.

개발자들에게 더 강력한 기능
파이어폭스는 표준 웹 기술을 적용하여 만들어 졌기 때문에 강력한 JavaScript 및 CSS 에러 및 경고 기능을 갖추고 있습니다. 웹 개발시 보다 편리하게 이용 할 수 있습니다.

스팸 없는 편지함
스팸 없는 편지함을 원하셨다면 바로 썬더버드를 만나보세요.

전통적 논리학에 따르면, 한 무리의 개개(個個)의 것에서 공통적인 성질을 빼내어 새로 만든 관념(觀念).
본문
예를 들면, 부모 ·형제 ·친구 ·명사(名士) ·자기자신이라는 개개인에 공통되는 성질, 즉 인간이라는 성질에 대한 관념이 만들어졌을 때 이 관념을 인간의 개념이라고 말한다.

또 일단 개념이 몇 가지 만들어지면 그 몇 가지 개념이 저마다 나타내는 성질을 통일하는 성질에 관한 개념도 만들 수 있다. 가령 개 ·고양이 ·새 ·물고기 ·벌레 등의 개념에서 동물의 개념을, 동물 ·식물의 개념에서 생물의 개념을 만들 수 있다.

현대논리학의 입장에서는 관념이라는 심리주의적인 용어를 피하는 것이 보통이며, 따라서 개념이라는 말도 별로 쓰지 않는다. 그러나 집합이 대체로 개념에 해당한다고 생각해도 좋다. 예를 들면, “x는 인간이다”라는 조건을 충족시키는 것 전체가 인간이라고 하는 집합이다. 일반적으로 ‘x는……’이라는 형태의 조건문을 충족시키는 것 전체가 이 조건문의 외연(外延)이며, 조건문의 외연 자체를 하나로 취급할 때 이를 집합이라고 한다. 그러한 의미에서 집합을 개념이라고 하는 경우도 있다.

일상적인 용어로는 한 인간이 어떤 사항에 관하여 그것이 어떤 것인지 짐작을 하는 경우 그 인간은 그 사항에 대하여 개념을 가지고 있다고 한다. 가령 비행기를 타본 적이 있는 사람, 비행기를 본 적이 있는 사람, 비행기에 관한 설명을 읽어서 어느 정도 이해한 적이 있는 사람은 저마다 다소간 비행기에 관한 개념을 가지고 있다고 할 수 있다. 이러한 의미에서의 개념이란 지식과 거의 같은 뜻으로 쓰인다. 또, 새로이 접한 하나의 사항에 대한 경험을 거듭하여 그 사항에 잘 통하게 되는 것을 ‘개념을 파악한다’는 말로 표현하기도 한다.

'Talk About > Dsus4’s Mind' 카테고리의 다른 글

사진을 올려야 하는데~  (0) 2006.02.17
기념 [記念·紀念, 기념하다, 기념되다]  (0) 2005.10.30
* 행복한 부부는 이렇게 *  (0) 2005.08.31
스킨변경 및 주저리  (3) 2005.01.17
ReStart  (0) 2004.12.14
다트리마가 이끄는 하이 엘프는 칼림도어를 뒤로 하고 혼돈의 소용돌이에서 몰아치는 폭풍에 맞서 앞으로 나아갔다. 이들은 오랜 시간 동안 세계를 두루 돌아다니며 그들이 머문곳마다 신비로운 유적들과 잃어버린 왕국을 보았다. 선스트라이더('대낮에 활보하는 자')로 이름을 바꾼 다트리마는 자신의 동족을 위한 새로운 국가를 건설하고자 목초가 무성한 곳을 찾아 다녔다.



다트리마와 그의 동족은 마침내 훗날 인간이 로데론이라고 부른 왕국의 해안에 이르렀다. 대륙으로 들어간 하이 엘프들은 고요한 티리스팔 숲에 새로운 정착지를 건설했다. 하지만 몇 년 후 많은 하이 엘프들이 미쳐가기 시작했다. 그 지역의 지하에 사악한 무엇인가 잠들어 있기 때문이라는 소문이 있었지만 그 소문이 사실인지는 끝내 확인되지 않았다. 결국 하이 엘프들은 야영지를 철수하고 초목이 무성한 북쪽 땅으로 옮겨갔다.



로데론의 바위투성이 산악 지대를 넘어가면서 하이 엘프들의 여행은 더욱 위험해졌다. 하이 엘프들은 영원의 샘에서 흘러나오는 생명 에너지와 사실상 단절되었기 때문에 상당수가 추운 날씨로 병에 걸리거나 굶어 죽었다. 하지만 그 중에서도 가장 혼란스러운 변화는 그들이 더 이상 불로불사하거나 자연에 대한 면역력을 갖지 않게 되었다는 사실이었다.

하이 엘프들은 키도 약간씩 줄고 그들만이 지녔던 보랏빛 피부도 점점 빛을 잃어갔다. 이 많은 고난에도 불구하고 이들은 칼림도어에서 볼 수 없었던 수많은 희귀 생물과 접하게 되었고 이 고대의 숲 전역에서 사냥을 하는 원시 인간 부족들도 만나게 되었다. 하지만 그들이 만난 가장 위협적인 존재는 탐욕스럽고 교활한 줄아만의 숲 트롤이었다.

피부가 이끼로 덮인 이 트롤들은 잘려나간 사지를 다시 자라게 하고 심각한 신체의 부상을 치유하는 능력을 지녔으나 야만적이고 사악한 종족이었다. 아마니 제국은 로데론 북부의 대부분을 차지했고, 트롤들은 외부인이 자신들의 영토에 들어오는 것을 막기 위해 열심히 싸웠다. 엘프들은 포악한 트롤에게 깊은 혐오감을 으끼게 되어 트롤이 눈에 뛸 때마다 처치해 버렸다.



여러 해가 흘러 하이 엘프들은 마침내 칼림도어를 연상시키는 땅을 찾게 되었다. 이들은 로데론 북부의 깊숙한 숲에 쿠엘탈라스 왕국을 세우고 이를 칼도레이 동족의 제국보다 훨씬 강력한 제국으로 만들 것을 맹세했다. 하지만 안타깝게도 엘프들은 트롤이 아직도 성지로 여기고 있는 고대 트롤 도시 위에 쿠엘탈라스를 세운것을 알게되었고 곧 트롤들은 엘프의 정착지를 집단으로 공격하기 시작했다.


엘프들은 새로운 터전을 포기하지 않은 채 완강하게 버티며 영원의 샘에서 조금씩 모아두었던 마법을 사용해 야만적인 트롤들이 더 이상 접근하지 못하도록 막았다. 다트리마의 지휘 아래 엘프들은 10대 1의 수적인 열세를 극복하고 아마니 전투부대를 물리칠 수 있었다. 칼도레이의 오랜 경고를 기억하는 일부 엘프들은 마법의 사용이 추방 당한 불타는 군단의 주목을 끌지도 모른다고 생각했다.

그래서 그들은 계속해서 마법을 사용할 수 있도록 자신들의 땅에 보호 장벽을 세우기로 결정했다. 그들은 쿠엘탈라스를 둘러싼 다양한 위치에 마법 장벽의 경계를 표시하는 일련의 거대하고 튼튼한 마법석을 세웠다. 이 마법석은 엘프의 마법이 외부의 위협에 노출되지 않도록 숨겨주었을 뿐 아니라 미신을 믿는 트롤 전투부대에게 겁을 주어 접근하지 못하게 하는 역활도 했다.

시간이 흘러 하이 엘프의 노력과 탁월한 마법 능력 덕분에 쿠엘탈라스는 완성된 제국의 모습을 갖추게 되었다. 그들의 완성된 제국의 모습을 갖추게 되았다. 그들의 아름다운 성은 칼림도어의 고대 전당과 동일한 건축양식으로 지어졌으나 주변의 자연 환경과 훨씬 잘 어우러졌다. 쿠엘탈라스는 엘프들이 그토록 만들고 싶어했던 화려한 보배가 될 것이다.

쿠엘탈라스의 지배층으로 실버문 의회가 구성되었지만, 정치적의 상당 부분은 선스트라이더 왕조가 쥐고 있었다. 일곱 명의 최고 위급 하이 엘프 군주로 구성된 이 의회는 엘프의 영토와 동족의 안전을 지키기 위해 일했다. 보호 장벽에 둘러싸인 하이 엘프들은 칼도레이의 오랜 경고에도 흔들리지 않고 거의 모든 생활 속에서 마법을 마음껏 사용했다.

하이 엘프들은 완전히 격리된 안전한 왕국 안에서 거의 4천년을 평화롭게 지냤다. 하지만 앙심을 품은 트롤들은 그리 쉽게 좌절 하지 않았다. 그들은 깊은 숲 속에서 음모를 꾸미고 전투부대의 수가 늘어나길 기다리고 있었다. 마참내 강력한 트롤 군대가 어둠의 숲으로부터 돌격해 와 쿠엘탈라스의 빛나는 첨탑에 다시금 공격을 가히기 시작했다.

by 나루세가

'Hobby & Joy > Games' 카테고리의 다른 글

[Wii]마리오와 소닉의 베이징 올림픽  (0) 2008.09.23
자..달려봅시다.  (0) 2007.02.02
실리더스, 안퀴라즈의 역사  (0) 2005.10.14
요즘은 WOW 시대...  (1) 2005.01.04
베르세르크  (3) 2004.10.13
웹 애플리케이션은 일반적으로 사용자에게 많은 양의 정보를 제공하기 위해 페이징 기법을 사용한다. 예를 들어 인터넷 검색엔진은 사용자의 쿼리 결과로 대용량의 결과값을 반환한다. 이 때 검색엔진이 한번에 결과값 전체를 반환하게 되면 결과값을 받는 클라이언트측 시스템에 과부하가 발생 할 수 있다.
하지만 페이징 기법을 사용하게 되면, 반환되는 결과값을 클라이언트측과 서버측 양쪽에서 관리할 수 있을 만큼의 고정된 크기의 블록으로 구분하여 한 번에 이동시키는 정보의 양을 줄일 수 있다. 애플리케이션에서는 한 번 에 소수의 레코드만 사용자에게 보내게 되며, 결과값 중에서 사용자가 필요로 하는 정보만 반환하게 된다.

페이징 기법을 사용하면 데이터를 사용자가 좀 더 이해하고 표현하기 쉽게 해 줄 뿐만 아니라, 대량의 정보를 조회하고 표현하기 위해서 시스템에 불필요한 과부하가 발생하여 결국 시스템의 성능에 악영향을 미치지 않도록 통제하기 때문에 전체적인 시스템 성능을 향상시키게 된다.
정상적으로 시스템에 반환된 결과값 레코드가 페이징되었다면, 검색엔진을 사용하는 사용자는 대부분 맨 처음 한 페이지 또는 일부 페이지만 조회하게 될 것이다.

불행하게도 많은 프로그래머들이 페이징 관련해서 성능측면에서 매우 중요한 고려사항에 대해서 잘 모르고 있다.
IIS와 SQL Server를 사용하는 환경에서는, AbsolutePage, PageSize, PageCount와 같은, 표준 ADO RecordSet 페이징 기능을 사용하는 것이 가장 일반적인 페이징 기법이다.
소량(수십 또는 수백 레코드 정도)의 데이터에 대해서는 이러한 기능을 사용하면 정상적으로 동작하고, 시스템의 성능측면에서도 부하를 발생시키지 않는다. 하지만 레코드 수가 증가하게 되면, 이러한 기능을 사용하게 되면 효율성이 감소하게 되고 전체적인 애플리케이션의 성능에 악영향을 미치게 된다.

대량의 발주정보를 조회해야 하는 구매조달관련 애플리케이션, 수 천명의 회원이 동시에 접속하는 미팅 웹사이트, 고객의 검색조건에 따라 수백 개의 상품의 정보를 표시해야 하는 대규모 전자상거래 웹사이트와 같이, 대용량 데이터를 처리해야 하는 애플리케이션의 경우에는 좀 더 개선된 서버측 페이징 기술이 필요하게 된다. 이번 호의 기사에서는 수백만 개의 행정보를 포함하는 테이블에서도 사용할 수 있는 페이징 기법에 대해서 소개하고자 한다.


ADO RecordSet 페이징 기법의 한계


대용량의 레코드를 페이징하기 위해서 ADO RecordSet의 페이징기법을 사용할 때 발생하는 문제의 원인은 ADO에서 데이터를 처리하는 방법 때문이다.
ADO 기술구조에서는 데이터베이스에서 정보를 조회하기 위해 서 조회의 대상이 되는 데이터에 대한 포인터를 관리해야 할 필요가 있다.
데이터에 대한 포인터를 커서 라고 하며, 클라이언트측(예를 들어 ASP 페이지)에서는 각 레코드를 건별로 조회하게 된다.

ADO RecordSet 개체는 서버측 커서(기본값)와 클라이언트측 커서 유형을 지원한다.
서버측 커서를 사용하게 되면 모든 데이터는 그대로 SQL Server에 두고, 해당 데이터가 필요한 시점에 순서에 따라 각 레코드를 조회하게 된다.
클라이언트측 커서를 사용하게 되면 필요한 모든 데이터를 클라이인트로 전송한 다음, 클라이언트측 커서를 사용하여 클라이언트측 버퍼 메모리에 있는 데이터를 레코드별로 조회하게 된다.
검색엔진 예제에서처럼 쿼리의 결과값 중에서 일부분만을 표시하거나 사용해야 하는 경우라면 SQL 서버가 클라이언트에서 요청하는 페이지만 전송하고 전체 결과값 중 나머지 레코드는 데이터베이스 서버에 그대로 남겨두게 되는, 서버측 커서를 사용하는 것이 효율적이다.
서버측 커서를 사용하게 되면 클라이언트로 전송되는 레코드 수가 특정 페이지를 구성하는 20~30 레코드 정도로 제한된다는 것이다.

PageCount 와 같은 일부 레코드셋 페이징 기능을 사용하기 위해서는 클라이언트측 커서를 사용해야 한다.
클라이언트 커서를 사용할 수 있도록 ADO를 설정하기 위해서는 RecordSet의 ClientLocation 속성을 adUseServer에서 adUseClient로 변경해 주면 된다.
[리스트 1]의 VB 코드는 RecordSet 개체에서 클라이언트측 커서와 서버측 커서를 사용하는 방법에 대한 예제가 나타나 있다. ClientLocation 속성을 asUseClient 로 변경하게 되면, 사용자 쿼리의 결과로 반환되는 데이터에서 필요로 하는 페이지 수를 판단하기 위해 결과값 전체가 클라이언트로 전송된다.

예를 들어 데이터베이스로부터 5000 레코드를 반환하는 쿼리를 실행했다고 가정하자.
애플리케이션에서 서버측 커서를 사용하게 되면 반환되는 레코드를 한 페이지당 20 레코드씩으로 페이징하고, 사용자가 1 페이지만 보고 있는 경우라면 애플리케이션에서는 클라이언트로 맨 처음 페이지를 구성하는 20 레코드만을 전송하면 된다.
그 다음 사용자가 두번째 페이지로 이동하면 애플리케이션에서는 21~40번 레코드만 클라이언트로 전송하게된다. 반면에 클라이언트측 커서를 사용하게 되면 ADO에서는 비록 사용자가 단지 첫 페이지에 해당하는 20 레코드만 필요한 경우라도 5000 레코드 전체를 클라이언트로 전송하게 된다.
이렇게 전체 레코드를 전송하게 되면 결과값이 사용자에게 나타나는 시간이 지연되게 되고, 반환되는 레코드수가 매우 많은 경우에는 성능에 심각한 악영향을 미칠 수 있다.

다른 페이징 기법

ADO RecordSet 페이징 기법과 관련한 문제가 애플리케이션의 성능에 영향을 미치게 되었기 때문에 필자는 수천 레코드를 페이징해야 하는 웹 애플리케이션에서 사용할 수 있는 다른 페이징 기법을 찾아 보았다.

SQL 서버의 인덱스를 활용하여 전체 결과집합 중에서 상위의 레코드를 선택하는 방법을 소개하고자 한다.

다음은 Northwind 데이터베이스의 Orders 테이블에서 상위 10개의 레코드를 선택하는 쿼리이다.

SELECT TOP 10 * FROM Orders

위의 구문을 활용하면 전체 결과집합에서 10 개의 레코드 단위로 결과값이 반환되게 할 수 있다.
주어진 페이지에 해당하는 레코드만 선택하기 위해서는, 한 페이지에 몇 개의 레코드를 포함시킬 것인지 결정하고, 실제 사용자가 몇 번째 페이지의 정보를 조회하기를 원하는지에 대한 페이지 카운트를 알고 있어야 한다.
예를 들어 한 페이지에 10 개의 레코드가 포함되고, 사용자가 전체 결과값 집합 중에서 3 페이지를 조회하고자 하는 경우라면 다음과 같은 쿼리를 사용하면 된다.

SELECT TOP 10 * FROM Orders WHERE OrderID NOT IN (SELECT TOP 20 OrderID FROM Orders)

위의 쿼리는 맨 처음 20 개의 레코드 이후에 존재하는 10개의 레코드, 즉 21~30번까지의 레코드를 반환한다.
위의 쿼리를 절차코드로 일반화하게 되면 다음과 같이 표현할 수 있다.

SELECT TOP page_size * FROM Orders WHERE OrderID NOT IN (SELECT TOP (page_size * (current_page -
1)) OrderID FROM Orders)

위의 쿼리는 대량의 레코드를 반환하는 경우라도 잘 동작하지만, 반환할 페이지의 숫자가 많아질수록 전체적인 성능은 감소하게 된다.
문제의 원인은 IN 연산자에 포함되는 쿼리의 결과값이 많아지면서 비효율성이 증가하기 때문이다. 예를 들어 한 페이지당 10개의 레코드를 반환하는 결과집합 중에서 500번째 페이지를 조회하기 위해 쿼리를 실행하게 되면, IN 연산자의 대상이 되는 서브쿼리에는 다음과 같은 문장이 포함되게 된다.

(SELECT TOP 4990 OrderID FROM Orders)

마지막 10개의 레코드를 조회하기 위해 서버에서는 4990 개의 OrderID와 각 OrderID를 비교해야만 한다. 불필요한 비교작업이 많이 발생하게 된다.
물론 SQL Server의 경우에는 이러한 경우 데이터를 좀 더 빠르고 효율적인 방법으로 검색하기 위해서 인덱스를 사용하여 빠르게 쿼리를 처리하게 된다.
(OrderID가 기본키로 설정되어 있기 때문에, SQL Server는 기본적으로 인덱스를 사용하게 된다.)
조회하고자 하는 페이지 수가 증가함에 따라 성능면에서 느려지게 된다고 하더라도 이러한 조회성능의 감소현상은 조회하고자 하는 페이지 수가 매우 큰 경우에만 인식할 수 있게 된다.
이러한 점증적인 성능의 감소현상은 대부분의 경우 사용자가 맨 처음부분의 일부 페이지만 조회하게 되고, 맨 처음부분의 일부 페이지를 조회 할 경우에는 매우 빠른 성능을 보장할 수 있기 때문에 크게 중요한 관심의 대상이 되지 않는다.
애플리케이션이션에서 적절하게 데이터를 정렬하고 필터링한다면 사용자는 찾고자 하는 정보를 거의 한 두 페이지 이내에서 찾게 된다. 만약 맨 처음 부분의 페이지에서 필요로 하는 데이터를 찾지 못한 경우에는 대부분의 사용자는 예제에서처럼 500 페이지까지 원하는 데이터를 찾고자 계속 다음 페이지를 찾아보는 것이 아니라 다른 정렬 및 필터링 조건으로 새로운 쿼리를 하게 된다.

앞에서 언급한 것과 같이 검색작업을 수행할 때, 테이블의 기본키가 어떤 컬럼에 설정되었는지가 매우 중요한 역할을 하게 된다.
기본키에는 각 레코드를 유일하게 식별할 수 있는 컬럼이 포함되어야 하며, 쿼리를 실행할 때 기본키를 기준으로 해당 레코드를 쿼리의 결과값으로 선택할 것인지 무시할 것인지를 판단하게 된다.
앞의 일반화된 쿼리에는 정렬 및 기본키에 관련한 WHEHE 절이나 ORDER BY 절 내용이 누락되어 있다. 목록 2 에는 이러한 요소를 포함시킨 일반화된 쿼리가 나타나 있다.

정렬은 일반적으로는 비효율적인 작업이며, 쿼리의 성능을 저하시키는 원인이 되기도 한다.
SQL 서버의 경우, 인덱스가 설정된 컬럼에 대해서는 매우 효율적으로 정렬 및 필터링 작업을 할 수 있고, SQL 서버가 항상 기본키 컬럼에는 인덱스를 생성하기 때문에 쿼리를 좀 더 최적화하여 빠르게 실행한다.
기본키에 설정된 인덱스를 최대한 활용하기 위해서, [리스트 3]과 같이 테이블의 전체 컬럼을 선택하지 않고, 먼저 기본키의 조건으로 대상이 되는 레코드를 검색한 다음에 결과값에 포함되어 있는 기본키값으로 다시 해당 레코드에 대한 전체 컬럼을 찾아오게 할 수도 있다.
테이블에 기본키 인덱스가 설정되어 있고, 인덱스가 설정된 필드에 대해서만 정렬 및 필터링 작업을 하게 되면, 조회하고자 하는 레코드를 찾기 위해 인덱스 페이지만을 사용하게 된다. 이렇게 쿼리의 결과값에 필요한 전체 필드가 인덱스에 포함되어 있는 경우를 커버된 인덱스라고 한다.
동일한 쿼리를 실행시킨 경우라도 해당 쿼리가 커버된 인덱스를 사용하는 경우가 일반 테이블에 대해서 쿼리하는 경우보다 더 빠르게 된다. 맨 마지막으로 선택된 결과값에 해당하는 나머지 정보를 조회하기 위한 작업을 수행할 때에는(즉, SELECT * 부분), 기본키 인덱스를 사용하여 SQL Server가 해당 인덱스를 바로 찾을 수 있기 때문에 매우 효율적으로 쿼리를 수행하게 된다.

[리스트3]에 나타나 있는 쿼리는 결과집합 중에서 특정 페이지를 매우 효율적이고, 단순한 방법으로 조회하게 된다. 물론, GROUP BY나 HAVING 절을 추가하여 사용할 수도 있다.
쿼리를 좀 더 단순화하기 위해서 [리스트 4]와 같이 SELECT_WITH_PAGING 라는 저장 프로시저를 생성하여, 기능을 캡슐화하였다.

SELECT_WITH_PAGING 저장프로시저에는 fields_to_return (string), primary_key (string), table_name (string),
page_number (integer, default 1), page_size (integer), get_record_count (true/false), filter_conditions (string),
sort_columns (string), group_by (string)와 같은 매개변수(데이터형)가 입력되게 된다.

예를 들어 한 페이지당 레코드 수를 10개로 지정하고 Northwind 데이터베이스의 Order 테이블으로부터 주문일자로 정렬하여 CustomerID, ShipName을 조회한 다음, 결과값 중 세번째 페이지를 조회하기 위해서는 다음 문장을 실행하면 된다.

EXEC SELECT_WITH_PAGING 'CustomerID, ShipName', 'OrderID', 'Northwind.dbo.Orders', 3, 10,
1, '', 'OrderDate'

위의 쿼리를 실행하게 되면 입력된 조건에 따라 필터링되어 반환되는 전체 레코드 수가 두번째 레코드셋으로 반환된다. 전체 레코드 수는 사용자에게 전체 페이지 수를 표시하려고 할 때 유용하게 사용되며, 대부분의 경우 사용자는 단순하게 이전페이지 또는 다음페이지로 표시되는 것보다는 전체 페이지 수 중에서 현재 조회하고 있는 페이지의 번호를 표시하는 방법을 더 선호한다.
조건에 해당하는 전체 레코드 수를 조회하기 위해서 필자는 여섯번째 매개변수를 1로 설정하였다.
만약 여섯번째 매개변수를 설정하지 않으면 데이터베이스로부터 페이지당 레코드로 제한된 10개의 레코드만을 반환하게 되기 때문에 전체 레코드 수가 몇 개인지는 알 수 없게 된다.

table_name 매개변수에는 두 개 또는 그 이상의 테이블에 대한 조인을 설정하는 문장이 올 수도 있고, 필요에 따라 서브쿼리도 올 수 있다.
예를 들어, 다음 두 문장은 table_name 매개변수에 모두 사용될 수 있다.

'Northwind.dbo.Orders A JOIN Northwind.dbo.Customers B ON A.CustomerID = B.CustomerID' '(SELECT *
FROM Northwind.dbo.Orders WHERE OrderDate > ''8/1/1996'') AS tbl'

이번 호의 기사에서 소개한 페이징 기법은 레코드의 수가 매우 많은 경우에 서버측 페이징을 처리하기 위해 매우 단순하고, 효율적으로 사용할 수 있으며, 필자의 경우에는 수백만 행이 포함되어 있는 테이블에 대해서도 사용한 경험이 있다. 예를 들어 2천 5백만 레코드가 있는 테이블에 대해서 맨 처음 일부 페이지를 조회하는 쿼리를 실행할 때, ADO RecordSet 페이징 기법을 사용했을 때에는 거의 40초가 걸렸으나 이번 호에 소개한 저장프로시저를 사용한 경우에는 1초로 수행시간을 단축할 수 있었다.
이처럼 이번 호에 소개한 페이징 기법은 조회의 대상이 되는 데이터양이 많아서 ADO RecordSet 페이징 기법을 사용하게 되면 성능상 문제가 발생할 수 있는 상황에서 유용한 대안으로 사용할 수 있다.


[리스트 1] ClientLocation 속성을 변경하는 코드
Dim objConn As ADODB.Connection
Dim objRS As ADODB.Recordset
' 연결 생성
Set objConn = New ADODB.Connection
objConn.Open "Driver=SQL Server; Server=localhost; Database=Northwind"
Set objRS = New ADODB.Recordset
   ' 클라이언트측 커서를 사용하게 하는 옵션
objRS.CursorLocation = adUseClient
   ' 서버측 커서를 사용하게 하는 옵션
   objRS.CursorLocation = adUseServer
objRS.Open "SELECT * FROM Orders", objConn, adOpenStatic,
adLockOptimistic
   ' 이 문장은 페이징을 위해서 필요하지만, 서버측 커서를 사용하는 경우에는 에러의 원인이 된다.
   Debug.Print "Total records: " & objRS.RecordCount

[리스트 2] 정렬을 위한 조건절을 지정한 일반화된 페이징 쿼리
SELECT TOP page_size * FROM table WHERE primary_key NOT IN
(SELECT TOP page_size * (page_number - 1) primary_key FROM table
WHERE filter_conditions
ORDER BY sort_field)
AND filter_criteria
ORDER BY sort_field



[리스트 3] 기본키에 검색조건을 먼저 설정하는 일반화 쿼리
SELECT * FROM table WHERE primary key IN
(SELECT TOP page_size primary_key FROM table
WHERE primary_key NOT IN

(SELECT TOP page_size * (page_number - 1) primary_key FROM table
WHERE filter_conditions ORDER BY sort_field) AND filter_criteria
ORDER BY sort_field)
ORDER BY sort_field


[리스트 4] SELECT_WITH_PAGING 저장 프로시저
CREATE PROCEDURE SELECT_WITH_PAGING (
@strFields varchar(4000),
@strPK varchar(100),
@strTables varchar(4000),
@intPageNo int = 1,
@intPageSize int = NULL,
@blnGetRecordCount bit = 0,
@strFilter varchar(8000) = NULL,
@strSort varchar(8000) = NULL,
@strGroup varchar(8000) = NULL)
/* 매개변수에 따라 반환되는 결과값을 특정 페이지로 정의하거나 전체 행을 모두 반환할 수 있도록 설정한
다. */
AS
DECLARE @blnBringAllRecords bit
DECLARE @strPageNo varchar(50)
DECLARE @strPageSize varchar(50)
DECLARE @strSkippedRows varchar(50)
DECLARE @strFilterCriteria varchar(8000)
DECLARE @strSimpleFilter varchar(8000)
DECLARE @strSortCriteria varchar(8000)
DECLARE @strGroupCriteria varchar(8000)
DECLARE @intRecordcount int
DECLARE @intPagecount int
/* 페이징 조건 정규화 의미있는 페이징 조건이 입력되지 않은 경우, 페이징하지 않고 좀 더 효율적인 방법으
로 쿼리를 실행시키기 위해 blnBringAllRecords 플래그를 사용 */
IF @intPageNo < 1
SET @intPageNo = 1
SET @strPageNo = CONVERT(varchar(50), @intPageNo)
IF @intPageSize IS NULL OR @intPageSize < 1 ?- 페이징하지 않고 전체 행을 반환
SET @blnBringAllRecords = 1
ELSE
BEGIN
SET @blnBringAllRecords = 0
SET @strPageSize = CONVERT(varchar(50), @intPageSize)
SET @strPageNo = CONVERT(varchar(50), @intPageNo)
SET @strSkippedRows = CONVERT(varchar(50), @intPageSize * (@intPageNo - 1))
END
/* 정렬 및 필터링 조건 정규화 정렬 및 필터링 조건이 지정되지 않으면, 필터링이나 정렬작업이 수행되지 않
도록 하여 쿼리의 성능을 향상시킴.*/
IF @strFilter IS NOT NULL AND @strFilter != ''
BEGIN
SET @strFilterCriteria = ' WHERE ' + @strFilter + ' '
SET @strSimpleFilter = ' AND ' + @strFilter + ' '
END
ELSE
BEGIN
SET @strSimpleFilter = ''
SET @strFilterCriteria = ''
END
IF @strSort IS NOT NULL AND @strSort != ''
SET @strSortCriteria = ' ORDER BY ' + @strSort + ' '
ELSE
SET @strSortCriteria = ''
IF @strGroup IS NOT NULL AND @strGroup != ''
SET @strGroupCriteria = 'GROUP BY' + @strGroup + ' '
ELSE
SET @strGroupCriteria = ''
/* 실제 조회작업을 시작 */
IF @blnBringAllRecords = 1 -- 페이징 하지 않고 단순한 SELECT 문장만을 실행
BEGIN

EXEC (
'SELECT ' + @strFields + 'FROM' + @strTables + @strFilterCriteria +
@strGroupCriteria + @strSortCriteria
)
END -- 전체 레코드를 반환.
ELSE -- 지정된 페이지를 반환
BEGIN
IF @intPageNo = 1 -- 맨 처음 페이지를 찾기 때문에 서브쿼리가 없어서 가장 효율적으로 실

행된다.
EXEC (
'SELECT TOP' + @strPageSize + ' ' + @strFields + 'FROM' + @strTables +
@strFilterCriteria + @strGroupCriteria + @strSortCriteria
)
ELSE -- 특정 페이지를 선택하기 위해 서브쿼리 구조를 실행한다.
EXEC (
'SELECT' + @strFields + 'FROM' + @strTables + 'WHERE' + @strPK + 'IN' + '
(SELECT TOP' + @strPageSize + ' ' + @strPK + 'FROM' + @strTables +
' WHERE' + @strPK + 'NOT IN' + '
(SELECT TOP' + @strSkippedRows + ' ' + @strPK + 'FROM' + @strTables +
@strFilterCriteria + @strGroupCriteria + @strSortCriteria + ') ' +
@strSimpleFilter +
@strGroupCriteria +
@strSortCriteria + ') ' +
@strGroupCriteria +
@strSortCriteria
)
END -- 특정 페이지를 지정한 경우
/* 전체 레코드 수를 반환하도록 지정된 경우 */
IF @blnGetRecordCount = 1
IF @strGroupCriteria != ''
EXEC (
'SELECT COUNT(*) AS RECORDCOUNT FROM (SELECT COUNT(*) FROM' +
@strTables + @strFilterCriteria + @strGroupCriteria + ') AS tbl (id)
)
ELSE
EXEC (
'SELECT COUNT(*) AS RECORDCOUNT FROM' + @strTables + @strFilterCriteria

+ @strGroupCriteria)
GO

출처 : SQL2000 매거진 (Andrew Rosca )
이건 역사군.... 실리더스의 역사... 안퀴라즈의 역사... 타이탄과 고대신의 역사.... 나는 퀴라지 예언자인 스케람이 기록한 쑨의 예언을 읽었다. 파멸을 예고하는 예언을.....

시간 이전의 시간, 세계가 아직 유아기였을 때, 타이탄 한명과 상상할 수도 없는 악의와 힘을 가진 존재가 바로 이 땅에서 서로 싸웠다. 이 싸움에서 타이탄이 졌는지에 대해서는 예언이 불확실하지만, 타이탄이 쓰러졌다고 한다. 고대신도 쓰러졌다. 사실은 아닐지도 모르지만.

영원한 별빛의 땅 칼림도어는 모든 생명체에게 풍요로운 어머니와 같았다. 영원의 샘의 마법은 이 땅에 퍼져나가 이 땅을 고향으로 하는 엄청난 수의 동식물에게 힘을 주었다. 이 마법의 영기로부터 실리시드가 태어났다. 생각에 빠져 있던 고대신은 실리시드를 통해 그 손길을 뻗어 한때 자비심 업ㅂ는(-_-) 손길에 쥐고 흔들었던 이 세계를 뒤흔들려고 했다.

고대신은 실리시드로부터 자신의 모습을 딴 아바타를 만들었다. 이들 아바타를 퀴라지라고 한다. 지각과 목적을 갖춘 퀴라지는 창조자를 쑨이라고 이름붙였다. 쑨이 태어난 것이다...... 수천년간 퀴라지들은 그들의 신을 배신한 세계를 파괴할 수 있는 군대를 건설하기 위해 열심히 일했다. 성장하는 군대를 기르고 쑨의 강림을 준비하기 위해 거대한 요새 도시 안퀴라즈를 세웠다.

이럴리가 없어.... 고대신을 이 세계에 강림시켜선 안돼. 그 결과가 어떠할지는..... 맙소사!

내용이 더 있군.

쑨이 그토록 참을성있게 기다리던 순간이 결국 왔다. 그의 자식들은 수천년 동안 칼림도어 세계에 복수할 힘을 가진 군대를 건설했고 이제 그 보답이 멀지 않았다.

타이탄은 이미 오래전에 이 세계를 떠났다. 한때 이곳에 살던 나이트엘프들만이 유일한 방어 병력이었다. 우와! 이제 흥미진진한 부분인걸?

라작스 장군이라는 퀴라지가 실리더스로의 최초 침공을 지휘했다. 그의 앞을 막아선 유일한 존재는 스태그헬름이라는 나이트 엘프였다. 퀴라지는 그를 카르시스, 즉 퀴라지 언어로 '대지의 손'이라고 불렀다.

스태그헬름과 그의 군대는 라작스의 군대가 실리더스로 쏟아져 들어옴에 따라 완전히 중과부적이 되었다. 그러나 스태그헬름은 퀴라지에게 단순한 귀찮은 존재만은 아닌 것 같았다. 스태그헬름의 지휘 하에 나이트 엘프의 모든 군대가 칼림도어를 지키기 위해 모였고, 퀴라지 군대의 진군 속도를 굉장히 늦춘 것이었다.

불행하게도 나이트 엘프의 방어는 위태로왔고 라작스는 그들이 더 이상 버티기 힘들 것이라고 보았다. 그러나 나엘의 끈질김은 라작스에게 큰 좌절을 안겨주었고 그의 왕에게는 더 큰 좌절을.... 잠깐. 왕이라고? 이럴수가....
.
안퀴라즈의 쌍둥이 황제로 알려진 베크닐라쉬와 베크로르는 사원의 성지에서 전쟁을 감시했다. 영리한 두 형제는(쌍둥이 형제가 맞군요) 스태그헬름 군대의 사기를 저하시키고 분열시킬 계획을 세웠다.

발스탄 스태그헬름은 판드랄의 오른팔이었다. 그는 자부심 넘치는 고귀한 전사로서(드루이드가 공대장...발스탄은 멘탱 -_-) 아버지에 대한 그의 헌신과 숭배는 절대적이었다. (아들을 멘탱으로 세웠구나 ;;) 쌍둥이 황제는 이것이 그의 약점임을 감지했다. 파고들 수 있는 약점임을.....

발스탄은 아버지를 기쁘게 하기 위해 일부 병력을 이끌고 사우스윈드를 방어하러 가겠다고 판드랄을 설득시켰다. 전황이 나엘 쪽으로 기울고 있었기 때문에, 사랑하는 아들에게 탈이 생기리라고는 예측할 수 없었다. 함정을 간과한 것이다. 매복중인 퀴라지에 의해 발스탄이 생포되고 사우스윈드 마을이 초토화되었다. 라작스는 포로 발스탄을 최전선으로, 스태그헬름과 나엘 군대가 지켜보는 그곳으로 데려가서 무참하게 처형했다. (판드랄.... 아픈 과거.....)

전쟁은 계속되었지만 위대한 지도자의 의지는 꺾였다. 실리더스 전체는 곧 실리시드와 그 주인인 퀴라지에게 점령되었다.

불쌍한 친구....(판드랄을 말하는 듯) 그래서 그랬구만.

나엘 군대는 운고로를 통해 타나리스 사막의 경계까지 밀려났다. 운고로의 무언가가 퀴라지의 점령을 막은 것이다. 이 단어는 잘 모르겠지만 '신의 땅'이라는 뜻인것 같네. '신의 땅을 취할 수 없었다' 라고 되어 있구만.

흥미로운 우연의 일치일세. 타이탄이 칼림도어에 거주할 때 운고로가 그들의 집이었다는 이론과 말이지. 아마도 아만툴 자신이 '신의 땅'을 돌본 것일까?

흠.... 이상하군. 여기서 갑자기 끝났어. 퀴라지가 타나리스에서 청동 용을 만났다는 기록이 있고..... 여기서부터 빠진 부분이 많아. 정보를 더 찾아야 해! 그놈들은 칼림도어를 다시 침공하려고 한다고!

-와우메카 앗힝님 번역

'Hobby & Joy > Games' 카테고리의 다른 글

자..달려봅시다.  (0) 2007.02.02
쿠엘탈라스 건국  (0) 2005.10.15
요즘은 WOW 시대...  (1) 2005.01.04
베르세르크  (3) 2004.10.13
DragonBall Z 2  (0) 2004.09.02
사진찍는순간 돌진하는...
사진찍는일에 무지 익숙한 큰넘과 아직 마냥신기한 작은넘...

'Photo Album > Family' 카테고리의 다른 글

20060118 닭집 할아버지와 만나다...  (0) 2006.01.18
20051102 형님몰래 아웃백에  (0) 2005.11.02
20050922 두 못난이...  (0) 2005.09.22
20050921 유치원 놀이터  (0) 2005.09.21
20050919 여수도착  (0) 2005.09.19
한동안의 삽질끝에... 다시 직장인으로 돌아왔다..
그동안 올봄부터 여름..가을까지 정말 많은걸 배웠다...

사람을 배우고 돈을 배우고 인내를 배웠다.

내 삶의 2라운드가 시작된거다..난 그렇게 믿고 있다.

뭐 또 도망가고 주저않고 하겠지만...
그래도 링에서 내려오거나 수건을 던지지는 않을꺼다...

날위해 너무도 많은 사람들이 기도해주고 있으니까..

'Talk About > Life Story' 카테고리의 다른 글

나의 왼발  (1) 2006.08.10
설상가상, 다사다난... 더이상 무슨말이...  (0) 2005.12.31
두달간의 공백, 새로운 시작  (0) 2005.06.21
불이야!~  (1) 2004.10.25
매로 다스릴찌어다.  (1) 2004.10.18
두 못난이 입니다....

'Photo Album > Family' 카테고리의 다른 글

20051102 형님몰래 아웃백에  (0) 2005.11.02
20051012 첨봐?  (0) 2005.10.12
20050921 유치원 놀이터  (0) 2005.09.21
20050919 여수도착  (0) 2005.09.19
20050902 씨즐러 놀이방  (0) 2005.09.02
산이랑 정현이랑 할아버지와 함께 근처 유치원 놀이터에 다녀왔습니다.

'Photo Album > Family' 카테고리의 다른 글

20051012 첨봐?  (0) 2005.10.12
20050922 두 못난이...  (0) 2005.09.22
20050919 여수도착  (0) 2005.09.19
20050902 씨즐러 놀이방  (0) 2005.09.02
20050820 안경모델 김강  (0) 2005.08.20


산이강이 외할아버지댁에 왔습니다.


'Photo Album > Family' 카테고리의 다른 글

20050922 두 못난이...  (0) 2005.09.22
20050921 유치원 놀이터  (0) 2005.09.21
20050902 씨즐러 놀이방  (0) 2005.09.02
20050820 안경모델 김강  (0) 2005.08.20
20020818 It's LEGO !!  (0) 2005.08.18

+ Recent posts