Skip to content

πŸš€ μ›Ήμ†ŒμΌ“μ„ μ΄μš©ν•œ 아이디어 ν”„λ‘œμ νŠΈ - μ±„νŒ…νŽΈ 2023.12 ~ 2024.4

Notifications You must be signed in to change notification settings

jthugg/websocket-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ μ‹€μ‹œκ°„ 닀쀑 μ±„νŒ… μ„œλΉ„μŠ€

μ›Ή μ†ŒμΌ“μ„ ν™œμš©ν•œ 아이디어 ν”„λ‘œμ νŠΈ - μ±„νŒ… 편

Generic badge Generic badge Generic badge

0. κ°œμš”

μΉ΄μΉ΄μ˜€ν†‘κ³Ό λ””μŠ€μ½”λ“œ μ±„νŒ…λ°©μ„ λͺ¨ν‹°λΈŒλ‘œ μ›Ή μ†ŒμΌ“κ³Ό REST APIλ₯Ό ꡬ성해 λ§Œλ“  μ‹€μ‹œκ°„ 닀쀑 μ±„νŒ… μ„œλ²„ μž…λ‹ˆλ‹€. νšŒμ›μ€ 자유둭게 μ±„νŒ…λ°©μ„ κ°œμ„€ ν•  수 있고 곡개된 λ‹€λ₯Έ μ‚¬λžŒμ˜ μ±„νŒ…λ°©μ— μž…μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ§€λ‚œ CMP ν”„λ‘œμ νŠΈλ₯Ό κ²½ν—˜ν•˜λ©° μ‹€μ‹œκ°„μœΌλ‘œ λ³€ν™”ν•˜λŠ” 정보λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬ν•˜κΈ°μœ„ν•œ μ–‘λ°©ν–₯ 톡신을 μ μš©ν•˜μ§€ λͺ»ν•΄ μ•„μ‰¬μ› λ˜ 기얡이 μžˆμŠ΅λ‹ˆλ‹€. μ›Ή μ†ŒμΌ“μ„ μ΄μš©ν•΄ μ–‘λ°©ν–₯ 톡신을 μ–΄λ–»κ²Œ μ μš©ν•  지 κ³ λ―Όν•˜λ©° μ±„νŒ…, κ°„λ‹¨ν•œ μ›Ή κ²Œμž„, 파일 μ—…λ‘œλ“œ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œμ„ λ– μ˜¬λ ΈμŠ΅λ‹ˆλ‹€. μ–‘λ°©ν–₯ 톡신과 λΆ„μ‚°ν™˜κ²½μ—μ„œ λ©”μ‹œμ§€ 전달 λ“± κΆκΈˆν•œ κΈ°μˆ μ— λŒ€ν•΄ 곡뢀 ν•  수 μžˆμ„ 것 κ°™μ•„ μ›Ή μ±„νŒ… μ„œλ²„λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

1. 섀계

1.1 데이터와 μš”μ²­μ˜ 흐름

123

1.2 μ›Ή μ†ŒμΌ“ λ©”μ‹œμ§€ ν”„λ‘œν† μ½œ λ””μžμΈ

  • μ±„νŒ… λ©”μ‹œμ§€μ˜ 전달과 μ±„νŒ… λ°© 이벀트 λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜κΈ°μœ„ν•œ μ›Ή μ†ŒμΌ“ μ„œλ²„(WebFlux)와 νšŒμ› κ°€μž…, μ±„νŒ… λ°© 생성 λ“± μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ°μœ„ν•œ REST API μ„œλ²„(MVC)λ₯Ό 뢄리해 λ©€ν‹°-λͺ¨λ“ˆ ν”„λ‘œμ νŠΈλ‘œ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ§€λ‚œ 버전 v0.0.1μ—μ„œλŠ” μ›Ή μ†ŒμΌ“ μ„œλ²„λ„ Spring MVC둜 ꡬ성해 STOMPλ₯Ό μ‚¬μš©ν–ˆκ³  미리 κ΅¬ν˜„λœ λ‚΄λΆ€μ˜ 브둜컀λ₯Ό μ΄μš©ν•΄ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” 방식을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. v1.0.0 μ—…κ·Έλ ˆμ΄λ“œ 과정을 거치며 비동기 λ¦¬μ•‘ν‹°λΈŒ ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν•˜κ³ μž μ›Ή μ†ŒμΌ“ μ„œλ²„λ₯Ό WebFlux둜 κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
  • Raw Web-Socket을 μ‚¬μš©ν•˜λ©° 이번 ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš© ν•  자체 ν”„λ‘œν† μ½œμ„ κ°„λ‹¨νžˆ λ””μžμΈν–ˆμŠ΅λ‹ˆλ‹€.

