โ† Back to list
eco2-team

k8s-debugging

by eco2-team

๐ŸŒฑ ์ด์ฝ”์—์ฝ”(Ecoยฒ) BE

โญ 0๐Ÿด 0๐Ÿ“… Jan 25, 2026

SKILL.md


name: k8s-debugging description: Kubernetes ์šด์˜/๋””๋ฒ„๊น… ๊ฐ€์ด๋“œ. Pod ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…, ๋กœ๊ทธ ๋ถ„์„, ๋„คํŠธ์›Œํฌ ์ง„๋‹จ, ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ, GitOps/ArgoCD, Operator/CRD/CR, Helm ๋ฐฐํฌ ์‹œ ์ฐธ์กฐ. "k8s", "kubernetes", "pod", "debug", "logs", "kubectl", "argocd", "helm", "operator", "crd" ํ‚ค์›Œ๋“œ๋กœ ํŠธ๋ฆฌ๊ฑฐ.

Kubernetes Debugging Guide

Ecoยฒ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐœ์š”

์ž์ฒด ๊ด€๋ฆฌํ˜• K8s ํด๋Ÿฌ์Šคํ„ฐ (EKS ์•„๋‹˜)

ํ•ญ๋ชฉ๊ฐ’
๋งˆ์Šคํ„ฐ ๋…ธ๋“œk8s-master (13.209.44.249)
SSH ์ ‘์†ssh -i ~/.ssh/sesacthon.pem ubuntu@13.209.44.249
GitOps ๋ธŒ๋žœ์น˜develop (ArgoCD๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ธŒ๋žœ์น˜)
์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌdocker.io/mng990/eco2:<app>-<env>-latest

๋ฐฐํฌ ํ”Œ๋กœ์šฐ

PR โ†’ develop ๋จธ์ง€ โ†’ ArgoCD auto-sync โ†’ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ˜์˜

์ฃผ์š” Namespace

Namespace์ปดํฌ๋„ŒํŠธ
chatchat-api, chat-worker
authauth-api, auth-worker, ext-authz
scanscan-api, scan-worker
charactercharacter-api, character-grpc, character-worker
locationlocation-api, location-grpc
rabbitmqRabbitMQ Cluster (eco2-rabbitmq)
redisRedis Sentinel (rfr-streams, rfr-pubsub)
postgresPostgreSQL
event-routerevent-router (Redis Streams โ†’ Pub/Sub)
sse-consumersse-gateway (SSE ์ŠคํŠธ๋ฆฌ๋ฐ)

Istio ๋ผ์šฐํŒ… ๊ตฌ์กฐ

API Gateway

ํ•ญ๋ชฉ๊ฐ’
API ๋„๋ฉ”์ธapi.dev.growbin.app
Gatewayistio-system/eco2-gateway
์ธ์ฆ ๋ฐฉ์‹Cookie (s_access) โ†’ Header (Authorization: Bearer) ๋ณ€ํ™˜

VirtualService ๋ผ์šฐํŒ…

๊ฒฝ๋กœ์„œ๋น„์ŠคNamespace
/api/v1/chatchat-apichat
/api/v1/authauth-apiauth
/api/v1/scanscan-apiscan
/api/v1/charactercharacter-apicharacter
/api/v1/locationlocation-apilocation
/api/v1/usersusers-apiusers
/api/v1/imagesimages-apiimages
/api/v1/infoinfo-apiinfo
/api/v1/ssesse-gatewaysse-consumer

EnvoyFilter (์ธ์ฆ ์ฒ˜๋ฆฌ)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Cookie โ†’ Header ๋ณ€ํ™˜ (cookie-to-header)               โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚  Client Request                                                          โ”‚
โ”‚  โ”œโ”€ Cookie: s_access=<JWT>                                              โ”‚
โ”‚  โ””โ”€ Cookie: s_refresh=<JWT>                                             โ”‚
โ”‚                                                                          โ”‚
โ”‚       โ†“ EnvoyFilter (Lua Script)                                        โ”‚
โ”‚                                                                          โ”‚
โ”‚  Backend Request                                                         โ”‚
โ”‚  โ”œโ”€ Authorization: Bearer <JWT>                                         โ”‚
โ”‚  โ””โ”€ X-Refresh-Token: Bearer <JWT>                                       โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

