BLOG main image
Nothing great was ever achieved without enthusiasm.

블로그...

2011. 12. 30. 22:00
블로그를 시작한 것이 삼년하고도 사개월이 지났습니다.

유명하지도 그렇다고 알차지도 않은 이 블로그가 벌써 네..살이 되어갑니다

처음 티스토리를 알게된 건 테터툴즈 때문이었죠. PHP를 전혀 모르는 상황에서 PHP를 알기 위해 제로보드와 설치형 블로그인..테터툴즈 소스를 가지고 공부했었고 그러다 반설치형인 티스토리를 알게되어 여기에..둥지를 펴게되었죠.

이른바 스킨을 DIY할 수 있다는 것은 티스토리의 최대 장점이었죠.

그리고 html파일은 물론 js파일도 업로드 가능했기에 어러가지 새로운 도전도 가능했습니다. 특히 js파일이 되면서 에이잭스를 활용해 여러가지 실험을 해봤던 것이 가장 기억이 납니다. ㅋ

이제...몇 개월. 후면 4년째가 될 이 블로그를 보다 더 잘 활용할 방법을 찾고 있습니다.

보다 정확하고 상세한. 정보를 담는 것!

그것이 이 블로그를 더 풍부하게 만드는 길이겠지요.

많은 사람이 이 블로그를 알길 바라진 않습니다. 다만... 이 블로그가 팩트를 담는 항아리가 됬으면 합니다.
Posted by 빛나는 돌

<출처 : 구글 어스>
Posted by 빛나는 돌

JOIN...

2009. 10. 14. 02:39
http://www.taeyo.net/Forum/Content.aspx?SEQ=1388&TBL=KNOWHOW&PGN=5




조인원리에는 3가지가 있습니다.
1. Nested Loop Join
2. Sort Merge Join
3. Hash Join


오라클 기준으로 작성된문서이지만 원리및 장단점을 쉽게 설명했기에 올려봅니다.



관계형 데이터 베이스에서 데이터 연결 방법 중 Join의 종류, 조인의 수행원리, 각 조인의 특징, 그리고 조인별 선택기
준에 대해서 소개하고자 한다.


조인은 두 집합간의 곱으로 데이터를 연결하는 가장 대표적인 데이터 연결 방법이다.
종류에는 Nested Loop Join,
Sort Merge Join 그리고 Hash Join이 있다.

1 * M = M 과 M * 1 = M 의 결과집합이 동일한 것처럼 Optimizer가 3가지의 조인 중 어떤 것을 선택할지라도
결과
집합은 동일하다.






하지만 수행속도 측면에서 본다면 조인하고자 하는 두 집합의 데이터 상황에 따라 어떤 조인을 선
택하느냐,
어떤 집합을 먼저 선행하느냐 에 따라 수행속도에 미치는 영향은 크다.


100쌍의 남녀가 사랑의 짝대기 하는 것에 비추어 3가지 조인방식이 수행되는 원리를 설명해 보자.
남녀 모두는 자기가 원하는 상대방의 번호표 하나씩 가지고 있고, 한 사람은 여러 사람으로부터 선택 받을 수 있다.


첫번째 방식, 첫번째 여자는 자기가 선택한 번호표를 가지고 처음부터 차례로 남자의 번호를 확인하고, 해당 번호의
남자가 자기를 선택했는지 확인한다. 그리고 두 번째, 세 번째,..,백 번째 여자까지 같은 작업을 반복 수행하게 된다.





이처럼 선행 집합의 선두부터 차례로 후행집합과 조건을 비교 하면서 선행집합의 처리범위가 끝날 때 까지 같은 작업
을 반복하는 것이 Nested Loop Join이다.
선행집합의 처리 범위가 결정되어 지면 후행집합의 일량이 정해지는 종속
적 방식이다.

