본문 바로가기

분류 전체보기78

9장 웹 크롤러 설계 가상 면접 사례로 배우는 대규모 시스템 설계 기초 – System Design Interview 개인적으로 크롤러를 이용해서 자동화 하는 것을 좋아한다고 생각하고 있었는데 이번 챕터를 읽으면서 이런 대규모 크롤러도 만들 수 있다는 것을 알게 된 것 같다. 가볍게 읽을 수 있을 것이라 기대했는데 생각보다 고려할 부분이 많았다. 개요 웹 크롤러의 복잡도는 웹 크롤러가 처리해야 하는 데이터의 규모에 따라 달라진다. 몇 시간이면 끝낼 수 있는 작은 학급 프로젝트 수준일 수도 있고, 별도의 엔지니어링 팀을 꾸려서 지속적으로 관리하고 새선해야 하는 초대형 프로젝트가 될 수도 있다. 1단계 문제 이해 및 설계 범위 확정 웹 크롤러의 기본 알고리즘은 간단하다. 1. URL 집합이 입력으로 주어지면, 해당 URL들이 가.. 2023. 6. 22.
8장 URL 단축기 설계 가상 면접 사례로 배우는 대규모 시스템 설계 기초 – System Design Interview 개인적으로 URL 단축기를 만들어 쓰고 있는데 (공개할만한 수준은 아니기에 개인적인 용도로만 사용하고 있다.) 내가 만든 단축기의 경우, Firebase에서 제공하는 hosting에 Firebase의 database 기능을 이용해서 사용하고 있다보니 고려해야 할 부분이 적었다. unique 한 id 생성에 대한 부분도 firebase 자체 기능을 이용해서 크게 신경 쓸 부분이 없었는데 이 책에서는 베이스부터 어떻게 설계해야 하는지에 대해서 설명해줘서 개인적으로 재밌게 보았다. tinyurl 같은 url 단축기를 설계해보자. 1단계 문제 이해 및 설계 범위 확정 시스템 설계 면접 문제는 의도적으로 어떤 정해진 .. 2023. 6. 15.
1장 최신 자바 소개 (4) – HTTP/2 소개 Well-Grounded Java Developer - 2nd edition 1.5.3 HTTP/2 (Java 11) HTTP 표준의 새로운 버전인 HTTP/2가 출시되었습니다. (글 작성 시점 기준 현재는 HTTP/3도 나왔습니다. 2022년 6월 6일, IETF RFC 9114로 표준화되었다고 함) HTTP 1.1(1997년) 에서 업데이트가 된 이유에 대해서 알아보고 Java 11에서 어떻게 HTTP/2를 제공하는지 알아보겠습니다. HTTP 1.1은 오래된 표준이기 때문에 최신 웹 어플리케이션에서 요구하는 성능에 비해 노후화 되었습니다. 이로 인해 아래와 같은 문제가 있었습니다. Head-of-line 블로킹 단일 사이트에 대한 연결 제한 HTTP 컨트롤 헤더의 성능 오버헤드 * 각각의 문제점에 대.. 2023. 6. 11.
1장 최신 자바 소개 (3) Well-Grounded Java Developer - 2nd edition 1.5 java 11의 작은 변경 사항 java 8 이후 비교적 많은 수의 새로운 작은 기능들이 적용되었습니다. 모든 변경 사항은 아니지만 가장 중요한 몇 가지 사항을 빠르게 살펴보겠습니다. 1.5.1 Collections factories (JEP 213) 컬렉션 리터럴 (collection literals - 리스트나 맵과 같은 objects 컬렉션) 을 선언하는 간단한 방법을 지원하는 것은 자주 요청되었던 개선 사항이였습니다. Java 컬렉션의 기본 설계 원칙은 클래스가 아닌 인터페이스로 표현된다는 것입니다. Java 8에서 인터페이스에 정적 메서드를 가질 수 있는 기능이 추가되었기 때문에 이를 활용하여 인터페이스에 간단한.. 2023. 6. 11.
1장 최신 자바 소개 (2) Well-Grounded Java Developer - 2nd edition 1.4 언어 및 플랫폼 변경 우리는 무엇이, 왜 변경되었는지 파악하는 것은 중요하게 생각합니다. 일반적으로 언어의 새로운 기능에 대해서는 관심이 많지만, 변화를 만들어 내기까지 얼마나의 시간과 노력이 소요되는지에 대해서는 관심이 많지 않습니다. 자바와 같이 성숙한(mature, 오래된) 런타임의 경우에는 다른 언어나 라이브러리에서 영향을 받기도 합니다. * syntactic sugar(구문적 설탕, 문법적 설탕) : 사람이 이해하기 쉽고 표현하기 쉽게 컴퓨터 언어를 디자인해 놓은 문맥 당연하게도 일반적으로 최소한의 노력이 드는 구현 수준을 선택하는 것이 좋습니다. 즉 새 기능을 라이브러리로 구현하는 것이 가능하다면 라이브러리로 .. 2023. 6. 7.
7장 분산 시스템을 위한 유일 ID 생성기 설계 가상 면접 사례로 배우는 대규모 시스템 설계 기초 – System Design Interview 7장 분산 시스템을 위한 유일 ID 생성기 설계 어떻게 유일 ID 생성기를 설계할 것인가. 단일 서버라면 auto_increment 속성을 설정해도 좋을 것이다. 그러나 분산 시스템에서는 문제가 달라지게 된다. 1단계 문제 이해 및 설계 범위 확정 이번 장에서 만족해야할 요구사항는 다음과 같다. - ID는 유일해야 한다. - ID는 64비트로 표현될 수 있는 값이어야 한다. - ID는 발급 날짜에 따라 정렬 가능해야 한다. - 초당 10,000개의 ID를 만들 수 있어야 한다. * 참고 여기서 64비트는 8바이트 이고 이는 Mysql을 기준으로 생각해보았을 때 bigint 타입이다. https://dev.my.. 2023. 6. 6.