210426-TIL

오늘 한 일

느낀 점

🧩 자료구조

  • 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();
    }
}

📝 기타

  • 어떻게 코드를 짜든 "나만의 이유"가 있어야 한다. - 호눅스 말씀
  • 김영한 님 강의는 언제 들어도 재밌다.
  • 인프런 대표님이 페이스북 친추를 주셨다! 나도 언젠가 인프런같이 좋은 회사에서 일할 수 있을까...? 동욱 개발자님같은 분이 사수로 계신 회사.. 너무 가고싶다😭
  • 리모델링했다😆

좋은 웹페이지 즐겨찾기