두번째 방식, 남녀는 각각 자기가 선택한 상대방의 번호표(Join Key) 순으로 각각 줄(Sort)을 선다. 그러면 중간의 아
나운서가 차례로 양쪽의 번호표가 일치하는지를 확인하면서 번호표가 맞다면 짝을 지어줄 것이다. 이처럼 각각의 집
합은 자기에게 주어진 조건으로 처리범위를 결정하고, 조인 컬럼으로 각각 Sort 한 후 조인하는 방식이 Sort Merge
Join이다. 처리범위를 결정하는데 독립적이다.

세번째 방식, 1번부터 100번(Hash Table)의 푯말이 있다. 여자측은 자기가 가지고 있는 상대방의 번호표 숫자푯말
앞에 서는 것이다(Hash Function). 물론 각 푯말에는 여러 명의 여자가 서 있을 수도, 한명도 없을 수도 있다.
다음으
로 남자는 자기 번호푯말 앞으로 가서 남자가 가지고 있는 번호와 상대 여성의 번호와 맞는지를 비교하면 된다. 이처
럼 선행 집합은 Hash Function을 이용하여 Hash Table을 구성하고, 후행집합은 차례로 Hash Function을 이용하여
Hash Table을 탐침하는게 Hash Join 수행 원리이다. Hash Join역시 처리범위를 결정하는데 독립적이다.


Nest Loop Join의 특징 및 사용기준
온라인 어플리케이션에서 주를 이루는 Nested Loop Join은 부분범위 처리나 사용자가 데이터를 요구 했을 때 짧은
시간에 결과를 볼 수 있는 적은 데이터를 액세스 할 때 쓰인다. 다음과 같은 SQL을 예로 들어 보자.
SQL >SELECT a.FLD1, ..., b.FLD1,...
FROM TAB2 b, TAB1 a
WHERE a.KEY1 = b.KEY2
AND b.FLD2 like 'A%'
AND a.FLD1 = '10'
조인 컬럼인 a.KEY1 = b.KEY2에 양쪽 테이블 모두 인덱스가 존재하고, 선행 테이블을 TAB1으로 했을 때와 TAB2
로 했을 때의 수행횟수를 비교하여 보자.


TAB1이 선행테이블 일때
1) a.FLD1 인덱스 5000건 Range Scan.
2) Rowid로 TAB1에 5000회 랜덤액세스
3) 성공/실패에 상관없이 b.KEY2 인덱스에 5000회 랜덤액세스 및 조인시도
4) 조인에 성공한 Rowid로 TAB2에 100회 랜덤액세스
5) b.FLD2 like 'A%' 체크 후 성공한 50건 운반단위 이동

TAB2가 선행테이블 일때
1) b.FLD2 인덱스 100건 Range Scan.
2) TAB2의 100회 랜덤액세스
3) 성공/실패에 상관없이 a.KEY1 인덱스에 100회 랜덤액세스 및 조인시도
4) 조인에 성공한 Rowid로 TAB1에 70회 랜덤액세스
5) a.FLD1 = '10' 체크 후 성공한 50건 운반단위 이동


결과건수는 두 가지 수행방식 동일하게 50건이지만, 수행횟수 측면에서 본다면 TAB1을 선행테이블 했을 때는 5000
회의 조인시도가 발생하였고, TAB2를 선행테이블로 했을 때는 100회의 조인시도가 발생하였다. 이처럼 조인 순서
및 선행 테이블의 처리범위에 따라서 수행횟수는 크게 달라질 수 있다. Nested Loop Join의 특징 및 사용기준은 다음
과 같다.

특징
1) 선행 테이블의 처리범위가 일량을 결정한다.(방향성)
2) 선행 테이블의 값을 받아서 후행 테이블의 처리범위가 결정된다.(종속적)
3) 주로 랜덤 액세스 방식으로 처리된다.(랜덤액세스)
4) 후행 테이블의 조인컬럼의 인덱스의 유무 및 조건의 인덱스 참여의 정도에 따라 수행속도가 많이 차이 난다.(연결
고리 상태)

