문제상황 사내 백오피스 애플리케이션에서 거래내역을 조회하는 페이지에 첫 진입할 때 5.48초가 걸리는 문제를 발견하였습니다 원인 분석 현재 거래내역 페이지는 offset 기반의 페이지네이션을 사용하고 있었고 리스트의 전체 행 수를 구하는 부분(이하 totalCount)에서 시간이 많이 소요되고 있음을 발견하였습니다. 페이지 첫 진입 시 데이터 조회 범위가 정해져있지 않았기 때문에 서비스 오픈부터 쌓여온 10만여건의 데이터를 전부 조회하고 있었습니다. 또한 실행계획을 조회해보니 거래 테이블에서 테이블 풀 스캔이 발생하고 있었습니다. 페이지 첫 진입 시 최근 한달 간의 거래내역만 조회하고 옵션에서 범위를 늘릴 수 있게 변경하고자 하였으나 운영팀에서는 조금 느리더라도 전체 범위 검색을 디폴트값으로 해달라는 요..
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..
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
- laravel 테스트
- 분산처리
- 도커
- laravel
- 라라벨
- php
- k8s
- 대규모 데이터 처리
- 몽고디비
- phpUnit
- NoSQL
- pods
- springboot
- redis
- index
- mockery
- MySQL
- laravel 테스트코드
- 샤드
- database
- 주니어개발자
- java
- 리눅스 컨테이너
- kubernetes
- mongoDB
- devops
- 백엔드
- 쿠버네티스
- docker
- 샤딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |