| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- isalnum()
- explainable recommendation
- LSTM
- bfs
- find()
- 백준
- Recommendation
- 동적 프로그래밍
- Algorithm
- isdigit()
- Knowledge graph
- kg
- 알고리즘
- 추천시스템
- 정렬
- isnumeric()
- 그래프
- isalpha()
- Stack
- knowledge
- Dynamic Programming
- 코테
- 우선순위 큐
- Deque
- 프로그래머스
- Python
- 파이썬
- 그래프 탐색
- 자료구조
- DP
- Today
- Total
데린이 고인물되기
백준·프로그래머스처럼 코드트리 GitHub 연동 정리하고 싶은 사람을 위한 자동화 설정법 본문
알고리즘 공부를 하면서 백준, 프로그래머스, 코드트리 많이들 사용하실텐데요, 저도 그러합니다.
백준이랑 프로그래머스는 '백준 허브'라는 크롬 익스텐션을 사용해서 문제를 풀면 GitHub에 자동으로 업로드가 되도록 연동을 해두고 관리를 하고 있습니다. (백준 허브 사용법은 구글에 검색하면 쉽게 다양한 블로그 글을 참고하실 수 있으니 넘어가도록 하겠습니다)

‘백준 허브’를 이용하면 위 사진처럼 백준과 프로그래머스 폴더가 자동으로 생성되며, 각 플랫폼에서 푼 문제가 해당 폴더에 정리되는 방식으로 연동됩니다.
최근에는 코드트리도 함께 사용하게 되면서 코드트리에서 제공하는 GitHub 연동 기능도 추가로 설정해두었습니다.
이는 우측 상단의 My 버튼을 클릭한 후 ‘GitHub에 학습 기록 남기기’ 버튼을 통해 간단히 연동할 수 있습니다.

위 이미지 상으로 현재 저는 코드트리도 '백준 허브' 를 이용해서 연동해둔 레퍼지토리인 Algorithm-Coding 에 함께 연동을 해두었는데요, 처음에는 코드트리는 codetree-log 라는 별도의 레포지토리에서 관리했습니다.
왜냐하면 코드트리가 백준이나 프로그래머스와 달리, GitHub 레포지토리에 아래와 같이 날짜별 폴더를 자동으로 생성해 업로드하는 방식이기 때문입니다.

따라서 백준 허브를 이용해 연동된 기존의 Algorithm-Coding 레포지토리와 함께 사용하면 디렉토리 구조가 어수선해져, 처음에는 별도로 분리해 관리하게 되었습니다.
하지만, 사용을 하다보니 백준, 프로그래머스, 코드트리 모두를 하나의 레포지토리에서 통합 관리하고 싶다는 생각이 들었습니다. 하지만 코드트리에서 연동하는 레포지토리를 Algorithm-Coding 으로 바꾸기에는 코드트리가 레포지토리 루트에 날짜별 폴더를 생성하는 방식이라 폴더 구조가 어수선해질 우려가 있었습니다.
그래서, 코드트리 연동은 백준 및 프로그래머스와 동일한 레포지토리인 Algorithm-Coding으로 유지하되, 코드트리에서 문제를 풀면 GitHub에 올라오는 파일들을 자동으로 Algorithm-Coding 내의 별도 코드트리 폴더로 이동시키는 방식으로 구조를 정리해보기로 했고 성공을 해서 공유해드리기 위해 이 글을 쓰게 되었습니다.
성공하자마자 주변 친구들한테 카톡으로 보내고 난리쳤습니다 ㅎㅎ7
정리하자면, 문제점은 다음과 같습니다.
- 백준과 프로그래머스는 각 플랫폼 이름의 폴더 아래에 문제 풀이 파일이 정리됩니다.
- 반면, 코드트리는 레포지토리 루트에 날짜별 폴더를 직접 생성해 저장합니다.
- → 이로 인해 기존 구조와 통일성이 떨어지는 문제가 발생합니다.
이런 문제를 해결하기 위해 GitHub Actions를 사용하여 코드트리에서 푼 문제를 자동으로 특정 폴더(코드트리) 안으로 정리되도록 설정한 방법을 소개합니다.
자동화 설정 방법
1. GitHub Actions란?
GitHub Actions는 GitHub에서 코드의 push 등 이벤트가 발생했을 때 미리 정의된 작업을 자동으로 수행하도록 설정할 수 있는 기능입니다. 여기서는 파일을 자동으로 이동시키고, 변경 사항을 커밋(commit) 및 푸시(push)하는 작업을 설정할 것입니다.
2. GitHub Actions 자동화 스크립트
결론부터 말씀드리면, 아래 내용을 복사해서 .github/workflows/move_codetree.yml 이라는 파일로 GitHub 레포지토리에 저장하면 됩니다.
name: Move CodeTree Files
on:
push:
branches: [ main ]
permissions:
contents: write
jobs:
organize_codetree:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Move CodeTree folders into /코드트리 (덮어쓰기 O, 삭제 X)
run: |
mkdir -p 코드트리
shopt -s dotglob
for folder in $(find . -maxdepth 1 -type d -name "2*" ! -name ".git" ! -name "코드트리"); do
folder_name=$(basename "$folder")
mkdir -p "코드트리/$folder_name"
# 기존 파일은 덮어쓰되, 없는 건 유지
rsync -a "$folder"/ "코드트리/$folder_name/"
rm -r "$folder" || true
done
- name: Commit and push changes
run: |
git config --global user.name "github-actions"
git config --global user.email "actions@github.com"
git add .
git commit -m "자동으로 CodeTree 폴더로 정리됨" || echo "No changes to commit"
git push
즉, 최종적으로 레포지토리의 상태가 아래와 같으면 됩니다.