사용기준
1) 부분범위처리를 하는 경우에 유리하다.
2) 처리량이 적은 경우에 유리하다.- 랜덤액세스가 많을 경우 수행속도를 보장할 수 없으므로 Sort Merge Join이나
Hash Join으로 유도
3) 선행 테이블의 결과를 받아야만 후행 테이블의 처리범위를 줄일 수 있는 경우에 유리하다. - 연결고리에 Index가
반드시 존재하여야 함
4) 선행 테이블의 처리범위가 수행속도에 절대적 영향을 미치므로 최적의 조인 순서가 될 수 있도록 유도해야 한다.

Sort Merge Join의 특징 및 사용기준
다량의 데이터를 스캔방식으로 처리하는 Sort Merge Join은 양쪽테이블을 각자 액세스하여 처리 범위를 줄이고, 조
인컬럼 순으로 데이터를 Sort 후에 조인하는 방식이다.



수행 과정을 살펴보자
1) a.FLD1 인덱스 Range Scan.
2) Rowid로 TAB1에 랜덤액세스
3) 조인컬럼인 a.KEY1로 SORT
4) b.FLD2 인덱스 Range Scan.
5) Rowid로 TAB2에 랜덤액세스
6) 조인컬럼인 b.KEY2로 SORT 한다.
7) 양쪽 집합을 Scan하면서 a.KEY1 = b.KEY2 조인 시도
8) 성공한 Row 운반단위 이동


수행과정에서 나타나듯이 Nested Loop Join과 달리 상대 테이블의 결과에 의해 처리범위가 결정되는게 아니라 스스
로에게 주어진 조건 만으로 처리범위를 줄인 후 Sort하게 되므로, 조인 컬럼으로 이루어진 인데스는 사용하지 않게
된다. Sort Merge Join의 특징 및 사용기준은 다음과 같다.

특징
1) 상대 테이블로부터 결과 값을 제공받지 않고, 자신에게 주어진 조건으로만 처리범위를 결정한다.(독립적).
2) 각자 SORT후에 조인을 하게 되므로 부분범위 처리가 아닌 전체범위 처리를 하게 된다.(전체범위 처리)
3) 조인의 순서에는 상관없다.(무방향성)
4) 인덱스가 아닌 컬럼도 Merge할 작업 대상을 줄이므로 중요한 의미를 가진다.

사용기준
1) 처리량이 많거나 전체범위 처리 시에 유리하다. 랜덤액세스가 많은 Nested Loop Join은 불리
2) 스스로 자신의 처리범위를 많이 줄일 수 있을 때 유리하다.
3) 연결고리 이상 상태에 영향을 받지 않으므로 연결고리 컬럼을 위한 인덱스를 생성하지 않고도 유용하게 사용할
수 있다.
4) 처리할 데이터량이 적은 온라인 어플리케이션에서는 Nested Loop Join이 유리한 경우가 많으므로 Sort Merge
Join은 주의하여 사용한다.


Hash Join의 특징 및 사용기준
대량의 데이터를 액세스하는 작업에서는 시스템 리소스를 많이 사용하는 대신 짧은 시간에 보장할 수 있어야 한다.
다음은 수행방법을 살펴보자





1) 두 테이블 중 적은 테이블을 선행 테이블로 결정한다.
2) 선행 테이블을 Hash Function을 이용하여 Hash Area에 Hash Table을 구성한다.(Build Input)
3) 만약 Hash Area만으로 생성 가능하다면 후행테이블은 크기에 상관없이 차례로 Hash Function을 이용하여 Hash
Table과 조인(Probe Input)하면서 성공한 결과값을 운반단위로 이동한다.
4) 만약 Hash Area만으로 Hash Table 생성이 불충분 하다면 Hash Table Overflow가 발생하여 데이터를 나눠서 저
장 할 Partition 수를 결정한다.(Fan -out)
5) 선행 테이블의 조인 컬럼과 Select List 컬럼을 메모리로 읽어 들여 첫번째 해쉬 함수를 이용하여 Partition을
Mapping하고, 두번째 해쉬 함수를 이용하여 해쉬 테이블 생성시 사용 할 해쉬 값을 생성한다.
6) 선행 테이블의 조인 컬럼의 유일 값만으로 Bit-Vector을 생성한다. ?추후 Bit-Vector filtering에 사용하기 위함.
7) Partition에 데이터를 MOVE하고 채워진 Partition은 디스크로 내려간다.
8) 선행 테이블이 모두 읽혀지면 Partition 테이블을 완성하고, Partition 크기순으로 정렬한 후 작은 Partition N개를
메모리에 로드한다.
9) 후행 테이블을 읽으면서 조인컬럼으로 Bit-Vector와 Filtering에 성공하였다면, 첫번째 해쉬함수로 Partition을 결
정하고, 두번째 해쉬 함수를 이용하여 메모리 상에 있는 선행테이블과 조인하고 성공하면 운반단위로 이동하고, 해
당 Partition이 메모리에 존재하지 않는다면 해쉬 키값,조인컬럼, Select List를 디스크에 쓴다.
10) 후행 테이블이 모두 읽혀지면, Bit-Vector Filtering에 성공했지만, 조인에 성공하지 못해 미 처리된 선행 파티션
과 후행 파티션을 메모리에 올려 차례로 반복수행 한다.

