본문 바로가기

분류 전체보기

(126)
[대규모 시스템 설계 기초] 4장. 처리율 제한 장치의 설계 네트워크 시스템에서 처리율 제한 장치(rate limiter)는 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제러하기 위한 장치 HTTP를 예로 들면 이 장치는 특정 기간 내 전송되는 클라이언트의 요청 횟수를 제한 API 요청 횟수가 제한 장치에 정의된 임계치를 넘어서면 추가로 도달한 모든 요청은 처리가 중단(block)됨 사용자는 초당 2회 이상 새 글을 올릴 수 없음 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없음 같은 디바이스로는 주당 5회 이상 리워드를 요청할 수 없음 API에 처리율 제한 장치를 둘 때 좋은 점 DDoS(Denial of Service) 공격에 의한 자원고갈 방지 대형 IT 기업들이 공개한 거의 대부분 API 들은 어떤 형태로든 처리율 제한 장치를..
[대규모 시스템 설계 기초] 3장. 시스템 설계 면접 공략법 1단계 문제 이해 및 설계 범위 확정 요구사항을 완전히 이해하고 답을 해야한다. 깊이 생각하고 질문하여 요구사항과 가정들을 분명히해야한다. 엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바른 질문을 하는 것, 적절한 가정을 하는 것, 시스템 구축에 필요한 정보를 모으는 것 요구사항을 파악하기 위한 질문 구체적으로 어떤 기능들을 만들어야 하나? 제품 사용자 수는 얼마나 되나? 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가? 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가? 2단계 개략적인 설계안 제시 및 동의 구하기 개략적인 설계안을 제시하고 동의를 얻는 것 설계안에 ..
[대규모 시스템 설계 기초] 2장. 개략적인 규모 추정 Use Back-Of-Envelope-Calculations To Choose The Best Design 참고 문헌 메모리는 빠르지만 디스크는 아직도 느리다 디스크 탐색(seek)은 가능한 한 피하라 단순한 압축 알고리즘은 빠르다 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는 데는 시간이 걸린다 가용성에 관계된 수치들 고가용성(high availability) 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력 퍼센트%로 표현 100%는 시스템이 단 한 번도 중단된 적이 없었음을 의미 대부분의 서비스는 99%에서 100% 사이의 값을 가짐 SLA(Service Level Agrement) 서비스 사업자..
[대규모 시스템 설계 기초] 1장. 사용자 수에 따른 규모 확장성 단일 서버 모든 컴포넌트가 단 한대의 서버에서 실행 웹 앱, DB, 캐시 등이 전부 서버 한 대에서 실행됨 사용자 요청 처리 흐름 사용자가 도메인을 이용해 웹 사이트에 접속하면 IP 주소로 변환을 위해 DNS로 질의 DNS 조회 결과로 반환된 IP 주소로 HTTP 요청이 전달됨 요청을 받은 웹 서버는 HTML 혹은 JSON 형태의 응답 반환 요청은 웹 앱과 모바일 앱 두가지 종류의 단말로부터 온다. 데이터베이스 사용자가 늘어나면 단일 서버로는 충분하지 않아 여러 서버를 두어야 함 웹/모바일 트래픽 처리 서버와 데이터베이스 서버를 분리 어떤 데이터베이스를 사용할 것인가? 관계형 데이터베이스 RDBS(Relational Database Management System) ex) MySQL, 오라클 데이터베이스..
[Kotlin In Action] 7장. 연산자 오버로딩과 기타 관례 산술 연산자 오버로드 관례란? 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 말한다. ex) 산술 연산자 - 어떤 클래스에 plus라는 메서드를 정의할 때 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있다. 이항 산술 연산자 data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } } >>> val p1 = Point(10, 20) >>> val p2 = Point(30, 40) >>> println(p1 + p2) Point(x=40, y=60) operator 키워드와 지정한 함수 이름을 사용해서 연산자를 오버로딩..
JCF [10분 테코톡] ⚾️ 제이온의 JCF을 들으며 정리한 글입니다. JCF란? Java Collections Framework 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해놓은 것 도입 배경 JCF가 도입되기 이전에는 데이터를 그룹핑하는 방법으로는 Array, Vector, Hashtable 등이 있었다. 이 컬렉션들의 사용 목적이 같더라도 각각의 컬렉션에서 사용하는 문법이 다른 문제가 있었다. 때문에 공통 인터페이스가 필요하다고 판단하였고, 이로인해 탄생한 것이 JCF이다. JCF의 계층 구조 크게 Collection 인터페이스와 Map 인터페이스로 나눌 수 있다. Collecti..
Hashtable, HashMap, ConcurrentHashMap 간단 비교 HashMap, Hashtable, ConcurrentHashMap Map 인터페이스를 구현하고 세가지의 구현체는 비슷하지만 조금씩 다른 차이점을 가지고 있다. Hashtable 해시 테이블은 형태로 데이터를 저장하는 자료구조 중 하나이다. 내부적으로 배열을 사용해 데이터를 저장하는데, 이 때 각각의 Key 값에 해시 함수를 적용해 이 배열의 고유한 index를 생성하고 값을 저장, 검색할 때 사용한다. 자바에서는 java.util 패키지 안에 Map 인터페이스를 구현한 HashTable을 사용할 수 있다. 메서드에 붙어있는 synchronized put 메서드를 보면 null 값을 허용하지 않고 있음을 볼 수 있다. Hashtable 클래스에서 구현하고 있는 모든 메서드를 보면 synchronized ..
JPA Auditing과 제대로 알아야 할 @PreUpdate JPA Auditing? 서비스를 운영하다보면 데이터가 변경되었을 때 누가 값을 변경했고, 언제 변경했는지를 남겨야할 때가 있다. Spring Data Jpa 에서는 이에 대해 어노테이션으로 편리하게 Audit(감시) 기능을 제공해주고 있다. 엔티티를 영속성 컨텍스트에 저장하거나 조회를 수행한 후 수정하게 되면 이에 대한 변경 시간 등을 자동으로 매핑하여 데이터베이스에 반영해주게 된다. 사용 방법 1. @EnableJpaAuditing 추가 해당 어노테이션을 main 메서드가 있는 애플리케이션 클래스에 추가한다. @EnableJpaAuditing @SpringBootApplication public class NoltoApplication { public static void main(String[] a..