Sharded Cluster MongoDB의 분산 솔루션 Replica Set에 더 이상 감당 안될 정도로 데이터가 유입되면 Sharded Cluster 사용 고려 모든 샤드는 Replica Set으로 구성되어 있다 분산을 위한 솔루션이지만 Replica Set 구성이기 때문에 HA도 지원 Replica Set의 목적 : HA 샤딩의 목적 : 스케일아웃 대량으로 늘어나는 데이터를 저장하고 쓰기에 대한 부하가 클 때 적합 Replica Set은 secondary를 늘리면서 읽기 부하를 분산할 수 있지만 primary는 하나이기 때문에 쓰기 분산이 커지면 sharded cluster를 사용하는 것이 좋다 용어 Sharding : 하나의 큰 데이터를 여러 장비에 걸쳐서 분할하는 과정 Shard : 분할된 데이..
Replica Set은 HA(High Availability)를 보장해 주기 때문에 내부적으로 아키텍처가 복잡해지는 트레이드오프가 있음 이로 인해 우리가 꼭 알아야 하는 것들이 생긴다 개발자 입장에서 Replication에 대한 이해가 있어야 Replica Set을 이용한 몽고디비를 잘 활용할 수 있다 Replica Set 3대의 MongoDB 멤버 이루어진 구조 1Primary, 2 Secondary HA(High Availability)에 대한 해결방안 멈춤 없이 지속적 운영이 필요한 서비스에서 필요한 최소 배포 단위 각 멤버는 같은 서버에 존재할 수도, 다른 서버에 존재할 수도 있다 replica set의 목적이 HA이기 때문에 각각 다른 서버에 설치되어 있어야 목적에 맞는 효과를 볼 수 있다 각 ..
뜻하지 않게 2가 풍요로운 한 해였네요 ✌️ 💻 2번째 회사와 2번의 서비스 오픈 이직을 하면서 올해만 2번의 서비스 오픈을 경험하게 되었습니다. 쇼핑몰 입점 업체용 어드민 2021년 가을부터 작업하여 2022년 2월 오픈한 서비스로, 회사 메인 쇼핑몰에 입점한 업체분들의 배송/주문/상품관리를 위한 사이트입니다. 몇 달간 작업한 정산 기능이 내부 사정으로 중단되는 등 여러 우여곡절이 있었습니다. 엑셀 다운로드 기능 관련 이슈 대응은 포스팅도 해두었는데요. 지금 와서 보면 제대로 된 해결책이 아니라 부끄럽지만, 그만큼 제가 성장했구나라고 받아들이겠습니다 😄 [Apache POI] 다량의 데이터 엑셀 다운로드 처리로 인한 서버 장애 대응 후기 스테이징 QA 도중 갑자기 사이트의 모든 기능이 먹통이 됐다는 소..
구글링 해보면 보통 Clustered Index라고 많이 하는 것 같은데, 필자가 참고한 Real MySQL 8.0 책에서는 클러스터링 인덱스라고 언급하여 여기서도 일단 클러스터링 인덱스라고 표기하겠다. PK값이 비슷한 레코드끼리 묶어서 저장하는 것 PK값에 의해 레코드의 저장 위치가 정해짐 PK값 변경 시 해당 레코드의 물리적인 저장 위치도 변경됨 클러스터링 인덱스는 InnoDB 스토리지 엔진에서만 지원 인덱싱 알고리즘이라기보단 테이블 레코드의 저장 방식이라 볼 수 있어 ‘클러스터링 테이블’이라고도 불림 세컨더리 인덱스의 리프 노드에 PK가 있는 것 과 달리, 클러스터링 인덱스의 리프노드에는 레코드의 모든 컬럼이 (=해당 식별자의 모든 데이터) 같이 저장되어있음 → 즉, 클러스터링 테이블은 그 자체가 ..
대표적인 인덱스 알고리즘 : B-Tree vs Hash Hash 인덱스 알고리즘 컬럼의 값으로 Hash값을 계산하여 인덱싱 → 그래서 전방(prefix)일치 등 값의 일부만 검색하거나 범위 검색 시엔 사용할 수 없음 매우 빠른 검색을 지원 메모리 기반 데이터베이스에서 주로 사용 B-Tree 인덱스 알고리즘 가장 일반적으로 사용되는 알고리즘 Hash와 달리 컬럼의 값을 변형하지 않고 원래의 값을 사용하여 인덱싱 B-Tree 인덱스의 구조 Root, Branch, Leaf 노드로 이루어져있음 루트 노드 : 최상위노드. 자식 노드 주소를 가지고있음 브랜치 노드 : 루트와 리프 사이의 중간 노드. 자식 노드 주소를 가지고 있음 리프 노드 : InnoDB와 MyISAM의 인덱스 리프노드가 갖는 값이 다름 MyIS..
Predis vs PHPRedis PHP의 대표적인 Redis 클라이언트 Predis : Pure PHP로 개발됐음 장점 : composer로 다운로드 가능. 편리한 의존성 관리 단점 : PHPRedis 대비 성능 느림 → 대용량 트래픽 처리 아니면 체감하기 어려운 수준 https://github.com/predis/predis PHPRedis : C언어로 만들어졌음. 장점 : 성능 우수 단점 : PECL, wget 등을 이용하여 모듈 개별 설치 필요 https://github.com/phpredis/phpredis => 필자는 신규 서비스를 개발하는 중이어서 패키지 관리가 용이한 Predis를 선택 Predis 기본 셋팅 Predis 설치하기 composer require predis/predis en..
테스트코드를 작성하다보면 테스트 데이터 생성, Mock객체 주입 등 코드가 반복되는 일이 생깁니다. JUnit5에서는 매 테스트를 실행하기 전에 실행하고자 하는 메소드에 @BeforeEach 어노테이션을 달면 됐었는데요. PHPUnit에서는 setUp() 메소드를 사용하면 됩니다. class CatServiceTest extends TestCase { // 테스트 클래스에서 공통으로 사용하는 값을 멤버변수로 선언 private $catService = null; private $snackList = null; protected function setUp(): void { // 주입할 인스턴스 Mocking $this->snackList = ObjectMotherFactory::createRandomSna..
CQRS 패턴이란? Command Query Responsibility Segregation : 명령(Command)과 질의(Query)의 책임을 분리하는 패턴 Command 명령 시스템 데이터 변경 (ex. 주문 취소, 배송 완료) create, update, delete Query 질의 시스템 데이터 조회 (ex. 주문 목록, 상품 상세) read Responsibility 책임 구성요소의 역할 구성 요소 (모델) 클래스, 함수 모듈/패키지 웹서버/DB 분리 Segregation 역할에 따라 구성요소 나누기 명령과 질의에 단일 모델을 사용할 경우 코드 역할/책임 모호 요구사항이 늘어가면서 Member객체에 주문테이블, 로그인 히스토리 테이블 등과의 결합도가 증가 의미/가독성 등 나빠짐 유지보수성 떨어..
public function test_주소_조회() { // given $given = $this->create_given_data(); $mockDao = Mockery::mock(AddressDao::Class); $mockDao->shouldReceive('findById')->andReturn($given->address); app()->instance(AddressDao::class, $mockDao); $addressBo = app(AddressBo::class); // when $actual = $userAddressBo->getUserAddress($given->addressId, $given->userId); // then $this->assertEquals($given->address-..
라라벨에서 테스트 클래스를 생성하면 TestCase 추상 클래스를 상속받은 클래스가 생성됩니다. Feature Test냐 UnitTest냐에 따라 이 클래스의 출처(?)가 달라집니다. 단위 테스트 Unit Test 가장 작은 단위의 코드 (ex.메소드, 함수)에 대한 테스트 타겟코드가 의도대로 정확히 동작하는지 검증 서비스 컨테이너가 동작하지 않음 // UserTest클래스를 Unit 패키지 안에 생성 php artisan make:test UserTest --unit namespace Tests\Unit; use PHPUnit\Framework\TestCase; class UserTest extends TestCase { 단위 테스트에서는 TestCase는 PHPUnit\Framework의 TestCa..
- Total
- Today
- Yesterday
- mongoDB
- k8s
- 샤딩
- index
- kubernetes
- 백엔드
- 리눅스 컨테이너
- laravel 테스트
- 주니어개발자
- 샤드
- docker
- devops
- phpUnit
- 라라벨
- 쿠버네티스
- php
- pods
- 도커
- MySQL
- 분산처리
- 몽고디비
- NoSQL
- database
- redis
- mockery
- java
- laravel 테스트코드
- laravel
- springboot
- 대규모 데이터 처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |