LYnLab

소개블로그취미로그

[Drone] 인메모리 볼륨을 활용해 CI 속도 향상하기

데이터 IO 작업으로 인해 CI/CD 프로세스에 병목이 생긴다면, 인메모리 볼륨을 활용해 속도를 크게 향상시킬 수 있습니다.

2020-05-08#프로그래밍

💡 이 글은 작성된지 1년 이상 지났습니다. 정보글의 경우 최신 내용이 아닐 수 있음에 유의해주세요.

CI에 사용되는 데이터나 파일들은 대부분 격리된 스토리지에서 생성되어 한 번만 사용하고 파기됩니다. 매 CI가 돌 때마다 같은 작업을 반복해야 하다보니, 규모가 큰 시드 데이터를 말아넣을 때는 이 부분이 상당한 병목이 되지요.

Docker는 volume을 마운트할 때, 디스크가 아닌 RAM 영역에서 데이터를 읽고 쓰는 tmpfs 옵션을 제공합니다. RAM은 데이터가 휘발하므로 운영에 쓰기에는 적합치 않은 경우가 많지만, 테스트처럼 데이터가 휘발되어도 상관 없는 환경에서는 퍼포먼스 향상에 큰 도움이 됩니다.

다행히 Drone에서는 volume을 tmpfs 옵션으로 마운트하는 기능을 제공하고 있습니다.

설정 방법

In-memory 볼륨을 사용하기 위해서는 우선 해당 레포지토리를 trusted 처리해야합니다. 이는 메모리를 통해 시스템 영역에 간섭하는 문제를 차단하기 위함이라 생각됩니다.

대상 레포지토리의 Settings에서 Trusted 옵션을 켠 후, 설정 파일에 다음과 같이 작성합니다.

# 볼륨을 메모리 영역에 할당할 것을 설정합니다.
volumes:
- name: mysql-volume
  temp:
    medium: memory

# 생성한 볼륨은 다음과 같이 마운트합니다.
services:
- name: database
  image: mysql
  volumes:
  - name: mysql-volume
    path: /var/lib/mysql

이게 전부입니다! 이렇게 설정한 후와 설정하기 전의 성능 차이를 비교해보면...

# 적용 전
2020-05-08 13:02:48+00:00 [Note] [Entrypoint]: <데이터 시딩 작업 시작>
2020-05-08 13:03:25+00:00 [Note] [Entrypoint]: Stopping temporary server

# 적용 후
2020-05-08 13:20:34+00:00 [Note] [Entrypoint]: <데이터 시딩 작업 시작>
2020-05-08 13:20:38+00:00 [Note] [Entrypoint]: Stopping temporary server

데이터 시딩 작업만 비교해보았을 때 37초 → 4초로 약 9.25배의 시간을 절약할 수 있었습니다.

관련된 글

Rails와 GitHub Actions에 커버리지 레포트를 달아보자

이 블로그의 CMS이기도 한 Shiori를 대폭 리팩토링하면서 테스트가 얼마나 잘 작성되어있는지 궁금해졌습니다.

Rails Global ID로 전역 객체 식별하기

Global ID는 Rails의 모든 객체를 식별할 수 있는 URI(Uniform Resource Identifier)입니다.

Ruby on WebAssembly: 살짝 맛보기

Ruby 3.2에 추가된 WebAssembly 지원을 간단하게 테스트해봅시다.

작성한 댓글은 giscus를 통해 GitHub Discussion에 저장됩니다.

크리에이티브 커먼즈 라이선스크리에이티브 커먼즈 저작자표시크리에이티브 커먼즈 동일조건변경허락

본 사이트의 저작물은 별도의 언급이 없는 한 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2024 Hoerin Doh, All rights reserved.

LYnLab 로고About MeGitHubTwitterInstagram