[go: nahoru, domu]

Skip to content

μ‚¬μ΄λ“œν”½πŸ‘€ λ°±μ—”λ“œ λ ˆν¬μ§€ν† λ¦¬

License

Notifications You must be signed in to change notification settings

yenzip/sidepeek_backend

Β 
Β 

Repository files navigation

image

Note

μ‚¬μ΄λ“œν”½ Backend λ ˆν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€!

μ‚¬μ΄λ“œν”½(Side Peek)πŸ‘€μ€ λ‹€λ₯Έ κ°œλ°œμžλ“€μ˜ μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμ—μ„œ μΈμ‚¬μ΄νŠΈλ₯Ό μ–»κ³  싢은 κ°œλ°œμžλ“€μ„ μœ„ν•œ μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈ 곡유 ν”Œλž«νΌμž…λ‹ˆλ‹€.

πŸ‘₯ ꡬ성원

Important

총 3λͺ…μ˜ κ΅¬μ„±μ›μœΌλ‘œ 2024λ…„ 2μ›” 1일뢀터 λ°±μ—”λ“œ κ°œλ°œμ„ μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이세희 μ •μ˜μ§„ μ—„μ˜ˆλ¦Ό
@Sehee-Lee-01 @uijin-j @yenzip

πŸͺ„ νŒ€ λ¬Έν™”

1. λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ ν•΄κ²°λ°©μ•ˆ κΈ°λ‘ν•˜κ³  κ³΅μœ ν•˜μžπŸš¨

  • νŒ€ λ‚΄μ—μ„œ μƒˆλ‘œ 배운 λ‚΄μš©, νŠΈλŸ¬λΈ” μŠˆνŒ…μ„ λ…Έμ…˜μ— κΈ°λ‘ν•΄μ„œ κ³΅μœ ν•˜κ³  μžˆμ–΄μš”.

2. 우리만의 λ°©μ‹μœΌλ‘œ κ°œλ°œν•΄λ³΄μžπŸ« 

  • 지속적인 회의λ₯Ό 톡해 우리 νŒ€λ§Œμ˜ 룰을 λ§Œλ“€μ–΄μ„œ κ°œλ°œν•˜κ³  μžˆμ–΄μš”.

πŸ“ 개발 μ»¨λ²€μ…˜

