-
Notifications
You must be signed in to change notification settings - Fork 0
Description
MapSee (๋งต์) - ํ๋ก์ ํธ ๊ธฐํ์
์ธ์คํ๊ทธ๋จ ์ฝํ ์ธ ๊ธฐ๋ฐ ์ฅ์ ํ๋ ์ด์ & ๊ณต์ ํ๋ซํผ
์ต์ข
์
๋ฐ์ดํธ: 2026.01.09
์์ฑ์: Cassiiopeia
๋ฒ์ : v1.1
๐ ํ๋ก์ ํธ ๊ฐ์
ํต์ฌ ์ปจ์
์ธ์คํ๊ทธ๋จ์์ ๋ฐ๊ฒฌํ ๋ง์ง, ์นดํ, ๊ด๊ด์ง ๋ฑ์ ์ฝ๊ฒ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ์ฅ์ ํ๋ ์ด์ ์ฑ
์ฃผ์ ํน์ง
- ๐ฑ ์ธ์คํ๊ทธ๋จ ๊ณต์ ๊ธฐ๋ฅ์ ํตํ ์ํด๋ฆญ ์ฅ์ ๋ฑ๋ก
- ๐บ๏ธ ๋ค์ด๋ฒ ์ง๋ API ์ฐ๋์ผ๋ก ์ ํํ ์ฅ์ ์ ๋ณด ์ ๊ณต
- ๐ ์ค์๊ฐ ํธ๋ ๋ ํค์๋ ๋ฐ ์ธ๊ธฐ ์ฅ์ ๋ถ์
- ๐ฅ ์์ ๊ธฐ๋ฅ์ ํตํ ์ฅ์ ๊ณต์ ๋ฐ ์ถ์ฒ
ํ๊ฒ ์ ์
- 20~30๋ ์ธ์คํ๊ทธ๋จ ํ์ฑ ์ฌ์ฉ์
- ๋ง์ง/์นดํ ํ๋ฐฉ์ ์ฆ๊ธฐ๋ ์ฌ๋๋ค
- ์ฌํ ๊ณํ ์ ์ฅ์ ์ ๋ณด๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ์ฌ๋๋ค
๐ฏ ์ฑ ์ด๋ฆ
Mapsy (๋งต์) โ
์ด๋ฆ ์ ์ ์ด์
- Map + ๋งต์: ์ง๋(Map)์ ํ๊ตญ์ด "๋งต์(๋ฉ์ค๋ฌ์, ๋ชจ์์)"์ ์ด์ค ์๋ฏธ
- ๋ฐ์: 2์์ (๋งต-์)๋ก ์์ ๊ฐ ์๊ณ ๊ท์ฌ์
- ์ฝ์ ํธ: "๋งต์์๊ฒ ์ฅ์๋ฅผ ๊ด๋ฆฌํ๋ค"๋ ๋๋
- ๋ ํน์ฑ: ๊ธฐ์กด ์ฑ๊ณผ ๊ฒน์น์ง ์์ผ๋ฉด์๋ ์ง๊ด์
- ์น๊ทผ๊ฐ: ํ๊ตญ ์ฌ์ฉ์๋ค์๊ฒ ์ต์ํ ๋จ์ด ํ์ฉ
์๋ฌธ ํ๊ธฐ
- ์ฃผ ํ๊ธฐ: MapSee
- ๋๋ฉ์ธ: mapsee.kr / mapsee.app
- SNS: @mapsee_official
์ฌ์ฉ ์์
"์ธ์คํ์์ ๋ดค์ผ๋ฉด ๋งต์ํด!"
"๋ด๊ฐ ๋งต์ํ ๋ง์ง ๊ฐ๋ณผ๋?"
"๋งต์ ์ฑ ์ผ์ ํ์ธํด๋ด"
"๋งต์์ ๋ด์๋ ์นดํ ์์ด"
๐ 1์ฐจ MVP (Minimum Viable Product)
ํต์ฌ ๊ธฐ๋ฅ
1. ์ธ์คํ๊ทธ๋จ ๊ณต์ ์ฐ๋ ๐
๊ธฐ๋ฅ ์ค๋ช
- iOS/Android ์์คํ ๊ณต์ Sheet์ ์ฑ ๋ฑ๋ก
- ์ธ์คํ๊ทธ๋จ ๊ฒ์๋ฌผ URL ์์ ๋ฐ ํ์ฑ
- ๊ฒ์๋ฌผ caption์์ ์ฅ์๋ช ์๋ ์ถ์ถ
- ๋ค์ด๋ฒ ์ง๋ API๋ก ์ฅ์ ๊ฒ์ ๋ฐ ์์ธ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
๊ธฐ์ ๊ตฌํ
- Instagram URL ํ์ฑ (๊ณต๊ฐ ๊ฒ์๋ฌผ ๋ฉํ๋ฐ์ดํฐ ์ถ์ถ)
- NLP/์ ๊ท์ ๊ธฐ๋ฐ ์ฅ์๋ช ์ถ์ถ (Upstage API ํ์ฉ ๊ณ ๋ ค)
- ๋ค์ด๋ฒ ์ง๋ API ์ฐ๋
- ์ฅ์ ๊ฒ์ API
- ์ฅ์ ์์ธ์ ๋ณด API
- ์ค๋ณต ์ฅ์ ์ฒดํฌ ๋ก์ง (์๋/๊ฒฝ๋ ๊ธฐ๋ฐ)
๋ฐ์ดํฐ ์์ง ํญ๋ชฉ
- ์ฅ์๋ช
- ์ฃผ์ (๋๋ก๋ช , ์ง๋ฒ)
- ์๋/๊ฒฝ๋
- ์นดํ ๊ณ ๋ฆฌ (์์์ , ์นดํ, ๊ด๊ด์ง ๋ฑ)
- ์ธ์คํ๊ทธ๋จ ๊ฒ์๋ฌผ URL
- ๊ฒ์๋ฌผ ์ด๋ฏธ์ง (์ธ๋ค์ผ)
- ๋ฑ๋ก ์๊ฐ
2. ํ ํ๋ฉด ๐
2-1. ์ต์ ์ถ๊ฐ ์ฅ์
๋ ์ด์์
- ์นด๋ํ ๋ฆฌ์คํธ (๋ฌดํ ์คํฌ๋กค)
- ๊ฐ ์นด๋ ๊ตฌ์ฑ์์:
- ์ฅ์ ์ธ๋ค์ผ (์ธ์คํ ์ด๋ฏธ์ง)
- ์ฅ์๋ช
- ๊ฐ๋จํ ์ฃผ์ (ex. ์์ธ ๋งํฌ๊ตฌ)
- ์นดํ ๊ณ ๋ฆฌ ํ๊ทธ
- ๋ฑ๋ก ์๊ฐ (ex. 5๋ถ ์ , 2์๊ฐ ์ )
- ์ ์ฅ ๋ฒํผ (๋ถ๋งํฌ ์์ด์ฝ)
์ ๋ ฌ ๋ฐฉ์
- ๊ธฐ๋ณธ: ์ต์ ์
- ์ต์ : ์ธ๊ธฐ์, ๊ฑฐ๋ฆฌ์ (ํ์ฌ ์์น ๊ธฐ๋ฐ)
2-2. ์ธ๊ธฐ ์ธ์คํ ํผ๋
์ ์ ๊ธฐ์ค
- ์ ์ฅ ํ์ (๋ถ๋งํฌ ์)
- ์ต๊ทผ 7์ผ ๊ธฐ์ค ์ธ๊ธฐ๋
- ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ค์น: ์ ์ ๋ + ์ ์ฅ ์
UI ๊ตฌ์ฑ
- ๊ทธ๋ฆฌ๋ํ ์ธ๋ค์ผ (3์ด)
- ์ ์ฅ ์, ์ข์์ ์ ํ์
- ํญํ๋ฉด ์๋ณธ ์ธ์คํ๊ทธ๋จ ๊ฒ์๋ฌผ๋ก ์ด๋
- ๋กฑํ๋ ์ค ์ ์ฅ์ ์์ธ์ ๋ณด ๋ชจ๋ฌ
2-3. ๋ด ์ ์ฅ ์ฅ์ TOP
๊ธฐ๋ฅ
- ๋ด๊ฐ ๋ถ๋งํฌํ ์ฅ์ ์ค ์ธ๊ธฐ ์๋ ๊ณณ
- ์ ๋ ฌ ์ต์ : ์ธ๊ธฐ์ / ์ต๊ทผ ์ ์ฅ์
- ๋น ๋ฅธ ์ ๊ทผ์ ์ํ ๋ฐ๋ก๊ฐ๊ธฐ
UI
- ๊ฐ๋ก ์คํฌ๋กค ์นด๋ํ
- ์ต๋ 10๊ฐ ํ์
- "์ ์ฒด ๋ณด๊ธฐ" ๋ฒํผ
2-4. ๋ ์ค๋ฅด๋ ํค์๋ ํธ๋ ๋
ํธ๋ ๋ ๋ถ์
- ์ต๊ทผ 7์ผ/30์ผ ๊ธ์์น ํด์ํ๊ทธ
- ์ฅ์ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ธ๊ธฐ ํค์๋
- ์ง์ญ๋ณ ํธ๋ ๋ ํค์๋
ํ์ ๋ฐฉ์
- ํ๊ทธ ํด๋ผ์ฐ๋ or ์นฉ ํํ
- ๊ฐ ํค์๋ ํด๋ฆญ ์ ๊ด๋ จ ๊ฒ์๋ฌผ ํผ๋๋ก ์ด๋
- ์์น๋ฅ ํ์ (๐ฅ ์์ด์ฝ)
์์
#์ฑ์๋์นดํ ๐ฅ +120%
#๋ถ์ดํ์ฅ๋ง์ โฌ๏ธ +85%
#์ ์ฃผ์จ์๋ง์ง โจ NEW
3. ํค์๋/ํ๊ทธ ํผ๋ ๐ท๏ธ
๊ธฐ๋ฅ
- ํน์ ํค์๋ ๊ด๋ จ ์ธ์คํ๊ทธ๋จ ๊ฒ์๋ฌผ ๋ชจ์
- ํค์๋ ์๋ ์ถ์ถ ๋ฐ ํ๊น ์์คํ
UI ๊ตฌ์ฑ
- ์๋จ: ํค์๋ ์ ๋ณด, ๊ด๋ จ ๊ฒ์๋ฌผ ์
- ํํฐ ์ต์
- ์ต์ ์
- ์ธ๊ธฐ์ (์ ์ฅ ์)
- ๊ฑฐ๋ฆฌ์ (๋ด ์์น ๊ธฐ์ค)
- ๊ทธ๋ฆฌ๋๋ทฐ (2์ด) - ๊ธฐ๋ณธ
- ๋ฆฌ์คํธ๋ทฐ ์ ํ ์ต์
- ์ฐ์ธก ์๋จ: ์ง๋๋ทฐ ์ ํ ๋ฒํผ
์ถ๊ฐ ๊ธฐ๋ฅ
- ํค์๋ ํ๋ก์ฐ (์๋ฆผ ์ค์ )
- ์ฐ๊ด ํค์๋ ์ถ์ฒ
4. ์ง๋๋ทฐ ๐บ๏ธ
๊ธฐ๋ณธ ๊ธฐ๋ฅ
- ์ ์ฅ๋ ๋ชจ๋ ์ฅ์๋ฅผ ์ง๋์ ํ์ผ๋ก ํ์
- ํด๋ฌ์คํฐ๋ง (๋ฐ์ง ์ง์ญ์ ์ซ์๋ก ํ์)
- ํ์ฌ ์์น ํ์
- ํ ํญ ์ ๋ฏธ๋ ์นด๋ ํ์ (์ฅ์๋ช , ์ธ๋ค์ผ, ์ ์ฅ ๋ฒํผ)
ํํฐ ๊ธฐ๋ฅ
- ์นดํ ๊ณ ๋ฆฌ๋ณ ํํฐ (์ ์ฒด/์นดํ/์์์ /๊ด๊ด์ง ๋ฑ)
- ์ ์ฅํ ์ฅ์๋ง / ์ ์ฒด ์ฅ์
- ๊ฑฐ๋ฆฌ ๋ฐ๊ฒฝ ์ค์ (1km/3km/5km/์ ์ฒด)
๋ค์ด๋ฒ ์ง๋ vs ์นด์นด์ค๋งต
- ๋ค์ด๋ฒ ์ง๋ API ์ฐ์ (์์ธ์ ๋ณด ํ๋ถ)
- ๊ธธ์ฐพ๊ธฐ๋ ์ธ๋ถ ์ฑ ์ฐ๋ (์นด์นด์ค๋งต, ๋ค์ด๋ฒ์ง๋ ์ฑ)
5. ๊ฐ์ธ ๋ถ๋งํฌ/์ ์ฅ ๊ด๋ฆฌ โญ
๋ด ์ฅ์ ํ์ด์ง
- ์ ์ฅํ ๋ชจ๋ ์ฅ์ ๋ฆฌ์คํธ
- ํด๋/์นดํ
๊ณ ๋ฆฌ๋ณ ์ ๋ฆฌ (1์ฐจ์์๋ ๊ฐ๋จํ ๋ถ๋ฅ)
- ๊ฐ๊ณ ์ถ์ ๊ณณ
- ๊ฐ๋ณธ ๊ณณ
- ์ฆ๊ฒจ์ฐพ๊ธฐ
- ๊ฒ์ ๊ธฐ๋ฅ (์ฅ์๋ช , ์ฃผ์, ๋ฉ๋ชจ)
์ฅ์ ์์ธ ํ์ด์ง
- ์ฅ์ ์ ๋ณด (์ฃผ์, ์์ ์๊ฐ, ์ ํ๋ฒํธ - ๋ค์ด๋ฒ API)
- ์ฐ๊ฒฐ๋ ์ธ์คํ๊ทธ๋จ ๊ฒ์๋ฌผ๋ค
- ๋ด ๋ฉ๋ชจ (๊ฐ๋จํ ํ ์คํธ)
- ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ
- ๊ณต์ ๋ฒํผ (์นด์นด์คํก, URL ๋ณต์ฌ)
6. ๋ค์ด๋ฒ ์ง๋ ์ ๋ณด ์ฐ๋ ๐
ํ์ฉ API
- Naver Maps API
- ์ฅ์ ๊ฒ์ (Geocoding)
- ์ฅ์ ์์ธ์ ๋ณด
- Reverse Geocoding (์ขํ โ ์ฃผ์)
์์ง ์ ๋ณด
- ์ ํํ ์ฃผ์
- ์๋/๊ฒฝ๋
- ์์ ์๊ฐ
- ์ ํ๋ฒํธ
- ์นดํ ๊ณ ๋ฆฌ/์ ์ข
- ๋ค์ด๋ฒ ํ๋ ์ด์ค URL
๋ฐ์ดํฐ ์บ์ฑ
- ํ๋ฒ ์กฐํํ ์ฅ์ ์ ๋ณด๋ DB์ ์บ์ฑ
- ์ฃผ๊ธฐ์ ์ ๋ฐ์ดํธ (1์ฃผ์ผ or 1๊ฐ์)
๐จ UI/UX ๊ตฌ์ฑ
๋ค๋น๊ฒ์ด์ ๊ตฌ์กฐ
Bottom Tab Navigation (5๊ฐ)
โโ ๐ ํ
โโ ๐ ๊ฒ์
โโ ๐บ๏ธ ์ง๋
โโ โญ ์ ์ฅ
โโ ๐ค ํ๋กํ
์ฃผ์ ํ๋ฉด ํ๋ก์ฐ
Instagram ๊ณต์
โ
MapSee ์ฑ ์คํ
โ
์ฅ์๋ช
์๋ ์ธ์ (ํธ์ง ๊ฐ๋ฅ)
โ
๋ค์ด๋ฒ ์ง๋ ๊ฒ์ ๊ฒฐ๊ณผ (์ฌ๋ฌ ๊ฐ๋ฉด ์ ํ)
โ
์ฅ์ ์ ๋ณด ํ์ธ
โ
์ ์ฅ ์๋ฃ (ํด๋ ์ ํ ์ต์
)
๐ฅ 2์ฐจ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ
1. ์์ ๊ธฐ๋ฅ ๐ฅ
1-1. ์น๊ตฌ ์์คํ
๊ธฐ๋ฅ
- ์น๊ตฌ ์ถ๊ฐ/์ญ์ (ํ๋ก์ฐ/์ธํ๋ก์ฐ ๋ฐฉ์)
- ์น๊ตฌ ๊ฒ์ (๋๋ค์, ID)
- ์น๊ตฌ ์์ฒญ ์น์ธ ์์คํ
์น๊ตฌ ํผ๋
- ์น๊ตฌ๊ฐ ์ ์ฅํ ์ฅ์ ํ์๋ผ์ธ
- "์น๊ตฌ๋ค์ด ๋ง์ด ๊ฐ ๊ณณ" ์น์
- ์น๊ตฌ ํ๋กํ โ ์ ์ฅ ์ฅ์ ๋ชฉ๋ก ๊ณต๊ฐ ์ค์
์๋ฆผ
- ์น๊ตฌ๊ฐ ์ ์ฅ์ ์ ์ฅ ์ ์๋ฆผ (์ต์ )
- ์น๊ตฌ๊ฐ ๋ด ์ฅ์์ ๋ฐ์ ์ ์๋ฆผ
1-2. ํ์คํ/๋ฉ๋ชจ ์์คํ
๊ธฐ๋ฅ
- ์ฅ์ ์ ์ฅ ์ ๊ฐ์ธ ๋ฉ๋ชจ ์์ฑ
- ๋ณ์ (5์ ๋ง์ )
- ํด์ํ๊ทธ ์ถ๊ฐ
- ๊ณต๊ฐ/๋น๊ณต๊ฐ ์ค์
- ๋น๊ณต๊ฐ: ๋๋ง ๋ณด๊ธฐ
- ์น๊ตฌ ๊ณต๊ฐ: ์น๊ตฌ๋ค์๊ฒ๋ง
- ์ ์ฒด ๊ณต๊ฐ: ๋ชจ๋ ์ ์
UI
- ์ฅ์ ์์ธ ํ์ด์ง์ ๋ฉ๋ชจ ์น์
- ์น๊ตฌ๋ค์ ๋ฉ๋ชจ๋ ํจ๊ป ํ์ (๊ณต๊ฐ ์ค์ ์ ๋ฐ๋ผ)
2. ํ๋ ์ด์ ๊ธฐ๋ฅ ๐
2-1. ์ปฌ๋ ์ ๋ง๋ค๊ธฐ
์ปจ์
- ํ ๋ง๋ณ ์ฅ์ ๋ฌถ์ (ex. "์์ด ์นดํ ํฌ์ด", "์ ์ฃผ ์๋ถ ๋๋ผ์ด๋ธ", "๋ฐ์ดํธ ์ฝ์ค")
๊ธฐ๋ฅ
- ์ปฌ๋ ์ ์์ฑ/ํธ์ง/์ญ์
- ์ฅ์ ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ์์ ์กฐ์
- ์ปค๋ฒ ์ด๋ฏธ์ง ์ค์
- ์ค๋ช ํ ์คํธ
๊ณต์
- ์ปฌ๋ ์ ๊ณต์ ๋งํฌ ์์ฑ
- ์นด์นด์คํก, URL ๋ณต์ฌ
- ๋ค๋ฅธ ์ ์ ๊ฐ ์ปฌ๋ ์ ์ ์ฅ ๊ฐ๋ฅ ("๋ด ์ปฌ๋ ์ ์ ์ถ๊ฐ")
๋ฃจํธ ์ต์ ํ
- ์ง๋์ ์ปฌ๋ ์ ๋ด ์ฅ์๋ค ํ์
- ๋ฐฉ๋ฌธ ์์ ์๋ ์ถ์ฒ (์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ)
- ์์ ์์ ์๊ฐ ๊ณ์ฐ
2-2. ์ฑ๋ฆฐ์ง/์คํฌํ ๐
๊ฒ์ํ ์์
- "์ด๋ฒ ์ฃผ 5๊ณณ ๋ฐฉ๋ฌธํ๊ธฐ"
- "์์ธ 25๊ฐ ๊ตฌ ์ ํจํ๊ธฐ"
- "์นดํ ๋ง์คํฐ: 100๊ฐ ์นดํ ๋ฐฉ๋ฌธ"
๋ฐฉ๋ฌธ ์ธ์ฆ
- ์์น ๊ธฐ๋ฐ ์ฒดํฌ์ธ (GPS ํ์ฉ)
- ์ธ์ฆ์ท ์ ๋ก๋ (์ต์ )
- ์คํฌํ ์๋ ์ ๋ฆฝ
๋ณด์ ์์คํ
- ๋ฑ์ง ์์ง
- ๋ ๋ฒจ ์์คํ (Bronze/Silver/Gold/Platinum)
- ๋ญํน ๋ณด๋ (์ฃผ๊ฐ/์๊ฐ/์ ์ฒด)
3. ๊ฐ์ธํ ๊ธฐ๋ฅ ๐ค
3-1. AI ์ถ์ฒ ์์คํ
๋ฐ์ดํฐ ๋ถ์
- ๋ด ์ ์ฅ ํจํด ๋ถ์
- ์ ํธ ์นดํ ๊ณ ๋ฆฌ
- ์ฃผ๋ก ๋ฐฉ๋ฌธํ๋ ์ง์ญ
- ์ ์ฅ ์๊ฐ๋ ํจํด
- ์น๊ตฌ๋ค์ ์ทจํฅ ๊ต์งํฉ
์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ
- ํ์ ํํฐ๋ง (๋น์ทํ ์ทจํฅ ์ ์ ๊ธฐ๋ฐ)
- ์ฝํ ์ธ ๊ธฐ๋ฐ ํํฐ๋ง (์นดํ ๊ณ ๋ฆฌ, ์ง์ญ)
- ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋ธ
UI
- "๋น์ ์ด ์ข์ํ ๋งํ ๊ณณ" ์น์
- ํ ํ๋ฉด์ ๊ฐ์ธํ ์นด๋
- ์ฃผ๊ฐ ์ถ์ฒ (๋งค์ฃผ ์์์ผ ์๋ฆผ)
3-2. ์ค๋งํธ ์๋ฆผ ๐
์์น ๊ธฐ๋ฐ ์๋ฆผ
- ์ ์ฅํ ์ฅ์ ๊ทผ์ฒ 500m ์ด๋ด ์ง์ ์ ์๋ฆผ
- "๊ฐ๊น์ด ๊ณณ์ ์ ์ฅํ์ [์ฅ์๋ช ]์ด ์์ด์!" ํธ์
ํธ๋ ๋ ์๋ฆผ
- ์๋ก์ด ํซํ๋ ์ด์ค ์๋ฆผ
- ๋ด๊ฐ ํ๋ก์ฐํ ํค์๋ ๊ธ์์น ์
- ์น๊ตฌ๊ฐ ๋ด ๊ทผ์ฒ ์ฅ์ ์ ์ฅ ์
๋ฆฌ๋ง์ธ๋
- "์ ์ฅ๋ง ํ๊ณ ์ ๊ฐ ๊ณณ" ๋ฆฌ๋ง์ธ๋ (์ 1ํ)
- "3๊ฐ์ ์ ์ ์ฅํ [์ฅ์๋ช ], ์์ง ์ ๊ฐ๋ณด์ จ๋์?"
4. ํธ์ ๊ธฐ๋ฅ ๐ ๏ธ
4-1. ์ธ๋ถ ์ฑ ์ฐ๋
๊ธธ์ฐพ๊ธฐ
- ์นด์นด์ค๋งต ์ฑ์ผ๋ก ๊ธธ์ฐพ๊ธฐ
- ๋ค์ด๋ฒ์ง๋ ์ฑ์ผ๋ก ๊ธธ์ฐพ๊ธฐ
- ํฐ๋งต ์ฐ๋ (์ต์ )
์์ฝ ์์คํ
- ๋ค์ด๋ฒ ์์ฝ ์ฐ๋
- ์นด์นด์ค ์์ฝ ์ฐ๋
- ์ ํ ๊ฑธ๊ธฐ (์ํฐ์น)
๊ณต์
- ์นด์นด์คํก ๊ณต์
- Instagram DM ๊ณต์
- URL ๋ณต์ฌ
4-2. ํต๊ณ ๋์๋ณด๋ ๐
๋ด ํ๋ ๋ถ์
- ์ด ์ ์ฅ ์ฅ์ ์
- ์ค์ ๋ฐฉ๋ฌธํ ๊ณณ ์
- ๋ฐฉ๋ฌธ์จ (%)
- ๊ฐ์ฅ ๋ง์ด ์ ์ฅํ ์นดํ ๊ณ ๋ฆฌ
- ์ง์ญ๋ณ ๋ถํฌ ์ง๋
์๊ฐ ๋ฆฌํฌํธ
- ์ด๋ฒ ๋ฌ ์๋ก ๋ฐ๊ฒฌํ ๊ณณ N๊ฐ
- ๊ฐ์ฅ ์ธ๊ธฐ ์์๋ ์ฅ์ TOP 5
- ์น๊ตฌ๋ค๊ณผ ๊ณตํต ๊ด์ฌ์ฌ
๋ฐ์ดํฐ ์๊ฐํ
- ์ฐจํธ (ํ์ด, ๋ฐ, ๋ผ์ธ)
- ํํธ๋งต (์ง์ญ๋ณ ํ๋)
- ํ์๋ผ์ธ
4-3. ๊ณ ๊ธ ๊ฒ์ ๐
ํํฐ ์ต์
- ์ง์ญ (์/๊ตฌ/๋)
- ์นดํ ๊ณ ๋ฆฌ (๋ค์ค ์ ํ)
- ํค์๋ (์ฅ์๋ช , ๋ฉ๋ชจ, ํ๊ทธ)
- ๋ฐฉ๋ฌธ ์ฌ๋ถ
- ์ ์ฅ ๋ ์ง ๋ฒ์
- ๋ณ์
๋ถ๊ฐ ํํฐ
- ์ฃผ์ฐจ ๊ฐ๋ฅ ์ฌ๋ถ
- ์์ฝ ํ์ ์ฌ๋ถ
- ๊ฐ๊ฒฉ๋ (โฉ/โฉโฉ/โฉโฉโฉ)
- ์์ ์ค (ํ์ฌ ์์ ์๊ฐ ๊ธฐ์ค)
๊ฒฐ๊ณผ ํ์
- ๋ฆฌ์คํธ๋ทฐ / ๊ทธ๋ฆฌ๋๋ทฐ / ์ง๋๋ทฐ
- ์ ๋ ฌ: ๊ด๋ จ๋์/์ต์ ์/์ธ๊ธฐ์/๊ฑฐ๋ฆฌ์
๐ป ๊ธฐ์ ์คํ
Frontend
-
Framework: Flutter
- Cross-platform (iOS/Android)
- ๋น ๋ฅธ ๊ฐ๋ฐ ์๋
- Native ์ฑ๋ฅ
-
์ํ ๊ด๋ฆฌ: Riverpod or Bloc
-
๋ก์ปฌ DB: Hive or Drift (SQLite)
-
HTTP Client: Dio
-
์ง๋: flutter_naver_map or google_maps_flutter
Backend
-
Framework: Spring Boot 3.x
- Java 17 or 21
- Spring Data JPA
- Spring Security (JWT ์ธ์ฆ)
-
Database
- PostgreSQL (์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค)
- Redis (์บ์ฑ, ์ธ์ )
- Elasticsearch (๊ฒ์ - ์ ํ์ฌํญ)
-
API Integration
- ๋ค์ด๋ฒ ์ง๋ API
- Instagram Graph API (์ ํ์ )
- Upstage API (NLP/OCR)
Infrastructure
- Server: Synology NAS (์ด๊ธฐ) โ AWS/GCP (ํ์ฅ ์)
- Container: Docker
- Reverse Proxy: Traefik
- CI/CD: GitHub Actions
- Monitoring: Prometheus + Grafana (์ ํ)
์ถ๊ฐ ๋๊ตฌ
- ์ด๋ฏธ์ง ์ฒ๋ฆฌ: ImageMagick, Pillow
- NLP: Upstage API, KoNLPy (ํ๊ตญ์ด ์ฒ๋ฆฌ)
- Push Notification: Firebase Cloud Messaging
- Analytics: Google Analytics, Mixpanel
๐๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง (์ด์)
์ฃผ์ ํ ์ด๋ธ
1. users (์ฌ์ฉ์)
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
nickname VARCHAR(50),
profile_image_url TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);2. places (์ฅ์)
CREATE TABLE places (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
address VARCHAR(300),
road_address VARCHAR(300),
latitude DECIMAL(10, 8),
longitude DECIMAL(11, 8),
category VARCHAR(50),
naver_place_id VARCHAR(100),
phone VARCHAR(20),
opening_hours TEXT,
naver_url TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
UNIQUE(latitude, longitude) -- ์ค๋ณต ์ฅ์ ๋ฐฉ์ง
);3. instagram_posts (์ธ์คํ๊ทธ๋จ ๊ฒ์๋ฌผ)
CREATE TABLE instagram_posts (
id BIGSERIAL PRIMARY KEY,
place_id BIGINT REFERENCES places(id),
instagram_url TEXT UNIQUE NOT NULL,
thumbnail_url TEXT,
caption TEXT,
author VARCHAR(100),
posted_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW()
);4. user_bookmarks (์ฌ์ฉ์ ๋ถ๋งํฌ)
CREATE TABLE user_bookmarks (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id),
place_id BIGINT REFERENCES places(id),
folder VARCHAR(50) DEFAULT 'default', -- '๊ฐ๊ณ ์ถ์ ๊ณณ', '๊ฐ๋ณธ ๊ณณ' ๋ฑ
memo TEXT,
rating INT CHECK (rating BETWEEN 1 AND 5),
visited BOOLEAN DEFAULT FALSE,
visited_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(user_id, place_id)
);5. keywords (ํค์๋/ํ๊ทธ)
CREATE TABLE keywords (
id BIGSERIAL PRIMARY KEY,
keyword VARCHAR(100) UNIQUE NOT NULL,
count INT DEFAULT 1,
trend_score DECIMAL(10, 2) DEFAULT 0, -- ํธ๋ ๋ ์ ์
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);6. place_keywords (์ฅ์-ํค์๋ ์ฐ๊ฒฐ)
CREATE TABLE place_keywords (
place_id BIGINT REFERENCES places(id),
keyword_id BIGINT REFERENCES keywords(id),
PRIMARY KEY (place_id, keyword_id)
);2์ฐจ ์ ๋ฐ์ดํธ ์ถ๊ฐ ํ ์ด๋ธ
7. user_follows (์น๊ตฌ ๊ด๊ณ)
CREATE TABLE user_follows (
follower_id BIGINT REFERENCES users(id),
following_id BIGINT REFERENCES users(id),
created_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (follower_id, following_id)
);8. collections (์ปฌ๋ ์ )
CREATE TABLE collections (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id),
title VARCHAR(200) NOT NULL,
description TEXT,
cover_image_url TEXT,
is_public BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);9. collection_places (์ปฌ๋ ์ -์ฅ์)
CREATE TABLE collection_places (
collection_id BIGINT REFERENCES collections(id),
place_id BIGINT REFERENCES places(id),
order_num INT,
PRIMARY KEY (collection_id, place_id)
);๐ฑ API ์๋ํฌ์ธํธ (์ด์)
์ธ์ฆ (Authentication)
POST /api/auth/register- ํ์๊ฐ์POST /api/auth/login- ๋ก๊ทธ์ธPOST /api/auth/logout- ๋ก๊ทธ์์POST /api/auth/refresh- ํ ํฐ ๊ฐฑ์
์ฅ์ (Places)
GET /api/places- ์ฅ์ ๋ชฉ๋ก ์กฐํ (ํ์ด์ง, ํํฐ๋ง)GET /api/places/{id}- ์ฅ์ ์์ธ ์กฐํPOST /api/places- ์ฅ์ ๋ฑ๋ก (์ธ์คํ๊ทธ๋จ URL)DELETE /api/places/{id}- ์ฅ์ ์ญ์ (๊ด๋ฆฌ์)
๋ถ๋งํฌ (Bookmarks)
GET /api/bookmarks- ๋ด ์ ์ฅ ์ฅ์ ๋ชฉ๋กPOST /api/bookmarks- ์ฅ์ ์ ์ฅPUT /api/bookmarks/{id}- ๋ถ๋งํฌ ์์ (๋ฉ๋ชจ, ๋ฐฉ๋ฌธ ์ฌ๋ถ ๋ฑ)DELETE /api/bookmarks/{id}- ์ ์ฅ ์ทจ์
ํผ๋ (Feed)
GET /api/feed/latest- ์ต์ ์ถ๊ฐ ์ฅ์GET /api/feed/popular- ์ธ๊ธฐ ์ธ์คํ ํผ๋GET /api/feed/trending- ๋ ์ค๋ฅด๋ ํค์๋
๊ฒ์ (Search)
GET /api/search/places- ์ฅ์ ๊ฒ์GET /api/search/keywords- ํค์๋ ๊ฒ์POST /api/search/naver- ๋ค์ด๋ฒ ์ง๋ ๊ฒ์ (ํ๋ก์)
ํค์๋ (Keywords)
GET /api/keywords/trending- ํธ๋ ๋ ํค์๋GET /api/keywords/{keyword}/places- ํค์๋๋ณ ์ฅ์
์ง๋ (Map)
GET /api/map/places- ์ง๋์ฉ ์ฅ์ ๋ชฉ๋ก (๋ฐ์ด๋ฉ ๋ฐ์ค)GET /api/map/clusters- ํด๋ฌ์คํฐ ๋ฐ์ดํฐ
2์ฐจ: ์์ (Social)
GET /api/users/{id}/bookmarks- ํ ์ ์ ์ ์ฅ ์ฅ์POST /api/follow/{userId}- ์น๊ตฌ ์ถ๊ฐDELETE /api/follow/{userId}- ์น๊ตฌ ์ญ์ GET /api/friends/feed- ์น๊ตฌ ํผ๋
2์ฐจ: ์ปฌ๋ ์ (Collections)
GET /api/collections- ์ปฌ๋ ์ ๋ชฉ๋กPOST /api/collections- ์ปฌ๋ ์ ์์ฑPUT /api/collections/{id}- ์ปฌ๋ ์ ์์ DELETE /api/collections/{id}- ์ปฌ๋ ์ ์ญ์
๐ ๋ณด์ ๊ณ ๋ ค์ฌํญ
์ธ์ฆ/์ธ๊ฐ
- JWT ๊ธฐ๋ฐ ์ธ์ฆ
- Access Token (15๋ถ) + Refresh Token (7์ผ)
- HTTPS ๊ฐ์
๋ฐ์ดํฐ ๋ณดํธ
- ๋น๋ฐ๋ฒํธ ์ํธํ (BCrypt)
- ๊ฐ์ธ์ ๋ณด ์ํธํ (AES-256)
- SQL Injection ๋ฐฉ์ง (Prepared Statement)
- XSS ๋ฐฉ์ง (์ ๋ ฅ ๊ฒ์ฆ, ์ถ๋ ฅ ์ธ์ฝ๋ฉ)
API ๋ณด์
- Rate Limiting (์ฌ์ฉ์๋ณ, IP๋ณ)
- CORS ์ค์
- API Key ๊ด๋ฆฌ (๋ค์ด๋ฒ, Instagram)
๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ
- ๊ฐ์ธ์ ๋ณด ์์ง ์ต์ํ
- ์ด์ฉ์ฝ๊ด ๋ฐ ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ๋ฐฉ์นจ
- ํํด ์ ๋ฐ์ดํฐ ์ญ์ ์ ์ฑ
๐ ๋น์ฆ๋์ค ๋ชจ๋ธ (ํฅํ ๊ณ ๋ ค์ฌํญ)
๋ฌด๋ฃ ์๋น์ค
- ๊ธฐ๋ณธ ์ฅ์ ์ ์ฅ/๊ด๋ฆฌ
- ํ ํผ๋ ๋ฐ ํธ๋ ๋ ํ์ธ
- ์ง๋๋ทฐ (๊ด๊ณ ํฌํจ)
ํ๋ฆฌ๋ฏธ์ ๊ตฌ๋ (์ โฉ4,900 ์์)
- ๊ด๊ณ ์ ๊ฑฐ
- ๋ฌด์ ํ ์ปฌ๋ ์ ์์ฑ (๋ฌด๋ฃ: 5๊ฐ ์ ํ)
- ๊ณ ๊ธ ํต๊ณ ๋์๋ณด๋
- ์ฐ์ ๊ณ ๊ฐ ์ง์
์ ํด ๋ฐ ๊ด๊ณ
- ๋ง์ง/์นดํ ํ๋ก๋ชจ์ ๊ด๊ณ
- ๋ค์ด๋ฒ ์์ฝ ์์๋ฃ
- ์ ํด ๋ง์ผํ (์ฟ ํก, ์ผ๋์ ๋ฑ)
๐ฏ ๋ก๋๋งต
Phase 1: MVP (1-2๊ฐ์)
- โ ์ธ์คํ๊ทธ๋จ ๊ณต์ ์ฐ๋
- โ ์ฅ์ ๋ฑ๋ก ๋ฐ ์ ์ฅ
- โ ํ ํผ๋ (์ต์ /์ธ๊ธฐ/ํธ๋ ๋)
- โ ๊ธฐ๋ณธ ์ง๋๋ทฐ
- โ ๋ค์ด๋ฒ ์ง๋ API ์ฐ๋
Phase 2: ์์ & ํ๋ ์ด์ (2-3๊ฐ์)
- ์น๊ตฌ ๊ธฐ๋ฅ
- ์ปฌ๋ ์ ์์คํ
- ํ์คํ/๋ฉ๋ชจ
- ์ฑ๋ฆฐ์ง/์คํฌํ
Phase 3: AI & ๊ฐ์ธํ (3-4๊ฐ์)
- AI ์ถ์ฒ ์์คํ
- ์ค๋งํธ ์๋ฆผ
- ํต๊ณ ๋์๋ณด๋
- ๊ณ ๊ธ ๊ฒ์
Phase 4: ํ์ฅ (4-6๊ฐ์)
- ๋ค๊ตญ์ด ์ง์
- ํด์ธ ์๋น์ค ํ์ฅ
- ํํธ๋์ญ ํ๋
- ํ๋ฆฌ๋ฏธ์ ๊ตฌ๋ ์ถ์
๐งช ํ ์คํธ ๊ณํ
Unit Test
- Spring Boot Service Layer
- Repository Layer
- Utility Functions
Integration Test
- API ์๋ํฌ์ธํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
- ์ธ๋ถ API ์ฐ๋ (Mock)
E2E Test
- Flutter Widget Test
- ์ฃผ์ ์ฌ์ฉ์ ํ๋ก์ฐ
- ํ์๊ฐ์ /๋ก๊ทธ์ธ
- ์ฅ์ ๋ฑ๋ก
- ๋ถ๋งํฌ ์ ์ฅ/์ญ์
Performance Test
- API ์๋ต ์๊ฐ (< 500ms)
- ๋์ ์ ์์ ์ฒ๋ฆฌ (1000๋ช )
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ต์ ํ
๐ ์ฑ๊ณต ์งํ (KPI)
์ฌ์ฉ์ ์งํ
- MAU (์๊ฐ ํ์ฑ ์ฌ์ฉ์): 10,000๋ช (6๊ฐ์ ๋ชฉํ)
- DAU/MAU ๋น์จ: 30% ์ด์
- ํ๊ท ์ฌ์ฉ ์๊ฐ: 5๋ถ/์ผ
์ฐธ์ฌ๋ ์งํ
- ํ๊ท ์ ์ฅ ์ฅ์ ์: 20๊ฐ/์ฌ์ฉ์
- ์ธ์คํ๊ทธ๋จ ๊ณต์ ์ฌ์ฉ๋ฅ : 70%
- ์น๊ตฌ ์ด๋์จ: 30%
๋ฆฌํ ์ ์งํ
- Day 1 Retention: 40%
- Day 7 Retention: 20%
- Day 30 Retention: 10%
๐ก ์ฐจ๋ณํ ํฌ์ธํธ
๊ฒฝ์ ์ฑ ๋๋น ๊ฐ์
- ์ธ์คํ๊ทธ๋จ ์๋ฒฝ ์ฐ๋: ๊ณต์ ํ ๋ฒ์ผ๋ก ์ฆ์ ๋ฑ๋ก
- ํธ๋ ๋ ์ค์ฌ: ์ค์๊ฐ ํซํ๋ ์ด์ค ๋ฐ๊ตด
- ์์ ํ๋ ์ด์ : ์น๊ตฌ๋ค์ ์ทจํฅ ๊ธฐ๋ฐ ์ถ์ฒ
- ํ๊ตญ ์์ฅ ํนํ: ๋ค์ด๋ฒ ์ง๋, ํ๊ตญ์ด NLP ์ต์ ํ
์ฃผ์ ๊ฒฝ์ ์๋น์ค
- ๋ง๊ณ ํ๋ ์ดํธ (๋ง์ง ํนํ)
- ํฌ์ (์นดํ/์ฅ์ ํ๋ ์ด์ )
- ๋ค์ด๋์ฝ๋
- ๋ค์ด๋ฒ MYํ๋ ์ด์ค
๐ ๋ค์ ๋จ๊ณ
์ฆ์ ์งํ ์ฌํญ
- ์ฑ ์ด๋ฆ ์ต์ข ํ์ (PlaceLog)
- ๋๋ฉ์ธ ๊ตฌ๋งค (placelog.kr / placelog.app)
- ๋์์ธ ๋ชฉ์ ์ ์ (Figma)
- ๋ค์ด๋ฒ ์ง๋ API ํค ๋ฐ๊ธ
- Instagram Graph API ์กฐ์ฌ
๊ฐ๋ฐ ์ค๋น
- GitHub Repository ์์ฑ
- ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค๊ณ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ERD ์์ธํ
- API ๋ช ์ธ์ ์์ฑ (Swagger/OpenAPI)
- CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
๋ง์ผํ ์ค๋น
- ์ธ์คํ๊ทธ๋จ ๊ณ์ ๊ฐ์ค
- ๋ฒ ํ ํ ์คํฐ ๋ชจ์ง ๊ณํ
- ์ฑ์คํ ์ด ๋ฑ๋ก ์ค๋น (iOS/Android)
๐ Contact & Resources
๋ฌธ์ ๋ฒ์ : v1.1
์ต์ข
์์ : 2026.01.09
๋ค์ ์
๋ฐ์ดํธ ์์ : ๋์์ธ ๋ชฉ์
๋ฐ ์์ธ API ๋ช
์ธ์
Metadata
Metadata
Assignees
Labels
Type
Projects
Status