API ํ…Œ์ŠคํŠธ (ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€)

# JWT ํ† ํฐ์œผ๋กœ ์ธ์ฆ๋œ ์š”์ฒญ
TOKEN="<JWT_TOKEN>"
curl -X POST "https://api.dev.growbin.app/api/v1/chat" \
  -H "Content-Type: application/json" \
  -H "Cookie: s_access=$TOKEN" \
  -d '{"message":"์•ˆ๋…•ํ•˜์„ธ์š”!"}'

# Canary ๋ฒ„์ „ ํ…Œ์ŠคํŠธ (x-canary ํ—ค๋”)
curl -X POST "https://api.dev.growbin.app/api/v1/chat" \
  -H "Content-Type: application/json" \
  -H "Cookie: s_access=$TOKEN" \
  -H "x-canary: true" \
  -d '{"message":"์•ˆ๋…•ํ•˜์„ธ์š”!"}'

Quick Reference

ํด๋Ÿฌ์Šคํ„ฐ ์ ‘์† (SSH)

# ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์ ‘์†
./scripts/utilities/connect-ssh.sh master

# ์›Œ์ปค ๋…ธ๋“œ ์ ‘์†
./scripts/utilities/connect-ssh.sh worker-1
./scripts/utilities/connect-ssh.sh worker-2

# ์Šคํ† ๋ฆฌ์ง€ ๋…ธ๋“œ ์ ‘์†
./scripts/utilities/connect-ssh.sh storage

# ์›๊ฒฉ ๋ช…๋ น ์‹คํ–‰ (๋น„์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ)
ssh -i ~/.ssh/sesacthon.pem -o StrictHostKeyChecking=no ubuntu@<IP> "kubectl get nodes"

์›๊ฒฉ ํด๋Ÿฌ์Šคํ„ฐ ์ ๊ฒ€ (Claude Code์šฉ)

๋กœ์ปฌ์—์„œ VPN ์—†์ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์†ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ ˆ์ฐจ.

# 1. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ IP ์กฐํšŒ
MASTER_IP=$(aws ec2 describe-instances \
  --filters "Name=tag:Name,Values=k8s-master" "Name=instance-state-name,Values=running" \
  --query "Reservations[].Instances[].PublicIpAddress" \
  --output text --region ap-northeast-2)

# 2. SSH ๋ž˜ํผ ํ•จ์ˆ˜ (ํŽธ์˜์šฉ)
k8s() {
  ssh -i ~/.ssh/sesacthon.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
    ubuntu@$MASTER_IP "$@"
}

# 3. ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ
k8s "kubectl get nodes"
k8s "kubectl get pods -n <namespace> -l app=<app-name> -o wide"

# 4. ์ปจํ…Œ์ด๋„ˆ๋ณ„ ์ƒํƒœ ํ™•์ธ
k8s "kubectl get pod -n <ns> -l app=<app> -o jsonpath='{range .items[*].status.containerStatuses[*]}{.name}: {.state}{\"\\n\"}{end}'"

# 5. ๋กœ๊ทธ ํ™•์ธ
k8s "kubectl logs -n <ns> deploy/<deploy-name> -c <container> --tail=50"
k8s "kubectl logs -n <ns> deploy/<deploy-name> -c <container> --previous --tail=50"

# 6. ์ด๋ฒคํŠธ ํ™•์ธ
k8s "kubectl get events -n <ns> --sort-by='.lastTimestamp' | tail -20"

CI โ†’ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ˜์˜ ํ”Œ๋กœ์šฐ

