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

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

2020. 05. 08. #development

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배의 시간을 절약할 수 있었습니다.

크리에이티브 커먼즈 라이선스

이 저작물은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2020 Do Hoerin, LYnLab