글에서 짧게 소개했지만, Github Foundations Github에 대한 기초적인 지식을 검증하는 자격증을 따기 위해 며칠간 공부 했었고, 후기를 남기고자 글을 쓴다.
왜 Github Foundations?
국내에서 Github Foundations를 가진 사람을 아직 본적이 없다. 1등으로 해보고 정보를 공유하고 싶었다.
Git 이라는걸 참 좋아하고 잘 사용한다고 생각해서, 스스로 증명하고자?
자격증 비용이 꽤나 저렴했다. 99$로 표시되지만 실제 결제를 하니 의문의 바우처가 적용되어 45$ + 4.5$ 세금으로 총 49.5$에 자격증 시험을 볼 수 있었다.
좋았던 점
Github Foundations를 공부하면서 또다른 Open Source Contributor와의 접점이 생겼다.
Github의 다양한 기능들을 구경할 수 있었다. (submodule, issue form)
아직 Github Foundations를 가진사람을 못봐서 약간 멋이난다.
안좋았던 점
결제를 하면서 알았는데, 해당 시험은 non-protctored exam 이다. 컨닝해도 된다..
번역 기능이 제공되지 않아서 영어에 익숙하지 않으면 굉장히 어렵다..
ghcertified와 같은 덤프 사이트의 문제로는 조금 버겁다. 확실히 자료가 부족한만큼 시험 난이도가 어렵게 느껴졌다.
결제 할 때에도 한국 전화번호가 사용 불가능해서, 전화번호 인증 없이 바로 다음 섹션으로 넘어 갔었다. 전체적으로 영어권이 아니라면 불친절하게 느껴질 수 있다.
그래서, 추천하나?
나는 굳이 github foundations 자격증을 추천하지 않겠다. 감독관이 없는 시험은 크게 메리트가 있다고 느껴지진 않는다. 또한, Github는 git을 주요 기술로 사용하는 다양한 플랫폼 중 하나이다. (Github, Gitlab, Bitbucket..) 따라서 플랫폼마다 조금씩의 차이점이 있고, 회사에따라 각각 다른 플랫폼을 사용한다. 그래서 크게 인정받을 수 있는 자격증인가..는 잘 모르겠다.
그래도 Github Foundations를 통해 얻는점도 있었고, 블로그에 글을 쓸 수 있으니 좋다~
Github Foundations : GitHub에서 협업, 기여 및 작업하는 기본 주제와 개념에 대한 이해를 강조 Github Actions : GitHub Actions를 사용하여 워크플로 자동화 및 개발 가속화에 대한 능력을 인증 Github Advanced Security : GitHub Advanced Security 인증을 통해 코드 보안 지식을 강조 Github Administration : GitHub 관리자 시험으로 건강한 GitHub 환경을 최적화하고 관리하는 능력을 인증 Github Copilot : GitHub Copilot 인증 시험은 다양한 프로그래밍 언어에서 AI 기반 코드 완성 도구를 사용하는 기술을 평가 (10월 출시 예정)
자격증 비용으로는 모두 99$ 였으며, Github Foundations의 경우 바우처가 적용되어 49.5$로 응시가 가능했다.
Github 자격증의 경우 국내 블로그 자료를 한번도 본적이 없기 때문에, 딱 이거다 싶어서 바로 자격증 준비를 시작했다. 나는 자격증은 따고 싶으나 별로 내키는 자격증이 없어서 가장 저렴하고 쉬운 foundations를 준비하기로 했다.
아무래도 자료가 없다보니 AWS 자격증을 준비했던 것처럼 편리한 덤프 사이트를 찾기가 어려웠다. 그 중 Github public Repository에서 ghcertified라는 서비스를 볼 수 있었다.
이 서비스는 github 자격증을 준비하는 사람들에게 덤프 문제를 제공해주는 사이트 였는데, 이를 통해 쉽게 공부할 수 있겠다라는 생각을 했다.
하지만 해당 서비스에서 조금 아쉬운점이 있었는데 그것은 바로 구글 번역을 적용 후 다음 문제로 넘어가면, 다시 구글 번역을 적용해야 한다는 점이었다.
부끄럽지만 영어에 익숙하지 않은 나는 이것이 굉장히 불편했다. 그러고보니, 이 레포지토리는 오픈소스로 기여가 가능한 레포지토리 라는점을 깨닫고, 오픈소스 기여를 해야겠다! 바로 생각이 들었다.
오픈소스 기여 할까말까
해당 서비스는 quizdown.js 라는 퀴즈 UI를 빠르게 개발하게 해주는 오픈소스 라이브러리를 사용하고 있었는데, 이 quizdown.js가 바로 다음 퀴즈에 번역이 적용되지 않는 현상이 있었던 것이다. 따라서 이 라이브러리를 살펴보다보니 Svelte라는 언어로 개발되어 있었고, 여기서 포기할까 고민했다. 나는 Svelte를 사용해본적이 전혀 없었기 때문이다. (니꼴라스님 유튜부에서 한번 보긴했다.)
해당 링크의 하단에 이 문제를 또 오픈소스로 만들어서 공유해주신 분이 계셨고, 옳지! 이분의 라이브러리를 quizdown.js에 적용하여 PR을 올리면 되겠다!고 생각했다.
하지만 해당 서비스는 버전 문제가 있었으니,,,
바로 quizdown.js 는 Svelte 3 버전을 사용중이었고, svelte-google-translate 오픈소스는 Svelte 4 버전을 사용중이었다.
어찌저찌 svelte 3에서 4로 마이그레이션 해주는 기능 및 수정이 필요한 부분들을 찾아찾아서 여러가지 시도를 해봤지만, 프레임워크에 대한 지식이 부족하여 아무래도 단기간에 수정하기에는 어려웠다.
따라서, 다른 개발자들의 도움을 얻기로 했다.
오픈소스 고쳐주세요
먼저 svelte-google-translate 오픈소스 개발자님의 레포지토리에 이슈를 생성하여 내가 지금 하고자하는 일에 대해 간략히 설명하고, 하위 호환성을 추가 해줄 수 없냐고 요청드렸다.
그런데 quizdown.js 라이브러리를 4버전으로 올리면 안되냐고 하셔서 제가 못나서 못합니다.. 라고 말씀드렸더니, 이분께서 직접 quizdown.js를 svelte 4 버전으로 마이그레이션 해주셨다!
빨리 PR 봐주세요
하지만 여기서 또 문제가 생겼는데, quizdown.js 라이브러리는 마지막 커밋이 2년전이다. 즉, 더이상 관리되고 있는 라이브러리가 아니었다.
나 지금 이거 빨랑 수정해가지고 자격증 공부하고싶은데, PR 리뷰가 너무 늦어지는 문제가 있었다.
그래서 포크떠서 내가 적용했다.
이러면 안될것 같지만, 내가 quizdown.js 라이브러리를 수정하고, 해당 라이브러리를 적용한 버전의 ghcertified 개인 레포지토리를 새로 팠다. 나처럼 Github 자격증을 따는데 번역 문제로 불편함을 느끼는 사람이 있다면 활용해줬으면 좋겠다. 기능들은 이미 넣어놨으니, ghcertified의 로컬에서 실행하기 위한 문서를 읽고, 로컬에서 해당 서비스를 실행하여 사용한다면 번역 하는데에 번거로움 없이 문제를 풀 수 있다.
오픈소스와 같은 많은 사용자들이 이용하는 소스코드에 취약점이 발견 될 경우, Security 탭에서 취약점을 보고 할 수 있다.
취약점을 보고 할 경우 가시성은 해당 레포지토리의 관리자 및 협력자에게만 표시되며, 이를 통해 해당 취약점을 내부 관계자들이 파악하고 조치할 수 있다.
Github Security Policy
저장소에 보안 정책을 추가하여 프로젝트의 보안 취약점을 보고하는 방법에 대한 지침을 제공 할 수 있다.
Github 에서는 각 레포지토리마다 각자의 다양한 정책을 가지고 있다. 예를 들면 Pull Request Template, Issue Template 또는 Contributor가 되기 위해 미리 숙지 해야할 것들과 같이, 보안 이슈를 보고하기 위해서도 사용자들이 보안 취약점을 보고하기 위한 가이드를 제공할 수 있다.
어떻게?
저장소의 루트, docs, .github 폴더에 SECURITY.md 파일을 추가할 수 있다. 이 파일을 앞에 언급한 저장소의 폴더에 생성 할 경우 사람들이 검토할 수 있는 설명이 있는 행이 자동으로 생성된다.
이를 통해 다른 사용자가 취약점 보고를 위한 가이드라인과 정보를 얻을 수 있다.
Github Report Vulnerabilities
만약 레포지토리의 소스코드에서 보안 취약점을 발견 한 경우 Private vulnerability reporting 을 활성화 하여 사용자들로부터 보안 취약점 보고를 받을 수 있다.
이를 활성화 한 경우 보안 취약점을 보고 할 수 있는데, 아래와 같은 폼으로 해당 보안 취약점에 대해 자세히 설명할 수 있다.
아무래도 보안 취약점이므로, 어떤 문제가 발생하는지, 이슈 재연 시나리오 및 해당 취약점을 검증하는 프로세스가 기본 폼으로 작성되어 있다.
마무리
짧지만, 최근들어 Github Foundations를 공부하면서 Github에서 제공하는 다양한 기능들을 간단히 소개해보고자 한다. Github Foundations는 국내에서 검색했을 때 자료가 없었고, 여기서 배운 내용들이 한국 개발자들이 Github를 더 효율적으로 사용하고, 필요했었지만 기능의 존재 유무조차 알지 못해 넘어갔던 부분들을 어느정도 해소시킬 수 있지 않을까 생각한다.
name: Bug Report
description: File a bug report.
title: "[Bug]: "
labels: ["bug", "triage"]
projects: ["octo-org/1", "octo-org/44"]
assignees:
- octocat
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
- type: input
id: contact
attributes:
label: Contact Details
description: How can we get in touch with you if we need more info?
placeholder: ex. email@example.com
validations:
required: false
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
value: "A bug happened!"
validations:
required: true
- type: dropdown
id: version
attributes:
label: Version
description: What version of our software are you running?
options:
- 1.0.2 (Default)
- 1.0.3 (Edge)
default: 0
validations:
required: true
- type: dropdown
id: browsers
attributes:
label: What browsers are you seeing the problem on?
multiple: true
options:
- Firefox
- Chrome
- Safari
- Microsoft Edge
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com).
options:
- label: I agree to follow this project's Code of Conduct
required: true
성공적으로 레포지토리 내에 파일을 생성 한 경우, Github에서 새로운 이슈를 생성하면 다음과 같이 이슈 폼을 선택할 수 있습니다.
이슈 생성 화면을 보면 기존 이슈 템플릿보다 편리하고 구조화된 이슈를 생성하는 폼을 제공합니다.
생성된 이슈는 이슈 템플릿으로 생성한 형식과 동일하게 표시됩니다.
이슈폼을 직접 생성해보면서 느낀점은 이슈의 형식에 좀더 제한을 두어, 더욱더 강력하고 편리하게 이슈를 관리할 수 있겠다고 느꼈습니다. 다음에 Github 에서 프로젝트를 관리할 일이 생긴다면, 이슈 폼을 적극 도입하지 않을까 합니다.
2024년 취업과 동시에 여러가지 목표가 있었는데, 그 중 하나인 오픈소스 기여를 매우 간단하게 성공했던 후기를 공유해보고자 한다. 많은 개발자들이 어렵게 생각하는 만큼, 나 역시 “나 같은 하찮은 개발자가 오픈소스에 기여할 수 있을까?” 고민 했었지만, 역시 일단 하고 두들겨 맞는게 가장 빠르게 목표를 달성할 수 있다고 생각하여 오픈소스에 기여할 방법을 찾아봤다.
오픈소스 기여 대상 탐색
처음에는 Github에서 Major한? 프레임워크(Vue.js, Spring Framework)를 대상으로 기여를 하려고 했으나, 이미 많은 사람들이 참여하고 있는 프로젝트들인 만큼 내가 기여할 수 있는 부분을 빠르게 찾기는 어려웠다. 그래서, SSAFY 자율 프로젝트 진행 중 피쳐플래깅 서비스로 레퍼런스에 이용했었던 Unleash라는 서비스를 보던 중, 충분히 납득할만한 기여사항을 발견하여 이 프로젝트의 문서화에 기여하기로 했다.
문서화 기여
해당 서비스는 피쳐 플래깅 서비스의 Java측 SDK로, ReadMe에 해당 서비스를 사용하기 위한 설정들이 적혀 있었는데, Maven 프로젝트 기준으로 세팅하는 방법이 적혀 있었다. 나는 평소 Gradle로만 프로젝트를 진행했었고, 많은 주니어 개발자들이 비슷한 경험을 했을것이라고 생각했다. 따라서, Gradle로 SDK 의존성을 추가하는 간단한 ReadMe를 작성했다.
아주 하찮은 수정사항이지만 해당 수정사항을 반영해야 하는 이유에 대해서 정성스레 PR을 올렸고, PR을 올린지 두시간만에 리뷰어님이 Approve와 함께 Merge를 진행해주셨다.
오픈소스 기여 후기
오픈소스에 기여하는것이 3년 이내에 해야할 버킷리스트에 포함되어 있을만큼 도전해보고 싶었던 일인데 정말 쉽고 빠르게 목표를 달성하여 기분이 좋기도 하고, 왜 진작 시도해보지 않았을까? 라는 생각도 든다. 비록 지금은 문서 수정이지만 앞으로 여러 오픈소스 프로젝트에 참여하고 국내 및 해외 개발자들과 소통하며 다양한 경험을 하고싶다.
저는 개발용 PC로 집에서 사용하는 Windows 데스크탑과, 집 밖에서 사용하는 Mac 두 PC로 주로 개발을 진행하는데요.
이렇게 여러 환경에서 개발을 진행 할 경우 작업을 완료하지 않은채로 github에 작업사항을 commit 하게되는 경우가 있는데요. 이러한 노트북 + 데스크탑 또는 Windows 노트북 + MacBook 환경과 같이 여러 환경에서 프로젝트 작업 시 PC의 작업사항을 stash로 옮기는 방법을 소개합니다.
먼저 작업사항을 stash 한 이후 아래의 작업을 이어가시면 됩니다.
Stash를 Patch로 만들기
PC의 가장 최근 stash 작업사항을 changes.patch 파일로 저장
$ git stash show "stash@{0}" -p > changes.patch
stash를 적용하고자 하는 PC로 해당 파일을 전송
해당 PC에서 patch파일을 적용
$ git apply changes.patch
위의 기능을 통해 다른 PC에서 작업하던 사항을 쉽게 적용하여 작업을 이어갈 수 있습니다.
Slack을 통해 업무용 메신저를 사용할 경우 Github와 연동하여 Pull Request, Issue, push 이벤트등을 슬랙 채널으로 Notification을 보낼 수 있드라.. 이러케 하면 github와 연동된 이메일 계정이 아닌 Slack에서 Github에서 발생한 이벤트를 볼 수 있기때문에 매우 편안해진다!
먼저 Slack에 접속하여 좌측 하단의 앱 에서 앱 추가 버튼을 클릭한다
나는 이미 깃헙을 등록했으므로 깃헙이 있슴 ㅎㅅㅎ
이후 검색창에 Github 검색 후 선택해준다. 그러면 위처럼 앱 목록에 GitHub가 추가된다.
여기서 Connect Github Account를 선택해준다.
누르면 머 인증하고 코드 입력하라고 하는데 코드 입력해주면 댄다!
그럼 Github에서 Repository Access 권한같은게 뜨는데,
All repositories, Only select repositories 두가지 중 선택해야한다.
나는 처음부터 All repositories를 선택했지만, Only select repositories 선택 시 아마도 slack에서 접근가능한 repository를 선택가능한 것으로 보인다.
어쨌든 이까지 순탄하게 설정해주고 다시 Slack으로 돌아온 후 구독 할 레포지토리를 선택해주면 된다.