1. Github Flow μ „λž΅ λ„μž… 및 Github Action을 ν†΅ν•œ CI/CD

  • κΈ°λŠ₯ 개발, 버그 ν”½μŠ€ λ“± μ†ŒμŠ€μ½”λ“œ 변경이 ν•„μš”ν•  λ•Œ μƒˆλ‘œμš΄ 브랜치(ex. feat#1-xxxx) 생성 ν›„ 개발 ν™˜κ²½(dev) λ“±μ˜ Backbone λΈŒλžœμΉ˜μ— Merge
  • CI ν…ŒμŠ€νŠΈ 톡과 ν›„, μ΅œμ†Œ 1λͺ…μ—κ²Œ Approve λ°›κ³  Merge ν•˜κΈ°(@yenzip CI μ„€μ •)
  • 일주일에 ν•œ λ²ˆμ”© 배포 ν™˜κ²½(main) λΈŒλžœμΉ˜μ— dev 브랜치 Merge ν•˜κΈ°(@uijin-j CD μ„€μ •)

2. μ½”λ“œ μŠ€νƒ€μΌ

  • CheckStyle λ„μž…ν•˜μ—¬ build μ‹€ν–‰λ§ˆλ‹€ μ½”λ“œ μ»¨λ²€μ…˜ 확인 및 관리(@uijin-j μ„€μ •)
  • ꡬ글 μžλ°” μ»¨λ²€μ…˜ λ„μž…(Indent, Javadoc λ“± νŒ€ 상황에 맞게 일뢀 μˆ˜μ •)
  • κ·Έ μ™Έ 컀밋 μ»¨λ²€μ…˜, μ• λ„ˆν…Œμ΄μ…˜ μˆœμ„œ, μƒμ„±μž, λ©”μ„œλ“œ λ„€μž„ λ“± νŒ€ λ°©ν–₯성에 맞게 μ„€μ •

3. ν…ŒμŠ€νŠΈ

  • JaCoCo λ„μž…μœΌλ‘œ build μ‹€ν–‰λ§ˆλ‹€ ν…ŒμŠ€νŠΈ 컀버리지 확인 및 관리(@Sehee-Lee-01 μ„€μ •)
  • Service λ ˆμ΄μ–΄ μ€‘μ‹¬μœΌλ‘œ ν…ŒμŠ€νŠΈ 컀버리지 μ΅œμ†Œ 90% 이상 λ˜λ„λ‘ μž‘μ„±

πŸ› οΈ 기술 μŠ€νƒ

  • Language: JAVA 17
  • Server: Spring Boot 3.2.2, Spring Security
  • ORM: Spring Data JPA, QueryDSL
  • API Docs: Swagger
  • DB: Flyway, MySQL, Redis
  • Infra: Docker, GiHub Action, AWS(EC2, S3, RDS, CodeDeploy, ElasticCache, ACM, Route 53, IAM)
  • Test: JUnit5, Mockito, Data Faker
  • Etc: Slack API Client, Sentry

⭐ 핡심 κΈ°λŠ₯

1. κ²Œμ‹œκΈ€

  • κ²Œμ‹œκΈ€
    • 생성
      • ν”„λ‘œμ νŠΈ 상세 정보(주제, μš”μ•½, 링크, κΈ°λŠ₯ μ„€λͺ… λ“±)λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • κΈ°μˆ μŠ€νƒ 데이터λ₯Ό κ²€μƒ‰ν•΄μ„œ λ“±λ‘ν•©λ‹ˆλ‹€.
      • νšŒμ› λ‹‰λ„€μž„μ„ κ²€μƒ‰ν•˜μ—¬ ν”„λ‘œμ νŠΈ λ©€λ²„λ‘œ λ“±λ‘ν•©λ‹ˆλ‹€. λΉ„νšŒμ› λ©€λ²„λŠ” μž„μ˜λ‘œ 이름을 μΆ”κ°€ν•©λ‹ˆλ‹€.
    • μˆ˜μ •
      • ν”„λ‘œμ νŠΈ μž‘μ„±μžμ™€ λ©€λ²„λ§Œ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • ν”„λ‘œμ νŠΈ 상세 정보(주제, μš”μ•½, 링크, κΈ°λŠ₯ μ„€λͺ… λ“±)λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • κΈ°μˆ μŠ€νƒ 데이터λ₯Ό κ²€μƒ‰ν•΄μ„œ λ“±λ‘ν•©λ‹ˆλ‹€.
      • νšŒμ› λ‹‰λ„€μž„μ„ κ²€μƒ‰ν•˜μ—¬ ν”„λ‘œμ νŠΈ λ©€λ²„λ‘œ λ“±λ‘ν•©λ‹ˆλ‹€. λΉ„νšŒμ› λ©€λ²„λŠ” μž„μ˜λ‘œ 이름을 μΆ”κ°€ν•©λ‹ˆλ‹€.
    • μ‚­μ œ
      • ν”„λ‘œμ νŠΈ μž‘μ„±μžλ§Œ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 단건 쑰회
      • ν”„λ‘œμ νŠΈμ— λŒ€ν•œ 상세정보, λŒ“κΈ€, 쑰회수 등을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
      • ν”„λ‘œμ νŠΈλ₯Ό μ‘°νšŒν•˜λ©΄ μ‘°νšŒμˆ˜κ°€ μ˜¬λΌκ°‘λ‹ˆλ‹€.
    • λͺ©λ‘ 쑰회 및 검색
      • ν•„ν„°λ‘œ μ›ν•˜λŠ” 쑰건의 ν”„λ‘œμ νŠΈλ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ’‹μ•„μš”
      • νšŒμ›μ€ ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈμ— μ’‹μ•„μš”λ₯Ό ν•œ 번 λˆ„λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λŒ“κΈ€
    • 생성
      • λŒ“κΈ€μ— λŒ€λŒ“κΈ€μ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
      • 읡λͺ… λŒ“κΈ€λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μˆ˜μ •
      • μž‘μ„±μžλ§Œμ΄ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ‚­μ œ
      • μž‘μ„±μžλ§Œμ΄ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. νšŒμ›(μ‚¬μš©μž)

  • νšŒμ›κ°€μž…
    • μ΄λ©”μΌλ‘œ νšŒμ›κ°€μž…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 둜그인
    • 이메일 λ‘œκ·ΈμΈμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ†Œμ…œ 둜그인(κΉƒν—ˆλΈŒ)을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œν•„ μˆ˜μ •
    • νšŒμ›μ˜ 상세정보(ν”„λ‘œν•„ 이미지, μ†Œκ°œκΈ€, 직ꡰ, κ²½λ ₯, 기술 μŠ€νƒ λ“±)λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œν•„ 쑰회
    • νšŒμ› κ΄€λ ¨ 상세 μ •λ³΄ν”„λ‘œν•„ 이미지, μ†Œκ°œκΈ€, 직ꡰ, κ²½λ ₯, 기술 μŠ€νƒ λ“±)λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • νšŒμ› κ΄€λ ¨ ν”„λ‘œμ νŠΈ 정보λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • νšŒμ›μ΄ μž‘μ„±ν•œ ν”„λ‘œμ νŠΈ, λ©€λ²„λ‘œ μ°Έμ—¬ν•œ ν”„λ‘œμ νŠΈ, λŒ“κΈ€ 단 ν”„λ‘œμ νŠΈλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ—οΈ 아킀텍쳐