저 .github/workflows 폴더안에

이런식으로 move_codetree.yml 파일에 있고 저 파일에 위에서 제가 드린 내용이 들어가 있으면 끝입니다.

코드트리에서 문제를 풀고 레포지토리에 업로드가 되면 자동으로 코드트리 라는 폴더가 생성이 되게 해두었으므로 코드트리 폴더가 레포지토리에 없다고 해서 따로 만드실 필요는 없습니다.
이제 코드트리에서 문제를 푸시면 아래와 같이 정리가 되는겁니다.

코드트리 폴더에 들어가보면 아래처럼 날짜별로 코드가 정리된 모습을 보실 수 있습니다.

Last commit message가 "자동으로 CodeTree폴더로 정리됨" 으로 표시된 커밋들이 위에서 작성한 .yml 파일에 의해 코드트리 폴더로 옮겨진 파일들입니다.
"Add files via upload"로 표시된 커밋들은 .yml 파일을 수정하면서 테스트 하는 과정에서 수동으로 파일을 옮긴 것들입니다..ㅎㅎ7 예상하지 못한 예외 상황들이 생각보다 많아서, 여러 번 수정하고 테스트를 반복하다 보니 그런 커밋들이 생기게 되었네요. ㅎㅎ7
어쨋든, 제가 최종적으로 드린 .yml 파일은 모든 테스트를 마친 정상 작동 버전이니 걱정하지 마시고 그대로 사용하시면 됩니다.
3. GitHub Actions 스크립트 설명
name: Move CodeTree Files
on:
push:
branches: [ main ]
permissions:
contents: write
jobs:
organize_codetree:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Move CodeTree folders into /코드트리 (덮어쓰기 O, 삭제 X)
run: |
mkdir -p 코드트리
shopt -s dotglob
for folder in $(find . -maxdepth 1 -type d -name "2*" ! -name ".git" ! -name "코드트리"); do
folder_name=$(basename "$folder")
mkdir -p "코드트리/$folder_name"
# 기존 파일은 덮어쓰되, 없는 건 유지
rsync -a "$folder"/ "코드트리/$folder_name/"
rm -r "$folder" || true
done
- name: Commit and push changes
run: |
git config --global user.name "github-actions"
git config --global user.email "actions@github.com"
git add .
git commit -m "자동으로 CodeTree 폴더로 정리됨" || echo "No changes to commit"
git push
- on: 이 워크플로우가 언제 실행될지 설정하는 겁니다. 위에서는 main 브랜치에 푸시할 때마다 실행되도록 해두었습니다.
- permissions: 레포지토리에 파일을 작성할 수 있는 권한을 허용해주는 겁니다.
- jobs: 실제 수행할 작업을 정의해주면 됩니다.
- Check out repository: 작업 공간에 GitHub 레포지토리 파일을 불러옵니다.
- Move CodeTree folders:
- 현재 레포지토리 루트에 있는 날짜 형식의 폴더(예: 240412)를 찾아서 자동으로 코드트리 폴더 안으로 이동시킵니다.
- 기존 폴더에 있는 파일과 겹칠 경우 덮어쓰며, 파일이 없을 경우 그대로 유지합니다.
- Commit and push changes:
- 파일 정리 후 자동으로 GitHub 레포지토리에 변경 사항을 반영(commit)하고 올립니다(push).
이상입니다.
저처럼 GitHub 정리에 고민하던 분들께 도움이 되었으면 좋겠습니다!
이건 검색해도 잘 안 나와서 제가 직접 설정하고 테스트해본 건데, 생각보다 꽤 잘 돼서 뿌듯하네요. 다들 유용하게 사용하셨으면 좋겠습니다.😎