1.3 λ°μ΄ν„°λ² μ΄μŠ€

1.3.1 μ—”ν‹°ν‹° 관계도

  • ERD 상 관계λ₯Ό ν‘œν˜„ν•˜κΈ°μœ„ν•΄ FK 관계λ₯Ό μž…λ ₯ ν–ˆμ§€λ§Œ μ‹€μ œ μŠ€ν‚€λ§ˆμ—λŠ” FKλ₯Ό μ„€μ •ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

1.3.2 μ±„νŒ… λ©”μ‹œμ§€ λ„νλ¨ΌνŠΈ ꡬ쑰

1.3.3 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λΆ„λ¦¬ν•œ 이유

  • λ™μ‹œμ„± 처리의 ν•„μš”μ„±
    • μ±„νŒ… λ°© μ°Έμ—¬μ •λ³΄λŠ” μΌκ΄€λœ 데이터 정합성이 μš”κ΅¬λ©λ‹ˆλ‹€.
    • λ™μ‹œμ— μ±„νŒ… λ°© μž…/퇴μž₯ μš”μ²­μ΄ λͺ°λ Έμ„ 경우 νŠΈλžœμž­μ…˜κ³Ό Lock을 κΈ°λ°˜ν•œ λ™μ‹œμ„± μ²˜λ¦¬κ°€ μš©μ΄ν•©λ‹ˆλ‹€.
  • μ“°κΈ° μ„±λŠ₯의 확보
    • μ±„νŒ… λ©”μ‹œμ§€λŠ” 읽기 μž‘μ—… 만큼 μ“°κΈ° μž‘μ—… λΉˆλ„κ°€ 많이 λ°œμƒν•©λ‹ˆλ‹€.
    • MySQLκ³Ό 같은 RDBMSλŠ” μ“°κΈ° μž‘μ—…μ— 데이터 정합성을 μœ„ν•΄ Lock을 μ‚¬μš©ν•˜κ³  λ””μŠ€ν¬μ— 동기화 ν•˜λŠ” κ³Όμ •μ—μ„œ λ””μŠ€ν¬ I/Oκ°€ λ°œμƒν•©λ‹ˆλ‹€.
    • MongoDBλŠ” 일반적인 μ“°κΈ°μž‘μ—…μ—μ„œ 락을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ©”λͺ¨λ¦¬μ— 데이터λ₯Ό μ μž¬ν•΄ I/O μž‘μ—…μ„ μ΅œμ†Œν™” ν•  수 μžˆμ–΄ μ“°κΈ°μž‘μ—…μ—μ„œ μ†Œμš”μ‹œκ°„μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λΉ λ₯΄κ²Œ μ¦μ‹ν•˜λŠ” 데이터
    • μ±„νŒ… λ©”μ‹œμ§€λŠ” 주기적인 μ‚­μ œ μ „λž΅μ΄ μ—†λŠ” 경우 μ‹œκ°„μ΄ 흐름에 따라 λΉ λ₯΄κ²Œ 데이터 규λͺ¨κ°€ μ¦κ°€ν•©λ‹ˆλ‹€. 데이터 규λͺ¨ 증가에 λ”°λ₯Έ μˆ˜ν‰ν™•μž₯이 μš©μ΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • MongoDBλŠ” μˆ˜ν‰ν™•μž₯(샀딩)이 μš©μ΄ν•©λ‹ˆλ‹€. μ μž¬λ˜λŠ” 데이터가 증가함에 따라 Auto Sharding이 κ°€λŠ₯ν•˜κ³  μƒ€λ“œ λ…Έλ“œ μΆ”κ°€ μ‹œ λ°μ΄ν„°μ˜ λ¦¬λ°ΈλŸ°μ‹±μ΄ ν•„μˆ˜μ μ΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

About

πŸš€ μ›Ήμ†ŒμΌ“μ„ μ΄μš©ν•œ 아이디어 ν”„λ‘œμ νŠΈ - μ±„νŒ…νŽΈ 2023.12 ~ 2024.4

Resources

Stars

Watchers

Forks

Languages