μ—­ν•  뢄리, 가독성에 μ΄ˆμ μ„ 두고 개발 진행

  • μ™ΈλΆ€ μ˜μ‘΄μ„± μΆ”κ°€μ‹œ Config Class μ •μ˜
    • Configλ₯Ό 톡해 μΆ”ν›„ μ™ΈλΆ€ μ˜μ‘΄μ„±μ„ μ„ νƒμ μœΌλ‘œ 뢈러올 수 μžˆλŠ” ν™˜κ²½μ„ ꡬ성
  • 도메인별 νŒ¨ν‚€μ§€ ꡬ성
    • λ³΅μž‘ν•œ μ„œλΉ„μŠ€ ꡬ쑰λ₯Ό λ‹¨μˆœν™”ν•˜κ³  가독성을 λ†’μ΄κ³ μž 도메인별 νŒ¨ν‚€μ§€ 뢄리
  • 클래슀 μ•ˆμ˜ 역할을 μ΅œμ†Œν™”ν•˜κ³ μž Validator, Constant, ErrorMessage 클래슀 κ΅¬ν˜„ 및 적용 β‡’ 덕뢄에 μ½”λ“œ μˆ˜μ •μ΄ λ”μš± κ°„νŽΈν•΄μ§
    • ex) κΈ°νšμ—μ„œ λ‹‰λ„€μž„ μ΅œλŒ€ 길이 λ³€κ²½ β†’ λ‹‰λ„€μž„ μ΅œλŒ€κΈΈμ΄λ₯Ό μ •μ˜ν•˜λŠ” μƒμˆ˜ κ°’λ§Œ λ°”κΎΈλ©΄ μ „μ—­μœΌλ‘œ μˆ˜μ •λœλ‹€.(λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ΅¬ν˜„ λ©”μ„œλ“œ, Swagger, ν…ŒμŠ€νŠΈ μ½”λ“œ λ“±)

인프라

  • AWS DEV, PROD ν™˜κ²½ 뢄리
    • PROD ν™˜κ²½μ€ μ„œλΈŒλ„· κ΅¬μ„±ν•˜μ—¬ RDS μ™ΈλΆ€ μ ‘κ·Ό μ œν•œ
  • CodeDeploy μ„€μ •μœΌλ‘œ CD κ΅¬ν˜„

🚨 κ°œμ„  사항 및 νŠΈλŸ¬λΈ”μŠˆνŒ…

1. 세희

