CI에서 db 속도 향상. mysql tmpfs 사용하기

     

github action을 이용해 CI를 구성하던 중 db 이미지가 너무 늦게 떠서 테스트가 지연되는 문제점을 발견했다.

 

workflow를 간략하게 살펴보면

 

name: CI

on: push

jobs:
  build:
    name: Build + Test
    runs-on: ubuntu
    services:
      mysql:
        ...
      redis:
        ...
      rabbitmq:
        ...
    steps:
    - name: Setup Environments
      run: |
        ...
    - name: Install dependencies
      run: |
        ...
    - name: Migrate Database
      run: |
        ...
    - name: Migrate Database retry
      run: |
        ...
    - name: Run Test
      run: |
        ...
    - name: Notify Slack
        ...

 

요런 순서다.

 

처음에 mysql, redis, rabbitmq와 같은 서비스를 이미지로 띄우고 그다음 어플리케이션을 실행해서 테스트까지 실행하는 것이 CI의 목적이다. 그런데 mysql에 migrate 하는 과정이 너무 오래 걸려서 test까지 시간이 너무 오래 걸린다.

 

일반적인 오리지널 mysql 띄우면 모르겠는데 우리는 mysql이미지를 한번 migrate 해서 docker에 올려놓은 pre-migrate 이미지를 사용하고 있다. 이 pre-migrate mysql은 시작할 때 테이블을 create 하는 sql문을 실행하는데 이게 로컬에서도 9분이나 걸린다....

 

그러던 중 mysql에 tmpfs기능을 발견했는데...

 

 

 

tmpfs는 mysql의 데이터 영역을 디스크가 아니라 메모리에서 구동할 수 있게 해주는 옵션이다. 이 기능을 사용하면 디스크 대신 메모리에서 작업을 진행하기 때문에 속도가 굉장히 빨라진다!!!! 

 

하지만 메모리이기 때문에 내렸다 올리면 데이터가 날아가니, 운영으로는 못쓰고 잠깐 테스트를 위한 CI에는 안성맞춤인 옵션이다.

 

그래서 db 이미지를 띄울 때 옵션을 추가해줬다.

 

name: CI

on: push

jobs:
  build:
    name: Build + Test
    runs-on: ubuntu
    services:
      mysql:
        ...
        options: --tmpfs /var/lib/mysql:rw
      redis:
        ...
      rabbitmq:
        ...
    steps:
    - name: Setup Environments
      run: |
        ...
    - name: Install dependencies
      run: |
        ...
    - name: Migrate Database
      run: |
        ...
    - name: Migrate Database retry
      run: |
        ...
    - name: Run Test
      run: |
        ...
    - name: Notify Slack
        ...

 

--tmpfs /var/lib/mysql:rw 이 마법의 옵션을 주면 속도가 대폭 향상.

 

로컬에서 9분 걸리던 게 12초 컷이 나왔다. ㅎㅎ

어플리케이션 테스트도 빨라진 너낌~

 

CI 구성할 때는 항상 메모리 구성 가능 여부를 체크하자~!

반응형

댓글

Designed by JB FACTORY