전체 글
도메인 주도 설계 첫걸음 - 1장, 2장
도메인 주도 설계 첫걸음 - part1 : 전략적 설계 01. 비즈니스 도메인 분석하기 효과적인 솔루션을 설계하고 구축하기 위해서는 그것의 바탕이 되는 구축해야 하는 SW System을 이해해야 한다. 비즈니스 도메인이란? 비즈니스 도메인 : 기업의 주요 활동 영역 정의 / 회사가 고객에게 제공하는 서비스 ex 스타벅스 : 커피, 월마트 : 소매업, 페덱스 : 배송 기업은 여러 비즈니스 도메인을 운영 가능 비즈니스 도메인은 자주 변경될 수 있음 하위 도메인이란? 하위 도메인 : 비즈니스 활동의 세분화된 영역 고객에게 제공하는 서비스 단위로 비즈니스 도메인 생성 각각의 하위 도메인은 서로 상호작용 ex) 스타벅스 : 커피 만드는 일 / 부동산(입지) / 직원 고용 / 재정 관리 비즈니스 도메인 ㄴ 하위 도..
RealMySQL 4.2 - InnoDB 스토리지 엔진 아키텍쳐 (2)
4.2.8 Double Write Buffer Partial-Page(Torn-Page) 원인 : redo log는 InnoDb 스토리지 엔진의 redo log 공간 낭비를 막기 위해, 페이지의 변경 내용만 기록 이 때문에, dirty page를 disk로 flush 할 때, 일부만 기록되는 문제가 발생할 수 있음 해당 페이지의 내용은 복구가 불가할 수 있음 다른 원인으로는 HW 오작동 / System 비정상 종료 Double-Write 기법(Dobule Write Buffer) 목적 : DoubleWrite buffer에 더티 페이지를 작성함으로써, 데이터 파일 쓰기 중간에 실패할 때(비정상 종료) 해당 버퍼의 내용과 file의 page들의 내용을 비교하여 안정성과 무결성을 높인다. 이름은 버퍼이나 D..
RealMySQL 4.2 - InnoDB 스토리지 엔진 아키텍쳐 (1)
InnoDB storage architecture storage engine 중 거의 유일한 record기반 lock 지원 동시성, 안정성 높음 cluster by primary key 기본적으로 primary key 기준 clustering key 순서로 disk에 저장 secondary index는 record를 참조하지 않음, primary key를 참조 primary key를 이용한 range scan 성능 향상, primary 비중이 높음(실행계획도 primary 기준으로) MyIsam에선 clustering key 지원 안함 foreigner key InnoDB storage engine level에서 지원 / MyIsam, memory engine에선 지원 안함 부모, 자식 DB 칼럼에 in..
[대규모 시스템 설계 기초] 2장,3장 - 개략적인 규모 추정 / 시스템 설계 면접 공략법
개략적인 규모 추정을 위해서는 규모 확장성 표현에 능숙해야 한다. 2의 제곱수 응답 지연(latency) 값 고가용성 2의 제곱수 데이터 최소 단위 : 1 byte = 8bit ASCII 문자 하나 메모리 크기 : 1 byte 모든 프로그래머가 알아야 하는 응답지연 값 메모리는 빠르지만 디스크는 아직 느리다. 디스크 탐색(seek) 가능한 피하기 단순한 압축 알고리즘은 속도가 빠르다. 데이터를 인터넷으로 전송하기 전에 가능하면 압축하기 데이터 센터는 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는 시간은 꽤 걸린다. 가용성에 관계된 수치들 고가용성(high availability) : 시스템이 오랜 시간동안 지속적으로 중단 없이 운영될 수 있는 능력 SLA(Service Level Agree..
[대규모 시스템 설계 기초] 1장 - 사용자 수에 따른 규모 확장성
단일 서버 웹 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행된다. 사용자 요청 처리 흐름 1. 사용자는 도메인 이름(api.mysite.com)을 이용해서 웹사이트에 접속한다. 이 접속을 위해서는 도메인 이름을 DNS에 질의하여 IP 주소로 변환하는 과정이 필요하다. 2. DNS 조회 결과로 IP 주소가 반환된다. (웹 서버의 주소) 3. 해당 IP 주소로 HTTP 요청이 웹 서버에 전달된다. 4. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다. 두 가지 종류의 단말으로부터 요청 웹 애플리케이션 서버 구현용 언어(자바, 파이썬) : 비즈니스 로직, 데이터 저장 처리 클라이언트 구현용 언어(HTML, JS) : 프레젠테이션용 모바일 앱 HTTP 프로토콜 이용 : 모바일..
Spring Webflux - Netty access log customize
Web service 에서 사용자 및 외부에서 어떤 요청이 들어왔는지, 혹은 response에 대한 header 에는 어떠한 정보가 담겨져 있는 지 access log를 통해 확인 및 handling이 가능합니다. access log를 logging system으로 저장하여, ELK(Elasticsearch, logstash, kibana) 를 활용하거나 EFK (Elasticsearch, Fluentd, Kibana) 를 통해 log monitoring 이 가능합니다. Spring MVC vs Spring Webflux Spring MVC 의 경우 embedded tomcat의 access log 를 이용하면 되지만, Webflux의 경우 default 로 netty 로 돌아가기 때문에 tomcat a..
RealMySQL 4장 - 4.1 MySQL 엔진 아키텍처
RealMySQL 8.0 (4장 아키텍처) 4.1 MySQL 엔진 아키텍처 크게 MySQL 서버의 구조를 나누었을 때 3가지로 나눌 수 있다. MySQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러 SQL파서 및 전처리기, 옵티마이저 등으로 이루어짐 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로 부터 데이터를 읽어오는 역할 InnoDB, MyISAM ... MySQL 서버에서 MySQL 엔진은 하나지만, 스토리지 엔진은 여러 개를 동시에 사용 가능 각 스토리지 엔진은 성능 향상을 위해 키 캐시나 InnoDB 버퍼 풀과 같은 기능을 내장 핸들러 API MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽을 때 각 스토리지 엔진에 쓰기/읽기를 요청하는 것을..
클린 아키텍처 17장, 18장, 19장 리뷰
17장 경계: 선 긋기 경계 경계는 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막는다. 프로젝트 초기에 작성되는 경우도 있고, 매우 나중에 그어지는 경우도 있다. 초기에 경계를 긋는 경우 가능한 한 결정을 오랫동안 연기시키기 위해. 즉, 핵심적인 업무 로직을 오염시키지 못하게 만들려는 목적 경계를 지어야하는 이유 시스템의 업무 요구사항과 관련없는 결정에 따른 결합은 생산성을 떨어트리기 때문. (프레임워크, DB, 웹서버, 유틸리티 라이브러리, 의존성 주입 등에 대한 결정) 좋은 아키텍처는 이러한 결정에 의존하지 않는다. Good Example 어떠한 DB를 사용할 것인지에 대한 결정 어떤 DB를 사용하더라도 상관없는 형태로 설계함으로써 의도적으로 DB에 대한 결정을 미루었다. 방법 : 모든 ..