Skip to content

sparta-MOIM/MOIM-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

782 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🐧 λŒ€κ·œλͺ¨ λͺ¨μž„ 관리 μ‹œμŠ€ν…œ - MOIM

λŒ€κ·œλͺ¨ λͺ¨μž„μ˜ 인원관리, μΌμ •μ‘°μœ¨, μ†Œν†΅μ„ 효율적으둜 λ„μ™€μ£ΌλŠ” MSA 기반 λͺ¨μž„ 톡합 관리 μ„œλΉ„μŠ€
개발 κΈ°κ°„ : 2025.04 ~ 2025.05


μ„œλΉ„μŠ€ μ†Œκ°œ



🎯 Members (νŒ€μ› 및 νŒ€ μ†Œκ°œ)

κΉ€ν˜•μ£Ό λ°•μš©ν›ˆ μ΅œμ§„μ˜ κΉ€λŒ€μ—° λ°•κ·œμ›
κ²Œμ‹œκΈ€, 일정 μ†Œλͺ¨μž„, μ„Έμ…˜ νšŒμ› μ•Œλ¦Ό, λͺ¨μž„ μ±„νŒ…, λŒ“κΈ€
Lead Tech Lead BE BE BE


✨ Getting Started (μ„œλΉ„μŠ€ URL 및 API λͺ…μ„Έμ„œ)

  • μ„œλΉ„μŠ€ URL : https://moim.agong.store
  • API : (wiki에 λ¬Έμ„œν™”ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.)


πŸ§‘β€πŸ’» About Project

🧩 μ„œλ²„ μ•„ν‚€ν…μ²˜

μ„œλΉ„μŠ€ μ†Œκ°œ


ν”„λ‘œμ νŠΈ λͺ©μ 

  • λŒ€κ·œλͺ¨ λͺ¨μž„ 관리λ₯Ό 보닀 쉽고 νŽΈν•˜κ²Œ λ„μ™€μ£ΌλŠ” μ„œλΉ„μŠ€ μž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ μ„€λͺ…

  • λͺ¨λ“  인원이 곡지λ₯Ό 확인할 수 μžˆλ„λ‘ 주기적으둜 μ•ŒλžŒμ„ 보내주고, μ„ μ°©μˆœ μ„Έμ…˜, μ±„νŒ…, νˆ¬ν‘œ λ“±μ˜ 뢀가적인 κΈ°λŠ₯을 톡해 λͺ¨μž„을 관리λ₯Ό μˆ˜μ›”ν•˜κ²Œ ν•  수 μžˆλ„λ‘ μ§€μ›ν•΄μ€λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ ꡬ성

  • νšŒμ›, μ„Έμ…˜, μ•Œλ¦Ό, μ±„νŒ…, λͺ¨μž„, μ†Œλͺ¨μž„, κ²Œμ‹œκΈ€, λŒ“κΈ€, 일정 λ„λ©”μΈμœΌλ‘œ 이루어져 있으며, μ„œλΉ„μŠ€ κ°„μ˜ 톡신은 FeignClient둜 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. λ˜ν•œ Kafkaλ₯Ό μ‚¬μš©ν•˜μ—¬ 이벀트 기반 μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μ„±ν•˜μ˜€μœΌλ©°, OpenTelemetryλ₯Ό ν†΅ν•˜μ—¬ λͺ¨λ“  λ‘œκ·Έλ“€μ„ 효율적으둜 μˆ˜μ§‘ν•˜μ˜€μœΌλ©°, 뢄산좔적을 μˆ˜ν–‰ν•˜μ˜€κ³ , Grafana둜 μ‹œκ°ν™”λ₯Ό μ§„ν–‰ν•˜μ—¬ 지속적인 λͺ¨λ‹ˆν„°λ§μ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

아킀텍쳐 μ„€λͺ…

  • MSA 기반이며, 각 μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€λ“€μ€ AWS ECS μ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€. μ  ν‚¨μŠ€λ₯Ό ν†΅ν•œ CI/CD νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν•˜μ˜€μŠ΅λ‹ˆλ‹€. RDBλŠ” MySQL을 μ‚¬μš©ν•˜μ˜€κ³ , AWS RDS에 DBμ„œλ²„λ₯Ό κ΅¬μΆ•ν•˜μ˜€μŠ΅λ‹ˆλ‹€. NoSQL인 Redis와 MongoDBλŠ” AWS EC2에 κ΅¬μΆ•ν•˜μ˜€μŠ΅λ‹ˆλ‹€. Kafka/Zookeeper, Prometheus, Grafana, Grafana Tempo, Grafana Loki, OpenTelemetryλŠ” AWS EC2에 λ°°ν¬ν™˜κ²½μ„ κ΅¬μΆ•ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


