An open API service indexing awesome lists of open source software.

https://github.com/boostcampwm2023/and07-mindsync

🧠 μ—¬λŸ¬λͺ…μ΄μ„œ λ™μ‹œμ— λ§ˆμΈλ“œλ§΅μ„ 그릴 수 μžˆλ‹€κ³ ~? MindSync ...더보기
https://github.com/boostcampwm2023/and07-mindsync

android crdt mindmap nestjs socket-io

Last synced: 12 months ago
JSON representation

🧠 μ—¬λŸ¬λͺ…μ΄μ„œ λ™μ‹œμ— λ§ˆμΈλ“œλ§΅μ„ 그릴 수 μžˆλ‹€κ³ ~? MindSync ...더보기

Awesome Lists containing this project

README

          

# Mind Sync (Mind Synchronize)

λ§ˆμΈλ“œλ§΅ μ‹€μ‹œκ°„ 곡동 νŽΈμ§‘ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜

[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fboostcampwm2023%2Fand07-MindSync%2Fhit-counter&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com)

## ✨ ν”„λ‘œμ νŠΈ μ†Œκ°œ

- λ§ˆμΈλ“œλ§΅μ„ μ‚¬μš©ν•˜μ—¬ 아이디어λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•΄λ³΄μ„Έμš”
- ν˜‘μ—…μ„ μ›ν•˜λŠ” μΉœκ΅¬λ‚˜ λ™λ£Œλ₯Ό μ΄ˆλŒ€ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€
- κ°„νŽΈν•˜κ²Œ λ§ˆμΈλ“œλ§΅μ„ μƒμ„±ν•˜κ³ , λ‹€λ₯Έ μ‚¬μš©μžλ“€κ³Ό μ‹€μ‹œκ°„μœΌλ‘œ 곡동 νŽΈμ§‘μ„ μ§„ν–‰ν•  수 μžˆμ–΄μš”


## πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦ νŒ€μ› μ†Œκ°œ

