{"id":37877146,"url":"https://github.com/parkgang/concept-container","last_synced_at":"2026-01-16T16:45:42.174Z","repository":{"id":51685109,"uuid":"290314021","full_name":"parkgang/concept-container","owner":"parkgang","description":"Concept Code를 빠르게 가져올 수 있는 나의 컨테이너 ✨","archived":false,"fork":false,"pushed_at":"2025-10-15T08:53:46.000Z","size":25830,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-15T23:49:26.510Z","etag":null,"topics":["example","poc"],"latest_commit_sha":null,"homepage":"","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/parkgang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-25T20:15:05.000Z","updated_at":"2025-10-15T08:53:52.000Z","dependencies_parsed_at":"2025-10-15T22:26:41.855Z","dependency_job_id":null,"html_url":"https://github.com/parkgang/concept-container","commit_stats":null,"previous_names":["parkgang/concept-container","parkgang/web-container"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/parkgang/concept-container","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkgang%2Fconcept-container","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkgang%2Fconcept-container/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkgang%2Fconcept-container/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkgang%2Fconcept-container/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parkgang","download_url":"https://codeload.github.com/parkgang/concept-container/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkgang%2Fconcept-container/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28480080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["example","poc"],"created_at":"2026-01-16T16:45:42.069Z","updated_at":"2026-01-16T16:45:42.160Z","avatar_url":"https://github.com/parkgang.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# concept-container\n\n`Concept` 을 제공할 수 있는 `sample` 및 `PoC` 프로젝트들이 위치하고 있습니다.\n\n각각의 프로젝트는 의존성 없이, 독립적이며, **repo 단위**입니다. 아래의 구조로 관리됩니다.\n\n```\n/\n└─[ 언어 or 생태계 or 플랫폼 ]\n  └─[ 라이브러리 or 프레임워크 or 분류 가능한 도메인 ]\n    └─{ 프로젝트 } // 목적에 맞는 가치를 전달하는 단위\n```\n\n## Start\n\n### 프로젝트 시작\n\n원하는 프로젝트 폴더를 열어 `README.md` 참고하여 실행하면 됩니다.\n\n### 프로젝트 관리 명령어\n\n원래 하나의 repo에서 관리되었는데 2025-08-24 이후부터 Subtree로 관리합니다.\n\nSubtree 추가 방법: working tree가 비어있어야 합니다.\n\n```bash\ngit subtree add --prefix={main repo 경로} {subtree repo 경로} {subtree repo branch 명}\ngit subtree add --prefix=go/gin/gin-restful-api ~/workspaces/temp/gin-restful-api main\n```\n\nSubtree 업데이트 방법: add가 pull 명령어로 바뀐 것 이외 동일\n\n```bash\ngit subtree pull --prefix=go/gin/gin-restful-api ~/workspaces/temp/gin-restful-api main\n```\n\n현재 있는 경로에 대한 git log만 보기\n\n```bash\ncd go/gin/gin-restful-api/\ngit log -- .\n```\n\n### 프로젝트 관리 워크플로우\n\nSubtree Repo Branch로 분리 후 독립된 repo로 작업 후 main repo에 반영하는 방법:  \n심도있는 작업을 위해 다시 repo를 분리하고 업데이트할 때 사용\n\n(공통). Subtree Repo Branch로 분리:\n\n```bash\ngit subtree split --prefix=go/gin/gin-restful-api -b gin-restful-api-only\n```\n\n1\\. main repo 생성:  \n깔끔한 독립 repo으로 repo에서 branch 만들면서 작업 가능\n\n```bash\n# repo 생성\nmkdir gin-restful-api\ncd gin-restful-api\ngit init\n\n# subtree branch으로 repo 가져오기\ngit pull ~/workspaces/repos/concept-container gin-restful-api-only\n\n# 작업 진행...\n\n# Subtree Repo 업데이트\ncd concept-container\ngit subtree pull --prefix=go/gin/gin-restful-api ../gin-restful-api main\n```\n\n2\\. worktree 사용:  \nmain repo에서 `git worktree list` 으로 관리할 수 있는 장점  \n단, branch 이름이 main이 아니라 불편\n\n```bash\n# worktree 생성\ngit worktree add ~/workspaces/temp/gin-restful-api gin-restful-api-only\n\n# 독립된 repo라고 생각하고 작업 진행\ncd gin-restful-api\n\n# Subtree Repo 업데이트\ncd concept-container\ngit subtree pull --prefix=go/gin/gin-restful-api ../gin-restful-api gin-restful-api-only\n\n# 모두 작업 후 정리: 디렉터리 제거됩니다.\ngit worktree remove gin-restful-api-only\n```\n\nSubtree Repo remote push 하는 방법\n\n```bash\ngh repo create gin-restful-api --public\ngit subtree push --prefix=go/gin/gin-restful-api https://github.com/parkgang/gin-restful-api.git main\n```\n\nfilter-repo로 분리 후 remote push 하는 방법:  \n해당 방법은 main repo에서 관리된 repo를 분리하는 방법입니다. subtree로 관리된 것은 subtree 명령으로 분리해야 Git History 유지됩니다.\n\n```bash\nbrew install git-filter-repo\n\n# 분리\ngit filter-repo -f --path go/gin/gin-restful-api/ --path-rename go/gin/gin-restful-api/:\n\n# Remote Push\ngh repo create gin-restful-api --public\ngit remote add origin https://github.com/parkgang/gin-restful-api.git\ngit push -u origin main\n```\n\n## 관리 규칙\n\n- 프로젝트들은 독립적으로 관리되기 때문에 아래의 내용을 `README.md` 에 기록하여 추적성을 보장하도록 합니다.\n  - 어떤 RunTime(i.e. Node.js) 버전을 사용하는지\n  - 어떤 목적의 프로젝트 인지\n  - 어떻게 실행하는지\n- `repo root` 에서 `git` 을 관리하기 때문에 하위의 프로젝트 레벨에서는 `.git` 을 포함하지 않도록 합니다.\n- 하나의 `컨셉` 에는 여러 복합적인 `Stack` 이 사용되기 때문에 완벽한 분류를 할 수 없습니다. 때문에 `컨셉` 을 기준으로 위에서 관리되는 구조로 배치하면 됩니다.\n  - e.g. `TS` + `Prisma` + `SQL Server` 를 이용해서 `트랜잭션 격리 수준` 의 `컨셉` 을 정리하려고 한다면 코드에는 `트랜잭션 격리 수준` 을 위한 `Prisma` 코드도 들어갈 것이고, `트랜잭션 격리 수준` 은 `DBMS` 에 의존적이기 때문에 `SQL Server` 에 맞게 작성될 것입니다. 크게 보면 `Prisma` 로 `트랜잭션 격리 수준` 을 핸들링하는 예제도 있지만 `SQL Server` 에서 `트랜잭션 격리 수준` 이 어떻게 동작하는가에 대해서도 나타내게 됩니다. 이런 경우 `Prisma` 로 `트랜잭션 격리 수준` 을 하는 것이 더 **목적**에 가깝기 때문에 `Prisma` 를 기준으로 분류하여 배치하게 될 것입니다.\n  - e.g. `DBMS` , `Kafka` 를 예시로 본다면 이것을 어떤 `언어` 와 `환경` 으로 구성하느냐에 따라 달라질 것입니다. 순수하게 해당 플랫폼에 대해서만 서술한다면 `DBMS` , `Kafka` 를 하나의 `언어 or 생태계 or 플랫폼` 으로 분류할 수 있을 것입니다. 하지만 해당 `플랫폼` 을 어떠한 언어를 **사용**해서 만들어진 `컨셉` 은 해당 언어에 맞게 분류될 것입니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparkgang%2Fconcept-container","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparkgang%2Fconcept-container","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparkgang%2Fconcept-container/lists"}