Crawling 이란?
사전적으로는 기어다니는 것
전산에서는 데이터를 대량 수집하는 기법을 말한다.
여러 분야에서 데이터를 수집할 수 있으며 웹 페이지에서 크롤링이 이루어지면 웹 크롤링이라 한다.
Crawling 프로그램의 구조 및 설계
웹 뿐만 아니라 파일, 데이터베이스 등 데이터를 수집하게 되는 크롤링 프로그램을 다수의 사람들이 모여 함께 구현을 하게 된다면 어떤식으로 설계를 해야 유지보수가 쉽고, 구현 시에 효율을 높일 수 있을지 고민이 되었다.
1. Crawling 에 필요한 요소들
먼저 Crawling 프로그램에 필요한 요소들을 정의하면 아래와 같다.
- Datasource: 데이터를 수집하고 Crawler에게 수집한 데이터를 공급함
- Crawler: Policy 에 정의된 정책을 바탕으로 Datasource 에서 공급받은 데이터를 가공하여 Process 에게 전달
- Policy: Cralwer 의 정책을 가짐 (Cralwer 의 동작 유무, Throwtling 등을 관리)
- Process: Crawler 에게 전달받은 데이터를 필요한 형태로 가공
2. Crawling 프로그램의 구조
위의 Crawling 에 필요한 요소들을 바탕으로 하여 아래와 같은 모양으로 Crawling 프로그램의 구조를 추상화 할 수 있다.
위의 구조를 이용하여 실제 작업을 할 때의 흐름이 궁금할 수 있다.
예를 들어 Crawling 한 데이터를 가공한 데이터로 파일을 생성할 경우에는
- DataSource 에서 데이터를 수집하여 Crawler 로 전달
- Crawler 에서 데이터를 원하는 모양으로 가공하기 위해 Process 로 전달
- Process 에서 Save로 전달하여 Crawling 한 데이터를 파일로 저장
Save 는 추상화된 요소이므로 이를 상속받아 CreateFile 이라는 구현 클래스를 생성하여 실제 파일로 저장될 수 있도록 구현할 수 있다.
설계한 Crawling 프로그램의 장점
위의 구조와 같이 Crawling 프로그램을 설계하여 각각의 요소들이 서로간의 연결관계를 줄이고 최대한 독립적으로 동작 할 수 유도하였으며 해당 구조의 장점은 다음과 같다.
장점
- 웹, 데이터베이스, 파일 크롤링에 관계없이 해당 구조를 재활용할 수 있게 하였다.
따라서 세부 구현체만 변경하게 되면 어느 크롤링 프로그램이든 위의 구조를 사용할 수 있다. - 추상화된 구조로 구분하게 되어 협업이 쉬워진다.
개발자는 함께 일하지만 맡은 작업을 잘 소화하기 위해서는 개인별로 작업을 잘 구분해서 배당해야 된다고 생각한다.(망할 Code Conlict ㄷㄷㄷ)
위의 구조는 Crawling의 요소별로 클래스를 구분되어 있기때문에 요소별로 작업을 배당하여 구현을 하게되면 코드 꼬임이 발생할 확률이 현저하게 줄어든다. - 유지보수가 쉽다.
위의 구조가 아니라 하나의 클래스 또는 함수에서도 Crawling을 하는 프로그램을 만들 수는 있다.
(모든 프로그램이 마찬가지이겠지만...)
그렇지만 구분하지 않은 프로그램은 유지보수에 드는 비용이 생산비용보다 커진다. (헬게이트)
위의 구조에서 구조간의 연결고리를 최소화하여 구조를 설계하였기 때문에 변경사항, 에러사항이 발생하게 해당 구조의 세부 구현체만 수정하고 연결된 요소의 영향도를 파악하면 된다.
'IT' 카테고리의 다른 글
[정보보안] CVE (Common Vulnerabilities & Exposures) (0) | 2020.10.13 |
---|---|
[정보보안] Windows Server OS 사용자 계정관리 (0) | 2020.10.03 |
[Spring Boot] HikariCP (0) | 2020.09.30 |
[Spring Boot] Maven 과 Gradle (0) | 2020.09.13 |
[Tomcat] Tomcat 의 3대 구성요소 (0) | 2020.08.24 |