|[김찬희(J035)](https://github.com/Conut-1) | [μ–‘μ„ μ•„(K023)](https://github.com/yang1318) | [이상쀀(K027)](https://github.com/hegleB) | [μ΄μš©ν™˜(J110)](https://github.com/tnpfldyd) | [μ΄μž¬ν•œ(K029)](https://github.com/jaehan4707) |
|:--------:|:---------:|:---------:|:---------:|:---------:|
| ![](https://github.com/Conut-1.png) | ![](https://github.com/yang1318.png) | ![](https://github.com/hegleB.png) | ![](https://github.com/tnpfldyd.png) | ![](https://github.com/jaehan4707.png) |

## βš’οΈ κΈ°λŠ₯ μ†Œκ°œ

### πŸš€ 슀페이슀
- μŠ€νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ μ‚¬μš©μžκ°€ ν•¨κ»˜ ν˜‘μ—…ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
- 슀페이슀λ₯Ό λ§Œλ“€κ³ , μ΄ˆλŒ€μ½”λ“œλ₯Ό κ³΅μœ ν•΄μ„œ λ‹€λ₯Έ μ‚¬μš©μžλ₯Ό μ΄ˆλŒ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- μŠ€νŽ˜μ΄μŠ€μ— ν•¨κ»˜ μžˆλŠ” μ‚¬μš©μžλ“€μ€ μŠ€νŽ˜μ΄μŠ€μ— μ €μž₯된 λ³΄λ“œλ“€μ„ κ³΅μœ ν•˜κ²Œ λ©λ‹ˆλ‹€.
- μŠ€νŽ˜μ΄μŠ€λŠ” μŠ€νŽ˜μ΄μŠ€μ— μ°Έμ—¬ν•œ λͺ¨λ“  μ‚¬μš©μžκ°€ λ‚˜κ°€κ²Œ 되면 μ‚­μ œλ©λ‹ˆλ‹€.

|슀페이슀 μΆ”κ°€|μ΄ˆλŒ€ μ½”λ“œ λ°œκΈ‰|슀페이슀 μ°Έκ°€|슀페이슀 λ‚˜κ°€κΈ°|
|:---:|:---:|:---:|:---:|
| | | | |

### πŸ“ƒ λ³΄λ“œ
- λ³΄λ“œλŠ” λ§ˆμΈλ“œλ§΅μ„ μ €μž₯ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
- 슀페이슀 ν•˜λ‚˜μ— μ—¬λŸ¬κ°œμ˜ λ³΄λ“œκ°€ μ €μž₯되고, 각 λ³΄λ“œμ—λŠ” λ§ˆμΈλ“œλ§΅μ΄ ν•˜λ‚˜μ”© ν• λ‹Ήλ©λ‹ˆλ‹€.
- λ³΄λ“œλ₯Ό μ‚­μ œν•˜λ©΄ λ³΄λ“œλŠ” νœ΄μ§€ν†΅μœΌλ‘œ μ΄λ™λ©λ‹ˆλ‹€.
- λ³΄λ“œλ₯Ό 영ꡬ μ‚­μ œν• μˆ˜λŠ” μ—†κ³ , μ‚­μ œλœ 일자 κΈ°μ€€μœΌλ‘œ 7일이 μ§€λ‚˜λ©΄ μžλ™μœΌλ‘œ μ‚­μ œλ©λ‹ˆλ‹€.
- μ—¬λŸ¬λͺ…이 ν˜‘μ—…ν•  수 μžˆλŠ” ν™˜κ²½μ΄κΈ° λ•Œλ¬Έμ— 영ꡬ μ‚­μ œλŠ” λ˜μ§€ μ•Šλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

|λ³΄λ“œ 생성|λ³΄λ“œ μ‚­μ œ|νœ΄μ§€ν†΅|
|:---:|:---:|:---:|
||||

### 🧠 λ§ˆμΈλ“œλ§΅
- λ³΄λ“œλ₯Ό ν΄λ¦­ν•˜λ©΄ λ§ˆμΈλ“œλ§΅ ν™”λ©΄μœΌλ‘œ μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.
- 핡심 κΈ°λŠ₯인 λ§ˆμΈλ“œλ§΅μ„ 그리고, νŽΈμ§‘ν•  수 μžˆλŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
- λ…Έλ“œλ₯Ό μΆ”κ°€, μ‚­μ œ, νŽΈμ§‘, 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.
- socket.io와 CRDT μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄ μ‹€μ‹œκ°„μœΌλ‘œ 톡신이 λ˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

|λ…Έλ“œ μΆ”κ°€|λ…Έλ“œ μ‚­μ œ|λ…Έλ“œ νŽΈμ§‘|
|:---:|:---:|:---:|
||||

|λ…Έλ“œ 이동|ν™•λŒ€/μΆ•μ†Œ/λ“œλž˜κ·Έ|μ‹€μ‹œκ°„λ™μ‹œνŽΈμ§‘|
|:---:|:---:|:---:|
||||

## 🎯 기술적 도전
μ €ν¬λŠ” λ‹€μŒκ³Ό 같은 κ³Όμ œμ— λ„μ „ν–ˆμŠ΅λ‹ˆλ‹€.
1. **λ§ˆμΈλ“œλ§΅μ„ 그릴 수 μžˆλ‹€.**
2. **λ§ˆμΈλ“œλ§΅μ„ λ™μ‹œμ— μ‹€μ‹œκ°„ νŽΈμ§‘ ν•  수 μžˆλ‹€.**

κ·Έλž˜μ„œ ν•΄λ‹Ή 과제λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 과정을 κ±°μ³€μŠ΅λ‹ˆλ‹€.
1. **λ§ˆμΈλ“œλ§΅μ„ 그리기 μœ„ν•΄**

- **λ…Έλ“œλ₯Ό κ·Έλ €μ£ΌλŠ” μ»€μŠ€ν…€ 뷰와 라인을 κ·Έλ €μ£ΌλŠ” μ»€μŠ€ν…€ λ·°λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.**
- [μ»€μŠ€ν…€λ·° ν•™μŠ΅ν•˜κΈ°](https://yangyang-workspace.notion.site/CustomView-9d4a86f6cd2046f4806d42655d220340?pvs=4)
- [λ§ˆμΈλ“œλ§΅μ„ μ €μž₯ν•˜λŠ” 자료ꡬ쑰 μ„€κ³„ν•˜κΈ°](https://yangyang-workspace.notion.site/d89604f305e7406fa8243ddb0926706a?pvs=4)
- [라인을 κ³‘μ„ μœΌλ‘œ 그리기](https://yangyang-workspace.notion.site/5adf5fa59e464e7ba316ad5dc4b0db51?pvs=4)
- [ν…μŠ€νŠΈ 크기에 λ”°λ₯Έ λ…Έλ“œ 크기 μžλ™ν™”](https://yangyang-workspace.notion.site/CustomView-DrawText-0c7165d51af84f50b82673fde84766a5?pvs=4)
- **쀌 κΈ°λŠ₯을 μΆ”κ°€ν•˜κ³ , λŠ˜μ–΄λ‚˜λŠ” λ§ˆμΈλ“œλ§΅μ˜ 크기에 따라 μ€Œμ„ μ‘°μ ˆν–ˆμŠ΅λ‹ˆλ‹€.**
- [λ§ˆμΈλ“œλ§΅μ΄ μ»€μ‘Œμ„ λ•Œ μž˜λ¦¬λŠ” ν˜„μƒ ν•΄κ²° κ³Όμ •](https://yangyang-workspace.notion.site/947792eae0014041aa1d7d92869a1d71?pvs=4)
- [쀌 κΈ°λŠ₯이 좔가됨에 따라, λ…Έλ“œ 이동기λŠ₯κ³Ό κ²ΉμΉ˜λŠ” ν„°μΉ˜ 이벀트 κ΄€λ¦¬ν•˜κΈ°](https://yangyang-workspace.notion.site/56448f36097049e4acef2897fecac41a?pvs=4)
- [이동 쀑 κΈ΄ μžμ‹ λ…Έλ“œκ°€ μ‘΄μž¬ν•  λ•Œ λ°œμƒν•˜λŠ” 문제 ν•΄κ²°](https://www.notion.so/yangyang-workspace/cd711263900d4929bd3fd925f0f5941d?pvs=4)
- **λ…Έλ“œκ°€ μΆ”κ°€/νŽΈμ§‘ 될 λ•Œλ§ˆλ‹€ 크기λ₯Ό 재고, μ •λ ¬ν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.**
- [μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜](https://yangyang-workspace.notion.site/067de1120ec841808d46279d752b9352?pvs=4)
3. **λ§ˆμΈλ“œλ§΅μ„ λ™μ‹œμ— μ‹€μ‹œκ°„ νŽΈμ§‘ ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄**

- [Tree ꡬ쑰에 μ μš©κ°€λŠ₯ν•œ μž‘μ—…κΈ°λ°˜ CRDTλ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.](https://yangyang-workspace.notion.site/CRDT-093a7ce7785543cc8c69ac84c138a955?pvs=4)
- [socket.io ν•™μŠ΅ν•˜κΈ°](https://yangyang-workspace.notion.site/Socket-IO-bd7ceaba859a4449bfe73bbeaa2f6798?pvs=4)
4. **λΉ λ₯Έ 응닡을 μœ„ν•œ 캐싱을 직접 κ΅¬ν˜„ν•΄ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.**

- [μΊμ‹œ 적용기](https://yangyang-workspace.notion.site/Cache-c3a6b494d39c45ce93c2ee9dd95cf6e6?pvs=4)
5. **λ§ˆμΈλ“œλ§΅μ„ μ„œλ²„μ— μ €μž₯ν•˜λŠ” 곡간인 λ³΄λ“œμ™€ λ³΄λ“œλ₯Ό μ—¬λŸ¬κ°œ μ €μž₯ν•  수 μžˆλŠ” 곡간인 슀페이슀λ₯Ό 섀계해 μ‚¬μš©μžκ°€ μ΄ˆλŒ€/κ°€μž… ν•  수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.**

6. **자주 μ†Œν†΅ν•˜λ„λ‘ λ…Έλ ₯ν•˜λ©° ν˜‘μ—…ν–ˆμŠ΅λ‹ˆλ‹€.**
- νŽ˜μ–΄ν”„λ‘œκ·Έλž˜λ°μ„ 자주 ν–ˆμŠ΅λ‹ˆλ‹€.
- μ•ˆλ“œλ‘œμ΄λ“œ&λ°±μ—”λ“œ λΆ„μ•Όκ°„μ˜ μ†Œν†΅λ„ 맀일 ν™œλ°œν•˜κ²Œ μ΄λ£¨μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.
- μ΄ˆλ°˜μ—λŠ” 맀일 1μ‹œκ°„μ˜ ν‹°νƒ€μž„μ„ κ°€μ§€λ©΄μ„œ 맀일 1μ‹œκ°„μ”© κΌ­ λŒ€ν™”ν•˜λŠ” μ‹œκ°„μ„ κ°€μ‘ŒμŠ΅λ‹ˆλ‹€.
- api 적용, μ†ŒμΌ“ 톡신을 κ°œλ°œν•˜κΈ° μ‹œμž‘ν•˜κ³  λ‚˜μ„œλΆ€ν„°λŠ” 더 λ§Žμ€ μ†Œν†΅μ΄ ν•„μš”ν–ˆκ³ , κ·Έλž˜μ„œ 같은 νšŒμ˜μ‹€μ„ μ‚¬μš©ν•΄μ„œ μ„œλ‘œμ˜ 이슈λ₯Ό λ°”λ‘œλ°”λ‘œ κ³΅μœ ν•  수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

## πŸš€ 문제 ν•΄κ²° κ³Όμ •
- [μ•ˆλ“œλ‘œμ΄λ“œμ— Access Tokenκ³Ό Refresh Token μ μš©ν•˜κΈ°](https://yangyang-workspace.notion.site/Access-Token-Refresh-Token-DataStore-Preference-Interceptor-Authenticator-9934da08678f4b13a5396f47038e1f7f?pvs=4)
- [μ„œλ²„μ— Bulk Insert 및 Update μ μš©ν•˜κΈ°](https://yangyang-workspace.notion.site/Bulk-Insert-Update-ec109de908e54b4f833ffaf24e206d8c?pvs=4)
- [μ„œλ²„μ— 카카였 OAuth μ μš©ν•˜κΈ°](https://yangyang-workspace.notion.site/OAuth-ceee7681f4124d34aafd714728b8aaeb?pvs=4)
- [μ„œλ²„μ— Refresh Token μ μš©ν•˜κΈ°](https://yangyang-workspace.notion.site/Refresh-Token-66f30a6645cb472582817f695d759e28?pvs=4)
- [μ•ˆλ“œλ‘œμ΄λ“œ CI 적용기](https://yangyang-workspace.notion.site/Android-CI-7eb07b0b0c5346959a1271c526993604?pvs=4)
- [μ•ˆλ“œλ‘œμ΄λ“œ CD 적용기](https://yangyang-workspace.notion.site/Android-CD-7bf21956eafc47b8bd5a06990f3852da?pvs=4)
- [μ„œλ²„ 쀑볡 μ½”λ“œλ₯Ό 좔상 클래슀둜 λΆ„λ¦¬ν•˜κΈ°](https://yangyang-workspace.notion.site/228c00d520ed42e7a2706297fc7c1c09?pvs=4)
- [Google Play Store μžλ™ 배포 ꡬ좕](https://www.notion.so/yangyang-workspace/Google-Play-Store-CD-9bd55780c0f64f7997534b98f1986b2a?pvs=4)

## πŸ“š κΈ°μˆ μŠ€νƒ

### AOS

- `Kotlin` `Canvas` `Socket.IO` `Coil` `MVVM` `Retrofit` `Datastore` `Hilt` `Flow` `Jetpack Navigation` `DataBinding`
### BE

- `Typescript` `NestJS` `Naver Cloud Platform` `MySQL` `MongoDB` `CRDT` `OAuth`

## πŸ“‘ λ¬Έμ„œ
|μ„€κ³„μ„œ|ν”Όκ·Έλ§ˆ λ””μžμΈ|ν”„λ‘œλ•νŠΈ 백둜그|μŠ€ν”„λ¦°νŠΈ 백둜그|κ·ΈλΌμš΄λ“œ λ£°|
|:---:|:---:|:---:|:---:|:---:|
|[πŸ“’μ„€κ³„μ„œ: ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜λ©΄μ„œ λͺ©ν‘œμ™€ μ–΄λ–€ κΈ°λŠ₯을 κ΅¬ν˜„ν•  μ§€ μ„€κ³„ν•œ λ‚΄μš©](https://yangyang-workspace.notion.site/7efada904a3d44328474a6fb30689db7?pvs=4)|[πŸ“•ν”Όκ·Έλ§ˆ λ””μžμΈ](https://www.figma.com/file/Wb1U49Xd2W9xKHaPEltIRB/MindSync?type=design&node-id=2%3A218&mode=design&t=3MJMbYI1z4k217UB-1)|[πŸ§Ύν”„λ‘œμ νŠΈ 백둜그: 전체 κΈ°λŠ₯에 λŒ€ν•œ 일정 섀계](https://github.com/orgs/boostcampwm2023/projects/41)|[μŠ€ν”„λ¦°νŠΈ 백둜그: λ§€μ£Ό μž‘μ„±ν•˜λŠ” ꡬ체적인 일정 섀계](https://github.com/orgs/boostcampwm2023/projects/40)|[β›³MindSync νŒ€μ˜ κ·ΈλΌμš΄λ“œ λ£°](https://github.com/boostcampwm2023/and07-MindSync/wiki/%ED%8C%80-%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%A3%B0)|