πŸ”‘ Key Features (μ£Όμš” κΈ°λŠ₯)

  • νšŒμ›:

    • νšŒμ›κ°€μž…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.username은 μœ λ‹ˆν¬ν•˜λ©°, passwordλŠ” μΈμ½”λ”©λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€.
    • 둜그인/λ‘œκ·Έμ•„μ›ƒμ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. 둜그인 μ‹œ JWTλ₯Ό μΏ ν‚€λ‘œ λ°œκΈ‰ν•˜κ³ , λ‘œκ·Έμ•„μ›ƒ μ‹œ μΏ ν‚€λ₯Ό λ§Œλ£Œμ‹œν‚΅λ‹ˆλ‹€.
    • κ²Œμ΄νŠΈμ›¨μ΄λ‘œλΆ€ν„° 인증 μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, 검증을 μˆ˜ν–‰ν•œ λ’€ Passportλ₯Ό λ°œκΈ‰ν•©λ‹ˆλ‹€. PassportλŠ” 각 μ„œλΉ„μŠ€μ—μ„œ ν˜„μž¬ μš”μ²­μ˜ μœ μ € μ •λ³΄λ‘œ ν™œμš©λ©λ‹ˆλ‹€.
    • νšŒμ› 쑰회, μˆ˜μ •, μ‚­μ œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μ„Έμ…˜:

    • μ„Έμ…˜ 생성/μˆ˜μ •μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • μ„Έμ…˜μ— μ°Έμ—¬/λ‚˜κ°€κΈ°κ°€ κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • μ„Έμ…˜ 생성을 ν•˜κ²Œ 되면 λͺ¨μž„ - λ§€λ‹ˆμ €κ°€ μŠΉμΈμ„ μ‹œμΌœ μ„Έμ…˜μ„ ν™œμ„±ν™”κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • λ‹€μˆ˜μ˜ μ‚¬μš©μžκ°€ λ™μ‹œμ— μž…μž₯ν•  수 μžˆλ„λ‘ λ£¨μ•„μŠ€ν¬λ¦½νŠΈλ₯Ό 톡해 μ›μžμ„±μ„ μ œμ–΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • μ•Œλ¦Ό:

    • λ‹€μ–‘ν•œ μ„œλΉ„μŠ€λ‘œλΆ€ν„° λ°œμƒν•œ 이벀트λ₯Ό μˆ˜μ‹ ν•˜μ—¬ μ•Œλ¦Όμ„ μƒμ„±ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λͺ¨μž„ κ°€μž… μ‹ μ²­, 승인 λ“±μ˜ 이벀트λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • 이벀트 νƒ€μž…μ— 따라 사전에 μ •μ˜λœ μ•Œλ¦Ό ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ 전달할 μ•Œλ¦Ό λ©”μ‹œμ§€λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
    • μƒμ„±λœ μ•Œλ¦Όμ€ DB에 μ €μž₯되며, 각 μ•Œλ¦Όμ€ 읽음/μ•ˆμ½μŒ μƒνƒœλ₯Ό 톡해 κ΅¬λΆ„λ©λ‹ˆλ‹€. 이λ₯Ό 기반으둜 ν•„ν„°λ§λœ μ•Œλ¦Ό μ‘°νšŒκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • λ‹€μ–‘ν•œ μ•Œλ¦Ό μœ ν˜•μ΄ μ „λž΅ νŒ¨ν„΄ 기반으둜 κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄ μƒˆλ‘œμš΄ μ•Œλ¦Ό νƒ€μž…μ΄ μ‰½κ²Œ ν™•μž₯ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μ±„νŒ…:

    • ws-stompλ₯Ό 톡해 μ‹€μ‹œκ°„ μ±„νŒ…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. (1λŒ€1 μ±„νŒ…κ³Ό 1λŒ€N μ±„νŒ…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€)
    • Kafkaλ₯Ό μ±„νŒ… 브둜컀둜 μ‚¬μš©ν•˜μ—¬, λŒ€μš©λŸ‰ μ±„νŒ… νŠΈλž˜ν”½μ„ κ²¬λ”œ 수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • κΈ°νšμƒμœΌλ‘œ, λͺ¨μž„ 1κ°œλ‹Ή μ±„νŒ…λ°©μ„ 1개만 생성할 수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμ§€λ§Œ, μΆ”ν›„ ν™•μž₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • λͺ¨μž„:

    • μ‚¬μš©μžλŠ” μƒˆλ‘œμš΄ λͺ¨μž„을 생성할 수 있으며, λͺ¨μž„ 이름, μ„€λͺ…, λͺ¨μ§‘ 쑰건 λ“± λ‹€μ–‘ν•œ 정보λ₯Ό μž…λ ₯ν•˜μ—¬ κ°œμ„€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ‚¬μš©μžλŠ” 관심 μžˆλŠ” λͺ¨μž„에 μ‹ μ²­ν•  수 있고, κ΄€λ¦¬μžλŠ” μ‹ μ²­μžλ₯Ό 승인 λ˜λŠ” κ±°μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 과정은 μ•Œλ¦Ό μ‹œμŠ€ν…œκ³Ό μ—°λ™λ©λ‹ˆλ‹€.
    • κ΄€λ¦¬μžλŠ” λͺ¨μž„에 κ°€μž…λœ λ©€λ²„λ“€μ˜ Role을 λΆ€μ—¬ν•˜κ±°λ‚˜, 멀버λ₯Ό μΆ”κ°€/μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. Role에 따라 μ ‘κ·Ό κΆŒν•œμ΄ κ΅¬λΆ„λ©λ‹ˆλ‹€.
    • λͺ¨μž„ 멀버 정보λ₯Ό μΊμ‹œ(Redis)에 μ €μž₯ν•˜μ—¬ 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œμΌ°μŠ΅λ‹ˆλ‹€. 자주 μ‘°νšŒλ˜λŠ” 멀버 정보 μš”μ²­μ— λΉ λ₯Έ 응닡이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μ†Œλͺ¨μž„:

    • μ†Œλͺ¨μž„ 생성/μˆ˜μ •μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • μ†Œλͺ¨μž„에 μ°Έμ—¬/λ‚˜κ°€κΈ°κ°€ κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • κ²Œμ‹œκΈ€

    • λͺ¨μž„별 κ²Œμ‹œκΈ€ 관리가 κ°€λŠ₯ν•˜λ©°, κ²Œμ‹œκΈ€μ€ ν”Όλ“œ ν˜Ήμ€ νˆ¬ν‘œλ‘œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • κΆŒν•œμ— 따라 κ²Œμ‹œκΈ€ μˆ˜μ • 및 μ‚­μ œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • μ‘°νšŒκ°€ λΉˆλ²ˆν•  κ²ƒμœΌλ‘œ νŒλ‹¨ν•˜μ—¬, CQRSλ₯Ό ν™œμš©ν•˜μ—¬ 읽기 DB(MongoDB)λ₯Ό λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ 쑰회 μ„±λŠ₯을 λ†’μ˜€μŠ΅λ‹ˆλ‹€.
    • DB μ‚¬μ΄μ˜ 데이터 일관성은 이벀트 μ†Œμ‹±μœΌλ‘œ κ΅¬μ„±ν–ˆμœΌλ©°, μ •ν™•νžˆ ν•œλ²ˆμ„ 보μž₯ν•˜κΈ° μœ„ν•΄ OutBoxνŒ¨ν„΄κ³Ό 멱등적 μ†ŒλΉ„μž νŒ¨ν„΄μ„ ν™œμš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    • μΊμ‹œμ™€ 인덱슀λ₯Ό ν™œμš©ν•˜μ—¬ 쑰회 μ„±λŠ₯을 λ”μš± μ΅œμ ν™” κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • λŒ“κΈ€

    • κ²Œμ‹œκΈ€κ³Ό λŒ“κΈ€ 도메인은 λΆ„λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • λΆ€λͺ¨λŒ“κΈ€κ³Ό μžμ‹λŒ“κΈ€μ„ κ΅¬λΆ„ν•˜μ—¬ λŒ“κΈ€κ³Ό λŒ€λŒ“κΈ€μ„ κ΅¬λΆ„μ§€μ—ˆμŠ΅λ‹ˆλ‹€.
    • κ²Œμ‹œλœμ§€ μ‹œκ°„μ΄ μ§€λ‚œ κ²Œμ‹œκΈ€μ˜ λŒ“κΈ€μ€ μˆ˜μ •μ΄ λΉˆλ²ˆν•˜κ²Œ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€κ³  νŒλ‹¨ν•˜μ—¬, λŒ“κΈ€ 쑰회 μ΅œμ ν™”λ₯Ό μœ„ν•΄ 캐싱을 λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    • κ²Œμ‹œκΈ€μ΄ μ‚­μ œλ˜λ©΄, λŒ“κΈ€λ„ λͺ¨λ‘ μ‚­μ œλ˜λŠ” νŠΈλžœμž­μ…˜μ„ κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • 일정

    • λͺ¨μž„별 일정 관리가 κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • λͺ¨μž„μ˜ κΆŒν•œμ— 따라 일정을 μˆ˜μ •ν•˜κ³ , μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“š νŠΈλŸ¬λΈ” μŠˆνŒ…



πŸ’¬ 개발 κ³Όμ •μ—μ„œμ˜ κ³ λ―Ό (κ΅¬ν˜„/둜직/λ¦¬νŒ©ν† λ§)



πŸ“Š ERD

πŸ”— ERDCloud Link

erd


πŸ“ Technology Stack (기술 μŠ€νƒ)

Framework


openJDK Spring Boot Spring
Spring Security Spring Cloud QueryDsl


Database


MySQL Redis Redisson
Lua mongodb
phpMyAdmin RedisInsight mongo-express


Monitoring


Grafana prometheus Grafana Tempo
Grafana Loki opentelemetry


Infra


docker docker compose apachekafka jenkins
amazonec2 amazonecs awsfargate amazonwebservices
amazonrds amazonroute53 nginx nginxproxymanager


🎲 Development Convention (개발 μ»¨λ²€μ…˜)


πŸ“Œ Development Workflow (개발 μ›Œν¬ν”Œλ‘œμš°)

About

🐧 λŒ€κ·œλͺ¨ λͺ¨μž„관리 μ„œλΉ„μŠ€

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages