반응형

C# 267

6. 웹 로봇 만들기

6. 웹 로봇 만들기 웹 로봇은 웹 페이지 수집하는 핵심 엔진입니다. 아키텍쳐링 단계에서 약속한 작업을 토대로 웹 로봇을 만들어 봅시다. 웹 로봇을 만드는 과정은 웹 로봇을 구성할 클래스를 조사하는 것부터 시작할게요. 그리고 조사한 클래스 간의 관계를 정의한 후에 구현할게요. 그리고 웹 로봇을 서비스 형태로 만들기로 했는데 이 책에서는 라이브러리로 만들어서 사용할게요. 그리고 이번 장에서는 웹 로봇 라이브러리를 만들기 전에 웹 로봇 예광탄의 화면 구성을 한 후에 라이브러리에 필요한 형식을 정의하고 이를 이용한 예광탄을 작성할게요. 6. 1 웹 로봇 예광탄 만들기 먼저 웹 로봇 예광탄을 윈도우즈 Forms 응용 프로그램으로 작성합시다. 예광탄에서는 다음의 기능을 가능하게 작성해 봅시다. 웹 로봇의 수집을 ..

5. 4 DBM ForSearch 구현

5. 4 DBM ForSearch 구현 이제 검색 요청이 왔을 때 필요한 DBM ForSearch 라이브러리를 구현합시다. 이번에는 Windows Forms 응용 프로그램으로 예광탄을 먼저 만들고 난 후에 라이브러리를 만듭시다. 여기에서는 Search 시퀀스 다이어그램을 살펴보시고 이를 토대로 예광탄을 만들기로 합시다. 5.4.1 DBM ForSearch 예광탄 먼저 Windows Form 응용을 생성하세요. 프로젝트 명은 DBM ForSearch 예광탄으로 할게요. DBM ForSearch 예광탄의 메인 폼의 자식 컨트롤을 배치합시다. 형태소 이름을 입력받아 포함하고 있는 웹 페이지 주소와 참조 개수를 얻어오는 것을 테스트하기 위한 컨트롤들을 배치합니다. 특정 웹 페이지 주소에 포함하고 있는 전체 형태..

5.2.2 DBM ForAll 라이브러리 만들기

5.2.2 DBM ForAll 라이브러리 만들기 이제 예광탄에서 만든 EHDbmForAll 클래스로 DBM ForAll 라이브러리를 만듭시다. 만드는 방법은 클라스 라이브러리 템플릿으로 프로젝트 추가합니다. 그리고 제공하는 cs 파일의 이름을 EHDbmForAll로 변경한 후에 앞에서 작성한 EHDbmForAll 소스를 복사해서 붙여 넣습니다. EHDbmForAll에서는 WSE Core 라이브러리를 사용하므로 참조 추가하는 것을 잊지 마세요. 그리고 프로젝트 속성의 빌드 탭에서 XML 문서 파일 체크 박스를 체크하여 세 줄 주석 작성하는 것도 잊지 마시기 바랍니다. DBM ForAll 라이브러리는 예광탄으로 정상적으로 수행하는 것을 확인한 EHDbmForAll클래스로 만드는 것이라 별다른 추가 작업이 필..

5. 2 DBM ForAll 구현

5. 2 DBM ForAll 구현 이제 아키텍쳐 단계에서 작업한 시퀀스 다이어그램에 약속한 것 중에 DBM ForAll에서 사용할 저장 프로시저는 모두 작성하였습니다. 이제 DBM ForAll을 구현합시다. DBM ForAll은 라이브러리로 만들기로 하였습니다. 라이브러리를 만들 때는 응용 프로그램으로 작성한 후에 정상적으로 동작하는 것을 입증하는 작업을 선행하세요. 그리고 정상적으로 동작하는 것을 확인한 후에 라이브러리로 작성합시다. 빠르게 작성하고자 하는 욕구에 의해 이와 같은 과정을 생략하고 바로 라이브러리를 만들 때가 많습니다. 하지만 라이브러리를 잘못 만들었을 때 이를 사용하는 프로그램의 버그가 라이브러리 때문에 발생한 것인지 발견하는 것은 생각보다 비용이 많은 작업이며 빠르게 발견한다고 하더라..

5.1.10 UpdatePostedUrl 저장 프로시저