βœ… μ˜ˆμ™Έ 인지 μ‹œκ°„ 단좕
  • 상황: κΈ°μ‘΄ Prod(운영), Dev(개발) μ„œλ²„μ—μ„œ 핸듀링 λ˜μ§€ μ•Šλ˜ μ˜ˆμ™Έλ‚˜ 핸등링 λ˜λ”λΌλ„ μ„œλ²„ μš΄μ˜μƒ λ¬Έμ œκ°€ μžˆλŠ” μ˜ˆμ™Έλ₯Ό μ‰½κ²Œ μΈμ§€ν•˜κ³ μž Sentrty 연동 및 μ˜ˆμ™Έ μžλ™ μ•Œλ¦Ό μ„€μ • κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

  • 방법

    • Sentryλ₯Ό μ—°λ™ν•˜μ—¬ μ„œλ²„μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έμ˜ 원인을 뢄석할 수 μžˆλ„λ‘ μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

    • Slack API Clientλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό 빨리 인지할 수 μžˆλ„λ‘ μžλ™ Slack μ•Œλ¦ΌμŒ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

  • κ²°κ³Ό: κΈ°μ‘΄μ—λŠ” κ°œλ°œμžκ°€ 직접 λ‘œμ»¬μ—μ„œ ν™•μΈν•˜κ±°λ‚˜ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžλ‘œλΆ€ν„° λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό μ „λ‹¬λ°›μ•˜μ§€λ§Œ Sentrty 연동 및 μžλ™ μ•Œλ¦Ό μ„€μ •μœΌλ‘œ λ™λ£Œλ“€κ³Όμ˜ μ˜ˆμ™Έ λ°œμƒ 상황과 κ΄€λ ¨ν•œ λΆˆν•„μš”ν•œ μ†Œν†΅μ„ 쀄이고 μ˜ˆμ™Έ ν•΄κ²°μ—λ§Œ 집쀑할 수 μžˆλŠ” ν™˜κ²½μ„ μ‘°μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

  • 배운점: μ˜ˆμ™Έ μ•Œλ¦Όμ„ μ„€μ •ν•˜λ©΄μ„œ κ°œλ°œμžκ°€ μΈμ§€ν•˜κ³  κ³§λ°”λ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•­ μ˜ˆμ™Έ, μ‚¬μš©μž λ‹¨μ—μ„œ ν•΄κ²°ν•  수 μžˆλŠ” μ˜ˆμ™Έ 등을 κ΅¬λΆ„ν•˜λ©΄μ„œ μ„œλ²„ μ˜ˆμ™Έ μ²˜λ¦¬μ— λŒ€ν•œ 생각을 λ˜μ§šμ–΄λ³Ό 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

  • λΈ”λ‘œκ·Έ

βœ… ν…ŒμŠ€νŠΈ μ½”λ“œ 쀑볡 κ°œμ„ 
  • 상황: 각 ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œ Entity, Dto, κ°’ 생성 μ½”λ“œ 쀑볡이 λ°œμƒν•˜λŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. μ„œλΉ„μŠ€ νŠΉμ„±μƒ Entity의 속성이 λ§Žμ•˜κΈ° λ•Œλ¬Έμ— μƒμ„±μžκ°€ κΈ΄ 것이 μ›μΈμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ„œλΉ„μŠ€ λ‘œμ§λ„ λ³΅μž‘ν•˜μ—¬ ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ κΈΈμ–΄μ§€λ‹ˆ 가독성이 점점 μ•ˆμ’‹μ•„μ‘ŒμŠ΅λ‹ˆλ‹€.

  • 방법: 각각 ν…ŒμŠ€νŠΈ ν΄λž˜μŠ€μ—μ„œ μ€‘λ³΅λ˜λŠ” μ½”λ“œλ₯Ό μ°Ύμ•„μ„œ ν…ŒμŠ€νŠΈ ν™˜κ²½ μ „μ—­μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” static λ©”μ„œλ“œλ‘œ μ •μ˜ν•˜κ³  μ΄λŸ¬ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” ν…ŒμŠ€νŠΈ Fixture 제곡 ν΄λž˜μŠ€πŸ”—λ₯Ό κ΅¬ν˜„ν•˜μ—¬ νŒ€μ›λ“€μ—κ²Œ μ‚¬μš©λ²•μ„ κ³΅μœ ν–ˆμŠ΅λ‹ˆλ‹€. 이후 νŒ€μ›λ“€κ³Ό ν•¨κ»˜ Fixture 클래슀λ₯Ό κ΅¬ν˜„ν•΄λ‚˜κ°€λ©΄μ„œ 쀑볡을 μ€„μ˜€μŠ΅λ‹ˆλ‹€.

  • κ²°κ³Ό: 각 ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œ λŒ€λž΅ 633쀄 μ΄μƒμ˜ μ½”λ“œ 쀑볡을 μ€„μž„μœΌλ‘œμ¨ 가독성을 확보할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ„œλΉ„μŠ€ 둜직 ν…ŒμŠ€νŠΈμ—λ§Œ 집쀑할 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • 배운점: λ‹¨μœ„ ν…ŒμŠ€νŠΈ 원칙(FIRST)μ—μ„œμ˜ FastλŠ” ν…ŒμŠ€νŠΈ μ‹€ν–‰ μ‹œκ°„μ„ μ΄μ•ΌκΈ°ν•˜μ§€λ§Œ μ‹€μ§ˆμ μœΌλ‘œ κ°œλ°œμžκ°€ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό ν•΄μ„ν•˜κ³  μž‘μ„±ν•˜λŠ” μ‹œκ°„λ„ μ€‘μš”ν•˜λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

