분류 전체보기
35. Search Insert Position
35. Search Insert Position
2024.06.07문제 정의 주어진 정렬된 배열에서 목표 값을 찾고, 찾지 못하면 목표 값이 삽입될 인덱스를 반환하는 문제입니다. 이 문제는 O(log n) 시간 복잡도로 해결해야 합니다. https://leetcode.com/problems/search-insert-position/description/Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You must write an algorithm with O(log n) runtime complexity...
자바 버전 별 정리
자바 버전 별 정리
2024.06.03자바 버전Java Version은 6개월 마다 최신 버전이 있다. 자바 8이 많은 회사에서 채택하는 이유는 아래와 같다. Build Tool (Maven, Gradle 등) 이 자바 8 버전 이상에서 특정 라이브러리에 대해 버그를 가지고 있다. 특히, 이것은 자바 9 이상 부터는 Build Tool을 이용하여 Build하게 되면 "reflective aceess - warnings" 가 나오게 된다. reflective access - warning 에 대해서는 reflection 할 때 accessor 권한에 따라 public 인 경우에만 허용해줘서 warning 발생하게 된다.자바8는 Oracle JDK 에 대해 라이선스를 고려할 필요가 없었지만 Oracle은 2019년 라이선스 체계를 변경하여 더이..
트랜잭션
트랜잭션
2024.05.26트랜잭션?일련의 작업들을 하나의 단위로 묶어서 처리하는 것을 의미한다. ACID 속성을 지켜야 하는데 의미는 다음과 같다. ACID 속성원자성(Atomicity)트랜잭션의 작업들이 모두 성공적으로 완료되거나, 모두 실패하여 아무런 변화도 일어나지 않도록 보장한다. 중간 상태는 존재하지 않는다.일관성(Consistency)트랜잭션이 실행되기 전과 후의 데이터베이스 상태가 일관성을 유지해야 한다. 즉, 트랜잭션이 성공적으로 완료되면 데이터베이스는 항상 일관된 상태로 유지되어야 한다.격리성(Isolation)동시에 실행되는 트랜잭션들이 서로의 작업에 영향을 미치지 않도록 보장한다. 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 그 결과를 볼 수 없다.지속성(Durability)트랜잭션이 성공적으로 완료되면,..
979. Distribute Coins in Binary Tree
979. Distribute Coins in Binary Tree
2024.05.19You are given the root of a binary tree with n nodes where each node in the tree has node.val coins. There are n coins in total throughout the whole tree.In one move, we may choose two adjacent nodes and move one coin from one node to another. A move may be from parent to child, or from child to parent.Return the minimum number of moves required to make every node have exactly one coin.Example 1..
Kafka 개요
Kafka 개요
2024.04.29시작~카프카에 대해 알아보겠다. 카프카는 2011년 LinkedIn에서 개발 되었다. 많은 기업들이 엄청난 양의 데이터를 중복 저장하고 처리량(백만/초)이 걸릴 때 데이터에 대한 실시간 스트림 처리를 수행할 수 있다. 카프카와 관련된 특징을 몇가지 소개해보고자 한다. Apache Kafka는 하루에 수조 개의 이벤트를 처리할 수 있는 분산 스트리밍 플랫폼입니다. Kafka는 짧은 대기 시간, 높은 처리량, 내결함성 게시 및 구독 파이프라인을 제공하고 이벤트 스트림을 처리할 수 있다.1. Distributed분산 시스템(Distributed System)은 여러개 컴퓨터로 나누어서 마치 하나처럼 돌리는것을 의미한다. 마치 end-user에게는 클러스터 위에 하나의 node로 표시된다. 카프카는 서로 다른 ..
resilience 4j 발표 내용 정리
resilience 4j 발표 내용 정리
2024.04.21resilience 4j 정리 resilience 4j 정의 회복 탄력성 장애 내성 일부 서버가 장애가 발생하면 다른 서버로 장애 전파를 방지한다. Hystrix 는 2018 까지 개발되고 더이상 개발은 안되고 운영 유지만 되고 있다. 이 파트에서는 CircuitBreaker, Retry 에 대한 두 가지 내용을 확인해본다. 아래 사진 보는것처럼 트래픽이 너무 몰렸을 때 잠시 트래픽을 차단해야 한다면 CircuitBreaker 을 걸어야 한다. 서버가 많은 트래픽을 받아서 회복을 목적으로 잠시 트래픽을 차단해야 한다면 -> Fallback 실행 CircuitBreaker 는 일종에 회로 차단기라고 보면 편하다. 상태값으로는 3가지로 정리해볼 수 있다. Close - 이 상태에서는 시스템이 정상적으로 작동..
몽고디비 11장 - 복제 셋 구성요소
몽고디비 11장 - 복제 셋 구성요소
2024.04.1411. 복제 셋 구성요소 11.1 동기화 로그, 즉 oplog를 보관함으로써 복제를 수행한다. Replica Set Oplog 네이밍이다. Oplog는 Replica set의 데이터를 동기화를 위해 내부에서 발생하는 모든 동작의 로그를 기록한 것 이다. 세컨더리 다운되면 재시작할 때 oplog에 있는 마지막 연산과 동기화한다. oplog 작업은 멱등이다. (동일한 데이터 결과셋) 크기가 고정되어 있어서 연산의 수가 정해져있다. 기본크기로 괜찮다. 다만, 삭제만 oplog 여러개 항목으로 분해된다. 예를 들어서 db.col.remove() 로 도큐먼트 100만개를 삭제하면 oplog 항목 100만개를 하나씩 삭제한다. 아래의 케이스의 경우 기본 oplog크기보다 더 크게 줘야하는 케이스가 된다. 한 번에 ..
몽고 디비 9장
몽고 디비 9장
2024.04.01몽고 db 9장 9.1 스키마 설계 고려 사항 스키마를 모델링하기 전에 먼저 쿼리 및 데이터 접근 패턴을 이해해야 한다. 제약사항 디비와 하드웨어 제약 사항을 이해해야 한다. 도큐먼트 최대 크기는 16메가바이트이다. 갱신 : 일부 도큐먼트 업데이트 전체 업데이트 원자성 갱신 : 전체가 갱신될 수 있는지/아닌지 쿼리 및 쓰기의 접근 패턴 쿼리를 식별한 후에는 쿼리 수를 최소화해야 한다. 함께 쿼리되는 데이터가 동일한 도큐먼트에 저장되도록 설계를 확인 자주 사용하지 않은 데이터는 다른 컬렉션으로 이동 동적데이터와 정적데이터 분리할 수 있도록 고려 변경될 가능성이 있는 데이터(동적 데이터)와 변경되지 않을 데이터(정적 데이터)를 분리하여 저장 및 관리 관계 유형 관계가 변경될 때 갱신되는 도큐먼트 개수를 확인..
Mongo : Transaction
Mongo : Transaction
2024.03.24몽고DB 8장 대체 Transaction 몽고 디비 단일 문서에 대해 Atomic 처리가능 → 데이터 일관성 보장 관련 데이터를 하나의 문서에 저장함으로써 복잡한 트랜잭션 처리 없이도 데이터의 일관성과 무결성을 유지 여러 문서라면? 여러 문서에 걸쳐 일관성을 유지해야 하는 상황에서는 MongoDB의 분산 트랜잭션 기능을 사용하여 여러 작업을 하나의 트랜잭션으로 묶어 처리 transactions API 트랜잭션을 시작합니다. 지정된 작업을 실행합니다. 결과를 커밋하거나(또는 에러 시 중단합니다). 콜백 API는 특정 에러에 대해 재시도 로직을 포함 TransientTransactionError 또는 UnknownTransactionCommitResult 커밋 에러 후에 트랜잭션을 다시 시도 MongoDB ..
Mongo 7 - 집계
Mongo 7 - 집계
2024.03.117.1 파이프라인 모든 단계의 입력과 출력은 도큐먼트다. 한 번에 입력 도큐먼트 스트림 하나씩 가져와서 각 도큐먼트 하나씩 처리하고 출력 도큐먼트 스트림 생성 각 단계는 knobs, tunables 셋 제공 이 항목 조정해서 각 단계 매개변수로 지정해 원하는 작업을 수행한다. mongod.conf 파일이나 명령줄 옵션을 통해 조정할 수 있다. 예를 들면 캐시 크기 4GB 설정한다고 하면 mongod.conf 파일에 아래 내용을 추가한다. *knobs, tunables → 데이터베이스 성능 최적화 하기 위해 조정할 수 있는 설정 및 매개변수이다. storage: wiredTiger: engineConfig: cacheSizeGB: 4 7.2 익숙한 작업들 일치 → 선출 → 정렬 → 건너뛰기 → 제한 단계가..
6장 - 키-값 저장소 설계
6장 - 키-값 저장소 설계
2024.02.12시작 키 값 저장소는 비 관계형 데이터베이스이다. 잘 아시다싶이 키 값은 고유 식별자를 키로 가져가야 한다. 문제 이해 및 설계 범위 확정 6장에서 다룰 키-값 저장소 설계는 다음 요건을 충족하는것을 만들것이다. - 키-값 쌍의 크기는 10KB 이하 - 큰 데이터를 저장할 수 있어야 한다. - 높은 가용성 - 높은 규모 확장성 - 데이터 일관성 수준 조정 가능 - 응답 지연시간이 짧아야 한다. 단일 서버 키-값 저장소 한대 서버에 키-값 저장소를 설계해서 해시 테이블에 저장하면 어떨까? 이 방법이 가장 직관적이다. 모든 데이터를 안에 두게 되면 크기가 문제가 될 수 있다. - 데이터 압축 - 자주 쓰이는 데이터 메모리에 두고 나머지는 디스크 저장 임시방편으로 이런 제시를 할 수 있겠지만 서버를 무한정 늘..
kafka 학습 내용 정리 - 추가중 ...
kafka 학습 내용 정리 - 추가중 ...
2024.02.10카프카 생태계 프로듀서에서 데이터 넣고 토픽 데이터 들어가서 컨슈머가 데이터를 가지고 간다. 토픽 데이터를 토픽에 넣고 싶을때 스트림즈를 쓴다. 오픈소스 아파치 카프카에 포함되어 있는 툴이다. 아파치 카프카의 릴리즈 동일한 구조로 되어있다. (기능을 같이 쓰려면 같은 오픈소스 아파치 카프카 배포되는것만) 커넥트는 데이터 파이프라인 운영 핵심 툴이다. 소스 커넥터 (프로듀서) 싱크 커넥터 (컨슈머) 특정 데이터 소스에서부터 커넥트 (소스) 읽어와서 토픽에 넣고 커넥트(싱크)는 타겟으로 보내는 컨슈머 역할을 한다. 반복적으로 여러번 생성할 수 있는것이 장점이여서 카프카 클러스터에서 따로 운영하지 않는다. mm2 툴 (미러 메이커 툴) 클러스터 단위로 카프카 운영할 때 토픽 데이터를 완벽하게 복제하기 위해서 ..