IT
몽고디비 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 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 툴 (미러 메이커 툴) 클러스터 단위로 카프카 운영할 때 토픽 데이터를 완벽하게 복제하기 위해서 ..
대규모 시스템 설계 기초 - 5장
대규모 시스템 설계 기초 - 5장
2024.02.04가상 면전 사례를 읽다보면 백엔드를 깊이있게 이해하고 있다는 느낌이 든다. 느낌만...? 바로 5장을 보기 시작해보자. 5장은 안정 해시 설계에 대한 퀘스천이다. 안정 해시란 키워드에 대한 정의부터 시작해보자. 주어진 입력에 대해 항상 동일한 해시 값을 생성하는 해시 함수를 의미한다. 파일이 변경되어 있지 않는 다면 항상 동일한 해시 값을 반환하여 파일이 변하지 않았음을 의미한다. 여기서 몇가지 고려해볼것이 있다. 바로 gogo ~ 해시 키 재배치 문제 N개의 캐시 서버에 부하를 균등하게 나누는 방법은 해시 함수를 사용하는 것이다. 예를 들어서 hah(key0) % 4 = 1 이면 서버 1에 접속하는 것이다. 서버 풀 크기가 고정되어 있을때만 효과가 있는 방법이다. 해시 값은 변하지 않지만 키가 줄어들어..
대규모 시스템 설계 기초 - 4장
대규모 시스템 설계 기초 - 4장
2024.01.30오랜만에 책을 펼쳐보았는데 4장 부터 시작한다 1-3장은 내용은 좀 노멀한거 같아서 스킾.. 4장은 처리율 제한 장치의 설계이다. 처리율 시스템, 네트워크에서 얼만큼 처리할지 그 양을 의미한다. 그러니까 얼만큼 성능 좋은 시스템을 만들껏이냐의 얘기가 되겠다.. 책에서는 클라이언트가 보내는 트래픽의 처리율 (rate) 제어하기 위한 장치로 소개되어 있다. 예시를 하나 들어주는데 사용자는 초당 2회 이상 새 글을 올릴 수 없다. 같은 ip주소로 하루에 10개 이상 계정 생성 금지 같은 디바이스로 주 5회 이상 리워드 요청 금지 이런 제한으롤 처리율 제한 장치를 설계한다. 처리율 제한 장치를 설계할 때 이렇게 제한을 두는 까닭은 몇 가지 장점이 있는듯 하다. Dos 방지 - limit이 없다면 API Call..
1/21 개발일기 (clustered index, non-clusted index)
1/21 개발일기 (clustered index, non-clusted index)
2024.01.21non - clustered index 음... 어제는 clustered index에 대해서 봤는데 인덱스 키 값에 따라 배열하는것으로 물리적인 데이터 값을 정렬하는것으로 이해하고 넘어갔다. 오늘은 non - clustered index에 대해 보자. 이 내용은 테이블의 물리적 정렬 순서와는 별도의 구조를 갖는다. clustered index 처럼 인덱스 키값에 따라 정렬되지만, 테이블의 실제 데이터는 그 순서에 영향을 받지 않는다. 정렬된 인덱스 키에 대한 쿼리가 수행할 때 non - clustered index는 정렬된 키와 각 키에 해당하는 데이터 행의 위치에 가리키는 포인터를 이용해 결과를 찾아간다. non - clustered index 의 구조에 대해 살펴보자. 좋은 참고 지표가 있어서 가..
1/20 개발일기(thread-poo, resource관리, clustered index)
1/20 개발일기(thread-poo, resource관리, clustered index)
2024.01.20오늘 주말이여서 그간 못했던 내용들을 정리해보고자 한다. 사실 이전에 해야할것도 좀 밀려있는데 우선순위 높은것으로 추려냈다. 그래도 개발 일기 쓰자고 마음먹었는데 90일은 가야할거 같은 기분이다.. 스프링 큐 (스레드 대기풀) Thread Pool을 사용하면 Spring 내부에서 Queue 를 사용하는데 이거 어떻게 구현되어있는지 궁금해졌다. 한번 정리를 해볼 시간.. java.util.concurrnet.Executors 패키지는 스레드 풀과 관련된 유틸리티 메소드를 제공하고 이 클래스는 다양한 종류의 스레드 풀을 생성하고 관리하기 위한 편리한 방법을 제공하는 정적 메소드들로 구성되어 있다. 예를 들어 이 패키지를 뜯어보면 newFixedThreadPool은 고정된 수의 스레드를 가진 스레드 풀을 생성..
패션 관련 프로젝트를 진행하며 ... 1 (feat. 500 maker)
패션 관련 프로젝트를 진행하며 ... 1 (feat. 500 maker)
2024.01.14요즘 패션 열풍이 불다보니 회사에서도 관련 프로젝트 업무를 담당하게 되었다. 여기서 내가 맡은 업무는 패션 스토어 조회, 최근본상품 조회, 찜하기 상품 조회 & 저장에 대한 API 생성 및 수정이었다. 근데 이것도 레거시, 최근 프로젝트 거의 n개 프로젝트를 왔다갔다 수정하다 보니 헷갈려.. 여러 논의가 있었지만 거기서도 가장 중요하게 고려되어야 할점은 성능 문제였다. 이 페이지에서 얼만큼의 tps가 나올지 모르는 상황에서 위 API를 여러번 찌르게 되면 문제가 발생할 수 밖에 없었기 때문에 ... 그러다 500 떨어질랴... 24년이 시작된 후부터 한주간은 계속 회의를 진행한듯 싶다. 특히, 협업하는 부서가 있어서 데이터는 얼만큼 내릴건지 이런거에 대한 협의가 필요했다. 대략적인 협의가 끝난 후에는 A..
Java 버전업 (11->17) 후기 켁;
Java 버전업 (11->17) 후기 켁;
2024.01.07팀내 admin 프로젝트에 Java 버전업을 담당하였다. 비교적 다른 프로젝트에 비해 규모가 작은터라 부담은 없었지만 ... 개인적으로 타팀에서 많이 조회되는 api를 가지고 있는지라 한편으로는 장애 날때마다 dev, alp 든 봐야한다는 부담감이 있어서 조심스러웠다. 자바 버전업 얘기가 나온것은 팀에서도 소개를 하긴 했지만 아래와 같은 이유에서 도입을 하게 되었다. 자바 버전업 도입 목적 Java 17은 2021.10 공개한 LTS 버전으로 2029년 9월까지 지원을 하게 됩니다. Java 11과 비교해서 70가지 이상의 JEP 가 추가되었습니다. (*JEP - JDK 개선 제안) Java Support 기간이 길다. LTS 버전의 장점은 기업과 개발자들이 안정적인 플랫폼에서 장기적인 개발 계획을 세울..
테스트 방법
테스트 방법
2023.03.18JUnit 이란? JUnit은 자바 언어용 단위 테스트 프레임워크입니다. 단위 테스트는 개발자가 자동화된 단위 테스트를 작성하게 도와줍니다. 이를 통해서 코드 품질을 향상시킬 수 있습니다. JUnit은 코드를 리팩토링 하거나 기능을 추가하거나 할때 이전에 작성된 테스트 코드가 작동하는지 확인함으로써 코드 일관성에도 도움을 주게 됩니다. JUnit 특징 사용이 쉽습니다. 개발자가 테스트 케이스를 작성하기 용이합니다. 자동화된 테스트가 가능합니다. 코드 커버리지를 보장할 수 있습니다. 테스트 코드 재사용성이 가능합니다. JUnit은 단위 테스트이기 때문에 독립적으로 실행할 수 있습니다. 그래서 코드를 재사용하기 용이합니다. 테스트 코드 가독성 : JUnit 테스트 결과 쉽게 이해하는데 도움이 됩니다. JUn..