IT/책 30

[데이터설계] 8장, 분산 시스템의 골칫거리

8장, 분산 시스템의 골칫거리 결함과 부분장애 하드웨어 문제 - 하드웨어는 올바르게 동작하면 항상 같은 연산 결과를 냄 - 완전히 실패하거나 아니면 완전하게 동작함 부분 장애 - 비결정적인 장애 - 성공 여부를 알 수 없기 때문에 더욱 어려움 신뢰성 없는 네트워크 분산 시스템은 비공유 시스템을 의미한다. 즉, 네트워크로 연결된 다수의 장비 - 각 장비는 자신만의 메모리와 디스크를 가지고 있어, 다른 장비의 메모리나 디스크에 접근 할 수 없다. - 네트워크가 유일한 통신 수단 비동기 패킷 네트워크 - 다른 노드로 메시지(패킷)을 보낼 수 있지만, 도착을 보장하지 않음 - 타임아웃으로 해결 네트워크 결함 네트워크 분단(분리): 네트워크 결함 때문에 다른 쪽과 차단이 되는 것 결함 감지 - 시스템은 결함이 있..

IT/책 2022.10.10

[데이터설계] 3장, 저장소와 검색 - 트랜잭션

트랜잭션 OLTP(온라인 트랜잭션 처리) 애플리케이션이 일부 키에 대한 적은 수의 레코드를 찾는 대화 형식의 접근 패턴 - 사용자 대면이므로 대량의 요청을 받을 수 있음 - 부하 처리를 위해 애플리케이션이 작은 수의 레코드만 사용 - 애플리케이션은 키의 일부만 사용하는 레코드 요청, 저장소 엔진은 요청한 키의 데이터를 찾기 위해 색인 사용 (디스크 탐색 병목) OLAP(온라인 분석 처리) 비즈니스 인텔리전스에 필요한 데이터베이스 패턴 - 비즈니스 인텔리전스: 비즈니스 분석가가 회사 경영진의 더 나은 의사결정을 돕도록 하는 질의 - OLTP보다 적은 수의 질의를 다룸 - 짧은 시간에 많은 수의 레코드 탐색 (디스크 대역폭 병목) 데이터 웨어하우스 - OLTP 시스템의 읽기 전용 복사본 - 데이터 분석가가 ..

IT/책 2022.08.21

[데이터설계] 3장, 저장소와 검색

목표: 단순한 정리가 아니라 남에게 설명할 수 있는 글이 되자 3장, 저장소와 검색 로그 - 로그는 append-only 파일로, 연속된 추가 전용 레코드를 의미한다. - read시, 검색비용에 O(n)이 소모된다. 검색비용을 줄이기 위한 효과적인 방법 색인 어떤 부가적인 메타데이터를 유지하는 것 색인은 데이터베이스의 내용에 영향을 미치지 않는, 파생된 추가적인 구조이다. 특징 - 쓰기 과정에서 오버헤드 발생: 데이터를 추가할 시, 매 번 색인도 갱신해야 한다. - 필요이상으로 오버헤드를 발생시키지 않으면서 읽기 질의 속도를 향샹시키는 색인을 선택해야 한다. 1. 해시색인 Bitcask(Riak의 기본 저장소 엔진) - 인메모리 해시 맵: 사용 가능한 램에 모든 키가 저장 > 한 번의 디스크 탐색으로 디..

IT/책 2022.08.18

[데이터설계] 2장, 데이터 모델과 질의 언어

1. 데이터 중심 애플리케이션 설계가 책의 전체 이름이지만 너무 길어서 데이터 설계로 줄인다. 2. 1장은 기능적 요구사항, 비기능적 요구사항, 신뢰성, 확장성, 유지보수성에 대해서 다룬다. 다른 곳에서 많이 다뤘던 이야기이므로 PASS 데이터 중심 애플리케이션 설계 - 2장, 데이터 모델과 질의 언어 관계형 모델 - 데이터(테이블): 관계와 튜플로 구성 - 비즈니스 데이터 처리 시 유용 ex) 트랜잭션 처리, 일괄 처리 NoSQL: Not Only SQL - 다중 저장 지속성: 폭넓은 다양성 객체 관계형 불일치 임피던스 불일치(impedance mismatch): 관계형 테이블 저장 시, 애플리케이션 코드와 데이터 베이스 모델 객체 사이 전환 계층 - 객체 관계형 매핑(ORM) 프레임워크를 사용 일대다..

IT/책 2022.08.13

[코딩인터뷰] 자료구조 - 배열과 문자열 해법