2. μ˜μ§„

3. 예림

πŸ’Ώ ERD

πŸ“  API λͺ©λ‘

인증/인가 API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
POST /auth/reissue Access/Refresh Token μž¬λ°œκΈ‰ @uijin-j
POST /auth/me Access Token 검증 @uijin-j
POST /auth/login 이메일 둜그인(κΈ°λ³Έ 둜그인) @uijin-j
POST /auth/login/{provider} μ†Œμ…œ 둜그인 @uijin-j

νšŒμ› API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
GET /users/{id} νšŒμ› ν”„λ‘œν•„ 상세 정보 쑰회 @Sehee-Lee-01
GET /users/{id}/projects νšŒμ› κ΄€λ ¨ ν”„λ‘œμ νŠΈ 쑰회(μ°Έμ—¬/μ’‹μ•„μš”/λŒ“κΈ€) @uijin-j
GET /users/nickname νšŒμ› λ‹‰λ„€μž„ 검색 @Sehee-Lee-01
POST /users νšŒμ› κ°€μž… @uijin-j
POST /users/nickname/check λ‹‰λ„€μž„ 쀑볡 확인 @uijin-j
POST /users/email/check 이메일 쀑볡 확인 @uijin-j
PUT /users/{id} νšŒμ› ν”„λ‘œν•„ 상세 정보 μˆ˜μ • @Sehee-Lee-01
PUT /users/{id}/password λΉ„λ°€λ²ˆν˜Έ μˆ˜μ • @uijin-j

ν”„λ‘œμ νŠΈ(κ²Œμ‹œκΈ€) API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
GET /projects ν”„λ‘œμ νŠΈ 전체 쑰회(검색) @yenzip
GET /projects/{id} ν”„λ‘œμ νŠΈ 상세 쑰회(쑰회수, μ’‹μ•„μš” 수, λŒ“κΈ€/λŒ€λŒ“κΈ€) @yenzip
GET /projects/weekly μ§€λ‚œ μ£Ό 인기 ν”„λ‘œμ νŠΈ 쑰회(μ΅œλŒ€ 5개) @Sehee-Lee-01
POST /projects ν”„λ‘œμ νŠΈ 생성 @Sehee-Lee-01
PUT /projects ν”„λ‘œμ νŠΈ μˆ˜μ • @Sehee-Lee-01
DELETE /projects ν”„λ‘œμ νŠΈ μ‚­μ œ @Sehee-Lee-01

λŒ“κΈ€ API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
POST /comments λŒ“κΈ€ 생성 @Sehee-Lee-01
PUT /comments/{id} λŒ“κΈ€ μˆ˜μ • @Sehee-Lee-01
DELETE /comments/{id} λŒ“κΈ€ μ‚­μ œ @Sehee-Lee-01

μ’‹μ•„μš” API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
POST /likes μ’‹μ•„μš” 생성 @yenzip
DELETE /likes/{id} μ’‹μ•„μš” μ‚­μ œ @yenzip

λ―Έλ””μ–΄(파일) API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
POST /files 이미지 파일 μ—…λ‘œλ“œ @Sehee-Lee-01

κΈ°μˆ μŠ€νƒ API

Method PATH μ„€λͺ… λ‹΄λ‹Ή
GET /skills κΈ°μˆ μŠ€νƒ 검색 @Sehee-Lee-01

κ΄€λ ¨ 링크

About

μ‚¬μ΄λ“œν”½πŸ‘€ λ°±μ—”λ“œ λ ˆν¬μ§€ν† λ¦¬

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Java 99.9%
  • Shell 0.1%