오늘 한 일
느낀 점
🧩 자료구조
- DOM 트리의 노드값을 읽어오는 크롤러를 통해 트리 순회를 설명하다니 너무너무 재밌다.
org.jsoup.select.Elements
에 들어가보니 Elements 클래스는 List 인터페이스를 구현하고, 기본 생성자에서 ArrayList로 초기화되고 있었다. 신기하군...
public class Elements implements List<Element>, Cloneable {
private List<Element> contents;
public Elements() {
contents = new ArrayList<Element>();
}
- 서비스 약관 준수를 위해 크롤링 속도를 제한하는 메서드를 구현해보자!
- minInterval(1000)에 마지막 요청 시간을 더한 값에서 현재 시간을 뺀 값이 0보다 크면(1초보다 더 짧은 간격으로 요청이 갔다면), 해당 시간만큼 쓰레드를 sleep하도록 설정한다.
- 이 때 WikiFetcher 객체를 싱글톤 패턴으로 구현하고, 한 객체로 모든 요청을 처리해야 요청 사이의 최소 간격을 보장할 수 있다.
public class WikiFetcher {
private long lastRequestTime = -1;
private long minInterval = 1000;
private void sleepIfNeeded() {
if (lastRequestTime != -1) {
long currentTime = System.currentTimeMillis();
long nextRequestTime = lastRequestTime + minInterval;
if (currentTime < nextRequestTime) {
try {
Thread.sleep(nextRequestTime - currentTime);
} catch (InterruptedException e) {
System.err.println("sleep interrupted!");
}
}
}
lastRequestTime = System.currentTimeMillis();
}
}
📝 기타
- 어떻게 코드를 짜든 "나만의 이유"가 있어야 한다. - 호눅스 말씀
- 김영한 님 강의는 언제 들어도 재밌다.
- 인프런 대표님이 페이스북 친추를 주셨다! 나도 언젠가 인프런같이 좋은 회사에서 일할 수 있을까...? 동욱 개발자님같은 분이 사수로 계신 회사.. 너무 가고싶다😭
- 리모델링했다😆
인프런 대표님이랑 친구하셨어요..?ㅋㅋㅋㅋㅋ대박ㅋㅋㅋㅋ그리고 제인방 어디로 가면되나요 ㅋㅋㅋ