PR ๋จธ์ง€ ํ›„ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐ˜์˜ํ•˜๋Š” ์ „์ฒด ์ ˆ์ฐจ.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Image Update Flow (kubectl ๋ฐฉ์‹)                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚  1. PR โ†’ develop ๋จธ์ง€                                                    โ”‚
โ”‚     โ””โ”€โ–ถ GitHub Actions CI ํŠธ๋ฆฌ๊ฑฐ                                        โ”‚
โ”‚                                                                          โ”‚
โ”‚  2. CI ๋กœ๊ทธ ํ™•์ธ ๋ฐ ์—…๋ฐ์ดํŠธ ๋Œ€์ƒ ํŒŒ์•…                                   โ”‚
โ”‚     โ”œโ”€โ–ถ gh run list --limit 5                                           โ”‚
โ”‚     โ”œโ”€โ–ถ gh run view <run-id> --log                                      โ”‚
โ”‚     โ””โ”€โ–ถ ๋นŒ๋“œ๋œ ์•ฑ ๋ชฉ๋ก ํ™•์ธ (chat-api, chat-worker ๋“ฑ)                  โ”‚
โ”‚                                                                          โ”‚
โ”‚  3. ArgoCD Application ๋ผ๋ฒจ๋กœ Hard Refresh ํŠธ๋ฆฌ๊ฑฐ                        โ”‚
โ”‚     โ””โ”€โ–ถ kubectl label application -n argocd <app> \                     โ”‚
โ”‚           argocd.argoproj.io/refresh=hard --overwrite                   โ”‚
โ”‚                                                                          โ”‚
โ”‚  4. Deployment ์‚ญ์ œ (Self-Heal ํŠธ๋ฆฌ๊ฑฐ)                                   โ”‚
โ”‚     โ””โ”€โ–ถ kubectl delete deploy <name> -n <namespace>                     โ”‚
โ”‚                                                                          โ”‚
โ”‚  5. Pod ์žฌ์ƒ์„ฑ ํ™•์ธ                                                      โ”‚
โ”‚     โ””โ”€โ–ถ kubectl rollout status deploy/<name> -n <ns> --timeout=120s    โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Step 1-2: CI ๋กœ๊ทธ ํ™•์ธ (๋กœ์ปฌ์—์„œ)

# ์ตœ๊ทผ CI ์‹คํ–‰ ๋ชฉ๋ก ํ™•์ธ
gh run list --limit 5

# ํŠน์ • ์‹คํ–‰์˜ ์ƒ์„ธ ์ •๋ณด ๋ฐ ๋นŒ๋“œ๋œ ์•ฑ ํ™•์ธ
gh run view <run-id>

# ๋กœ๊ทธ์—์„œ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€ ํ™•์ธ
gh run view <run-id> --log | grep -E "Successfully built|Pushing|docker.io/mng990"

# jobs ํ™•์ธ (์–ด๋–ค ์•ฑ์ด ๋นŒ๋“œ๋˜์—ˆ๋Š”์ง€)
gh run view <run-id> --json jobs --jq '.jobs[] | select(.conclusion=="success") | .name'

Step 3-5: ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ˜์˜ (๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ)

# SSH ์ ‘์†
ssh -i ~/.ssh/sesacthon.pem ubuntu@13.209.44.249

# ArgoCD Application ๋ผ๋ฒจ๋กœ Hard Refresh (๋นŒ๋“œ๋œ ์•ฑ๋งŒ)
kubectl label application -n argocd dev-api-chat argocd.argoproj.io/refresh=hard --overwrite
kubectl label application -n argocd dev-chat-worker argocd.argoproj.io/refresh=hard --overwrite

# Deployment ์‚ญ์ œ (Self-Heal๋กœ ์ƒˆ ์ด๋ฏธ์ง€ Pull)
kubectl delete deploy chat-api -n chat
kubectl delete deploy chat-worker -n chat

