{"id":20975016,"url":"https://github.com/boostcampwm2023/web01-gitchallenge","last_synced_at":"2025-05-14T13:32:22.154Z","repository":{"id":205782211,"uuid":"714853465","full_name":"boostcampwm2023/web01-GitChallenge","owner":"boostcampwm2023","description":"🧑🏻‍💻 Git Challenge | 𝑮𝑰𝑻에 대해 얼마나 알고있니~?","archived":false,"fork":false,"pushed_at":"2024-07-19T10:33:57.000Z","size":2565,"stargazers_count":53,"open_issues_count":12,"forks_count":2,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-02T18:51:49.567Z","etag":null,"topics":["git"],"latest_commit_sha":null,"homepage":"https://git-challenge.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boostcampwm2023.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-06T01:18:53.000Z","updated_at":"2025-03-26T01:25:19.000Z","dependencies_parsed_at":"2024-06-06T09:54:13.765Z","dependency_job_id":null,"html_url":"https://github.com/boostcampwm2023/web01-GitChallenge","commit_stats":null,"previous_names":["boostcampwm2023/web01-gitchallenge"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boostcampwm2023%2Fweb01-GitChallenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boostcampwm2023%2Fweb01-GitChallenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boostcampwm2023%2Fweb01-GitChallenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boostcampwm2023%2Fweb01-GitChallenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boostcampwm2023","download_url":"https://codeload.github.com/boostcampwm2023/web01-GitChallenge/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254150623,"owners_count":22022998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git"],"created_at":"2024-11-19T04:36:51.975Z","updated_at":"2025-05-14T13:32:17.132Z","avatar_url":"https://github.com/boostcampwm2023.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eGit Challenge\u003c/h1\u003e\n  \n![Frame 30](https://github.com/boostcampwm2023/web01-GitChallenge/assets/79246447/fe5e7fbd-93fe-40ea-be09-a902b712f6c3)\n\u003c/div\u003e\n\n\u003e 배포 링크 \u003cbr /\u003e\n\u003e **https://git-challenge.com/**\n\n\u003cbr/\u003e\n\n\u003cp align=center\u003e\n  \u003ca href=\"https://bow-snail-89d.notion.site/MergeMasters-c9a78b108ea445f8b2281f2e6ae80369?pvs=4\"\u003e팀 노션\u003c/a\u003e\n  \u0026nbsp; | \u0026nbsp; \n  \u003ca href=\"https://github.com/orgs/boostcampwm2023/projects/80\"\u003e백로그\u003c/a\u003e\n  \u0026nbsp; | \u0026nbsp;\n  \u003ca href=\"https://www.notion.so/04317c11a3d240408383dab9249527a2\"\u003e기획서\u003c/a\u003e   \u0026nbsp; | \u0026nbsp;\n  \u003ca href=\"https://www.figma.com/file/vD1EMVIfvS2vKCMzmShnSV/git-challenge-figma?type=design\u0026node-id=14%3A47\u0026mode=design\u0026t=43Jcxt1P3zB1mMZK-1\"\u003efigma\u003c/a\u003e \n  \u003cbr /\u003e\n  \u003ca href=\"https://github.com/boostcampwm2023/web01-GitChallenge/wiki/%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%A3%B0\"\u003e그라운드 룰\u003c/a\u003e\n  \u0026nbsp; | \u0026nbsp; \n  \u003ca href=\"https://bow-snail-89d.notion.site/1fdb15f654164f6cb953ab658cb9a92e?v=10f58ac6aaa443b9900ffd5d43c9e702\u0026pvs=4\"\u003e개발 위키\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=center\u003e\n    \u003ca href=\"https://hits.seeyoufarm.com\"\u003e\u003cimg src=\"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fboostcampwm2023%2Fweb01-GitChallenge%2Fhit-counter\u0026count_bg=%23FF7B5A\u0026title_bg=%23555555\u0026icon=\u0026icon_color=%23E7E7E7\u0026title=hits\u0026edge_flat=false)](https://hits.seeyoufarm.com\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## 📄 목차\n\n- [📄 목차](#-목차)\n- [✍🏻 프로젝트 개요](#-프로젝트-개요)\n- [🚀 핵심 기능](#-핵심-기능)\n  - [자주 마주칠 수 있는 Git 문제를 해결해 보세요](#자주-마주칠-수-있는-git-문제를-해결해-보세요)\n  - [터미널 환경에서 Git을 조작할 수 있어요](#터미널-환경에서-git을-조작할-수-있어요)\n  - [Git 그래프로 변화되는 Git 상황을 확인할 수 있어요](#git-그래프로-변화되는-git-상황을-확인할-수-있어요)\n  - [문제 해결이 어렵다면 도움받을 수 있어요](#문제-해결이-어렵다면-도움받을-수-있어요)\n  - [정답을 맞추면 내 답안을 공유할 수 있어요](#정답을-맞추면-내-답안을-공유할-수-있어요)\n- [⚙️ 기술 스택](#️-기술-스택)\n- [🏛️ 시스템 아키텍처](#️-시스템-아키텍처)\n- [🔎 FE 기술적 도전](#-fe-기술적-도전)\n  - [디자인 시스템 구축](#디자인-시스템-구축)\n  - [컴포넌트 테스트 코드](#컴포넌트-테스트-코드)\n  - [D3를 이용한 데이터 시각화](#d3를-이용한-데이터-시각화)\n  - [UX 개선](#ux-개선)\n- [🔎 BE 기술적 도전](#-be-기술적-도전)\n  - [도커 컨테이너](#도커-컨테이너)\n  - [HTTP로 원격 터미널 조작하기](#http로-원격-터미널-조작하기)\n  - [Git editor 커스텀](#git-editor-커스텀)\n  - [채점을 위해 Jest를 쓰지 않은 이유](#채점을-위해-jest를-쓰지-않은-이유)\n  - [AI 시스템 프롬프트 설정하기](#ai-시스템-프롬프트-설정하기)\n- [🧡 팀원 소개](#-팀원-소개)\n\n\u003cbr /\u003e\n\n## ✍🏻 프로젝트 개요\n\nGit Challenge는 사용자들이 git을 사용하며 발생할 수 있는 다양한 상황을 미리 체험하고, 학습할 수 있도록 도와주는 서비스입니다. 이 서비스를 통해 사용자들은 git 명령어에 대해 실습하고, 실제로 발생할 수 있는 문제 상황을 해결하는 경험을 할 수 있습니다.\n\n\u003cbr /\u003e\n\n## 🚀 핵심 기능\n\n### 자주 마주칠 수 있는 Git 문제를 해결해 보세요\n\n\u003e 총 세가지 난이도로 구성되어 있습니다. 프로젝트를 진행하며 겪을 수 있는 Git 문제 상황을 실습하며 연습해보세요!\n\n- 튜토리얼 정도의 난이도 **Git start**\n- Git start보다 어려운 난이도이며 스토리 형식의 **Git advanced**\n- 원격 저장소와 관련된 문제이며 스토리 형식의 **Remote start**\n\n\u003c/aside\u003e\n\n### 터미널 환경에서 Git을 조작할 수 있어요\n\n\u003e 터미널 환경에서 직접 Git 명령어를 입력하고, vi 편집기를 사용하며\n\u003e 문제를 풀어보세요.\n\n\u003cimg alt='' src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/7e89b3f3-6987-4a1e-85d3-d6430aa3ad05\" /\u003e\n\n### Git 그래프로 변화되는 Git 상황을 확인할 수 있어요\n\n\u003e Git 명령어 동작에 따라 변화되는 Git 그래프를 보며, Git에 대한 이해를 높여보세요.\n\n\u003cimg alt='' src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/dd043d5c-347f-466a-8fe1-2660fe9f1953\" /\u003e\n\n### 문제 해결이 어렵다면 도움받을 수 있어요\n\n\u003e 문제 풀이에 필요한 핵심 명령어와 모범 답안으로 Git을 학습한 후 문제를 다시 풀어보세요.\n\n\u003cimg alt='' src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/a441aee3-f965-4dd3-aeb2-cdf17aa66194\" /\u003e\n\n### 정답을 맞추면 내 답안을 공유할 수 있어요\n\n\u003e 문제를 맞췄다면 내 풀이를 다른 사람들과 공유해 보세요.\n\n\u003cimg alt='' src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/deb17f8b-5a2d-4a9f-ade4-7b60692999ae\" /\u003e\n\n\u003cbr /\u003e\n\n## ⚙️ 기술 스택\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003e분류\u003c/th\u003e\n            \u003cth\u003e기술 스택\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cp\u003e공통\u003c/p\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003cimg src=\"https://img.shields.io/badge/TypeScript-3178C6?logo=typescript\u0026logoColor=ffffff\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Jest-341f0e?logo=jest\u0026logoColor=FF0000\"\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                  \u003cp\u003e프론트엔드\u003c/p\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                  \u003cimg src=\"https://img.shields.io/badge/Next.js-000000?logo=Next.js\u0026logoColor=white\"\u003e\n                  \u003cimg src=\"https://img.shields.io/badge/Vanilla extract-ccfbf1\"\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cp\u003e백엔드\u003c/p\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Nest.js-E0234E?logo=NestJS\u0026logoColor=white\"/\u003e\n                \u003cimg src=\"https://img.shields.io/badge/MongoDB-114411?logo=mongodb\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Mongoose-114411?logo=mongodb\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/SQLite-07405E?logo=sqlite\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/TypeORM-FF4716?logo=typeorm\u0026logoColor=white\"/\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Docker-2496ED?\u0026logo=Docker\u0026logoColor=white\"\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n                \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cp\u003e패키지 매니저\u003c/p\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n              \u003cimg src=\"https://img.shields.io/badge/Yarn Berry-2C8EBB?logo=yarn\u0026logoColor=ffffff\"\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n                \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cp\u003e배포\u003c/p\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Nginx-014532?logo=Nginx\u0026logoColor=009639\u0026\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Naver Cloud Platform-03C75A?logo=naver\u0026logoColor=ffffff\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Docker-2496ED?\u0026logo=Docker\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/GitHub Actions-000000?logo=github-actions\"\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cp\u003e협업\u003c/p\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Notion-000000?logo=Notion\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Figma-F24E1E?logo=Figma\u0026logoColor=ffffff\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Slack-4A154B?logo=Slack\u0026logoColor=ffffff\"\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cbr /\u003e\n\n## 🏛️ 시스템 아키텍처\n\n![시스템 아키텍처](https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/d94724b8-a7a7-48e6-bba8-891bc7bfd696)\n\n\u003cbr /\u003e\n\n## 🔎 FE 기술적 도전\n\n### 디자인 시스템 구축\n\n| 컬러, 타이포그래피 시스템                                                                                                       | Semantic Token                                                                                                                  |\n| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| \u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/38512eb4-9a99-48bf-a2df-0bf9a89bb83d\" /\u003e | \u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/d61c67c7-f2b9-4109-b8a5-7fd7ab97a518\" /\u003e |\n\n- 색상과 글꼴을 디자인 토큰으로 추상화한 **컬러, 타이포그래피 시스템**으로 **디자인 일관성을 유지하고 코드베이스를 더 쉽게 관리**할 수 있었습니다.\n- 색상과 글꼴에 의미를 부여한 **Semantic Token으로 커뮤니케이션 비용을 절약**할 수 있었습니다.\n- 디자인 변경이 필요할 때 변수에 주입된 색상 코드만 수정하면 되어 **초기 개발 단계에서 디자인 변경에 대한 유연성을 확보**할 수 있었습니다.\n\n### 컴포넌트 테스트 코드\n\n- Describe-Context-It, **DCI 패턴으로 테스트 케이스를 계층화**하여 테스트 결과의 가독성을 개선했습니다.\n- 복잡한 로직을 각 구문, 함수, 분기별로 철저히 테스트하여 기능 추가 및 리팩토링 시에도 **컴포넌트의 무결성을 유지**할 수 있었습니다.\n- 테스트 케이스를 작성하며 놓친 기능 요구사항을 파악하여 **TDD로 구현**했습니다.\n\n\u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/1456a155-42fe-4f98-bbe6-4000ac72f0ff\" width=\"80%\" /\u003e\n\n### D3를 이용한 데이터 시각화\n\n- Problem\n  - D3 tree는 트리 데이터를 위한 레이아웃입니다. 하지만 **Git 로그 데이터는 트리가 아닌 네트워크 그래프 데이터**이기 때문에 D3 tree 레이아웃에 적용할 수 없는 문제가 있었습니다.\n- Solved\n  - Git 로그 데이터에서 **Multiple Parents 노드를 처리하기 위해,** 일부 간선을 분리하여 트리 데이터로 가공한 후 D3 tree 레이아웃에 적용했습니다. 이후에는 **분리한 간선을 다시 추가하여 네트워크 그래프를 시각화**했습니다.\n\n| 라이브러리 비교                                                                                                                 | 문제 해결                                                                                                                       |\n| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| \u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/c6c77b30-a9d1-461e-bee8-11df0a317232\" /\u003e | \u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/b01a4a30-5d4b-4bf2-80c7-8a7dd0e6a3ca\" /\u003e |\n\n### UX 개선\n\n| 랜딩 페이지                                                                                                                     | Git 그래프 변화                                                                                                                 |\n| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| \u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/aae4947d-5782-4a1e-97b5-23c445cbe573\" /\u003e | \u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/1ad9a125-1137-4a8d-b5c0-140360a987c4\" /\u003e |\n\n- Intersection Observer를 사용하여 브라우저 화면에서 현재 보이는 영역을 동적으로 감지하고, 이를 기반으로 **스크롤 이벤트 애니메이션을 설계하고 구현**했습니다. 이를 통해 서비스에 처음 진입했을 때 사용자에게 적절한 맥락을 전달하고, **자연스러운 화면 전환을 제공**하기 위해 노력했습니다.\n- 사용자가 입력한 Git 명령어의 동작을 시각적으로 파악할 수 있도록 Git 그래프 변화에 애니메이션을 적용했습니다. D3의 데이터 조인을 이용해 데이터 추가, 수정, 그리고 삭제 애니메이션을 구현했습니다.\n\n\u003cbr /\u003e\n\n## 🔎 BE 기술적 도전\n\n### 도커 컨테이너\n\n\u003cimg width=\"50%\" alt=\"docker container\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/c59857a3-08e5-49f0-9e8c-bab8a419be3a\"\u003e\n\n- 사용자별 **격리된** git 문제 풀이 환경을 제공하면서도, git의 전역 설정들이 다른 사용자들에게 영향을 미치지 않도록 하기 위해 도커 컨테이너를 이용했습니다.\n- 컨테이너 생성 시간을 아끼고자 각 문제 별로 미리 생성된 컨테이너 환경에 사용자를 할당하고 새로운 컨테이너를 생성합니다.\n- 서버 자원을 효율적으로 사용하기 위해 오래 된(30분) 컨테이너는 자동 정리되며 사용자 재접속 시 **log 기반으로 복구**됩니다.\n- 네트워크 차단, 실행 가능 명령어 검증, 유저 권한 제한 등으로 사용자의 입력을 검증하고 제한했습니다.\n\n### HTTP로 원격 터미널 조작하기\n\n\u003cimg width=\"70%\" alt=\"protocol test\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/95cdab2e-e847-45ff-8f23-5a9d8339c655\"\u003e\n\n- ssh로 컨테이너에 명령을 전달하고 받아오도록 구현했으나 충분히 빠르지 않았습니다.\n- 컨테이너 관리 및 조회를 위한 작은 데이터를 단발적으로 전송할 때 효율적인 **HTTP/1.1**을 사용하는 서버를 추가 도입했습니다.\n- HTTP 서버를 추가로 개발하는 것이 쉬우면서도 빠른 방법임을 리서치했습니다.\n\n### Git editor 커스텀\n\n\u003cimg alt=\"\" src=\"https://github.com/boostcampwm2023/web01-GitChallenge/assets/96400112/c0c8529d-8755-4ac9-9335-7916dcf175a0\" width=\"50%\" /\u003e\n\n- 직접 구현한 터미널과 백엔드 구조로는 vi Editor와 같은 **상호작용**이 불가능합니다.\n- 편집기의 동작을 편집할 파일을 읽는 과정, 파일을 편집하는 과정 두 단계로 **이원화**하여 Git에서 core.editor로 사용할 편집기 프로그램을 직접 작성했습니다.\n\n### 채점을 위해 Jest를 쓰지 않은 이유\n\n- Jest는 **테스팅 프레임워크**로, 단위 테스트 및 통합 테스트를 위해 널리 사용되고, 다양한 테스트 기능을 제공합니다. 사용자의 문제 환경 컨테이너가 Jest 테스트를 통과하면 정답입니다.\n- Jest를 사용하면 채점 로직에 대해 멀티프로세스를 이용해 **병렬 실행**이 가능합니다.\n- Jest 자체적으로 테스트 환경 설정과 테스트 실행 환경을 준비하는 과정이 필요했고, 이 때문에 일반 코드로 채점하는 것에 비해 **속도가 느렸기** 때문에 사용하지 않았습니다.\n\n### AI 시스템 프롬프트 설정하기\n\n- **HyperCLOVA X 엔진**은 충분히 방대한 정보를 대답할 수 있습니다.\n- Git 설치나 Git과 무관한 답변은 하지 않도록 하였습니다.\n- 교육을 위해 창의적인 해결법 보다는 학습을 위한 **전형적인 해결법**을 답하도록 하였습니다.\n\n\u003cbr /\u003e\n\n## 🧡 팀원 소개\n\n|                                     박용준                                     |                                     박정제                                      |                                    박유현                                    |                                    윤채현                                    |\n| :----------------------------------------------------------------------------: | :-----------------------------------------------------------------------------: | :--------------------------------------------------------------------------: | :--------------------------------------------------------------------------: |\n| \u003cimg src=\"https://avatars.githubusercontent.com/u/50614833?v=4\" width=\"120\" /\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/104267255?v=4\" width=\"120\" /\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/96400112?v=4\" width=\"120\"\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/79246447?v=4\" width=\"120\"\u003e |\n|                                     **BE**                                     |                                     **BE**                                      |                                    **FE**                                    |                                    **FE**                                    |\n|                    [@flydog98](https://github.com/flydog98)                    |                    [@LuizyHub](https://github.com/LuizyHub)                     |                   [@YuHyun-P](https://github.com/YuHyun-P)                   |                [@yunchaehyun](https://github.com/yunchaehyun)                |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboostcampwm2023%2Fweb01-gitchallenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboostcampwm2023%2Fweb01-gitchallenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboostcampwm2023%2Fweb01-gitchallenge/lists"}