5.1.10 UpdatePostedUrl 저장 프로시저 웹 로봇으로 웹 페이지를 수집하면 DBM ForAll에게 DBMS에 저장할 것을 요청합니다. 이와 같은 내용은 StorePostedUrl 시퀀스 다이어그램을 보면 알 수 있습니다. 그리고 시퀀스 다이어그램을 보면 DBM ForAll은 AddPostedUrl 저장 프로시저를 사용하기로 약속하였습니다. 그리고 수집한 페이지 내부에 링크를 다시 수집 대상 후보 사이트로 추가하는 부분이 있는데 앞에서 작성한 AddSeedSite 저장 프로시저를 이용하면 되므로 추가로 작성할 필요가 없습니다. 수집한 웹 페이지 정보를 추가할 때는 이미 수집한 웹 페이지인지 확인할 필요가 있습니다. 만약 이미 수집한 웹 페이지라면 내용을 변경하고 그렇지 않으면 추가하면 되겠죠..

5.1.8 RemoveCandidate 저장 프로시저

5.1.8 RemoveCandidate 저장 프로시저 CandidateTable에 있는 특정 항목을 제거하는 저장 프로시저를 만들어 봅시다. 저장 프로시저 이름은 RemoveCandidate로 할게요. 입력 인자로 삭제할 항목 번호를 받습니다.CREATE PROCEDURE dbo.RemoveCandidate ( @SeqNo int ) delete 쿼리문을 이용하여 입력 인자로 전달받은 SeqNo 값을 갖는 항목을 삭제합니다.delete from CandidateTablewhere SeqNo = @SeqNo ▷ RemoveCandidate 저장 프로시저

5.1.7 GetCandidateBySeqNo 저장 프로시저

5.1.7 GetCandidateBySeqNo 저장 프로시저 CandidateTable에서 특정 일련 번호의 항목을 얻어오는 저장 프로시저를 만듭시다. 저장 프로시저 이름은 GetCandidateBySeqNo으로 정할게요. 입력 인자로 일련 번호를 받고 OUTPUT 유형의 인자로 페이지 주소와 Seed 사이트에서의 상대적 깊이를 선언합니다. CREATE PROCEDURE dbo.GetCandidateBySeqNo ( @SeqNo int, @Url varchar(200) OUTPUT, @Depth int OUTPUT ) select문을 이용하여 CandidateTable에서 입력 인자로 받은 일련 번호와 같은 항목의 정보를 OUTPUT 유형의 인자에 설정합니다. select @Url=Url, @Depth=..

5.1.6 GetMinSeqNo 저장 프로시저

5.1.6 GetMinSeqNo 저장 프로시저 이번에는 CandidateTable에서 일련 번호가 가장 작은 값을 얻어오는 저장 프로시저를 만듭시다. 저장 프로시저 이름은 GetMinSeqNo라고 할게요. 인자로 OUTPUT 형태의 가장 작은 값을 설정하기 위한 SeqNo인자를 선언합시다. CREATE PROCEDURE dbo.GetMinSeqNo ( @SeqNo int OUTPUT ) CandidateTable에서 SeqNo의 최소값을 얻어와 변수 SeqNo에 설정합니다. set @SeqNo = (select min(SeqNo) from CandidateTable ) 그런데 CandidateTable에 항목이 비어 있다면 변수 SeqNo에는 null 상태가 됩니다. 이럴 떄는 변수 SeqNo 값을 -1..

5.1.4 AddCandidate 저장 프로시저

5.1.4 AddCandidate 저장 프로시저 이제 수집 대상 페이지 주소를 추가하는 AddCandidate 저장 프로시저를 만듭시다. 입력 인자로 수집 대상 페이지 주소와 Seed 사이트에서의 상대적 깊이를 인자로 받습니다. CREATE PROCEDURE dbo.AddCandidate ( @Url varchar(200), @Depth int ) 그리고 저장 프로시저에서는 NeedCollectUrl 저장 프로시저를 이용하여 수집이 필요한 페이지인지 확인하여 필요하면 CandidateTable에 추가합니다. Declare @Need int Exec NeedCollectUrl @Url, @Need OUTPUT if @Need = 1 begin insert into CandidateTable values(@..

5.1.3 NeedCollectUrl 저장 프로시저

5.1.3 NeedCollectUrl 저장 프로시저 이번에는 수집할 필요가 있는 페이지인지 확인하는 NeedCollectUrl 저장 프로시저를 만듭시다. 입력 인자로 페이지 주소와 OUTPUT 유형으로 수집할 필요가 있는지 여부를 결정하는 인자가 필요하겠죠.CREATE PROCEDURE dbo.NeedCollectUrl ( @Url varchar(200), @Need int OUTPUT ) 저장 프로시저의 알고리즘은 이미 작성한 ExistedCandidate 저장 프로시저를 이용해 존재하는 페이지 주소인지 확인합니다. 존재 여부를 확인하기 위한 변수를 선언해야겠죠.Declare @Existed intExec ExistedCandidate @Url, @Existed OUTPUT 만약 존재하지 않으면 Exi..

반응형