액세스해야 할 데이터가 많을 경우 Sort Merge Join은 Merge 단계에 들어 가기 위해 양쪽 테이블의 처리 범위가
SORT 되어야 하므로 SORT에 대한 부담이 크고, Nested Loop Join은 선행 테이블의 처리 범위가 넓을 경우 그 만큼
랜덤 액세스의 발생으로 수행속도를 보장할 수 없다.이해 반해 Hash Join은 다른 조인에 시스템 리소스를 가장 많이
사용하지만 Hash Function을 이용함으로써 Sort를 하지 않고, 각 테이블에 한번만 액세스하여 조인이 이루어 지므로
큰 테이블간이나, 큰 테이블과 적은 테이블의 조인에 효율적인 조인 방법이다. Hash Join의 특징 및 사용기준은 다음
과 같다.

특징
1) 다른 테이블의 결과 값을 제공받지 않고, 자신에게 주어진 조건으로만 처리범위를 결정한다.(독립적).
2) 해쉬 함수를 이용 하게 되므로 부분범위 처리를 할 수 없으며 전체범위 처리를 하게 된다.(전체범위 처리)
3) 메모리 영역만으로 해쉬 테이블을 생성시 최적의 효과를 낼 수 있으므로 적은 테이블이 선행으로 온다.
4) 해쉬 함수를 이용하므로 결과값의 정렬을 보장 받을 수 없다.

사용기준
1) 대량의 데이터 액세스 시, 배치 처리, Full Table Scan 하면서 조인 해야 할 때 유리하다.
2) 비용은 많이 들지만 수행속도를 보장해야 하는 작업에 유용하다.(Parallel Query 사용)
3) 가능한 메모리 내에서 작업 가능하도록 init Parameter나 Session 정보를 변경하여 사용한다. (Hash_area_size,
Hash_multiblock_io_count 등..)

수행속도는 시스템 리소스와 즉결된다. 사용자는 작업의 성격을 분명히 하고, 작업에 맞는 조인은 선택하여야만 수
행 속도를 보장할 수 있다. SQL작성 후 반드시 실행계획를 확인 하여 Optimizer가 사용자가 원하는 액세스를 하는 확
인하는 습관을 들어야 한다.

이상으로 3가지 조인의 특징 및 사용기준에 대하여 알아보았다.

Sort Merge Join의 특징 및 사용기준
다량의 데이터를 스캔방식으로 처리하는 Sort Merge Join은 양쪽테이블을 각자 액세스하여 처리 범위를 줄이고, 조
인컬럼 순으로 데이터를 Sort 후에 조인하는 방식이다.



수행 과정을 살펴보자
1) a.FLD1 인덱스 Range Scan.
2) Rowid로 TAB1에 랜덤액세스
3) 조인컬럼인 a.KEY1로 SORT
4) b.FLD2 인덱스 Range Scan.
5) Rowid로 TAB2에 랜덤액세스
6) 조인컬럼인 b.KEY2로 SORT 한다.
7) 양쪽 집합을 Scan하면서 a.KEY1 = b.KEY2 조인 시도
8) 성공한 Row 운반단위 이동

