210426-TIL
오늘 한 일
- 마스터 클래스 (데이터베이스)
- 클러스트링 인덱스
- What is Database Index Selectivity?
- What Is Cardinality in a Database?
- Spring Data JDBC Map, List 자료구조 맵핑
- 생활코딩 데이터베이스 강의 복습
- 조인, 관계형 데이터 모델링 재수강
- Difference between @RestController and @Controller Annotation
- 토큰(Token) 기반 인증에 대한 소개
- Session 와 Token 인증 개념
- 인프런 스프링 핵심원리
- IoC, DI, 컨테이너
- AppConfig 리팩토링
- 직접 객체 생성 및 의존성 주입에서 스프링 컨테이너 사용으로 변경
- Think Data Structures
- Chapter 6 트리 순회
- Chapter 7 철학으로 가는 길
- 정리한 글: https://velog.io/@janeljs/Data-Structures-1
느낀 점
🧩 자료구조
- 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();
}
}
📝 기타
- 어떻게 코드를 짜든 "나만의 이유"가 있어야 한다. - 호눅스 말씀
- 김영한 님 강의는 언제 들어도 재밌다.
- 인프런 대표님이 페이스북 친추를 주셨다! 나도 언젠가 인프런같이 좋은 회사에서 일할 수 있을까...? 동욱 개발자님같은 분이 사수로 계신 회사.. 너무 가고싶다😭
- 리모델링했다😆
Author And Source
이 문제에 관하여(210426-TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@janeljs/210426-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)