# Pod ์žฌ์ƒ์„ฑ ๋Œ€๊ธฐ
kubectl rollout status deploy/chat-api -n chat --timeout=120s
kubectl rollout status deploy/chat-worker -n chat --timeout=120s

# ์ƒˆ ์ด๋ฏธ์ง€ digest ํ™•์ธ
kubectl get pods -n chat -o jsonpath='{range .items[*]}{.metadata.name}: {.status.containerStatuses[0].imageID}{"\n"}{end}'

ArgoCD Application ์ด๋ฆ„ ๊ทœ์น™

์•ฑArgoCD ApplicationNamespace
chat-apidev-api-chatchat
chat-workerdev-chat-workerchat
scan-apidev-api-scanscan
scan-workerdev-scan-workerscan
auth-apidev-api-authauth
character-apidev-api-charactercharacter
location-apidev-api-locationlocation

์™œ Deployment๋ฅผ ์‚ญ์ œํ•˜๋Š”๊ฐ€?

  • ์ด๋ฏธ์ง€ ํƒœ๊ทธ๊ฐ€ latest์ด๋ฏ€๋กœ digest๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ํƒœ๊ทธ๋Š” ๋™์ผ
  • ArgoCD๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๊ธฐ์ค€์ด๋ผ ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋งŒ ๋ณด๋ฉด ๋ณ€๊ฒฝ ์—†์Œ
  • Deployment ์‚ญ์ œ โ†’ Self-Heal ํ™œ์„ฑํ™” ์‹œ ArgoCD๊ฐ€ ์žฌ์ƒ์„ฑ โ†’ ์ƒˆ ์ด๋ฏธ์ง€ Pull

Pod ์ƒํƒœ ํ™•์ธ

# Pod ๋ชฉ๋ก (์ƒํƒœ ํฌํ•จ)
kubectl get pods -n eco2

# Pod ์ƒ์„ธ ์ •๋ณด (์ด๋ฒคํŠธ ํฌํ•จ)
kubectl describe pod <pod-name> -n eco2

# Pod ๋กœ๊ทธ
kubectl logs <pod-name> -n eco2 --tail=100 -f

# ์ด์ „ ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ (์žฌ์‹œ์ž‘๋œ ๊ฒฝ์šฐ)
kubectl logs <pod-name> -n eco2 --previous

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ์ง„๋‹จ

# CrashLoopBackOff
kubectl logs <pod-name> -n eco2 --previous
kubectl describe pod <pod-name> -n eco2 | grep -A 10 "Events:"

# ImagePullBackOff
kubectl describe pod <pod-name> -n eco2 | grep -A 5 "Image:"

# Pending ์ƒํƒœ
kubectl describe pod <pod-name> -n eco2 | grep -A 10 "Events:"
kubectl get events -n eco2 --sort-by='.lastTimestamp'

์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น…

# Pod ๋‚ด๋ถ€ ์‰˜ ์ ‘์†
kubectl exec -it <pod-name> -n eco2 -- /bin/sh

# ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์ ‘์† (multi-container)
kubectl exec -it <pod-name> -c <container-name> -n eco2 -- /bin/sh

# ์ž„์‹œ ๋””๋ฒ„๊ทธ ์ปจํ…Œ์ด๋„ˆ
kubectl debug -it <pod-name> -n eco2 --image=busybox

Ecoยฒ ๋ผ๋ฒจ ์ •์ฑ…

ํ•ต์‹ฌ ๋ผ๋ฒจ

๋ผ๋ฒจ๊ฐ’์šฉ๋„
app์„œ๋น„์Šค๋ช…Pod selector
domainauth, chat, scan, character, location์„œ๋น„์Šค ๋„๋ฉ”์ธ
tierbusiness-logic, worker, integration, data์•„ํ‚คํ…์ฒ˜ ๊ณ„์ธต
versionv1, v2Canary/Istio ๋ผ์šฐํŒ…
environmentdev, prodํ™˜๊ฒฝ ๊ตฌ๋ถ„

