Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
GitLab LFS를 이용한 대량 파일 관리
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2024-02-13
2024-02-12
2497
### Git LFS Git LFS는 "Large File Storage"의 약자로 Git에서 큰 파일을 효율적으로 관리하기 위한 확장 기능이다. Git은 작은 크기의 파일은 효율적으로 관리하지만 이미지, 동영상과 같은 파일을 관리하는 데는 적합하지 않다. Git LFS를 이용하면 이러한 큰 파일들을 효율적으로 관리할 수 있다. Git LFS는 소스코드와 분리된 별도의 LFS 서버를 구성해서 파일을 저장한다. Git 저장소에는 원본파일의 메타데이터만 저장하고 LFS 서버에는 큰 파일을 저장하는 방식이다.  ### GitLab LFS GitLab은 Git 저장소와 이슈추적, CI/CD 기능을 제공하는 DevOps 플랫폼으로 **LFS** 도 함께 제공한다. GitLab 을 이용해서 LFS 기능을 구현해보자. ### 테스트 환경 우분투 리눅스 23.10 이 설치된 개인 데스크탑에서 테스트 했다. ### Git LFS 설치 Git LFS는 확장 기능이기 때문에 별도 설치가 필요하다. **우분투 리눅스** ``` sudo apt-get install git-lfs ``` **맥** ``` brew install git-lfs ``` ### GitLab 설치 및 실행 GitLab은 LFS를 내장하고 있다. 옵션만 설정하면 LFS를 바로 사용할 수 있다. docker compose 로 gitlab을 설치해보자. 설정파일 이름은 docker-compose.yml 이다. ```yaml version: '3' services: gitlab: image: 'gitlab/gitlab-ce:latest' restart: always hostname: 'localhost' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://localhost' gitlab_rails['lfs_enabled'] = true gitlab_rails['lfs_storage_path'] = "/var/opt/gitlab/lfs-objects" ports: - '80:80' - '22:22' volumes: - '/srv/gitlab/config:/etc/gitlab' - '/srv/gitlab/logs:/var/log/gitlab' - '/srv/gitlab/data:/var/opt/gitlab' - '/srv/gitlab/lfs-objects:/var/opt/gitlab/lfs-objects' ``` * gitlab_rails['lfs_storage_path'] = "/var/opt/gitlab/lfs-objects" Gitlab LFS 저장소의 경로를 **/var/opt/gitlab/lfs-object** 로 설정했다. * '/srv/gitlab/lfs-objects:/var/opt/gitlab/lfs-objects' 그리고 로컬 호스트의 볼륨을 docker로 마운트 시켰다. 이제 GitLab LFS에 저장되는 파일들은 로컬 호스트에 저장된다. GitLab 서버를 실행한다. ``` docker compose up -d ```  기본 유저는 **root**이며, 초기 패스워드는 아래와 같이 확인 할 수 있다. ``` $ docker exec <container ID> cat /etc/gitlab/initial_root_password | grep Password Password: +FsyvoWbmkdcTKrKyILJe6WNrQYg3g5iCH8WQ4e5P6E= ``` 로그인 하고 **Group**을 만든다. 그룹이름은 joinc 로 했다.  Joinc Group에서 새로운 프로젝트를 만든다. 프로젝트의 이름은 **Big-File** 로 했다.   ### SSH Key 등록 Git 저장소에 접근하기 위해서 SSH Key를 등록한다. ssh-keygen 으로 ssh key를 만든다. ``` ssh-keygen -t rsa ``` gitalb 프로젝트에 SSH Key를 등록한다.  **Add new key**를 클릭해서 ssh public key를 등록하면 된다.   Code를 clone 해보자. ``` git clone git@localhost:joinc/big-file.git ``` ### git lfs 설치 LFS를 사용하기 위해서 **git lfs** 플러그인을 설치한다. ``` sudo apt-get install git-lfs ``` 맥에서의 설치 ``` brew install git-lfs ``` ### lfs 환경 설정 **git lfs track** 명령을 이용해서 LFS 서버에 저장할 파일을 설정할 수 있다. PDF문서와 iso 를 LFS 서버에 저장하도록 설정해보자. ``` git lfs track "*.pdf" git lfs track "*.iso" ``` 명령을 수행하면 **.gitatributes** 파일이 생성된다. 이 파일에는 lfs와 관련된 설정 내용이 저장된다. .gitatributes 파일을 git 저장소에 업로드하면 pdf와 iso파일은 자동으로 LFS 서버에 업데이트를 수행한다. ``` cat .gitattributes *.pdf filter=lfs diff=lfs merge=lfs -text *.iso filter=lfs diff=lfs merge=lfs -text ``` 2개의 pdf 파일과 1개의 iso 파일로 테스트를 진행했다. ``` $ ls F96-CE_4.iso 'Implementing DevOps on AWS.pdf' 'Linux Networking Cookbook.pdf' README.md $ git add . $ git commit -m "lfs test" [main 4993ce5] lfs test 4 files changed, 11 insertions(+) create mode 100644 .gitattributes create mode 100644 F96-CE_4.iso create mode 100644 Implementing DevOps on AWS.pdf create mode 100644 Linux Networking Cookbook.pdf ``` git push를 하면 LFS 서버로 파일이 업로드 되는 걸 확인 할 수 있다 . ``` $ git push Locking support detected on remote "origin". Consider enabling it with: $ git config lfs.https://localhost/joinc/big-file.git/info/lfs.locksverify true Uploading LFS objects: 100% (3/3), 585 MB | 116 MB/s, done. 오브젝트 나열하는 중: 7, 완료. 오브젝트 개수 세는 중: 100% (7/7), 완료. Delta compression using up to 12 threads 오브젝트 압축하는 중: 100% (6/6), 완료. 오브젝트 쓰는 중: 100% (6/6), 826 바이트 | 826.00 KiB/s, 완료. Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 To localhost:joinc/big-file.git e1c3516..4993ce5 main -> main ``` GitLab 서버를 보면 LFS 형태로 저장된 것을 확인 할 수 있다.  파일을 클릭해보면 저장소에는 134 바이트 크기의 메타파일만 저장된 것을 알 수 있다.  실제 파일들은 설정한 LFS 디렉토리에 저장되어 있는 것을 확인 할 수 있다. ``` root@yundream:/srv/gitlab/lfs-objects# tree . ├── 64 │ └── cf │ └── 8a682019de0495ee6130d51ad5bcd6f9d94886554dedebe1062a90e77445 ├── d0 │ └── b6 │ └── 218b4fe45da67ae60831f498e066d8a1302ad492b0a09f643d7a27e3bc2e ├── d8 │ └── 12 │ └── aa6b182fd4b449b5e65aef0483eb4e2ea57accd72148d3ef314eec03e2cf └── tmp ├── cache ├── uploads └── work ``` ### 활용 데이터 파이프라인의 구성에 유용하게 사용 할 수 있다. GitLab 이슈로 데이터의 생산, 저장, 소비의 전 공정을 관리하고 GitLab runner를 이용하여 CI/CD 파이프라인을 구성할 수 있다. 데이터 저장소로 S3를 설정할 경우 Lambda를 이용해서 데이터 처리 과정을 완전 자동화 할 수 있을 것이다. ### 장점 Git은 작은 소스코드 파일의 관리를 목표로 만들어진 애플리케이션이다. 그러다 보니 멀티미디어 파일이나 매우 큰 파일들은 관리하기가 쉽지 않은데, LFS를 이용해서 이들 파일을 보다 쉽게 관리 할 수 있다. SaaS 타입의 GitHub, GitLab도 LFS를 제공하는데, 추가 비용을 지불해야 한다. 대량의 파일을 관리하거나 데이터 파이프라인을 구성해야 할 경우 비용이 증가하거너 구성이 어려울 수 있다. 설치형 LFS 서버를 이용해서 이런 문제도 해결 할 수 있다. ### 단점 * Git 저장소와 LFS 서버가 완전히 분리된다. GitLab 하나의 서버만을 이용해서 Git 저장소와 LFS 서버를 모두 구성하면 상관 없지만, GitHub를 Git 저장소로 하고 GitLab을 LFS 서버로 할 경우 인증도 분리되어 버리는 문제가 있다. * LFS 파일 삭제를 지원하지 않는다. git rm으로 삭제하면 Git 저장소에서는 지워지지만 LFS 서버에서는 지워지지 않기 때문에 메뉴얼하게 관리해야 한다. GitLab외에도 다양한 LFS Server 들이 있으니 살펴보는 것도 도움이 되겠다.
Recent Posts
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
Archive Posts
Tags
devops
git
storage
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags