# git-remote-s3 - S3를 원격 Git 및 LFS 서버로 사용하기

> Clean Markdown view of GeekNews topic #17344. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17344](https://news.hada.io/topic?id=17344)
- GeekNews Markdown: [https://news.hada.io/topic/17344.md](https://news.hada.io/topic/17344.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-10-21T09:57:11+09:00
- Updated: 2024-10-21T09:57:11+09:00
- Original source: [github.com/awslabs](https://github.com/awslabs/git-remote-s3)
- Points: 3
- Comments: 2

## Topic Body

- Amazon S3를 git 원격 및 LFS 서버로 사용할 수 있게 해주는 awslabs의 라이브러리  
- S3를 서버리스 Git 서버로 사용하기 위한 git remote helper 구현체   
- 또한 동일한 S3 버킷에 LFS 관리 파일을 푸시할 수 있는 git-lfs custom transfer 구현체도 포함   
- 파이썬 스크립트. 3.9 이상에서 동작   
- 모든 데이터는 기본적으로 저장 및 전송 시 암호화됨. 추가적인 보안 계층을 위해 고객 관리 KMS 키를 사용하여 S3 버킷에 데이터를 암호화할 수 있음. 비용 절감을 위해 버킷 키 사용을 권장  
- IAM 권한을 통해 원격에 대한 접근 제어가 보장됨. 버킷 수준, 접두사 수준, KMS 키 수준에서 제어 가능  
- `git`의 분산 특성으로 인해 드물지만 여러 사용자가 동일한 브랜치에 대해 동시에 `git push`를 실행할 수 있음. 이 경우 여러 번들이 S3에 저장되고 이후의 `git push`는 실패할 수 있음. 이 문제를 해결하려면 `git-remote-s3 doctor ` 명령을 실행해야 함.  
  
### GN⁺의 정리  
  
- `git-remote-s3`는 Amazon S3를 서버리스 Git 원격 및 LFS 서버로 사용할 수 있게 해주는 유용한 도구임.  
- 데이터 암호화 및 접근 제어를 통해 보안을 강화할 수 있음.  
- 동시 쓰기 문제를 해결하기 위한 도구도 제공하여 안정성을 높임.  
- 유사한 기능을 제공하는 다른 프로젝트로는 `lfs-s3`가 있음.

## Comments



### Comment 30294

- Author: ganadist
- Created: 2024-10-22T23:41:43+09:00
- Points: 1

git 이외에 lfs에도 별도의 인증을 붙여서 쓰면 의외로 귀찮은 일이 많이 생길듯하드라구요.

### Comment 30227

- Author: neo
- Created: 2024-10-21T09:57:11+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41887004) 
- S3를 git remote로 사용하고 싶지만 개인정보 보호가 걱정된다면, Restic을 사용하여 S3를 신뢰할 수 없는 git remote로 사용하는 도구를 만들었음
  - [git-remote-restic](https://github.com/CGamesPlay/git-remote-restic)

- AWS S3의 최소 청구 단위는 128KB임을 기억해야 함. 소스 트리가 작은 파일로 가득 차 있다면 Git 저장소 비용이 예상보다 많이 들 수 있음

- S3 버킷만으로 구현할 수 있다는 점에 놀랐음. API Gateway, Lambda 함수, DynamoDB 테이블을 사용하여 S3 버킷을 지원하려고 했음. 클라이언트 측에서 구현할 생각은 하지 못했음
  - [lfs-test-server](https://github.com/git-lfs/lfs-test-server)

- moto가 존재하는데도 모든 것을 모킹하는 것은 아쉬움
  - [git-remote-s3 테스트](https://github.com/awslabs/git-remote-s3/blob/v0.1.19/test/remote_test.py)

- 문제를 해결하기 위한 하나의 방법으로 moto가 있지만, S3 저장소 구현은 매우 많음. Apache 2 버전의 minio도 포함되어 있으며, S3 API처럼 안정적인 것에는 최신 버전을 사용할 필요가 없음

- Rust로 작성된 [rudolfs](https://github.com/jasonwhite/rudolfs)를 사용 중임. 성능은 뛰어나지만 필요한 모든 기능(인증)은 없음

- S3에서 LFS를 위한 CloudFormation 템플릿을 오래 사용해 왔음
  - [블로그 포스트](https://alanedwardes.com/blog/posts/serverless-git-lfs-for-game-dev/)

- GitHub는 LFS 가격을 낮춰야 함

- Cloudflare Workers를 사용하여 설정 단계/이동 부품을 줄일 수 있음
  - [git-lfs-s3-proxy](https://github.com/milkey-mouse/git-lfs-s3-proxy)

- LFS 부분에서는 dvc가 git-lfs보다 더 잘 작동하며 S3를 기본적으로 지원함

- git-annex도 S3에 대한 기본 지원을 제공함

- S3에서는 트랜잭션 및 일관성 있게 푸시할 수 없기 때문에 잘못된 도구처럼 보임
  - [동시 쓰기에 대한 설명](https://github.com/awslabs/git-remote-s3?tab=readme-ov-file#how-s3-remote-work)
  - [디자인 설명](https://github.com/awslabs/git-remote-s3?tab=readme-ov-file#how-s3-remote-work)

- Git 저장소를 호스팅하는 데는 잘못된 도구처럼 보임