๋ผ๋ฒจ ๊ธฐ๋ฐ˜ ์กฐํšŒ (์ž์ฃผ ์‚ฌ์šฉ)

# ๊ณ„์ธต๋ณ„ ์กฐํšŒ
kubectl get pods -l tier=business-logic -A    # API ์„œ๋น„์Šค
kubectl get pods -l tier=worker -A            # ์›Œ์ปค
kubectl get pods -l tier=integration -A       # Event Router, SSE
kubectl get pods -l tier=data -A              # Redis, PostgreSQL

# ๋„๋ฉ”์ธ๋ณ„ ์กฐํšŒ
kubectl get pods -l domain=chat -A            # Chat ๊ด€๋ จ ์ „์ฒด
kubectl get pods -l domain=scan -A            # Scan ๊ด€๋ จ ์ „์ฒด
kubectl get pods -l domain=character -A       # Character ์„œ๋น„์Šค

# Canary ๋ฐฐํฌ ํ™•์ธ
kubectl get pods -l version=v2 -A             # Canary ๋ฒ„์ „๋งŒ

# ํ™˜๊ฒฝ๋ณ„ ์กฐํšŒ
kubectl get pods -l environment=dev -A
kubectl get pods -l environment=prod -A

Ecoยฒ ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธNamespacetierdomain
chat-apichatbusiness-logicchat
chat-workerchatworkerchat
event-routerevent-routerintegrationevent-router
sse-gatewaysse-consumerintegrationsse
character-apicharacterbusiness-logiccharacter
location-apilocationbusiness-logiclocation
scan-apiscanbusiness-logicscan
scan-workerscanworkerscan
auth-apiauthbusiness-logicauth

Reference Files

๋””๋ฒ„๊น…

์ธํ”„๋ผ/๋ฐฐํฌ

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด

# ์ „์ฒด ๋ฆฌ์†Œ์Šค ์ƒํƒœ
kubectl get all -n eco2

# ์ตœ๊ทผ ์ด๋ฒคํŠธ
kubectl get events -n eco2 --sort-by='.lastTimestamp' | tail -20

# ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰
kubectl top pods -n eco2

# ConfigMap/Secret ํ™•์ธ
kubectl get configmap -n eco2
kubectl get secret -n eco2

Score

Total Score

60/100

Based on repository quality metrics

โœ“SKILL.md

SKILL.mdใƒ•ใ‚กใ‚คใƒซใŒๅซใพใ‚Œใฆใ„ใ‚‹

+20
โœ“LICENSE

ใƒฉใ‚คใ‚ปใƒณใ‚นใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

+10
โ—‹่ชฌๆ˜Žๆ–‡

100ๆ–‡ๅญ—ไปฅไธŠใฎ่ชฌๆ˜ŽใŒใ‚ใ‚‹

0/10
โ—‹ไบบๆฐ—

GitHub Stars 100ไปฅไธŠ

0/15
โ—‹ๆœ€่ฟ‘ใฎๆดปๅ‹•

3ใƒถๆœˆไปฅๅ†…ใซๆ›ดๆ–ฐใŒใ‚ใ‚‹

0/10
โ—‹ใƒ•ใ‚ฉใƒผใ‚ฏ

10ๅ›žไปฅไธŠใƒ•ใ‚ฉใƒผใ‚ฏใ•ใ‚Œใฆใ„ใ‚‹

0/5
โœ“Issue็ฎก็†

ใ‚ชใƒผใƒ—ใƒณIssueใŒ50ๆœชๆบ€

+5
โœ“่จ€่ชž

ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

+5
โ—‹ใ‚ฟใ‚ฐ

1ใคไปฅไธŠใฎใ‚ฟใ‚ฐใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

0/5

Reviews

๐Ÿ’ฌ

Reviews coming soon