전체 글
-
mariadb 에서 elasticsearch 실시간 연동하기개발/golang 2021. 3. 30. 14:46
개요 상품테이블과 상점테이블이 존재하고 두테이블 조인한 검색조건이 30개가 넘어감으로써 마땅한 인덱스를 찾기 어렵고검색시 속도 저하가 발생하여 실시간으로 elasticsearch 와 연동할수 있는 방법을 다음과 같이 구성함 구조 코드 1. binary 로그를 읽어 message queue 에 저장한다. import "github.com/siddontang/go-mysql/replication" var productAggregationPkMap = map[string]int{ "product": 0, "product_detail": 0, "product_memo": 1, } var shopAggregationPkMap = map[string]int{ "shop": 0, "shop_memo": 1, } fu..
-
[ Golang ] Go 루틴을 테스트 하기 (gomock)개발/golang 2021. 3. 11. 23:53
아래와 같은 크롤러가 있고 Mocking 하기위해서 HttpClient 라는 인터페이스를 만들어주었다. 아래 크롤러는 Http Status Code 가 200 이 나온값만 반환하는 로직이다. 실제 우리가 테스트할때에는 실제 Http 요청을 하면 아래 코드가 정상적으로 동작하는지 확인할수 없기때문에 다음과 같은 테스트 코드를 작성한다. type HttpClient interface { Request(url string, result chan HttpResponse) } type HttpResponse struct { StatusCode int Url string Body string } type Crawler struct { h HttpClient } func NewCrawler(h HttpClient) ..
-
Vue Dev Https 실행방법개발/javascript 2020. 10. 16. 09:41
관리자 권한 powershell 실행 #choco 설치 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) #mkcert 설치 choco install mkcert mkcert -install #인증서 다운로드받을 경로이동 mkcert example.com "*.example.com" example.t..
-
Mysql InnoDB 에서 OS Cache 와의 관계개발/dbms 2020. 8. 3. 21:06
정의 innodb_flush_method 설정값에 따라 In-Memory 에서 On-Disk 로 데이터를 전송할때 OS Cache 를 어떻게 활용할것인지 변경된다. 동작원리 value 설명 log file open log file flush data file open data file flush fsync (default) InnoDB 가 data file 과 log file 를 fsync() 를 호출하여 플러시한다. default fsync() default fsync() O_DSYNC InnoDB 가 log file을 플러시 할때에는 O_SYNC 를 이용하여 flush 하고 data file 은 fsync() 를 호출하여 플러시한다. O_DSYNC 를 사용하기에는 몇몇 UNIX 시스템에서 문제가 있어..
-
Mysql Undo Log 란개발/dbms 2020. 8. 3. 20:54
정의 Undo Log 란 실행 취소 로그 레코드의 집합으로 Transaction 실행후 Rollback 시 Undo Log 를 참조해 이전 데이터로 복구할수 있도록 로깅 해놓은 영역이다. 동작원리 Undo Log 레코드에는 실제 변경되는 컬럼의 이전값과 PK 값만 저장이 된다. 예를들어 user 테이블에서 age 값만 변경했다고 가정하면 변경 이전에 age 에 대한값과 PK 값만 Undo Log 레코드에 들어가게 된다. 트랜잭션 레벨이 READ UNCOMMITTED 아니라면 조회할때에 트랜잭션 중에 변경된 데이터가 Undo Log 에 있다면 Undo Log 에서 읽어간다. Recovery 시 사용되지 않는다. 트랜잭션에서 다음 유형별로 하나씩 최대 4개의 Undo Log 가 할당된다. 사용자정의 테이블에..
-
Mysql Redo Log 란개발/dbms 2020. 8. 3. 20:50
정의 Redo Log 란 DB 장애발생시 복구에 사용되는 Log 다. 동작원리 실제로 Database 에서 Commit 이 발생하면 바로 디스크 영역(Table Space)으로 들어가지 않고 메모리 영역(Buffer Poll & Log Buffer)에 들어가게 된다. 이렇게 하여 DISK I/O 를 절약할수 있다. 그런데 DB 에 장애가 발생하여서 메모리 영역에만 남아있는 데이터를 디스크 영역으로 옮겨지지 못한채 서버가 다운되는 현상이 발생했을때 복구할수 있는방법이 바로 Redo Log 이다. 복구를 한다고 해도 메모리에 있는 데이터는 전부 날아갔기 때문에 복구할수 있는 방법은 디스크에 기록된 Redo Log 파일로 복구를 해야하는데 언제 메모리에 저장되어있는 데이터를 디스크로 이동할까 ? innodb_..
-
RabbitMQ 지연큐 만들기개발/etc 2020. 6. 19. 16:00
개요 지연큐를 만들게 된 계기는 다음과 같다 해당 시퀀스 다이어그램에서는 사용자가 이미지 OCR 을 요청하게 되면 비즈니스 로직에서 데이터베이스에서 해당 이미지 값을 초기화 썸네일을 생성 상태값을 변경 과정이 트랜젝션으로 묶여있다. 썸네일을 만들다가 만약 실패할경우 Rollback 이 될수도 있기 때문이다. 그리고 OCR 같은경우는 메세지큐에서 작업을 관리해서 별도로 처리하고 있다. 그런데 여기서 문제는 OCR 컨슈머에서 데이터베이스 Commit 전에 메세지를 받아서 처리하려고 DB 조회를 한경우에는 데이터가 존재하지 않게된다. 이럴때 유용하게 쓰일수 있을거 같아 지연큐를 만들었다. Qeueue 생성 일반 큐 생성 딜레이큐 생성 exchange 설정 UI 샘플 test-queue.delayed 에서 Pu..
-
HA Push Server 구성하기 (아키텍처편)개발/server 2020. 3. 17. 16:32
구성도 설명 첫번째로 사용자(User)가 Socket Server 로 커넥션을 맺고 소켓서버는 redis 서버와 연결한다. ( 소켓서버가 여러대로 구성되어있기 때문에 소켓아이디를 공유하기위함) 그리고 워커(컨슈머) 도 소켓서버와 케넥션을 맺는다. 두번째로 Admin(알림메시지 발송자)이 Socket Server 로 메세지를 전달한다. 세번째로 소켓서버에서 Queue Server(RabbitMQ)로 메세지를 전송한다. 네번째로 워커(컨슈머)가 큐서버에서 메시지를 읽어와서 다섯번째 소켓서버로 메세지를 전달한다. 여섯번째 소켓서버에서 사용자(User)로 메세지를 전달한다. 다음편에서는 구현편을 작성하도록 하겠습니다.