수행과정에서 나타나듯이 Nested Loop Join과 달리 상대 테이블의 결과에 의해 처리범위가 결정되는게 아니라 스스
로에게 주어진 조건 만으로 처리범위를 줄인 후 Sort하게 되므로, 조인 컬럼으로 이루어진 인데스는 사용하지 않게
된다.
Sort Merge Join의 특징 및 사용기준은 다음과 같다.

특징
1) 상대 테이블로부터 결과 값을 제공받지 않고, 자신에게 주어진 조건으로만 처리범위를 결정한다.(독립적).
2) 각자 SORT후에 조인을 하게 되므로 부분범위 처리가 아닌 전체범위 처리를 하게 된다.(전체범위 처리)
3) 조인의 순서에는 상관없다.(무방향성)
4) 인덱스가 아닌 컬럼도 Merge할 작업 대상을 줄이므로 중요한 의미를 가진다.

사용기준
1) 처리량이 많거나 전체범위 처리 시에 유리하다. 랜덤액세스가 많은 Nested Loop Join은 불리
2) 스스로 자신의 처리범위를 많이 줄일 수 있을 때 유리하다.
3) 연결고리 이상 상태에 영향을 받지 않으므로 연결고리 컬럼을 위한 인덱스를 생성하지 않고도 유용하게 사용할
수 있다.
4) 처리할 데이터량이 적은 온라인 어플리케이션에서는 Nested Loop Join이 유리한 경우가 많으므로 Sort Merge
Join은 주의하여 사용한다.


Hash Join의 특징 및 사용기준
대량의 데이터를 액세스하는 작업에서는 시스템 리소스를 많이 사용하는 대신 짧은 시간에 보장할 수 있어야 한다.
다음은 수행방법을 살펴보자





1) 두 테이블 중 적은 테이블을 선행 테이블로 결정한다.
2) 선행 테이블을 Hash Function을 이용하여 Hash Area에 Hash Table을 구성한다.(Build Input)
3) 만약 Hash Area만으로 생성 가능하다면 후행테이블은 크기에 상관없이 차례로 Hash Function을 이용하여 Hash
Table과 조인(Probe Input)하면서 성공한 결과값을 운반단위로 이동한다.
4) 만약 Hash Area만으로 Hash Table 생성이 불충분 하다면 Hash Table Overflow가 발생하여 데이터를 나눠서 저
장 할 Partition 수를 결정한다.(Fan -out)
5) 선행 테이블의 조인 컬럼과 Select List 컬럼을 메모리로 읽어 들여 첫번째 해쉬 함수를 이용하여 Partition을
Mapping하고, 두번째 해쉬 함수를 이용하여 해쉬 테이블 생성시 사용 할 해쉬 값을 생성한다.
6) 선행 테이블의 조인 컬럼의 유일 값만으로 Bit-Vector을 생성한다. ?추후 Bit-Vector filtering에 사용하기 위함.
7) Partition에 데이터를 MOVE하고 채워진 Partition은 디스크로 내려간다.
8) 선행 테이블이 모두 읽혀지면 Partition 테이블을 완성하고, Partition 크기순으로 정렬한 후 작은 Partition N개를
메모리에 로드한다.
9) 후행 테이블을 읽으면서 조인컬럼으로 Bit-Vector와 Filtering에 성공하였다면, 첫번째 해쉬함수로 Partition을 결
정하고, 두번째 해쉬 함수를 이용하여 메모리 상에 있는 선행테이블과 조인하고 성공하면 운반단위로 이동하고, 해
당 Partition이 메모리에 존재하지 않는다면 해쉬 키값,조인컬럼, Select List를 디스크에 쓴다.
10) 후행 테이블이 모두 읽혀지면, Bit-Vector Filtering에 성공했지만, 조인에 성공하지 못해 미 처리된 선행 파티션
과 후행 파티션을 메모리에 올려 차례로 반복수행 한다.

액세스해야 할 데이터가 많을 경우 Sort Merge Join은 Merge 단계에 들어 가기 위해 양쪽 테이블의 처리 범위가
SORT 되어야 하므로 SORT에 대한 부담이 크고, Nested Loop Join은 선행 테이블의 처리 범위가 넓을 경우 그 만큼
랜덤 액세스의 발생으로 수행속도를 보장할 수 없다.이해 반해 Hash Join은 다른 조인에 시스템 리소스를 가장 많이
사용하지만 Hash Function을 이용함으로써 Sort를 하지 않고, 각 테이블에 한번만 액세스하여 조인이 이루어 지므로
큰 테이블간이나, 큰 테이블과 적은 테이블의 조인에 효율적인 조인 방법이다.
Hash Join의 특징 및 사용기준은 다음과 같다.

특징
1) 다른 테이블의 결과 값을 제공받지 않고, 자신에게 주어진 조건으로만 처리범위를 결정한다.(독립적).
2) 해쉬 함수를 이용 하게 되므로 부분범위 처리를 할 수 없으며 전체범위 처리를 하게 된다.(전체범위 처리)
3) 메모리 영역만으로 해쉬 테이블을 생성시 최적의 효과를 낼 수 있으므로 적은 테이블이 선행으로 온다.
4) 해쉬 함수를 이용하므로 결과값의 정렬을 보장 받을 수 없다.

사용기준
1) 대량의 데이터 액세스 시, 배치 처리, Full Table Scan 하면서 조인 해야 할 때 유리하다.
2) 비용은 많이 들지만 수행속도를 보장해야 하는 작업에 유용하다.(Parallel Query 사용)
3) 가능한 메모리 내에서 작업 가능하도록 init Parameter나 Session 정보를 변경하여 사용한다. (Hash_area_size,
Hash_multiblock_io_count 등..)

수행속도는 시스템 리소스와 즉결된다. 사용자는 작업의 성격을 분명히 하고, 작업에 맞는 조인은 선택하여야만 수
행 속도를 보장할 수 있다. SQL작성 후 반드시 실행계획를 확인 하여 Optimizer가 사용자가 원하는 액세스를 하는 확
인하는 습관을 들어야 한다.

이상으로 3가지 조인의 특징 및 사용기준에 대하여 알아보았다.






Posted by 빛나는 돌

 
     이 번 글은 CTP출력실에서 사용하고 있는 maya와 bora 현상기의 operator setting 값을 바꿀 때 필요한 
     비밀번호를 찾을 수 있는 웹프로그램(php를 이용한)에 대한 글입니다.

     비밀번호를 찾기위해서 맨날 날짜, 시간을 종이쪼가리에서 찾아서 입력해주어야 하는 번거로움에서 벗어나기 위한
     귀차니즘의 소산으로 만들어봤습니다.

     본 프로그램은 자유롭게 사용가능합니다. 코드 수정 및 사용 모두 맘대로 하셔도 됩니다.
     하지만, 너무나 허접한 것이라 저외의 다른 사람들이 실제 사용할지 의문스럽긴 합니다.
    




이번 글은 자바스크립트와 php프로그래밍에 대한 지식이 있으신 분들을 기준으로 써봤습니다.

물론... 해당 프로그램만 단순히 사용하실 분이시라면 관계없습니다만 소스를 수정하고자 하실 분이 만일 계시다면 자바스크립트과 php에 대한 기본적인 지식이 필요하기 때문입니다. ^^;




maya와 bora현상기를 사용해보신 분이시라면 사용하기 꽤 편한 현상기라는 생각을 해보실 겁니다.
에러도 그다지 많이 나지 않고 현상기 청소만 제때 잘 해주게되면 판 나오는 것도 깔끔하게 잘 나오곤 하죠.

물론... 현상액 교체시 이전에 사용했던 현상액이 잘 안 빠져나가는 문제등 자질구레한 문제들은 있기도 하고 어떤 현상기처럼 현상기 현재상태에 대해 아주 자세하게 리포팅하지는 않지만 CTP판을 현상하는데는 이만한 놈도 드물다는 생각을 하곤 합니다.

그런데... 아주 짜증나고 신경쓰이는 구석이 있으니...
바로 현상조건(온도/현상타임/보충액 input량등)을 변경해줄 수 있는 operator setting메뉴로 들어갈려면 비밀번호를 입력해야한다는 점입니다.

왜 이런 비밀번호를 만들었는지 아쉽다는 말이 절로 나오는 대목입니다.
아마도, 제조사에선 현상조건이 자주 바뀌지 않을 것으로 생각해서 비밀번호를 걸어서 현상조건을 바꿀 때 한 번 더 생각하라는 뜻에서 이런 비밀번호를 입력하게끔 한 것 같습니다만...

그건 제판실의 업무에 대해 익숙하지 않으신 분들의 아이디어라는 생각이 듭니다.

여러 회사의 판을 사용하는 경우나 같은 회사의 판이라도 사이즈/제조일자에 따라 현상조건은 달라질 수 있게 되기에 현상조건을 변경하기 위한 비밀번호을 두는 것은 판 출력자가 자유롭게 현상조건을 바꿀 수 없는 제약조건이 되기 때문입니다.

그리하야... 나름 귀차니즘의 충족과 저의 잔머리를 응용해 초간단 비밀번호 생성 프로그램을 만들어봤습니다.

 
  
  간단하죠?  별 건 없습니다. 

  pc의 현재시간과 현상기 비밀번호 그리고 비밀번호를
  생성하기 위해 웹서버에 있는 php파일에 접근했을 때의
  웹서버의 시간을 표시하고 있습니다.

  본 프로그램은 서버/클라이언트 방식의 웹프로그램 방식을
  활용해서 구현이 됩니다.

  아래 파일을 다운 받으신 후 압축을 푸신 후
  hyunsang.htm파일을 실행시켜보시면 왼쪽에서 보시는
  모양의 화면이 나타날 것입니다.


(덧글) 윈도우 XP 서비스팩2가 설치된 PC에서는 보안상 액티브 컨텐츠를 표시제한할 수 있습니다.
 하지만... 실제 클라이언트 PC에는 아무런 영향을 주지 않는 내용만이 있을 뿐이니 주소창 바로 밑에 노랑색 알림줄을 클릭하신후 제한된 컨텐츠를 허용항목을 클릭하시면 내용을 보실 수 있으실 겁니다...  ^^;



자... 그럼 지금부터 내부 소스에 대해 이야길 나누어 보겠습니다.

본 프로그램은 디자인(UI)을 담고 있는 hyunsang.htm파일과 웹서버와 비동기적으로 통신할 수 있도록 하는 ajax.js, 그리고
웹서버내에 있어야 할 hyunsang.php파일로 구성되어 있는 아주 간단한 프로그램입니다.

자... 그럼 hyunsang.htm파일부터 시작해 볼까요?



기본적인 HTML태그와 자바스크립트를 아시는 분이시라면 쉽게 이해가 되실 겁니다.
dHTML태그부분에 자바스크립트로 데이타를 불러와서 넣어주는 구문입니다.


자... 그럼 php파일과 접속해서 데이타를 비동기적으로 가져오는 ajax.js입니다.



ajax를 접해보신 분이시라면 전혀 어렵지 않은 "교과서"적인 소스란 것을 아시게 될 겁니다.

다만... 참고로 말씀드리자면...
만일 웹서버를 운영하고 계시다면 압축파일 속에 있는 hyunsang.php파일을 해당 웹서버의 가상디렉토리등에
넣어놓신 후 hyunsang.htm의 68번째 줄의 주소를 해당 파일의 주소로 바꿔주시면 해당 웹서버의 파일로 통신하게
될 것입니다.

지금 제가 업무에 사용하고 있는 소스는 이 것과는 좀 다르게 정돈을 다시 해서 제 입맛에 맞게 수정을 한 소스입니다.
현재 사용하고 있는 소스를 그대로 보여드리기엔 좀 그렇기에 초기버전으로 보여드립니다..


자... 마지막으로 php부분입니다.
hyunsang.htm이나 ajax.js에서 해당 로직을 구현하지 않은 이유는 각각의 클라이언트 PC의 시간이 다 다를 수 있기 때문입니다.

현상기의 시간을 웹서버의 시간과 일치시킨 후 서버에 있는 php파일로 비밀번호를 가져온다면 비밀번호의 변동 시간에 맞게 달라지는 비밀번호를 가져올 수가 있을 것이니까요.



뭐... 간단하죠?
무진장 간단해서 글을 보시다 짜증이 나실지도 모르겠습니다.

웹 프로그램들은 어플리케이션 프로그램의 push와 같은 기능을 정확히 구현할 수는 없습니다.
그렇게 만들려면 비주얼베이직이나 비주얼 C++로 activeX 프로그램을 제작해서 HTML파일에 임베드시키는 방식으로 해야 하겠습니다만 이런 단순한 것을 가지고 굳이 activeX프로그램까지 만들 필요까지는 없을 것 같아서 그냥 간단히 만들어봤습니다.

아무튼... 소스는 이렇습니다...

스크롤바가 너무 길어졌네요.
간단한 것을 이렇게 길게 만드는 것도 일종의 재주(?)가 아닐까 싶습니다... ㅠ_ㅠ...
Posted by 빛나는 돌

회의주의자...

2009. 9. 7. 22:47

입증되지 않는 것은 나의 인식의 영역에선 존재하지 않는 것이다.

내게 의미있는 것은 사실로 증명이 된 것들이다.

증명하라...

그 것이 내게 의미를 부여하는 시발점이다.

지난 48시간동안 있었던 일에 대해 내 스스로 입증할 수 있는가?

아니라면... 한 낱 꿈에서 일어났던 일장춘몽일 뿐이다...

미망에서 깨어나 내 영역으로 돌아가자...

Posted by 빛나는 돌

Posted by 빛나는 돌

으.. 지친다...

2009. 7. 12. 16:44
밤에 일하다가 졸려서 회사 책상위에서 잤음.
한시간만 자고 일어난다는 것이 대략 7시간을 잤음.

기계는 누전차단되어 켜지지도 않고... 윗분껜 욕먹고...
간신히 기계켜서 판 뽑으니 완료시간 오후 4시 40분...

이래저래 시간은 가는구나~
아무튼 되는 것도 없고, 안되는 것도 없으니... 쩝~

------------------------------------------------
근데... 왜 이리 집에 가기 싫지?
아니... 의자에서 일어나기가 싫음...
Posted by 빛나는 돌

1. 문제를 단순화시키자.
    (1) 쉽게 처리할 수 있는 문제.
    (2) 좀더 머리를 써야하는 문제.
    (3) 해결이 안되는 문제.

    대부분의 문제는 이 범주안에 존재하므로 모델의 단순화를 통해 최대한 문제를 단순화시키는 것이
    합리적이다.
   
2. 쉽게 해결가능한 것부터 처리하자.
    문제가 여러가지일 경우 가급적 문제의 숫자를 줄이는 것이 중요하다.
    그 것이 어렵고 복잡한 문제를 해결할 수 있는 시간을 벌어주기 때문이다.
   
   
시간은 금이다!!!

3. 해결이 안되는 것은 과감히 포기하자.
   되지도 않는 일에 매달리지 말자. 안되는 일은 안된다.
   이후의 일을 어찌 알겠나는 생각은 그저 자기위안일 뿐이다.
   힘을 낭비하지 말자.   

   안되는 것은 안되는 거다... 차리리 그 시간에 유익한 일을 하자.



하지만 가장 중요하면서도 어려운 것은 복잡성이다. 
이 것을 어떻게 풀게 될 것인가.
풀수 있는 것인가 없는 것인가?
내가 이 것을 풀어야 할만큼 중요한/필요한 것인가?

문제의 핵심은 거기에 있다...

Posted by 빛나는 돌

카테고리

분류 전체보기 (135)
출력이야기... (20)
출판단지.... (1)
사는 이야기... (1)
잡동사니 (8)
음악 (23)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

글 보관함