2026/05
깃 저장소를 codeberg로 옮겼다.
깃허브, 깃랩에 있는 것을 선별해서 옮겨보니 실질적으로 약 240여개의 레포지토리에서 옮길만한 것은 12개 남짓이었다.
반성하게된다.
- 나는 개발을 열심히 하고 있다.
- 회사에서 성과를 내고 있다.
이런 생각이 있었는데 불필요한 것들을 걷어내고 보니 부족함이 많아 변화방법을 고심중이다.
레포지토리 전체를 옮기려고 파워쉘 스크립트를 실행해 옮겼다.
github
# --- 설정 부분 ---
$githubToken = "여기에_GITHUB_토큰_입력"
$codebergToken = "여기에_CODEBERG_토큰_입력"
$githubUser = "본인의_GITHUB_ID"
# ----------------
$headers_gh = @{ "Authorization" = "token $githubToken" }
$headers_cb = @{
"Authorization" = "token $codebergToken"
"Content-Type" = "application/json"
}
# 1. GitHub에서 모든 저장소 정보 가져오기
echo "GitHub에서 저장소 목록을 불러오는 중..."
$url_gh = "https://api.github.com/user/repos?per_page=1000&type=owner"
$repos = Invoke-RestMethod -Uri $url_gh -Headers $headers_gh
echo "총 $($repos.Count)개의 저장소를 발견했습니다."
# 2. 반복문 돌며 Codeberg로 이행 명령 전송
foreach ($repo in $repos) {
$name = $repo.name
$isPrivate = $repo.private # GitHub의 공개/비공개 여부 그대로 가져옴
echo "------------------------------------------------"
echo "이행 시작: $name (Private: $isPrivate)"
$body = @{
"clone_addr" = $repo.clone_url
"mirror" = $false # 지속적 동기화를 원하면 $true로 변경
"repo_name" = $name
"private" = $isPrivate
"auth_token" = $githubToken
} | ConvertTo-Json
try {
$response = Invoke-RestMethod -Method Post -Uri "https://codeberg.org/api/v1/repos/migrate" -Headers $headers_cb -Body $body
echo "성공: $name 이행 요청 완료"
} catch {
echo "오류 발생 ($name): $_"
}
# 3. 과부하 방지를 위해 2초간 대기 (sleep)
echo "안전을 위해 2초간 대기합니다..."
Start-Sleep -Seconds 2
}
echo "------------------------------------------------"
echo "모든 작업이 완료되었습니다!"
gitlab
# --- 설정 부분 ---
$gitlabToken = "여기에_GITLAB_토큰_입력"
$codebergToken = "여기에_CODEBERG_토큰_입력"
$gitlabUser = "본인의_GITLAB_ID"
# ---------------------------
$headers_gl = @{ "Authorization" = "Bearer $gitlabToken" }
$headers_cb = @{
"Authorization" = "token $codebergToken"
"Content-Type" = "application/json"
}
$page = 1
$allRepos = @()
# 1. GitLab에서 모든 프로젝트 목록 가져오기 (페이지네이션)
Write-Host "GitLab에서 프로젝트 목록을 가져오는 중..." -ForegroundColor Cyan
while ($true) {
# GitLab API는 기본적으로 ID 기준 정렬이며, 본인 소유(owned=true)만 가져옵니다.
$url_gl = "https://gitlab.com/api/v4/projects?owned=true&per_page=1000&page=$page"
try {
$response_gl = Invoke-RestMethod -Uri $url_gl -Headers $headers_gl
if ($null -eq $response_gl -or $response_gl.Count -eq 0) { break }
$allRepos += $response_gl
Write-Host "페이지 $page 완료: 현재까지 $($allRepos.Count)개 수집됨"
$page++
} catch {
Write-Host "목록 가져오기 실패: $_" -ForegroundColor Red
break
}
}
Write-Host "`n총 $($allRepos.Count)개의 프로젝트를 찾았습니다. 이행을 시작합니다.`n" -ForegroundColor Green
# 2. 반복문 이행
$count = 1
foreach ($repo in $allRepos) {
$name = $repo.name
# GitLab은 visibility가 'private'인 경우 비공개입니다.
$isPrivate = $repo.visibility -eq "private"
Write-Host "[$count / $($allRepos.Count)] '$name' 이행 중..." -NoNewline
$body = @{
"clone_addr" = $repo.http_url_to_repo
"mirror" = $false
"repo_name" = $name
"private" = $isPrivate
"auth_username" = $gitlabUser # GitLab 계정명
"auth_password" = $gitlabToken # GitLab 토큰을 비밀번호 대신 사용
} | ConvertTo-Json -Depth 10
try {
$response = Invoke-RestMethod -Method Post -Uri "https://codeberg.org/api/v1/repos/migrate" -Headers $headers_cb -Body $body
Write-Host " [성공]" -ForegroundColor Green
} catch {
if ($_.Exception.Response.StatusCode -eq "Conflict") {
Write-Host " [이미 존재함]" -ForegroundColor Yellow
} else {
# Codeberg 한도 초과 시 여기서 에러 메시지가 뜹니다.
Write-Host " [실패: $($_.ErrorDetails.Message)]" -ForegroundColor Red
}
}
$count++
Start-Sleep -Seconds 2 # 안정적인 이행을 위해 2초 대기
}
다 옮겨지지 않아 내용을 보니 codeberg는 레포지토리 생성이 100개까지만 가능하기 때문에 그런 것이었다.
지원 사업을 진행하고 있다. 기술보호 울타리, 핵심기술 모니터링, 클라우드 지원사업 2개는 됐고, 1개는 발표 준비 해야한다.
poiyfill 말고도 ponyfill이라는 개념이 있다는 것을 알았다.
polyfill
- 기본적으로 지원하지 않는 이전 브라우저에서 최신 기능을 사용할 수 있도록 JavaScript로 기능을 보완해 주는 코드입니다
import 'core-js/features/array/includes';
// 이후 코드 어디서든 '표준 문법'처럼 사용
const hasValue = [1, 2, 3].includes(2);
ponyfill
- ponyfill은 표준 기능을 구현해 주지만, 전역 환경을 덮어쓰지 않고 모듈로 명시적으로 가져와 쓰는 방식입니다
// 기능을 변수로 할당받음
import assign from 'object-assign';
const obj = assign({a: 1}, {b: 2});
- 애플리케이션 사이버보안 지적에 맞게 추가 수정중
- 외부업체랑 협업 진행중...
- 지원사업(기술보호 울타리, 핵심기술 모니터링, 클라우드 지원사업) 선정되서 후속 조치
- IR 페이지 1분기 공시 반영 및 주가랑 시가총액 병기
- 브라우저로 제공하던 펌웨어 업데이트 크롬만 지원했는데, 파폭도 serial이 지원되서 지원에 추가함