Pleasure resort of Gleam™

먼저 어떤 종류의 프로그래밍 개발 방식에도 적용되는 대원리 2가지는 다음과 같다.

낮은 결합도, 높은 응집도(Low Coupling, High Cohesion)
: 소프트웨어 공학의 전통적인 이론에 따르면, 유지보수성이 높은 소프트웨어는 프로그램의 각 요소들이 결합도는 낮게, 응집도는 높게 구성되어야 한다.

OAOO(Once And Only Once)
: "Once And Only Once"는 만약 어떤 코드나 기능이 그 프로그램 내에서 분명하고
유일한 주체성을 가진다면 같은 내용의 코드가 다른 부분에 존재해서는 안된다는 뜻이 담긴말이다.
이원칙을 주장하는 논리적 근거는 이렇다.
만약 똑 같은 코드가 여러군데 존재하면 그들 중의 어떤것은 시간이 흘러갈수록 구식이 될것이다.



객체지향 소프트웨어 개발자에게는 이 두 가지 원리를 기반으로 객체지향의 특징을
반영하는 좀 더 구체적인 설계 원리들이 필요하다. 다음 3가지가 그것이다.

ORR (One Responsibility Rule)
클래스와 메소드는 한가지 종류의 책임만을 다음과 같이 수행해야만 한다.
- 그 책임에 해당하는 일을 빠짐없이 모두 해야 한다.(All)
- 그 일을 다른 클래스나 메소드보다 더 잘 할 수 있어야 한다. (Well)
- 그 일을 자신만이 유일하게 한다.(Only)
이 원리는 높은 응집도(High Cohesion)와 밀접한 관련이 있다.
이것을 따르면 자연스럽게 프로그램은 응집도가 높아진다.


OCP (Open Closed Principle)
재사용 가능한 클래스는 확장을 할 수 있지만 수정해서는 안된다.
새로운 기능을 추가할 때 기존 클래스의 소스코드를 수정하지 않고 기존 클래스를
상속받은 하위 클래스를 새롭게 정의함으로 가능해야 한다.또는 기존 코드를 재사용한다.
이 원리는 주로 폴리몰피즘을 활용하여 구현한다.

LoD(Law of Demeter)
클래스의 메소드는 다음 객체들의 메소드만 호출해야 한다.
- 자기 자신 / 상위 클래스
- 클래스의 속성객체
- 메소드의 패러미터로 넘겨지는 객체
- 내부에서 직접 생성된 객체
- 다른 클래스의 메소드 안에서 생성되어 반환된 객체
이 원리는 낮은 결합도와 밀접한 관련이 있다.
이것을 따르면 프로그램은 자연스럽게 결합도가 낮아지게 된다.
즉 클래스의 어떤 부분이 변경되었을 때 다른곳이 심각한 영향을 받지 않는다.

From: 준뱅's 블로그^^!!(http://blog.empas.com/chukapi/4296751 )

Comment +2

  • 원리는 그렇고... 실제적으로 적용시키기 위한 방법은???

    Refactoring...

    • 그렇죠...
      하지만 이글은 개념만을 설명 하기에..;;
      적용은 알아서...;;

      사실 실무에서 혼자 아무리 잘난척하고 개발해봐야 담에 다시 써먹는 경우는 거이 없기에..;;

HOWTO555017.doc (36.0 KB)

내용보기: HOWTO555017.htm (28.1 KB)

From: M$ HOWTO(http://support.microsoft.com/?kbid=555017 )
Via:Naver MsSQL Cafe(http://cafe.naver.com/sqlserver/278 )

Comment +0

동적 Select박스를 구현하는 방법은 여러 가지가 있다.
가장많이 쓰는 방식이 JS의 array를
이용해 열심히 때려 넣는 방법이 있겠고
var BaseSBU2Value = eval("document.BillForm.BaseSBU2.value");
....
if (BaseSBU2Value==<%=d_SBUID%>) {
    document.BillForm.RealMethod.value = <%=d_RealMethod%>;
    ....
}

이런식으로 ServerSideScript로 때려 넣는 방법.
그리고 iframe이나 xmlhttp를 사용 하는 방법도 있을것이다.

여기에 뉴스그룹에서 가져온 새로운 방법을 소개 한다.
Example: http://maniacamp.com/example/dynamicselect/

index.html소스보기..


loadData.php소스보기..


SouceCode: dynamicselect.tar.gz (1.1 KB)
From: Ssemi(구글보기)

Comment +2

IIS 상태 코드

Dev & Mng2004.11.04 17:11
다음 IIS 상태 코드는 다음 IIS 버젼에만 해당됩니다.
Microsoft Internet Information Services 5.0
Microsoft Internet Information Server 4.0

일반 HTTP 상태 코드와 그 원인

1xx - 정보 전달용..


2xx - 완료..


3xx - 리디렉션..


4xx - 클라이언트 오류..


5xx - 서버 오류..



일반 FTP 상태 코드와 그 원인

1xx - 긍정적인 예비 회신..


2xx - 긍정적인 완료 회신..


3xx - 긍정적인 중간 회신..


4xx - 일시적인 부정적 완료 회신..


5xx - 영구적인 부정적 완료 회신..


From: Hyochun(http://blog.naver.com/hyochun/120007286938 )

Comment +0

현대인들에게 인터넷이란 이제 빠질 수 없는 존재가 되었다. 업무를 함에 있어서나 개인생활을 하는데 있어서 인터넷이란 존재가 많은 비중을 차지한다는 말에 이의를 달 사람은 많지 않을 것이다.
이러한 인터넷을 사용할 수 있게 된 주요한 부분 중에 하나가 바로 '라우터' 장비의 등장이라고 할 수 있다. 라우터가 빠진 인터넷이란 생각할 수도 없을 것이다.
보안을 고려한 관점에서 바라 본다면 라우터에 대한 보안이 그 어느 네트워크 보안보다 중요하다고 말할 수 있다. 그런 중요성을 가지고 있는 라우터를 운영함에 있어 고려해야 할 필수적인 보안 요소를 살펴 보도록 하겠다.

1. Router 자체 보안
(1) Default password 보안
원격에서 라우터를 관리할 때 사용하는 패스워드를 장비의 초기 설정 그대로 사용할 경우, 누구라도 라우터에 접근을 할 수 있을 것이다.
이러한 기본 패스워드는 인터넷상에서 검색을 통해서 손쉽게 접할 수 있다. 이러한 점을 감안해서 패스워드는 반드시 변경하신 후에 사용해야 한다.
그리고 Cisco IOS의 enable secret과 같은 MD5 해싱 기능을 사용해서 보다 강력한 암호화 알고리즘을 사용하는 것이 바람직하다. 또한 service password-encryption과 같은 기능을 사용함으로써 암호 자체도 판독이 불가능하게 할 수 있다.

(2) SNMP community string 보안
관리자는 네트워크의 트래픽 분석이나 장비의 상태를 파악하기 위해서 MRTG, RRD 또는 ESM과 같은 도구를 사용할 수 있다. 이러한 기능은 일반적으로 snmp protocol을 사용한다.
기본 설정으로 되어 있는 snmp community을 이용할 시에 해당 장비(라우터, 스위치, 방화벽 등)의 중요한 정보(routing table, MAC address 등)를 외부로 노출시킬 가능성이 많다. 그러므로, SNMP를 사용할 경우에는 반드시 community strings을 변경한 후에 사용해야 한다.
또한 쓰기 권한 설정 시에 라우터 정보의 변경까지 가능하므로 매우 주의를 해야한다.

(3) AAA서버(TACACS/RADIUS)를 통한 사용자기반의 인증
인증을 위해서 사용되는 AAA(Authentication Authorization Account)서버를 활용함으로써 사용자기반의 인증을 좀 더 강화할 수 있다.
로컬인증이 아닌 별도의 인증 서버를 사용함으로써 사용자 기반의 인증을 좀 더 체계적으로 할 수 있다. OS에서 사용하는 인증제도와 유사하게 인증 및 권한 설정까지 가능하다.
물론, 인증서버 자체에 관한 보안을 다시 고려해야 한다는 점은 관리자에게 또 다른 이슈가 될 수도 있다.

(4) SSH를 통한 보안
라우터 및 기타 네트워크 장비를 접속할 때 SSH를 사용함으로써 sniffing으로 인한 정보 누출을 방지할 수 있다.
사용의 단순함 때문에 많이 사용되었던 telnet은 접근 ID와 password 및 실행한 내용까지 모두 sniffing될 수 있다. SSH의 암호화 기법을 사용함으로써 공격자에게 sniffing이 되더라도 해독하는데 어려움을 줄 수 있다.
또한 banner 문구를 사용해서 접속자에게 경각심을 일깨우는 것도 좋은 방법이다.

(5) SNMP, TELNET, SSH, HTTP의 접근 제어
SNMP 및 telnet, SSH, HTTP의 접근 설정 시 해당 장비에 접근을 허용할 호스트 IP를 지정함으로써 다른 IP에서의 접근 시도를 사전에 방지할 수 있다. 이렇게 함으로써 계정 정보가 누출되더라도 부당한 접근을 사전에 막을 수 있다.

(6) Logging 설정을 통한 보안
로그는 라우터 뿐만 아니라 모든 네트워크 장비 및 서버에서 장애 및 침입을 분석할 수 있는 기본적인 방법이다. 로그서버를 유지함으로써 해당 라우터로의 접근시도 및 이벤트 발생 등에 대해서 분석할 때 유용하게 사용될 수 있다.
또한, NTP 서버를 사용함으로써 해당 장비와 로그서버 사이의 시간을 동기화 시키는 부분도 중요하다. 이것은 장비들의 상이한 시간설정이 정확한 분석을 어렵게 만들 수 있기 때문이다.

(7) 사용하지 않는 서비스 off
기본적으로 설정되어 있는 finger, bootp, proxy-ary, http-server와 같은 서비스는 굳이 사용할 필요가 없으면 서비스를 내리는 것이 바람직하다. 이러한 서비스들의 취약점을 이용한 공격이 존재할 수 있으므로 불필요한 서비스는 반드시 내리는 것이 바람직하다.

(8) OOB(Out Of Band Management)
Out of Band 경로를 구성함으로써 DoS공격으로 인해서 원격에서 라우터로의 접근이 안될 경우를 대비하는 것도 좋은 방법일 것이다.

2. Router 보안 기능
(1) IP spoofing 방지
URPF(Unicast Reverse Path Forwarding) 기능을 사용함으로써 변조된 source IP를 가지고 접근하는 것을 차단할 수 있다.
이 기능을 설정 시 Cisco의 경우 CEF(Cisco Express Forwarding)의 FIB table(Forwarding Information Base)을 이용해서 Table에 없는 source IP가 유입 시 차단된다. 또한 ACL(Access Control List)을 사용해서도 IP spoofing을 방지할 수 있다.

(2) IP Address 필터링
ACL을 사용함으로써 사설 대역이나 Broadcast Address을 필터링 할 수 있다. 또한 BGP를 구성시 Prefix List 구성을 통해서 외부로부터의 불필요한 IP가 유입되는 것을 억제할 수 있다.

(3) Secure Routing
암호화를 지원하는 라우팅 프로토콜(BGP, IS-IS, OSPF, RIPv2, and EIGRP)을 사용함으로써 인증된 라우터간에만 라이팅 테이블의 업데이트가 가능하게 할 수 있다. 이 기능을 사용함으로써 라우팅 테이블이 유출되거나 조작되는 것을 막을 수 있다.

(4) IP Source Routing
공격자는 source route 기능이 활성화되어 있을 경우에, 이를 이용해서 routing 경로를 조작할 수 있다. 이를 방지하기 위해서는 라우터에서 필요성이 없을 경우에 반드시 source route 기능을 비활성화 시켜야 한다.

(5) Ping 공격 방어
Ping Fragmentation 공격 및 외부로부터의 Ping을 필터링할 수 있다. 또한 ICMP broadcast를 막음으로써 smurf공격과 같은 DoS공격을 방어할 수 있다.

(6) TCP/UDP flooding 공격 방어
ACL 확장 기능과 QoS - WFQ(Weighted Fair Queueing), CAR(Committed Access Rate), GTS(Generalized Traffic Shaping)를 통한 TCP Syn, UDP Flooding을 방어할 수 있다.

(7) QoS(CAR, CBWFQ, LLQ, WRED)
QoS 기능을 통해서 Traffic 유형별로 대역폭을 강제로 할당할 수 있다. 이러한 QoS를 설정함으로써 인터넷 정보 이용자의 품질 보장할 수 있을 뿐 아니라, 특정 포트를 통한 대량의 트래픽이 유입될 시에 강제로 억제할 수도 있다.

(8) Worm 필터링(NBAR, ACL, PBR)
ACL이나 PBR(Policy Base Routing) 기능을 통해서 CodeRed나 Nimda같은 웜을 차단할 수 있다.

3. 트래픽 모니터링
(1) Router resource 점검(네트워크 공격 당하기 전)
Router 내부의 CPU를 주기적으로 점검함으로써, 장비의 현재 상태를 파악하는 것은 장애 대처에 앞서 매우 중요하다. 또한, Router와 외부구간 또는 내부구간의 사용률을 점검함으로써 DoS공격이나 spoofing공격을 예측할 수도 있다.

→사용 Tool : Cisco IOS command, NMS , MRTG ,RDD

(2) Netflow를 통한 flow 점검(네트워크 공격이 의심이 갈 때)
네트워크 공격이 의심이 갈 경우, Router 또는 Switch의 Netflow 기능을 이용해서 트래픽의 흐름을 모니터링 할 수 있다. 또는 Netflow 관련 3rd-party tool을 이용한 분석도 가능하다. Netflow을 이용해서 다음의 7가지의 형태로 트래픽을 분석할 수 있다.

- Source Address
- Destination Address
- Source Port
- Destination Port
- Layer 3 Protocol
- TOS Byte(DSCP)
- Input Interface

이러한 기능을 이용함으로써 내부에서 트래픽이 많이 발생되는 대역, 가장 많이 사용되는 프로토콜, 패킷의 주 목적지 등을 분석할 수 있다.

→사용 Tool : Cisco IOS command, Cflowd/arts++, RRD/Flowscan

(3) Tracking 및 filtering(네트워크 공격 당한 후)

DoS나 Flooding과 같은 공격이 있은 후에 공격자 또는 타켓의 IP나 Port를 필터링함으로써 네트워크의 단절 현상을 막을 수 있다. 또한 내부구간의 IP일 경우 L2tarce를 통해서 추적이 가능하다. 이러한 추적을 통해서 라우터 하단에 위치하고 있는 해당 Switch에서 필터링을 할 수도 있다.

→사용 Tool : Cisco IOS command


3. 트래픽 제어 : Qos function
QoS 기능을 사용함으로써 잠재적으로 발생할 수 있는 네트워크의 위험요소를 감소할 수 있다. MQC(Modular QoS CLI)를 통해서 Worm을 차단할 수 있고, CAR(Commit Access Rate)룰을 통한 DoS공격 차단, NBAR을 통한 virus 필터링 등이 가능하다.


4. 맺음말
지금까지 살펴 본 바와 같이 기본적인 라우터의 설정만 가지고도 보안에 관련된 많은 기능을 할 수 있다. 특정 기능을 가진 3rd tools을 이용해서 효과적으로 대응할 수도 있겠지만, 무엇보다도 중요한 것은 관리자의 지속적인 모니터링일 것이다.
인터넷의 관문이라고 할 수 있는 라우터를 관리하는데 있어서 보안을 좀 더 고려한다면 네트워크의 전반적인 위험 요소를 감소시킬 수 있을 것이다.


※ 참고(라우터 보안과 관련된 Cisco IOS Command List)
명령어설명
Access-list number action criteria log해당 정책에 로그 설정
Access-list number action criteria log-input
Banner login라우터 접근시 사용자에게 보여주는 메시지 설정
Enable secret라우터 접근시 사용되는 암호 및 권한 설정
Distribute-list list in잘못된 경로를 처리할 수 없게 라우팅 정보를 필터링하는 설정
Exec-timeout원격에서의 접근시 사용되는 timeout을 설정
Ip access-class원격에서의 접근 또는 로컬에서의 콘설 접속을 제한할 수 있는 설정
Ip access-group list inACL 적용
Ip http access-class listHTTP 기능 설정시 특정 대역만 접근이 가능하도록 설정
Ip http authentication methodHTTP 기능을 사용할 경우 HTTP connection request를 인증하는 설정
Ip route 0.0.0.0 0.0.0.0 null 0 255해당되는 목적지가 없을 경우에 해당 패킷을 신속하게 차단시키는 설정
Ip verify unicast rpfIP spoofing 방지
Logging buffered buffer-size로그에 사용되는 라우터 메모리 설정
No cdp enable악의적으로 Cisco Router를 이용한 라우터 정보 누출 방지
No cdp running
No ip directed-broadcastSmurf 공격 방지
No ip mroute-cacheMulticasting 트래픽 방지
No ip proxy-arpProxy-arp 기능 방지
No ip redirectsIP redirect 기능 방지
No ip source-routeSpoofing된 패킷에서 사용되는 source routing 방지
No service fingerFinger service off(사용자 정보의 누출 방지)
No service tcp-small-servers사용하지 않는 tcp/udp service off(DoS나 취약점을 이용한 공격 방지)
No service udp-small-serversNtp disable
NTP service의 취약점을 이용한 공격 방지Scheduler-interval
Scheduler-interval중요한 서비스를 다운시키는 Flooding 공격 방지
Scheduler allocate
Service password-encryption설정된 암호를 판독할 수 없게 하는 설정
Service tcp-keepalives-in사용되지 않는 터미널 삭제, 원격에서의 동일한 터미널 접속 방지
Snmp-server community something-inobvious ro list해당되는 대역(list)에 대한 SNMP 설정
Snmp-server community something-inobvious ro list
Snmp-server party… authentication md5 secret SNMP ver.2의 MD5 설정
Transport input원격에서의 접근 또는 로컬에서의 콘설 접속을 제어할 수 있는 설정


From:(주)코코넛 시큐레터
Via: 안철수연구소 ( http://info.ahnlab.com/securityinfo/info_view.jsp?seq=6503&category=02 )

Comment +0

VB 스크립트입니다.
iis 로그 파일 삭제할때 유용하게 쓸수 있습니다.
일일이 노가다 안해도요..

'3일지난 파일 자동 삭제하는 스크립트
Option Explicit

'삭제할 파일이 있는 폴더 지정 및 날짜 지정
Const strRootPath = "D:\My Downloads\aaa\tst"
Const nDays = 3

Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")

Dim oFolder, oSubFolder, oSubFolder2
Set oFolder = oFSO.GetFolder(strRootPath)

Dim oFile
'지정된 폴더 안의 파일 삭제
For Each oFile In oFolder.Files
If Int(Now() - oFile.DateLastAccessed) >= nDays Then
oFile.Delete
End If
Next

'지정된 폴더의 하위 폴더 안의 파일 삭제
For Each oSubFolder In oFolder.SubFolders
For Each oFile In oSubFolder.Files
If Int(Now() - oFile.DateLastAccessed) >= nDays Then
oFile.Delete
End If
Next
Next

'지정된 폴더의 하위 폴더의 하위 폴더 안의 파일 삭제
For Each oSubFolder2 In oFolder.SubFolders
For Each oSubFolder In oSubFolder2.SubFolders
For Each oFile In oSubFolder.Files
If Int(Now() - oFile.DateLastAccessed) >= nDays Then
oFile.Delete
End If
Next
Next
Next

하위폴더 하나밑에 까지 적용됩니다.

From: 뉴스그룹 뚜리님(구글에서 보기)
1

Comment +0

The curse and blessings of dynamic SQL.
How you use dynamic SQL, when you should - and when you should not.

내용보기

From: http://www.sommarskog.se/dynamic_sql.html
Translation :http://itcontents.com/sommar/dynamic_SQL.html

Comment +0

내용을 입력해 주세요Phishing은 1996년 American Online(AOL)을 사용하던 10대들이 일반 사용자들에게 가짜 이메일을 보내는 해킹 기법에서 유래됐으며 이들은 당시, 자신의 이메일을 AOL에서 보낸 이메일이라고 속이는 방법을 통해 일반 사용자들의 계정정보를 훔쳤다.

Phishing은 온라인상에서 가짜 미끼를 걸어, 고객의 개인정보(Private Data)를 낚시질(fishing)하는 것을 의미하는 것으로 여기서 Private Data(개인정보)와 Fishing(낚시)의 단어가 합쳐져 Phishing이라는 단어가 탄생되었다. 이 단어는 당시 alt.2600이라는 해커가 주로 이용하던 뉴스그룹에서 처음 언급되었다.

Phishing에 주로 사용되는 방법은 수신자가 원치 않는 이메일 또는 스팸 등을 발송하여 인터넷 사용자들을 Phisher들이 운영하는 웹사이트로 이동시키는데, 그 웹사이트들은 합법적인 전자 상거래 사이트처럼 위조되어 있다.

여기서 Phisher는 가짜 이메일을 보내어 사용자들을 속이고 정보를 빼내는 사람으로 Phishing 공격을 수행하는 사람을 의미한다. 또한 이러한 사이트에서는 사용자에게 계좌 정보를 갱신한다는 명목 하에 패스워드, 주민등록번호, 은행 계좌 혹은 신용카드 번호를 제공하도록 유도한다.

Phisher들은 이렇게 획득한 정보를 다양한 용도로 사용하게 되며 Phishing 공격의 피해자는 해당 사실을 어느 날 자신이 사용하지 않은 내역이 다수 포함된 고지서 등과 같은 정보를 통해서 알게 될 것이다.

[그림1] Phishing 공격 추이


이러한 Phishing 범죄의 최근 경향을 다룬 Anti-Phishing Working Group(APWG)의 보고에 의하면 공격이 급증하고 있으며 올 6월에만 1,422개의 새로운 공격이 APWG에 보고되었으며, 이는 5월에 비해 19% 증가한 수치로 2004년에는 이러한 공격 보고가 매달 52%씩 증가하였다고 한다.(출처 : http://www.antiphishing.org/)

1. Phishing 공격 방법

(1) 유사한 이메일 주소 사용
공격자의 메일 발송 도메인주소를 실제 도메인 주소와 유사하게 만들어 피해자로 하여금 발송자의 이메일주소 구분이 어렵도록 하여 피해자를 속이는 방법이다.
예) 실제 e-mail : service@usbank.com, 위조 e-mail : service@usbank-email.com

(2) 유사한 도메인 이름 사용
피해자가 접속하기 위한 위조 사이트의 도메인을 실제사이트와 유사하게 만들어 피해자로 하여금 도메인 구분이 어렵도록 하여 피해자를 속이는 방법이다.
예) 실제 site - http://www.usbank.com
   위조 site - http://www.us-bank.com

[그림2] 위조 이메일 내용


[그림3] 위조 웹사이트

위의 예에서 공격자는 http://www.citezensbankonline.com 을 클릭하였으나 실제 접속된 곳은 http://www.citezenscolorsbankonline.com/default 로 도메인 이름이 교묘하게 다른 것을 알 수 있다.

(3) 이메일주소 Spoofing
공격자가 메일발송 주소를 Spoofing하여 실제 메일발송자와 구분하지 못하게 하는 방법으로 실제 해당 기관의 메일주소와 똑같이 Spoofing 되므로 실제 메일 발송자가 누구인지를 구분하지 못하게 된다. 거의 모든 피싱메일은 발신자의 이메일주소가 Spoofing 되어 있다.

[그림4] 메일 헤더 정보

발신자의 이메일 주소가 account@ebay.com으로 Spoofing 되어 발송된 이메일

(4) Hyperlink 위조
HTML로 된 메일 본문의 링크에 표현되는 것은 실제 주소와 같으나 본문의 HTML 소스 코드 내에서는 전혀 다른 위조사이트의 주소로 링크 되어있어 실제 접속하게 되는 곳은 위조사이트가 되어 피해자를 속이는 방법이다.

[그림5] 메일 본문


[그림6] 클릭 후의 웹브라우저 주소창

위의 그림과 같이 피해자가 링크를 클릭하였을 때, 메일본문에서 클릭한 주소와는 다른 주소가 웹브라우저 주소창에 나타나므로 사용자가 바로 확인이 가능하나 주의 깊게 주소창을 보지 않으면 피해를 볼 수 있다.
공격자가 미리 취약점이 있는 웹서버를 해킹하여 위조된 페이지를 만들어 두고 피해자의 접속을 기다리는 경우가 많다.

(5) 스크립트를 이용한 주소창 위조
웹 브라우저의 주소창을 위조하여 피해자가 잘못된 링크에 접속하더라도 자바스크립트를 이용하여 정상적인 페이지에 접속한 것처럼 주소창을 위조하는 방법이다. 해당 스크립트는 먼저 스크립트가 사용 가능한 브라우저(Internet Explorer)인지 확인한 후 적합한 브라우저가 아닐 경우 바로 창을 닫고 적합한 브라우저일 경우 해당 스크립트를 실행하여 주소창에 잘못된 주소를 표시하게 된다.

[그림7] 메일 본문의 링크


[그림8] 위조된 주소창


(6) Popup 창을 이용
피싱메일의 본문 링크를 클릭시 백그라운드로는 정상적인 링크 페이지를 띄우고 Popup 창을 이용하여서는 공격자에 의해 위조된 피싱페이지를 띄우게 된다. 공격자는 메일 본문의 링크를 공격자가 만들어 놓은 페이지로 이동하게 하고 해당 페이지에서는 Popup 창과 정상적인 창을 바로 띄울 수 있게 되어있다.
Popup창은 URL 이 보이지 않게 되어있으므로 사용자가 의심하지 않게 된다. 공격자는 Popup창에 중요정보를 입력할 수 있도록 만들어 놓고 피해자는 Popup창에 정보를 입력하게 된다.


[그림9] 위조된 페이지로 뜬 팝업창


(7) 웹브라우저의 URL Spoofing 취약점
웹사이트에 http(s)://username:password@server 와 같이 기본인증을 통해 접근하는 방법은 웹브라우저의 주소창에 잘못된 URL을 표시하는 취약점이 존재한다.
이 취약성은 특정한 웹브라우저 버전에 대한 취약성으로 해당 취약점은 URL링크의 소스파일에 %01 , %00 또는 @가 들어가 있으면 %01 , %00 또는 @ 이하의 주소는 표시하지 못하여 제대로 된 URL을 표시하지 못하게 된다.
따라서 사용자가 클릭한 링크와 다른 사이트를 방문하여도 주소창에서 확인이 불가능하여 사용자는 위조사이트를 신뢰된 사이트로 믿게 된다. 웹 브라우져가 해당 취약점에 취약한지의 여부는 다음사이트에서 테스트해볼 수 있다.

* http://secunia.com/internet_explorer_address_bar_spoofing_test/

[그림10] 소스코드내 삽입된 취약한 특수문자

소스코드 내에 문자 %00가 존재하는 것을 확인할 수 있다.

[그림11] 취약한 웹브라우저의 주소창

위와 같이 해당 취약한 웹브라우저를 사용할 경우 %00@ 이하의 URL 주소는 표시가 되지 않는다.
취약한 브라우저에서 해당 링크를 클릭하였을 경우 주소표시창에 표시되는 것은 http://www.microsoft.com이나 실제 접속하는 사이트는 http://secunia.com/이 된다. 즉 사용자가 특정 링크를 클릭할 경우 원치 않는 페이지로 접근될 수 있다.

취약한 브라우저는 업데이트를 하여 http(s)://username:password@server 와 같은 기본인증의 사용을 중지시켜야 한다.

[그림12] 취약하지 않은 웹브라우저의 주소?/font>

취약하지 않은 웹브라우저를 사용할 경우는 위와 같이 표시가 되고 %00 이하의 사이트로 접속되지 않는다. 이러한 웹브라우저의 취약성을 이용한 것은 다음과 같은 예가 있다.
  • Internet Explorer URL Spoofing 취약성

  • ① 설명
    - 앞에서 예시한 것이 이 취약성을 이용한 예이다.
    ② 참조 사이트
    - http://support.microsoft.com/?id=833786
    - http://secunia.com/advisories/10395/
  • Opera 웹브라우저 IFrame OnLoad 주소 표시중 URL 위장 취약성

  • ① 설명
    - Opera Software Opera Web Browser 사용 시에 웹페이지의 URL 창에 잘못된 정보를 표시할 수 있으며 이를 이용하면 사용자가 신뢰된 사이트에 접속한 것처럼 보이나 실제로는 악성페이지에 접근한 것으로 위장이 가능하다.
    해당 취약점은 윈도우 및 리눅스 버전에서 발견되었으며 취약점을 제거하기 위해서는 Opera Software Opera Web Browser 7.54 버전으로 업데이트 해야 한다.
    ② 참조사이트
    - http://www.krcert.or.kr/popup/kcve/kcveView.jsp?mode=KOR&kid=KCVE-040711
    - http://www.opera.com/

    (8) 링크 주소를 Encoding
    메일 본문의 링크에 걸린 URL을 인코딩하여 소스에 집어 넣는 방법이며 소스 페이지에서 위조페이지의 URL은 Encoding되어 있으므로 확인하기가 힘들다. 해당 Encoding된 URL을 Decoding하여 보면 정상페이지가 아닌 위조된 페이지에 접근하는 것을 확인할 수 있다.

    [그림13] 메일 본문


    [그림14] Encoding 된 링크

    메일본문 링크의 소스를 보면 위와 같이 Encoding되어 있으며 @앞의 부분은 사용자를 속이기 위해 정상사이트의 링크와 비슷하게 위조한 주소를 Encoding 해 놓은 것이다. 실제 링크로 접속 시 해당 부분은 보이지 않게 된다.

    [그림15] Decoding 되어 접속된 사이트


    (9) 메일 본문에 중요정보 직접입력
    메일 본문에 중요정보를 바로 입력하도록 메일을 보내는 방법이다. 일반적으로 기업에서 중요정보를 이용함에 있어서 메일을 이용하여 요청하는 경우는 없으므로 사용자는 메일로 이러한 요청이 올 경우 피싱 메일이라는 것을 의심해봐야 한다.


    [그림16] 입력 폼이 있는 메일 본문


    From: (주)코코넛 시큐레터
    Via: 안철수연구소(http://info.ahnlab.com/securityinfo/info_view.jsp?seq=6473&category=07 )

    'Dev & Mng' 카테고리의 다른 글

    동적 SQL의 축복과 저주  (0) 2004.10.21
    피싱(Phishing)의 개념과 공격방법  (0) 2004.10.21
    Simple is Beautiful!  (0) 2004.10.13
    KERNEL_STACK_INPAGE_ERROR 블루스크린 해결방안  (1) 2004.10.04

    Comment +0

    Initialize()...
    아직 크게 자랑할만한 화려한 경력은 없지만, 이 글로 많은 동료, 후배 개발자들과 생각과 마음을 함께 할 수 있다면 정말 좋은 기회가 아닐 수 없다. 친한 후배의 소개로 다른 초보 개발자들에게 도움될만한 글을 에세이 형식으로 써달라는 요청을 받았다. 처음엔 훌륭한 개발자가 되기 위한 구체적이고 기발한 노하우 같은 것을 써야 맞다고 생각했지만, 밤늦게 이 생각 저 생각 정리하다 보니 전혀 다르게 쓰기로 마음 먹었다. 내가 정말 하고 싶은 말 딱 한가지만 쓰기로… 이 글을 읽는 사람이 절대 잊어먹지 않도록 말이다.

    Run()...
    "모든 개발은 단순화시킨 만큼 더욱 복잡하고 창조적인 응용을 얻어낼 수 있다." ─ Focal Point

    필자가 지금까지의 경험을 통해 얻은 사실 한가지! 아무리 복잡하게 꼬여있는 시스템이나 개발도 쪼개서 생각하면 그 원리와 목적은 아주 단순하다. 필자는 독자들에게 이 말이 진리라는 사실을 강력하게 주장하고 싶다. 곁가지를 쳐내고, 큰 줄기를 찾아내고, 뿌리로부터 이어지는 핵심을 짚어내는 기술을 익힌다면, 개발은 더 여유롭고 즐거워진다.

    그렇다면 이제부터는 여유롭고 즐거운 개발을 위한 마인드 컨트롤을 시작해보자! 필자는 위에서 말한 Focal Point를 이해하고 프로로 인정받기 위한 방법을 다음과 같이 제시하고자 한다.

    마인드 컨트롤 1
    눈알을 부라리며 세상의 모든 움직임을 소프트웨어 관점에서 관찰하고 연구해보자

    어떤 훌륭한 소프트웨어도 한 기관에 의해 창안된 유래는 없다. 제품의 본질을 꿰뚫는 확고한 비전을 가진 한 사람에 의해 제품의 생명이 탄생하게 된다. 소프트웨어를 분석하는 사람들은 그 비전을 가진 사람을 도와 그 특성을 더욱 구체화시키고 다듬는다. 만약 개발 끝에 만들어진 이 제품을 사용하는 사람이 이 명확한 비전의 핵심을 놓치게 된다면, 그 프로젝트는 완벽한 실패다.

    마인드 컨트롤 2
    아무리 복잡해 보이는 문제도 단순한 문제 해결점을 가지고 있다

    패턴 분석!
    핵심을 파고들어라!
    곁가지를 쳐내고 뿌리를 찾아라!

    필자는 대학에서 생물학을 공부했다. 생명이 유지되는 그 메커니즘은 가히 상상을 초월할 정도로 정교하기 때문에 절로 감탄을 자아낸다. 왜 내가 숨을 쉬고 물을 마셔야 하는지... 아주 당연시되는 질문도 막상 설명하려면 생각해야 될 것이 한두 가지가 아니다. 하지만 원리는 아주 간단하다. 열역학의 법칙만 제대로 이해하고 공부하면 대부분의 메커니즘이 쉽게 이해된다( 생명체라는 것은 메커니즘만으로 설명할 순 없지만…).


    단순한 사고는 모든 문제를 해결하는 열쇠다!
    Focal Point를 찾아라!
    가장 작은 단위로 쪼개서 생각하자!

    패턴분석에 관한 책을 많이 읽고, 복잡해 보이는 소스 코드에서 핵심부분과 공통부분을 찾아서 좋은 것은 자신의 패턴으로 만들어라.

    마인드 컨트롤 3
    알고리즘이나 메커니즘을 대충 알고 넘어가면서 만든 프로젝트는 반드시 대충 만들어 질 수 밖에 없다

    역사도 반복된다. 실수하고 나서 원인을 모르고 넘어가면 매번 같은 실수를 하게된다.

    마인드 컨트롤 4
    한 번 포기하기 시작하면 습관이 된다.

    나폴레옹 정신을 배워라. 축구 선수 홍명보는 승부차기할 때 미리 찰 방향을 정하고 나서 온 정신을 그 목표점에 집중하고 자신감을 공에 불어넣어 때려버린다고 한다. 목표점이 흔들리면 조금만 고비가 오면 쉽게 포기하게 된다. 개발은 자기와의 싸움이다. 개발자로서 자기의 소신과 목표가 분명하다면 절대 쉽게 무너지지 않는다. 확실한 한가지를 붙잡았다면 끝까지 밀고 나가라

    마인드 컨트롤 5
    딱 하나만 꾸준히 하자

    자주 옮겨 심은 나무는 잘 자라지 못한다. 자신이 가장 자신있고, 하고 싶은 부분에 계속 붙어서 매일 매일 꾸준히 하자. 세상은 호락호락 단번에 큰 선물을 주는 법이 없다. 필자의 친구가 했던 말 중에서 참 인상깊었던 구절 하나를 인용하겠다.
    "최고를 얻고 싶다면 최고를 투자해라... 안그러면 도둑일 뿐!"

    마인드 컨트롤 6
    모범적인 소스를 보고 그 패턴을 완전히 익숙해질 때까지 반복해서 따라해본다

    잘짜인 소스코드는 정말 배울 점이 많은 큰 형님이다. 열심히 따라 해보고 써먹자. 큰 재산이 된다.

    마인드 컨트롤 7
    전쟁터에 나갈 때 너무 많은 무기를 몸에 지니지 말자. 책가방 무거운 놈이 꼭 공부 못하더라…

    자신이 능숙하게 다룰 줄 아는 무기를 쓰자. 닭 잡는데 소 잡는 칼을 쓰지 말고, 소 잡는데 닭 잡는 칼을 쓰지 말자! 자신에게 꼭 필요한 무기만 챙겨서 쉽고 여유있게 싸우자. 툴에 종속적인 사람일 수록 기본에 약하더라.
    마인드 컨트롤 8
    인생 경험을 풍부히 하자

    아무리 훌륭한 소프트웨어도 쓰는 사람이 없으면 만든 사람이 맛이 간다. 발명은 필요에 의해 탄생하고, 필요는 시대와 문화 속에서 사람이 잉태하는 것이다. 시간 날 때마다 늘 새로운 경험과 감성을 기르자.

    마인드 컨트롤 9
    삽질은 이제 그만 ….

    나도 군대에서 삽질 많이 해보았다. 많이 힘들다. 얻은게 무엇인가 물으면 할 말이 없다. 체력이 튼튼해진 것 같지도 않고… . 적당한 시행착오는 앞으로 실수를 예방하는 차원에서 큰 도움이 되겠지만 그 이상은 안된다. 그럴땐 손을 떼고 맑은 공기를 쐬자. 급할수록 돌아가라고, 급하다고 서두르기만 하는게 유일한 방법은 아니다.


    Terminate()...
    욕심이 생겨서 말을 많이 쓰다보니 중구난방인지도 모르겠다.
    그렇지만 결론은 하나이다.
    '하나만 열심히 하자!'
    한때 필자는 세상에 대한 욕심이 너무 많아서 7개 국어를 한꺼번에 공부한 적이 있다.
    하지만 지금은? 한글도 어렵다.
    강태공은 자신이 원하는 것을 얻기 위해 62년(?)을 기다렸다고 한다.
    금방 결과가 안 나타난다고 쉽게 길을 바꾸지 말자.
    개발은 마음먹기에 따라 달리 보일 수 있다.
    세상을 아름답게 만드는 길이 될 수도 있고…
    아니면 그저 돈을 벌기 위해 매일 잠을 설쳐야 하는 고통스러운 직업이 될 수도…

    From: 한빛네트워크( http://network.hanbitbook.co.kr/view.php?bi_id=996 )

    'Dev & Mng' 카테고리의 다른 글

    피싱(Phishing)의 개념과 공격방법  (0) 2004.10.21
    Simple is Beautiful!  (0) 2004.10.13
    KERNEL_STACK_INPAGE_ERROR 블루스크린 해결방안  (1) 2004.10.04
    부분 업데이트 쿼리  (0) 2004.09.20

    Comment +0

    Stop 0x00000077" 또는 "KERNEL_STACK_INPAGE_ERROR" 문제 해결
    적용 대상
    경고: 이 문서에는 BIOS(기본 입/출력 시스템) 또는 CMOS(Complementary Metal Oxide Semiconductor) 설정을 변경하거나 컴퓨터 하드웨어를 물리적으로 변경해야 할 수 있는 단계가 들어 있습니다. 컴퓨터의 BIOS를 잘못 변경하면 심각한 문제가 발생할 수 있습니다. Microsoft는 BIOS를 변경하여 발생하는 문제에 대한 해결을 보증하지 않습니다. BIOS 설정 변경에 따른 위험 부담은 사용자의 책임입니다. 이 단계를 수행하는 데 도움이 필요할 경우 하드웨어 제조업체에 문의하고 컴퓨터의 하드웨어나 BIOS를 변경하면 보증이 무효가 되는지 확인하십시오. 자신이 직접 컴퓨터 하드웨어를 변경하고 싶지 않다면 컴퓨터 수리점에 맡겨도 됩니다.
    현상
    Windows XP를 실행할 때 아래 오류 메시지 중 하나가 나타날 수 있습니다.


    Stop 0x00000077


    KERNEL_STACK_INPAGE_ERROR
    이 문서에서는 이러한 오류 메시지 문제를 해결하는 방법을 설명합니다.
    원인
    요청한 커널 데이터 페이지를 페이징 파일에서 메모리로 읽어 올 수 없거나 마스터 부트 레코드가 바이러스에 감염된 경우에 이러한 문제가 발생할 수 있습니다. 가능한 원인을 보다 자세하게 확인하려면 오류 메시지를 올바르게 해석해야 합니다. 첫째 매개 변수와 셋째 매개 변수가 모두 0이면 4개의 매개 변수가 다음과 같이 정의됩니다.
    0(영)
    오류가 발생 시 PTE(Page Table Entry) 값
    0(영)
    커널 스택에서의 서명 주소
    첫째 매개 변수나 셋째 매개 변수 중 하나가 0이 아닌 경우에는 다음과 같은 정의가 적용됩니다.
    상태 코드
    I/O 상태 코드
    페이지 파일 번호
    페이지 파일에 포함되는 오프셋
    이러한 경우에 이 문제의 원인은 "둘째 매개 변수 값"과 그 다음의 "일반 원인" 형식으로 나열되는 다음의 정보를 사용하여 둘째 매개 변수(I/O 상태 코드)에서 확인될 수 있습니다.

    0xC000009A 또는 STATUS_INSUFFICIENT_RESOURCES: 비페이징 풀 리소스 부족.

    0xC000009C 또는 STATUS_DEVICE_DATA_ERROR: 하드 디스크에 불량 블록이 있음.

    0xC000009D 또는 STATUS_DEVICE_NOT_CONNECTED: 불량 케이블 연결, 비종료 또는 컨트롤러가 하드웨어 디스크에 대한 액세스를 얻을 수 없습니다.

    0xC000016A 또는 STATUS_DISK_OPERATION_FAILED: 하드 디스크에 불량 블록이 있음.

    0xC0000185 또는 STATUS_IO_DEVICE_ERROR: 부적절한 종료 또는 SCSI 기반 장치의 케이블 연결에 결함이 있거나 두 장치가 같은 IRQ를 사용하려고 합니다.


    해결 방법
    이 문제를 해결하려면 다음과 같이 하십시오.
    부팅 섹터 바이러스
    부팅 섹터 바이러스가 있는지 확인하려면 최신 바이러스 검사 프로그램을 실행하고 필요한 경우 컴퓨터를 치료하십시오.
    부팅 섹터 바이러스가 없는 경우
    이벤트 뷰어에서 시스템 로그를 열어 해당 오류의 원인이 되는 장치를 확인하는 데 도움이 될 다른 오류 메시지가 있는지 확인합니다.
    불량 블록. Stop 0x77은 페이징 파일의 불량 블록이나 디스크 컨트롤러 오류 때문에 발생하며 극히 드문 경우이지만 비페이징 풀 리소스를 사용할 수 없는 경우에도 발생합니다.
    첫째 및 둘째 매개 변수가 0인 경우에는 커널 스택에 스택 서명이 없는 것입니다. 이 문제는 결함있는 하드웨어 때문에 발생합니다. I/O 상태가 C0000185이고 페이징 파일이 SCSI 기반 하드 디스크에 있는 경우에는 디스크 케이블 연결과 SCSI 터미네이션(termination)을 확인해야 합니다.
    I/O 상태 코드가 0xC000009C나 0xC000016A인 경우 이것은 보통 불량 블록으로 인해 디스크에서 데이터를 읽을 수 없다는 것을 나타냅니다.
    오류 메시지가 발생한 이후에 컴퓨터를 다시 시작할 수 있다면 Autochk가 자동으로 실행되어 불량 섹터의 위치를 표시하려고 합니다. 어떤 이유로든 Autochk가 오류에 대해 하드 디스크를 검색하지 못하는 경우에는 디스크 스캐너를 수동으로 시작합니다. 사용자 컴퓨터가 NTFS 파일 시스템으로 포맷된 경우에는 시스템 파티션에서 Chkdsk /f /r을 실행합니다. 컴퓨터를 다시 시작해야 디스크 검색이 시작됩니다. 이 문제로 인해 컴퓨터를 시작할 수 없는 경우에는 명령 콘솔을 사용하여 Chkdsk /r을 실행합니다.
    결함이 있거나 신뢰할 수 없는 RAM(Random Access Memory)도 이 문제를 일으킬 수 있습니다.
    컴퓨터의 모든 어댑터 카드가 올바르게 장착되었는지 확인합니다.
    모든 어댑터 카드 연결 지점이 깨끗한지 확인합니다.
    BIOS에서 시스템 캐싱을 해제하여 오류가 해결되는지 확인합니다.
    그래도 문제가 해결되지 않으면 컴퓨터 메인보드(마더보드)가 손상된 것일 수 있습니다.

    From: Win2000 뉴스그룹

    'Dev & Mng' 카테고리의 다른 글

    Simple is Beautiful!  (0) 2004.10.13
    KERNEL_STACK_INPAGE_ERROR 블루스크린 해결방안  (1) 2004.10.04
    부분 업데이트 쿼리  (0) 2004.09.20
    ls명령어  (1) 2004.09.17

    1

    • '블루스크린 해결방안' 이라는 제목은 부적절해 보입니다.
      이 글은 버그체크 코드 중, KERNEL_STACK_INPAGE_ERROR 에 대해서만 설명하고 있습니다..
      우리가 일반적으로 말하는 블루스크린은 윈도 커널상에서 부적절한 (치명적인) 코드가 발견되었을때 윈도우 자신과 시스템을 보호하기 위해 시스템을 일시 정지시키는 것입니다. 블루스크린은 반드시 필요합니다. 그리고, 더 많은 버그체크 코드를 보고 싶으시면, Art Baker 의 The Windows 2000 Device Driver Book 을 참고하시면 좋습니다..

    SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition


    원본 데이터
    111aaabbb
    222aaabbb
    333aaabbb
    444aaabbb
    555aaabbb

    111cccddd
    222cccddd
    333cccddd
    444cccddd
    555cccddd
    이런식으로...

    update 테이블 set 컬럼 = replace(컬럼,'aaabbb','cccddd') where 조건

    Ex)
    update member set email = replace(email,'hanmail.com','hanmail.net') where mailling = 1 and email like '[_a-zA-Z0-9-\.]%' and email like '%@hanmail.com'

    update member set email = replace(email,'never.com','naver.com') where mailling = 1 and email like '[_a-zA-Z0-9-\.]%' and email like '%@never.com'

    update member set email = replace(email,'hanmil.net','hanmail.net') where mailling = 1 and email like '[_a-zA-Z0-9-\.]%' and email like '%@hanmil.net'

    Comment +0

    ls명령어

    Dev & Mng2004.09.17 14:27
    ls
    - DOS의 dir과 비슷한 명령어인데, 디렉토리명 등을 출력시키며 옵션에 따라 다양한 정보와 함께 출력된다.

    옵션
    -a: 디렉토리 내의 모든 파일 출력
    -i : 파일의 inode와 함께 출력한다.
    -l : 파일 허용 여부, 소유자, 그룹, 크기, 날짜 등을 출력한다.
    -m: 파일을 쉼표로 구분하여 가로로 출력한다.
    -r : 정렬 옵션이 선택되었을 때, 그 역순으로 출력한다.
    -s : KB 단위의 파일 크기를 출력한다.
    -t : 최근에 만들어진 파일 순서대로 출력한다.
    -x : 파일 순서를 세로로 출력한다.
    -F : 파일의 형태와 함께 출력한다.
    출력되는 파일의 형태는 '*', '@', '|', '=' 등이며, 이것은 각각 실행 파일, 심볼릭 링크, FIFO 소켓을 나타낸다.

    -R : 서브 디렉토리의 내용을 포함하여 출력한다.
    -S : 파일 크기가 큰 순서로 출력한다.
    -U : 정렬하여 출력한다.
    -1 : 라인당 한 파일씩 출력한다.
    --help : 도움말을 화면상에 나타낸다.
    --version : 'ls'의 파일 버전과 함께 출력한다.

    매일 쉘에다 명령어 칠때두 잘 안쓰는 옵션은 까먹어지만...
    이젠 거의 쓸일이 없기에 여기 적어둔다..

    From: http://linux.co.kr

    'Dev & Mng' 카테고리의 다른 글

    부분 업데이트 쿼리  (0) 2004.09.20
    ls명령어  (1) 2004.09.17
    프로그래밍 전문가가 되기 위한 Dicajohn의 7가지 방법  (0) 2004.09.15
    ASP 페이징 테스트 자료  (0) 2004.09.08

    1

    • 네트워크운영체제 배우는데.... 수업시간에 들어본거라 반가워서 와봤어요.... ^^ 열공하세요....ㅎㅎ

    프로그래머란 일종의 장인정신을 가진 예술가라고 생각합니다. 혼신의 힘 또는 정열을 바쳐 한 작품을 위해 정성을 들여야 한다는 점이 그런 것 같습니다. 제가 전공이 컴퓨터이지만 신입생때는 컴맹 수준이었습니다. 책을 읽어도 영어 사전을 찾아봐도 이해가 되지 않는 단어들이 너무 많았습니다. 뜻이 변한 단어들 CALS(Computer-Aided Logistic Support → Commerce At Light Speed), 게다가 별칭 Windows NT(No thanks, 사양하겠음), 비슷한 말들 Object(Instance, Entity) 등이 너무 어려웠습니다. 어떤 분야에서는 비슷한 의미였던 말이 또 다른 분야에서는 완전히 다른 의미가 되어버리는 미묘한 IT 용어 구분을 잘 하는 것이 초보자에게 중요한 것 같습니다. 그래야 책이나 매뉴얼도 빨리 이해할 수 있거든요.

    학원에서 강의를 듣는 것이 실력을 빨리 기르기 위해서 가장 좋은 방법일 것 같습니다. 제가 다닌 학원은 구호가 '상위 1% 전문가 교육' 입니다. 그들 중에서는 정말 열심히 스터디 하며 강의를 듣고 실력을 쌓아가는 사람도 있지만 그렇지 못한 사람도 많습니다. 학원을 다닐 때에도 하고자 하는 의지가 중요합니다. 처음 의지가 끝까지 변하지 않는 자세가 사랑이나 프로그래밍에서도 필요한 것 같습니다.

    개발자가 부족하여 여기저기서 학원이 생겨나고, 프로그래머 수준이 하향 평준화하고 있다고 합니다. IT를 공부하는 사람은 많지만, 실무에서 필요한 고급인력은 절대적으로 부족합니다. 자신이 하는 분야에서 최고가 되어 봅시다. 자바가 유망하다고 해서 그 언어를 할 필요는 없습니다. 지금은 자바가 절대적이라고 생각할지라도 언제 코볼과 같은 날이 올는지 아무도 예측할 수 없습니다. 트렌드에 휩쓸리지 말고 자신이 하고자 하는 분야에 적합한 언어를 선택하여 목적을 가지고 하나씩 공부해 봅시다.

    1. 책을 많이 읽자.
    관심 분야의 책을 많이 읽어보세요. 처음엔 소설책처럼 속독하고, 이해가 되지 않는 부분은 표시만 해두고 넘어갑니다. 그 다음 자신의 것으로 만들기 위해 이해가 될 때까지 정독합니다. 고등학교 시절, 수학 정석을 공부한 시절을 떠올려 봅시다. 다른 부분은 다 틀리곤 해도 교집합, 합집합은 완벽하게 해서, 시험에 집합 문제만 나왔으면 하고 생각했던 기억이 있을 것입니다. 컴퓨터 서적도 이와 마찬가지입니다. 책 서론은 과감하게 속독하여 앉은 자리에서 독파해 보세요. 모르는 부분은 가볍게 넘어가세요. 처음에 접하는 분야는 한글책으로 먼저 읽고, 배경지식을 쌓은 다음 최신판 원서를 읽어봅시다. 책에 있는 중요한 내용을 간단히 정리해 봅시다. 모르는 IT 용어는 관련사전이나 인터넷을 이용합니다. 새로운 IT 용어와 영어에 대한 학습은 전문가로 가는 필요 충분 조건이 아닐까요?

    2. 책에 있는 소스를 코딩해 보고, 공개 소스를 분석하자.
    '백문이 불여일타' - 책을 읽으면서 관련 소스를 직접 코딩하며 실행하여 봅시다. 소스를 타이핑하고 컴파일하면서 에러 메세지를 확인해 보세요. 실행결과를 확인하며 조금씩 코드를 수정해 봅시다. 프로그램이 생각한 대로 화면에 출력되는 것이 신기하고 즐거울 겁니다. 좋아하는 일은 흥미도 있지만, 그 분야에서 성공할 가능성이 높습니다. '오타쿠'가 되어 보세요. 전혀 즐겁지 않나요? 그럼 진로를 다른 방향으로 바꿔보세요. 우뇌가 발달한 사람은 감각적 창의력에 뛰어난 반면, 좌뇌가 발달한 사람은 논리적인 숫자에 뛰어난 특성을 갖고 있습니다. 코딩은 노가다라고 비관하지말고 그래픽 디자이너, 음악담당자 등 다른 분야를 찾아보세요. 인터넷에 공개되어 있는 오픈 소스에 주석을 달아보는 것도 실력 향상에 도움이 됩니다.

    3. 가르치는 것이 최고의 배움이다.
    코딩을 하다가 막혀서 진행되지 않으면 궁금해서 다른 사람에게 질문도 해보고, 프로그래밍 '질문과 답변' 게시판에 글도 올려보고 답답했던 경험이 있을 겁니다. 질문을 할 때는 구체적으로 모르는 부분의 요점을 적고, 질문이 여러 개일 때에는 번호를 매겨보세요. 오늘부터 인터넷 게시판에 당신이 아는 질문에 답변을 5개씩 매일 해 봅시다. 머리 속에 어렴풋이 떠돌던 지식들이 정리가 되면서 자신만의 지식으로 정립됩니다. 답변은 되도록 간단하게 하세요. 자신이 어려웠던 시절을 생각하며 자세하게 설명하지 말고, '고기' 잡는 방법을 알려줍시다. 하지만 게시판에는 매일 같은 질문들이 되풀이 됩니다. 검색어로 '답변'을 입력해서 차례대로 답변 글들만 읽어봅시다. 자신이 모르는 부분은 대개 남들도 잘 모릅니다. 자신과 비슷한 실력을 가진 분의 답변 글을 이용하세요. 또는 친구나 프로그래밍 동호회 회원들과 스터디 그룹을 조직해서 함께 공부해 봅시다. 혼자서 공부할 때보다 그것의 시너지 효과는 엄청날 것입니다. 남을 가르칠 수 있을 때 비로소 내가 활용할 수 있는 지식일 것입니다.

    4. 항상 아이디어를 메모하라.
    숀 패닝은 60시간 뜬눈으로 냅스터 프로그램 개발에 몰두했습니다. 그의 머리 속에는 손에 잡힐 것 같은 아이디어가 떠올라 있었습니다. 윈도우 API 표준규약(프로토콜)과 유닉스 서버 명령어를 다듬어 새로운 애플리케이션 프로그램을 만들어내는 게 그의 아이디어였습니다. 패닝에게는 친구도, 가족도 없고, 제대로 먹지도 못했지만 마음 속으로는 만족감을 느끼고 있었습니다. 냅스터는 음악 비즈니스를 바꿨을 뿐만 아니라 고객을 기반으로 한 인터넷 소프트웨어인P2P(PC2PC, Peep2 Peep)의 시대를 열었습니다. 자신이 사업성이 있다고 여겨지는 아이디어를 지금 이 순간 다른 사람이 개발하고 있을 수도 있다는 얘기입니다. 만일 그 아이디어를 자신이 하고싶은 일을 먼저 하고 뒷전으로 팽개쳐 놓았으면 그누텔라, 프리네트, 소리바다와 같은 P2P 회사들이 시장을 선점했을 겁니다. 아이디어는 정말 중요합니다. 좋은 아이디어를 메모해놓지 않아서 생각이 나지 않아 고민했던 적은 없나요? 펜과 수첩을 항상 휴대하며 생각나는 아이디어를 정리해 봅시다. 그리고 최단시간에 자신감을 가지고 구현해 봅시다. 당신의 우선순위는 어떤 것인지 먼저 생각해 봅시다.

    5. 주석을 달고, 소스 백업을 잘하자.
    직접 코딩한 것도 시간이 지나면 이해가 되지 않는 경우가 있지요? 주석은 많을수록 좋습니다. 주석은 자세한 설명도 좋지만 자신만의 기호를 만들어 사용해 보면 어떨까요? 예를 들면 [] : 콘솔의 출력(모니터), -- 콘솔의 입력(키보드) 등 이모티콘을 활용해 봅시다. 복잡한 환경에서 우연히 발생한 버그는 재현이 쉽지 않아 원인을 파악하기 어렵습니다. 대부분의 버그는 순간의 부주의로 인한 것입니다. 프로그래밍할 때 최선을 다해 성의껏 해야 합니다. 함수는 간단하게 만드는 것이 좋습니다. 그래야 함수에서 문제가 생겼을 때 디버깅 및 관리가 편해집니다. 소스 관리도 주의를 기울여야 합니다. 단 한 줄을 고치더라도 백업하는 것을 잊지 맙시다. 제 컴퓨터가 다운되서 지금 이문서도 처음부터 다시 도큐먼테이션 하고 있습니다.

    6. 스스로 레퍼런스를 참고해서 익혀라.
    'Know How'보다 'Know Where'가 새로운 패러다임으로 정착하고 있습니다. 구현해야 할 많은 부분을 표준 라이브러리(API)에서 대부분 지원해 주고 있습니다. 정보를 레퍼런스에서 찾는 방법이 중요해 진 것입니다. 하지만 라이브러리를 잘 사용하는 것은 실력이 좋고 나쁨을 평가할 수 없습니다. 복잡한 알고리즘을 직접 언어로 구현해 보세요. 자신만의 알고리즘을 적어도 하나 이상은 가지고 있어야 합니다. 타인이 작성한 라이브러리만 사용한다면 종속적인 프로그래머가 될 것 입니다.

    '파이썬'처럼 더 쉽고 간편한 언어를 찾기 보다 알고리즘 개발에 좀더 많은 시간을 투자합시다. Tip 같은 잔기술을 이용하며 다른 방법은 고려하지 않는 프로그램 작성은 타성에 젖게 합니다. 기존의 지식을 바탕으로 자신만의 방법을 터득해 가는 사람이 창의적인 프로그래머로 성장합니다.

    7. 프로그래머 마인드를 가져라.
    마음의 영웅을 찾아보세요. 빌 게이츠? 숀 패닝? 당신의 마음속에 닮고 싶은 영웅을 찾아봅시다. 여러 사람의 장점만을 파악해서 자신에게 적용해 보세요. 초보자와 전문가는 종이 한 장 차이입니다. 전문가라고 해서 모든걸 아는 것은 아닙니다. 당신의 노력 여하에 따라 전문가가 될 수도 있습니다. 플랫폼이나 언어에 얽매이지 말고 간단한 프로그램(명함, 주소 관리/ 테트리스)을 구현해 봅시다. 당신보다 더 초보일지 모를 사용자를 위해 쉬운 인터페이스(User-frienldy GUI)를 염두에 둡시다.

    각각의 언어는 나름대로의 장점을 갖고 있습니다. 필요에 따라 적절한 툴을 사용합시다. 비주얼(IDE)툴만의 사용으로 너무 쉽게 성의없이 프로그램을 만드는 것은 버그를 가질 확률이 높아 집니다. 다양한 환경을 접하고 자신에게 적절한 분야를 찾아서 전문가가 되기 위해 노력하세요.

    출처: 한빛네트워크(http://network.hanbitbook.co.kr/view.php?bi_id=990 )
    1

    Comment +0

    페이징 테스트
    1.Rs.Move() 2.Rs.AbsolutePage 3.Top 20[NOT IN] 4.TOP 20[IN] 5.TOP 20[MIN] 6.TOP 20[INDEX, MIN)
    제가 어느 페이징이 제일 빠를까.. 고민 하다가.. 테스트로 만들어 보았습니다.
    총.. 6가지..입니다..

    간단하게 쿼리를 설명해드리겠습니다.

    1. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]

    1번 리스트는 이 쿼리 구문을 써서 했고요. 현제 개시물까지 이동을 Rs.Move(이동할수) 로 처리 했습니다.

    2. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]    - 1번과 동일

    1번과 쿼리구문은 동이하고요. 레코드셋의 AbsolutePage를 이용해서 페이징을 했습니다.

    3. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]

      WHERE [글번호필드] NOT IN (SELECT TOP [제거할 게시물수] [글번호필드] FROM [테이블명])
      예전에 태요 사이트에서 보았던 쿼리 구문입니다.. NOT IN 때문에.. 문제시 되었던 쿼리구문이죠.

    4. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]
      WHERE [글번호] IN (SELECT TOP [페이지출력 갯수] [글번호] FROM
      (SELECT TOP [불러올 총 게시물수] [글번호] FROM [테이블 명]) AS A ORDER BY [글번호])
      ORDER BY [글번호] DESC

      이 쿼리 구문은 3번의 쿼리 구문의 문제점을 보완한 구문입니다. NOT IN 대신에 IN을 사용 했습니다.

    5. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블 명]
      WHERE [글번호] <= (SELECT MIN([글번호])
      FROM (SELECT TOP [제거할 게시물수] + 1 [글번호] FROM [테이블명]) AS A)

      5번째 쿼리 구문은 IN, NOT IN이 아닌 출력할 마지막 글번호 바로 앞이 글번호를 찾아서 처리를 해주는
      쿼리 구문입니다.

    6. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블명]
      WHERE [글번호] <= (SELECT MIN([글번호])
      FROM (SELECT TOP [제거할 게시물수] + 1 [글번호]
      FROM [테이블명] WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]) AS A
      WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호])
      AND [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]

      6번재 쿼리는.. 글에 인덱스(가칭)라는 필드를 하나 더 추가 해서.. 글 기본 2000개마다 (가변적입니다)
      인덱스를 증가 시켰습니다. 즉 2000개를 하나의 묶음으로 만든것입니다.
      그 인덱스를 기준으로 처리를 해주었습니다.(기본 개념은 영어 사전 입니다 ㅡㅡ;)

    위와 같이 간단한 기본 쿼리 구문을 설명? 했습니다.
    게시물은 100만개를 넣고 테스트를 했습니다.
    테스트 게시판을 보시려면.. 맨위에 각 게시판을 링크를 걸었습니다.
    서버가 구려서.. 제대로 될지 모르지만..
    제 노트북
    (CPU : p4-1.8, RAM : 768Mb, 컴팩 프리자리오 2820AP, 환경 : 윈도우2003 MSSQL2000)
    에서 테스트 해본 봐로는 처음페이지(1), 마지막 페이지(50000) 처리 시간이 아래와 같습니다.(단위 ms)

    1 : 320    12289.06
    2 : 273    11476.56
    3 : 289    4406.25
    4 : 289    2695.31
    5 : 289    1218.75
    6 : 7.81    23.44

    엄청난 차이가 나죠??
    기본적으로 글번호에 Clustered Index, 인덱스번호, 글깊이에 Non Clustered Index를 걸어 두었습니다.
    엄청난 차이로 인해 테스트로 만든 저 또한 입이 쩍 벌어 집니다 ㅡㅡ;;

    위 페이징 로직은 여기 저기서 줏어 듣고 ㅡㅡ; 확장 시킨 것입니다.

    제가 내공 수위가 낮은 관계로 정확한 테스트를 행했는지 모르지만..
    페이징으로 고생하시는 분들을 위해.. 간략하게 만들어 봤습니다.

    기본 테스트는 제 홈페이지에서 해보시면 되구요.

    테스트 asp파일은 [이곳] 에서 다운 받을수 있습니다.

    제 홈에 있는 페이징 방법이 6번의 인덱스와 not in 으로 만들었습니다.
    (그때는 걍.. 2000개 안쪽에서 처리 해주는 것이라 not in을 썻습니다 게시판이 필요 하시면..
      다운 받으셔서 저장 프로시저늬 리스트 부분을 수정 하시면. .더욱 쾨적하게 사용 하실수 있을것입니다)

    p.s 궁금하신 점이나 문의 사항은 제 홈페이지의 테스트 게시판 버그 리포트에 적어 주시기 바랍니다.



    테스트 페이지: http://neostory.net/Example/PagingTest/

    출처 : http://www.knhead.pe.kr/PagingTest/
    큰머리의 페이징 테스트 자료 이다.
    지금은 없어졌지만 뉴스그룹에 올라왔길래 얼른 퍼다 놓는다.

    Comment +0

    구글 내용 보기

    SQL 서버로 백업시 백업화일을 날짜별로 생성하는 방법입니다.

    declare @str nvarchar(100)

    set @str = N'c:?ackupmydb' + convert(nvarchar(20), getDate(), 112) +N'.bak'


    BACKUP DATABASE [mydb] TO DISK = @str
    WITH NOINIT , NOUNLOAD , NAME = N'mydb backup', NOSKIP , STATS = 10,
    NOFORMAT

    위의 스크립을 job으로 스케쥴링 거시면 됩니다.
    해당 일정이 되면 mydb20040825.bak, mydb20040826.bak 이런식의 백업화일이
    생성됩니다

    ASP News Group 천상 태자님이 올려주신거다...

    Mysql은 Shell(telnet 또는 ssh)에서 아래와 같이 입력한다.
    Mysqldump -u사용자명 -p사용자비번 디비명 > Backup_`date '+%Y%m%d%k%M%S'`.sql 이렇게 하믄 된다...
    띠어쓰기 잘해야 한다..;;;

    Comment +0