대표적인 인덱스 알고리즘 : 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..
업무 중 트랜젝션 내에서 특정 테이블에 insert 한 데이터를 바로 다시 select 하는 비즈니스 로직을 작성하였는데, 이 조회 반환 값이 null이 되는 문제를 마주하게 되었다. 읽기 작업과 쓰기 작업의 DB 커넥션을 분리해서 사용하고 있었고, 커밋되지 않은 데이터였기 때문에 읽기용 커넥션에서 새로 추가한 데이터를 읽어올 수가 없었다. insert를 하는 커넥션과 동일한 커넥션에서 조회하도록 하여 문제는 해결하였지만, 문제의 원인이 궁금해졌다. (현재 MySQL InnoDB 스토리지 엔진을 사용 중이다.) 데이터 정합성 (Consistency) 데이터가 서로 모순 없이 일관되게 일치해야 함을 의미한다. 예를 들어, 상품 테이블에서 상품번호 1의 이름은 ‘도넛’인데, 주문 테이블에서 상품번호 1의 이..
‘ABCD’를 INSERT 할 경우 CHAR CHAR : 저장공간의 크기가 고정적이다. CHAR(10) 컬럼에 ‘ABCD’를 insert 할 경우, 6바이트가 남아있다. VARCHAR VARCHAR : 저장되는 값에 따라 저장공간이 변한다. 해당 값의 길이를 별도로 저장할 1~2바이트를 추가로 필요로 한다. VARCHAR(10) 컬럼에 ‘ABCD’를 insert 할 경우, 길이를 나타내는 숫자 4를 위한 1바이트와, ‘ABCD’를 저장하기 위한 4바이트, 총 5바이트의 저장공간이 생긴다. ‘ABCD’→’ABCDE’로 UPDATE 할 경우 CHAR(10) : 이미 10바이트가 준비되어 있으므로 그냥 변경되는 컬럼의 값을 업데이트 VARCHAR(10) : 현재 4바이트밖에 저장할 수 없는 구조이므로 더 큰 ..
업무 중에 character set utf8mb4 collate utf8mb4_general_ci 로 선언된 컬럼을 발견했다. utf8mb4를 쓰면 이모지를 지원한다는 것 밖에 몰랐기 때문에 이참에 한번 찾아봤다. 문자 집합 (Character Set) 문자 집합(Character Set)은 문자열에서 사용하는 문자의 집합이다. 예를 들어 a-z까지의 알파벳이 있고 각 알파벳마다 숫자를 a=1, b=2, c=3,…로 연결한다고 가정해보자. 문자 a는 심볼이고 그 a와 연결된 숫자 1은 a의 인코딩(=부호화, 코드화)이다. 이 a부터 z까지의 조합과 코드를 문자 집합(Character Set)이라고 한다. 주요 문자 집합 SHOW CHARACTER SET; 명령어로 MySQL에서 지원하는 문자 집합을 조회..
본 포스팅은 웹 개발자를 위한 대규모 서비스를 지탱하는 기술 책에서 발췌한 내용입니다. http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994506128#N 대규모 서비스를 지탱하는 기술 - 교보문고 데이터 구조 메모리 OS DB 서버 인프라 | 베스트셀러 『(24시간 365일)서버/인프라를 지탱하는 기술』의 핵심 저자들이 또 한 권의 역작을 펴냈다. 서버 1대부터 시작하여 1,000대의 호스트를 운영하 www.kyobobook.co.kr 국소성(Locality)을 고려한 분산 🔠 Locality : a particular area 액세스 패턴(데이터의 용도)을 고려한 분산 캐싱할 수 없는 부분이 사..
- Total
- Today
- Yesterday
- 대규모 데이터 처리
- 쿠버네티스
- 분산처리
- mongoDB
- pods
- database
- mockery
- index
- 라라벨
- MySQL
- phpUnit
- php
- docker
- laravel 테스트코드
- 백엔드
- k8s
- laravel
- 리눅스 컨테이너
- 샤드
- 주니어개발자
- springboot
- kubernetes
- 몽고디비
- 샤딩
- 도커
- java
- redis
- Apache POI
- laravel 테스트
- NoSQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |