|
| 1 | +# react-naver-maps-kit ํ
์คํธ ๋ชฉ๋ก |
| 2 | + |
| 3 | +๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์๋ฏธ ์๊ฒ ์ปค๋ฒํ๋ฉด ์ข์ ํ
์คํธ๋ฅผ ์ ๋ฆฌํ ๋ชฉ๋ก์
๋๋ค. |
| 4 | +`โ
` = ์ด๋ฏธ ์์, `โฌ` = ์ถ๊ฐ ๊ถ์ฅ. |
| 5 | + |
| 6 | +--- |
| 7 | + |
| 8 | +## 1. NaverMap (ํต์ฌ) |
| 9 | + |
| 10 | +### 1.1 Provider / ์ปจํ
์คํธ |
| 11 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 12 | +|--------|------|------| |
| 13 | +| โ
NaverMap์ NaverMapProvider ๋ฐ์์ ์ฌ์ฉ ์ ์๋ฌ | Vitest | ํ์ฌ ๊ตฌํ๋จ | |
| 14 | +| โ
Provider + Map + useNaverMap์ผ๋ก map ์ธ์คํด์ค ์ ๊ณต | Vitest | | |
| 15 | +| โฌ NaverMap๋ง ๋จ๋
์ฌ์ฉ ์ "must be used inside NaverMapProvider" ์๋ฌ ๋ฉ์์ง ๊ฒ์ฆ | Vitest | ์๋ฌ ๋ฉ์์ง ์ผ์น | |
| 16 | + |
| 17 | +### 1.2 ์ธ์คํด์ค / ๋ผ์ดํ์ฌ์ดํด |
| 18 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 19 | +|--------|------|------| |
| 20 | +| โ
์ต์
๋ณ๊ฒฝ ์ map ์ธ์คํด์ค ์ฌ์์ฑ ์์ด setZoom/setOptions๋ง ํธ์ถ | Vitest | | |
| 21 | +| โ
์ธ๋ง์ดํธ ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํด์ , clearInstanceListeners ํธ์ถ | Vitest | | |
| 22 | +| โฌ onMapReady ์ฝ๋ฐฑ์ด ์ง๋ ์์ฑ ํ ํ ๋ฒ ํธ์ถ๋๋์ง | Vitest | | |
| 23 | +| โฌ onMapDestroy๊ฐ ์ธ๋ง์ดํธ ์ ํธ์ถ๋๋์ง | Vitest | | |
| 24 | +| โฌ ref.getCenter() / getZoom()์ด ํ์ฌ ๊ฐ ๋ฐํํ๋์ง | Vitest | mock์์ setCenter ํ getCenter ๊ฒ์ฆ | |
| 25 | + |
| 26 | +### 1.3 Controlled / Uncontrolled |
| 27 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 28 | +|--------|------|------| |
| 29 | +| โ
center/zoom prop ๋ณ๊ฒฝ ์ setCenter/setZoom ํธ์ถ (์ธ์คํด์ค ์ ์ง) | Vitest | | |
| 30 | +| โฌ **Controlled**: center prop๋ง ๋๊ธด ๊ฒฝ์ฐ, center ๋ณ๊ฒฝ ์ setCenter ํธ์ถ, zoom์ ๋ด๋ถ ์ ์ง | Vitest | | |
| 31 | +| โฌ **Controlled**: zoom prop๋ง ๋๊ธด ๊ฒฝ์ฐ, zoom ๋ณ๊ฒฝ ์ setZoom ํธ์ถ, center๋ ๋ด๋ถ ์ ์ง | Vitest | | |
| 32 | +| โฌ **Uncontrolled**: defaultCenter/defaultZoom๋ง ๋๊ธด ๊ฒฝ์ฐ, ๋ค๋ฅธ ์ต์
๋ณ๊ฒฝ ์ ๊ธฐ์กด center/zoom ๋ณต์ | Vitest | (NaverMap.tsx ์ต์
๋๊ธฐํ effect) | |
| 33 | +| โฌ **E2E**: controlled ๋ชจ๋์์ ๋ถ๋ชจ state ๋ณ๊ฒฝ ์ ์ง๋ center/zoom์ด prop๊ณผ ๋๊ธฐํ๋๋์ง | Playwright | ๋ฒํผ์ผ๋ก state ๋ณ๊ฒฝ โ DOM/ํ์๊ฐ ๊ฒ์ฆ | |
| 34 | + |
| 35 | +### 1.4 ์ด๋ฒคํธ |
| 36 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 37 | +|--------|------|------| |
| 38 | +| โ
ref.setCenter ํธ์ถ ์ onCenterChanged ํธ์ถ | Playwright | | |
| 39 | +| โ
ref.setZoom ํธ์ถ ์ onZoomChanged ํธ์ถ | Playwright | | |
| 40 | +| โ
์ฌ๋ฌ ๋ฒ setCenter/setZoom ์ ์ฝ๋ฐฑ ๋งค๋ฒ ํธ์ถ | Playwright | | |
| 41 | +| โฌ onBoundsChanged๊ฐ bounds ๋ณ๊ฒฝ ์ ํธ์ถ๋๋์ง | Vitest ๋๋ Playwright | mock์์ panTo ๋ฑ ํ ๊ฒ์ฆ | |
| 42 | +| โฌ onIdle์ด ์ด๋/์ค ์ข
๋ฃ ํ ํธ์ถ๋๋์ง | Playwright | ํ์ด๋ฐ ์ด์ ์์ ์ ์์ | |
| 43 | +| โฌ onClick / onRightClick ๋ฑ ํฌ์ธํฐ ์ด๋ฒคํธ๊ฐ DOM ํด๋ฆญ๊ณผ ์ฐ๊ฒฐ๋๋์ง | Playwright | mock map์์ click ์ด๋ฒคํธ ๋ฐ์ ์๋ฎฌ๋ ์ด์
| |
| 44 | + |
| 45 | +### 1.5 ref API |
| 46 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 47 | +|--------|------|------| |
| 48 | +| โฌ ref.panTo ํธ์ถ ์ ์ง๋ ์ด๋ | Vitest (mock) | | |
| 49 | +| โฌ ref.fitBounds ํธ์ถ ์ ํด๋น bounds๋ก ๋ทฐ ๋ณ๊ฒฝ | Vitest (mock) | | |
| 50 | +| โฌ ref.zoomBy(delta) ํธ์ถ ์ ์ค ๋ ๋ฒจ ๋ณ๊ฒฝ | Vitest (mock) | | |
| 51 | + |
| 52 | +--- |
| 53 | + |
| 54 | +## 2. NaverMapProvider / ์คํฌ๋ฆฝํธ ๋ก๋ |
| 55 | + |
| 56 | +### 2.1 loadNaverMapsScript (๋จ์) |
| 57 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 58 | +|--------|------|------| |
| 59 | +| โฌ window.naver.maps๊ฐ ์ด๋ฏธ ์์ผ๋ฉด ์คํฌ๋ฆฝํธ ์์ฒญ ์์ด ์ฆ์ resolve | Vitest | isNaverMapsReady true ์ Promise.resolve | |
| 60 | +| โฌ ncpKeyId ์์ด ํธ์ถ ์ ์๋ฌ (getClientKey throw) | Vitest | | |
| 61 | +| โฌ submodules ์ง์ ์ ํด๋น ํค๊ฐ maps์ ์์ ๋๋ง ready | Vitest | isNaverMapsReady + submodules | |
| 62 | +| โฌ createScriptUrl์ด ncpKeyId ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ฟผ๋ฆฌ ์์ฑ | Vitest | | |
| 63 | +| โฌ timeout ์ด๊ณผ ์ reject | Vitest | waitForNaverMapsReady mock | |
| 64 | + |
| 65 | +### 2.2 Provider ํตํฉ |
| 66 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 67 | +|--------|------|------| |
| 68 | +| โฌ autoLoad=false๋ฉด ์ด๊ธฐ์๋ loading, ์คํฌ๋ฆฝํธ ๋ก๋ ์ ํจ | Vitest | | |
| 69 | +| โฌ reloadSdk ํธ์ถ ์ loading โ ready/error ์ ํ | Vitest | | |
| 70 | +| โฌ ์ธ์ฆ ์คํจ ์ sdkStatus 'error', onError ํธ์ถ | Vitest | navermap_authFailure ์๋ฎฌ๋ ์ด์
| |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## 3. useNaverMap / useNaverMapInstance |
| 75 | + |
| 76 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 77 | +|--------|------|------| |
| 78 | +| โ
Provider ๋ฐ์์ useNaverMap ํธ์ถ ์ ์๋ฌ | Vitest | | |
| 79 | +| โฌ requireReady: true ์ด๊ณ sdkStatus !== 'ready'์ผ ๋ ์๋ฌ | Vitest | | |
| 80 | +| โฌ requireMapInstance: true ์ด๊ณ map์ด null์ผ ๋ ์๋ฌ | Vitest | | |
| 81 | +| โฌ useNaverMapInstance()๊ฐ context.map ๋ฐํํ๋์ง | Vitest | | |
| 82 | + |
| 83 | +--- |
| 84 | + |
| 85 | +## 4. MapInstanceContext |
| 86 | + |
| 87 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 88 | +|--------|------|------| |
| 89 | +| โฌ NaverMap ์์์์ useMapInstance()๊ฐ map ์ธ์คํด์ค ๋ฐํ | Vitest | | |
| 90 | +| โฌ useMapInstanceRequired()๊ฐ map ์์ ๋ ์๋ฌ | Vitest | | |
| 91 | +| โฌ ์ง๋ ๋ฐ(Provider๋ง ์๋ ๊ณณ)์์ useMapInstance()๋ null | Vitest | | |
| 92 | + |
| 93 | +--- |
| 94 | + |
| 95 | +## 5. ์ค๋ฒ๋ ์ด: Marker |
| 96 | + |
| 97 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 98 | +|--------|------|------| |
| 99 | +| โฌ position prop์ผ๋ก ๋ง์ปค ์์ฑ, map์ ์ถ๊ฐ | Vitest | mock Map + Marker ์ธ์คํด์ค | |
| 100 | +| โฌ position ๋ณ๊ฒฝ ์ ๋ง์ปค ์์น๋ง ์
๋ฐ์ดํธ (์ธ์คํด์ค ์ ์ง) | Vitest | | |
| 101 | +| โฌ onClick ํธ๋ค๋ฌ๊ฐ naver.maps ์ด๋ฒคํธ์ ์ฐ๊ฒฐ๋๋์ง | Vitest | Event.addListener ํธ์ถ ๊ฒ์ฆ | |
| 102 | +| โฌ ref.getPosition() / setPosition() ๋์ | Vitest | | |
| 103 | +| โฌ MarkerClusterer ์์์ผ๋ก ๋ฃ์์ ๋ clustererItemId๋ก ๋ฑ๋ก๋๋์ง | Vitest | ClustererContext ์ฐ๋ | |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +## 6. ์ค๋ฒ๋ ์ด: MarkerClusterer |
| 108 | + |
| 109 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 110 | +|--------|------|------| |
| 111 | +| โฌ ์์ Marker๋ค์ด ํด๋ฌ์คํฐ๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ฑ๋ก๋จ | Vitest | | |
| 112 | +| โฌ ์ง๋ bounds/zoom ๋ณ๊ฒฝ ์ ํด๋ฌ์คํฐ ์ฌ๊ณ์ฐ (recomputeOn) | Vitest | | |
| 113 | +| โฌ helpers.zoomToCluster ํธ์ถ ์ ํด๋น ํด๋ฌ์คํฐ๋ก ์ด๋/์ค | Vitest ๋๋ Playwright | | |
| 114 | +| โฌ ํด๋ฌ์คํฐ ํด๋ฆญ ์ ํด๋ฌ์คํฐ ํ์ฅ ๋๋ ์ฝ๋ฐฑ ํธ์ถ | Playwright | E2E์์ ํด๋ฆญ ๊ฒ์ฆ | |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## 7. ์ค๋ฒ๋ ์ด: InfoWindow |
| 119 | + |
| 120 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 121 | +|--------|------|------| |
| 122 | +| โฌ anchor(๋ง์ปค ๋ฑ)์ ๋ถ์ด ์ด๋ฆผ | Vitest | | |
| 123 | +| โฌ open/close ์ ์ด ์ DOM ํ์ ์ฌ๋ถ | Vitest ๋๋ Playwright | | |
| 124 | + |
| 125 | +--- |
| 126 | + |
| 127 | +## 8. ์ค๋ฒ๋ ์ด: Circle / Polygon / Polyline / Rectangle |
| 128 | + |
| 129 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 130 | +|--------|------|------| |
| 131 | +| โฌ center + radius (Circle) ๋๋ path (Polygon ๋ฑ)๋ก ์ค๋ฒ๋ ์ด ์์ฑ | Vitest | | |
| 132 | +| โฌ prop ๋ณ๊ฒฝ ์ setOptions ๋๋ ํด๋น setter๋ง ํธ์ถ (์ฌ์์ฑ ์์) | Vitest | | |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## 9. ์๋ธ๋ชจ๋ (Panorama, Visualization, Drawing) |
| 137 | + |
| 138 | +| ํ
์คํธ | ์ ํ | ๋น๊ณ | |
| 139 | +|--------|------|------| |
| 140 | +| โฌ submodules์ panorama ์์ ๋ Panorama ์ฌ์ฉ ์ ์๋ฌ ๋ฉ์์ง | Vitest | | |
| 141 | +| โฌ submodules์ visualization ์์ ๋ HeatMap/DotMap ์ฌ์ฉ ์ ์๋ฌ ๋ฉ์์ง | Vitest | | |
| 142 | +| โฌ DrawingManager๊ฐ submodules 'drawing' ์์ ๋ ์๋ฌ ๋ฉ์์ง | Vitest | | |
| 143 | + |
| 144 | +--- |
| 145 | + |
| 146 | +## 10. E2E (Playwright) โ ์ฌ์ฉ์ ์๋๋ฆฌ์ค |
| 147 | + |
| 148 | +| ํ
์คํธ | ๋น๊ณ | |
| 149 | +|--------|------| |
| 150 | +| โ
์ง๋ ์ด๋(๋ฒํผ) โ onCenterChanged ํธ์ถ, ํ์ ์ขํ ๊ฐฑ์ | ๊ตฌํ๋จ | |
| 151 | +| โ
์ค ๋ณ๊ฒฝ(๋ฒํผ) โ onZoomChanged ํธ์ถ, ํ์ ์ค ๊ฐฑ์ | ๊ตฌํ๋จ | |
| 152 | +| โฌ ์ง๋ ํด๋ฆญ โ onClick ํธ์ถ, ํด๋ฆญ ์ขํ ํ์ | | |
| 153 | +| โฌ ๋ง์ปค ํด๋ฆญ โ Marker onClick ๋๋ InfoWindow ์ด๋ฆผ | | |
| 154 | +| โฌ Controlled: ์ฌ๋ผ์ด๋/์
๋ ํธ๋ก center ๋ณ๊ฒฝ ์ ์ง๋๊ฐ ํด๋น ์์น๋ก ์ด๋ | | |
| 155 | +| โฌ Uncontrolled: ์ง๋ ๋๋๊ทธ ํ ref.getCenter()๋ก ํ์ฌ ์ค์ฌ ํ์ธ | (mock์์ ๋๋๊ทธ ์๋ฎฌ ๊ฐ๋ฅ ์) | |
| 156 | + |
| 157 | +--- |
| 158 | + |
| 159 | +## ์ฐ์ ์์ ์ ์ |
| 160 | + |
| 161 | +1. **๋์**: NaverMap controlled/uncontrolled ๋์, ์ด๋ฒคํธ(onCenterChanged/onZoomChanged) โ ์ผ๋ถ ์๋ฃ. |
| 162 | +2. **๋์**: Provider/๋ก๋ โ `window.naver.maps` ์ด๋ฏธ ์์ ๋ ์คํฌ๋ฆฝํธ ์๋ต, ํค/ํ์์์ ์๋ฌ. |
| 163 | +3. **์ค๊ฐ**: useNaverMap / useMapInstance ์ต์
(requireReady, requireMapInstance) ์๋ฌ ์ผ์ด์ค. |
| 164 | +4. **์ค๊ฐ**: Marker position/์ด๋ฒคํธ, MarkerClusterer ๋ฑ๋กยทhelpers. |
| 165 | +5. **๋ฎ์**: ์๋ธ๋ชจ๋ ์๋ฌ ๋ฉ์์ง, Circle/Polygon ๋ฑ ์ต์
๋๊ธฐํ. |
| 166 | + |
| 167 | +์ด ๋ชฉ๋ก์ ๊ธฐ์ค์ผ๋ก Vitest/Playwright ํ
์คํธ๋ฅผ ๋จ๊ณ์ ์ผ๋ก ์ถ๊ฐํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ง๊ณผ ๋ฆฌ๊ทธ๋ ์
๋ฐฉ์ง์ ๋์์ด ๋ฉ๋๋ค. |
0 commit comments