코딩인터뷰 자료구조 - 배열과 문자열 해법 1. 문자열이 주어졌을 때, 같은 문자열에 같은 문자가 중복되어 등장하는 지 확인하는 알고리즘 💡 아스키코드 문자열인지 유니코드 문자열인지 확인: 유니코드 문자열인 경우 저장 공간이 늘어날 수 있음 해법1) 아스키코드 문자열일 경우, 길이가 256개라고 가정한 후 문자열 순회 boolean[] char_set = new boolean[128]; ... if(char_set[val]) return false; ... - 이미 char_set[val]가 true이면 문자열이 있다고 가정 - 시간복잡도: O(n), 공간복잡도: O(1) 해법2) 비트 벡터 - 필요 공간은 1/8로 줄일 수 있음 해법3) 문자열 내 각 문자를 다른 모든 문자와 비교 - 시간복잡도: O(..

IT/책 2022.01.30

[코딩 인터뷰] 자료 구조

코딩 인터뷰 완전 분석 자료 구조 해시테이블 - 해시테이블은 효율적인 탐색을 위해 Key를 Value에 대응시킴 해시테이블 구현 방법 1. 키와 해시 코드 계산 > 키의 개수: 무한대, 해시 코드: int, long > 서로 다른 키가 같은 해시 코드를 가리킬 수 있음 2. hash(key) % array_length 방식을 이용해 배열의 인덱스를 구함 3. 각 배열의 인덱스는 키와 값으로 이루어진 연결리스트 존재 해당 방법 사용 시, 주어진 키로 해시 코드를 계산하여 인덱스 계산 > 충돌이 자주 발생할 경우, 최악의 수행 시간은 O(N)이 됨 > 일반적으로는 O(1) > 이진 트리로 구현 시, 탐색 시간: O(logN) ArrayList - 특정 언어에서는 크기를 자동으로 조절 가능 (동적) - O(1..

IT/책 2022.01.16

[Clean Architecture] 1달1권, 두번째 책 후기

두번째 책을 마치고 두번째 책은 클린 아키텍처, 클린 코드에 뒤이어서 '클린'이란 무엇일까라는 의문점을 풀기 위해 읽었다. 다 읽은 지는 약 이주가 되었지만 뒤늦게 후기를 남긴다. 결론부터 말하자면 클린 코드에 비해 클린 아키텍처는 더 포괄적이었다. 클린 코드는 포괄적이었지만 예시와 함께 말하고자 하는 바를 명확히 알 수 있었는데, 클린 아키텍처는 조금 어려웠다. 내가 아키텍처적인 지식이 부족한 것일까? 다시 한 번 읽어봐야 하는 것은 분명하다. 아키텍처 지식이 부족한 상태에서 읽은 책은 난해하고 어려웠을 뿐이다. 그래서 별점을 말하자만 2/5 이다. 클린 아키텍처는 설계 원칙에 대해 말한다. 클린 아키텍처의 기본, 설계원칙. 회사를 다니면서 설계원칙에 대해 깊게 생각할 수 없다. 설계 단계는 대부분 위..

IT/책 2022.01.07

[Clean Architecture] 6부, 세부사항

Clean Architecture 6부, 세부사항 30장, 데이터베이스는 세부사항이다 아키텍처 관점에서 데이터베이스는 엔티티가 아님 > 데이터베이스는 소프트웨어일 뿐 데이터베이스는 결국 기술일 뿐, 최하위 유틸리티 함수를 제외하고는 데이터베이스에 대해서 몰라야 함 > 데이터베이스가 테이블 형태라는 것을 알게 되면, 데이터 구조에 결합하게 됨 > 디스크가 어떤 형식인지조차 인식하면 안됨 > 성능은 완전히 캡슐화하여 저수준의 데이터 메커니즘 단에서 다뤄야 함 31장, 웹은 세부사항이다 웹은 GUI이다. GUI는 계속 바뀐다. > 그러나 웹과 장치독립성은 어쩌면 비현실 적임 UI는 애플리케이션 사이의 추상화가 가능 - 업무 로직은 다수의 유스케이스로 구성 - 각 유스케이스는 사용 자를대신해서 일부함수를 수행 ..

IT/책 2021.12.26

[Clean Architecture] 5부, 아키텍처 (2)

클린 아키텍처 22장, 클린 아키텍처 육각형 아키텍처, DCI, BCE 등 다양한 아키텍처들은 모두 관심사 분리라는 목표를 가지고 있음 관심사 분리 - 프레임워크 독립성: 아키텍처는 프레임워크 존재 여부에 의존하지 않음 - 테스트 용이성: 업무 규칙은 UI, 데이터베이스, 웹서버 등의 외부 요인이 없어도 테스트 가능 - UI 독립성: 시스템의 나머지 부분을 변경하지 않아도 UI 쉽게 변경 - 데이터베이스 독립성: 오라클을 몽고DB, 빅테이블 등으로 변경 가능, 업무 규칙은 데이터베이스에 결합되지 않음 - 모든 외부 에이전시에 대한 독립성: 실제 업무 규칙은 외부 세계와의 인터페이스에 대해 전혀 알지 못함 의존성 규칙 각각의 동심원은 소프트웨어에서 서로 다른 영역을 표현함 > 안으로 들어갈 수록 고수준의 ..

IT/책 2021.12.19

[Clean Architecture] 5부, 아키텍처(1)

Clean Architecture 5부, 아키텍처 15장, 아키텍처란 - 아키텍처는 코드와 동떨어져서는 안됨 - 시스템을 구축했던 사람들이 만들어낸 시스템의 형태 > 소프트웨어 시스템이 쉽게 개발, 배포, 운영, 유지보수가 되어야 함 > 선택지를 가능한 많이, 오래 남겨야 한다. - 시스템 아키텍처는 시스템의 동작 여부와 관련이 없음 why? 형편없는 아키텍처들도 잘 동작하기 때문 따라서, 아키텍처는 시스템의 수명과 관련된 비용을 최소화하고 프로그래머의 생산성을 최대화 해야한다. 개발 시스템 아키텍처는 개발팀이 시스템을 쉽게 개발할 수 있도록 뒷받침해야한다. 배포 배포 비용이 높을수록 시스템의 유용성은 떨어짐 > 시스템을 단 한번에 쉽게 배포할 수 있도록 만들어야 함 마이크로 서비스 아키텍처 - 컴포넌트..

IT/책 2021.12.12