개요
- GitLab Rails는 GitLab의 핵심 애플리케이션으로, Ruby on Rails 프레임워크를 기반으로 구축되었습니다.
- GitLab Rails는 GitLab의 대부분의 웹 인터페이스와 API 요청을 처리하며, 사용자 인증, 권한 관리, 리포지토리 관리, 프로젝트 관리 등 다양한 기능을 제공합니다.
주요 기능
- 웹 인터페이스 제공
- 사용자가 웹 브라우저를 통해 GitLab에 접근할 수 있도록 웹 인터페이스를 제공합니다.
- 프로젝트 생성, 코드 브라우징, 이슈 추적, 병합 요청 관리 등의 기능을 포함합니다.
- API 제공
- RESTful API를 통해 외부 애플리케이션이 GitLab의 기능을 사용할 수 있도록 지원합니다.
- API를 통해 자동화된 스크립트나 외부 도구가 GitLab과 상호 작용할 수 있습니다.
- 인증 및 권한 관리
- 사용자의 인증을 처리하고, 각 사용자에게 적절한 권한을 부여합니다.
- 다양한 인증 방법을 지원하며, OAuth, LDAP, SAML 등의 외부 인증 제공자와 통합될 수 있습니다.
- 데이터베이스 관리
- GitLab의 주요 데이터를 PostgreSQL 데이터베이스에 저장하고 관리합니다.
- 사용자 정보, 프로젝트 정보, 이슈 및 병합 요청 등의 데이터를 데이터베이스에 저장합니다.
- Gitaly와의 상호 작용
- Git 리포지토리와 관련된 작업을 처리하기 위해 Gitaly 서버와 통신합니다.
- 리포지토리의 읽기 및 쓰기 작업을 Gitaly 서버에 위임합니다.
- 백엔드 작업 처리
- Sidekiq를 사용하여 백그라운드 작업을 처리합니다.
- 이메일 알림, 저장소 미러링, 주기적인 작업 등을 백그라운드에서 실행합니다.
- CI/CD 파이프라인 관리
- GitLab CI/CD 기능을 통해 연속 통합 및 배포 파이프라인을 관리합니다.
- .gitlab-ci.yml 파일을 통해 사용자 정의 파이프라인을 정의할 수 있습니다.
Puma
- Puma는 Rails 애플리케이션 실행을 위한 웹 서버입니다.
- 루비(Ruby) 애플리케이션을 빠르고, 멀티 스레드 및 높은 동시성을 제공하기 위해 개발되었습니다.
메모리 관리
- 메모리 사용을 줄이기 위해 Puma는 워커 프로세스를 포크합니다.
- 각 워커가 생성될 때, 메모리를 주 프로세스와 공유합니다. 워커는 메모리 페이지를 변경하거나 추가할 때만 추가 메모리를 사용합니다. 이는 시간이 지남에 따라 워커가 더 많은 웹 요청을 처리하면서 Puma 워커가 더 많은 물리적 메모리를 사용하는 결과를 초래할 수 있습니다. 시간이 지남에 따라 사용되는 메모리 양은 GitLab의 사용에 따라 달라집니다. GitLab 사용자가 더 많은 기능을 사용할수록 시간이 지남에 따라 예상되는 메모리 사용량이 더 높아집니다.
- 무제한적인 메모리 증가를 방지하기 위해 GitLab Rails 애플리케이션은 주어진 resident set size (RSS) 임계값을 일정 시간 동안 초과하는 경우 자동으로 워커를 재시작하는 감독 스레드를 실행합니다.
- GitLab은 메모리 제한의 기본값을
1200Mb
로 설정합니다. 기본값을 재정의하려면 per_worker_max_memory_mb
를 메가바이트 단위로 새 RSS 제한 값으로 설정해야 합니다.