์บ ํ์ ์ ํฌ CampUs ์ ํจ๊ป!
๋ค๋ฅธ ์ฌ๋๋ค์ ํ๊ธฐ
๋ ์ํ๋ ์บ ํ ์ฅ์์ ๋ ์จ
, ๊ทธ๋ฆฌ๊ณ ์บ ํ ์ฅ์์ ์ ํ
, ์ด์ ๊ธฐ๊ฐ
, ํธ์ ์์ค
,
ํ
๋ง ํ๊ฒฝ
, ์ฒดํ ํ๋ก๊ทธ๋จ
๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์บ ํ ์ ๋ณด๋ฅผ ํ์ฉํด ๋์๊ฒ ์๋ง๋ ์บ ํ ๊ณํ์ ์ธ์ฐ์๋ ๊ฑด ์ด๋จ๊น์?
ํ์ฌ๋ ๋ฐฑ์๋ ์๋ฒ์ ์ง์์ด ๋ถ๊ฐํ์ฌ ์ํ ํ ์๋น์ค ์ด์ฉ์ ์ ์ฝ์ด ์์ต๋๋ค.
- โ TimeLine | ํ์๋ผ์ธ
- ๐ช Architecture | ์ํคํ ์ณ
- ๐กFeature | ๊ตฌํ ๊ธฐ๋ฅ
- ๐ผ๏ธ ERD | ๋ฐ์ดํฐ ๊ตฌ์กฐ๋
- ๐ ๏ธ Stacks | ์ฌ์ฉ ์คํ
- โฝ Trouble Shooting | ํธ๋ฌ๋ธ ์ํ
- ๐ช PATCH NOTES | ํจ์น ๋ ธํธ
- ๐จโ๐ป๐ฉโ๐ปWho Made It | ์๋น์ค๋ฅผ ๊ฐ๊พผ ์ฌ๋๋ค
- ์ด ํ๋ก์ ํธ ๊ธฐ๊ฐ 11์ 4์ผ ~ 12์ 15์ผ (6์ฃผ)
- 12์ 10์ผ ๋ฐฐํฌ ๋ฐ ๋ฐ์นญ
- 24๋ 1์ S3๋ก ์ฌ๋ฐฐํฌ
๊ฑฑ์ ๋ง์ธ์. CampUs์์๋ ์ง์ญ ๊ฒ์์ผ๋ก ์บ ํ์ฅ ์กฐํ ์, ๊ธ์ผ๋ก๋ถํฐ ์ต๋ 8์ผ๊น์ง์ ๋ ์จ ์ ๋ณด๋ฅผ ์ ๊ณตํด๋๋ฆฝ๋๋ค.
๋ฏธ๋ฆฌ ํ์ธํ์๊ณ ๋์ฑ ๋ ์ฆ๊ฑฐ์ด ์บ ํ์ด ๋์ค ์ ์์ ๊ฒ๋๋ค.
์ ํฌ ์๋น์ค์์๋ ์์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ธ์ฃผ ๋ ์จ๊ฐ ๊ฐ์ฅ ์ข์ ์ง์ญ์ ์ถ์ฒํด์ฃผ๊ณ , ํด๋น ์ง์ญ์ ์บ ํ์ฅ๋ค์
์๊ฐ์์ผ ๋๋ฆฝ๋๋ค.
CampUs์์๋ ์ง์ญ๋ณ ๊ฒ์ ๋ฟ๋ง ์๋๋ผ, ํค์๋ ๊ฒ์, ์นดํ
๊ณ ๋ฆฌ ๋ณ ์บ ํ์ฅ ์กฐํ, ๊ทธ๋ฆฌ๊ณ ํ์ฌ ์ธ๊ธฐ๊ฐ ๋ง์ ์บ ํ์ฅ์
์ ๊ณตํจ์ผ๋ก์จ, ์บ ํ๋ค์ ์ ํ์ ๋ค์ฑ๋กญ๊ฒ ํด๋๋ฆฝ๋๋ค.
ํ ์์น ์กฐํ์ ๋์ํ์๋ฉด, ๋ด ์ฃผ๋ณ 30km ๋ด์ ์ด๋ค ์บ ํ์ฅ์ด ์๋์ง ํ์ธํ ์ ์์ด์!
๊ทผ๊ต์ ์์นํด์๋ ์บ ํ์ฅ ์ ๋ณด๋ ์ ๊ณตํด๋๋ ค์~
์ ํฌ CampUs์ ์ฐ๊ฒฐ๋ ์บ ํ์ฅ ์ ๋ณด๋ ์์น, ์์
๋ ์ง, ๋ฐ๋ ค๋๋ฌผ ๋ฐ์
, ๋ถ๋์์ค, ์ฃผ๋ณ์ด์ฉ์์ค ๋ฑ์ ๋ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณต๋๋ฆฌ๊ณ
์์ผ๋ฉฐ, ํด๋น ์บ ํ์ฅ์ ์ด์ฉํ๋ ์ฌ๋๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ๋ณด๊ณ , ๋ฐ๋๋ก ์ฐ๊ธฐ๋ ๊ฐ๋ฅํด์!
โ๏ธ ์ด ์บ ํ์ฅ์ผ๋ก ์ด๋ฒ์ฃผ ํ ์์ผ์ ๋ ๋ ์์ ์ธ๋ฐ ๋ฐ๋ก ๋ณผ ์ ์๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ์ด์
๋ง์์ ๋๋ ์บ ํ์ฅ์ ์ฐํด์ ์ฑ๊ฒจ์๋ณด๊ณ , ๋ ๋์๊ฐ ์ ๋ง๋ก ๊ฐ๊ณ ์ถ์ ์บ ํ์ฅ์ ์ฌํ์ผ์ ์ผ๋ก ๋ฑ๋กํด ๋ณด์ธ์!
CampUs๊ฐ ์ฌ๋ฌ๋ถ์ ์บ ํ์ผ์ ์ ๊ด๋ฆฌํด๋๋ฆฝ๋๋ค.
Typescript
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์
์ ์ธ์ด๋ก ๋ฐํ์ ์ ๋ณ์์ ํ์
์ด ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์
์ฝ๋๋ฅผ ์คํ ์ํค๊ธฐ์ ๊น์ง ์๋ฌ๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ์น๋ช
์ ์
๋๋ค.
๊ทธ์ ๋ฐํด TypeScript๋ ์ ์ ํ์
์ธ์ด๋ก ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ์ ์๋ ์ฅ์ ์ด ์์ผ๋ฉฐ
๋ช
์์ ์ธ ์ ์ ํ์
์ง์ ์ ๊ฐ๋ฐ์์ ์๋๋ฅผ ๋ช
ํํ๊ฒ ์ฝ๋๋ก ์์ฑ ํ ์ ์๊ณ
์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ์์ธกํ ์ ์๊ฒ ํ๋ฉฐ ๋๋ฒ๊น
์ด ์ฝ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
Recoil
props drilling์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ค๋ฅธ์ปดํฌ๋ํธ์ ์ฌ์ฉ๋๋ ์ ์ญ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๋ค๊ณ ํ๋จํ์์ต๋๋ค.
redux-thunk / redux-toolkit๋ ์์์ง๋ง ์๋ฒ์ํ ๊ด๋ฆฌ๋ฅผ react-query๊ฐ ํ๊ธฐ ๋๋ฌธ์ ์ข ๋ ๊ฐ๋ณ๊ณ ์ง๊ด์ ์ธ recoil์ ์ ํํ์์ต๋๋ค.
React Query
์บ ํ์ฅ/๋ ์จ api ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ํ๊ธฐ์ํด์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
useState/useEffect ๋ฑ ์ฝ๋๋ค์ ์ค๋ณต๋ ์ค์ฌ์ฃผ๊ณ , ์บ์ฑ์ ํด์ฃผ๊ธฐ๋๋ฌธ์ ๋ ๋์ ์ฌ์ฉ์ํ๊ฒฝ์ ๋ง๋ค์ ์์์ต๋๋ค.
์บ ํ์ฅ / ๋ ์จAPI ์ฌ์ฉ
1. ์๊ตฌ์ฌํญ
1) ์ฌ์ฉ๊ฐ๋ฅํ ์บ ํ์ฅ / ๋ ์จ api ์ฐพ๊ธฐ
2) ์๋น์ค ๋ชฉ์ ์ ๋ง๋ api ์ ๋ณ.
2. ์ ํ์ง
์บ ํ์ฅ : ๊ณต๊ณตData / gocamping.
๋ ์จ : ๊ณต๊ณตData / openWetherAPI / accuweatherAPI
3. ์๊ฒฌ ์กฐ์จ/๊ฒฐ์
- ์บ ํ์ฅ
๊ณต๊ณตdata๋ ์ ๊ตญ ์บ ํ์ฅ๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ก ํ๋จ์ด ๋์ด goCamping api๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ .
์ดํ ์๋น์ค ๋ชฉ์ ์ ๋ง๋ ๋ฐ์ดํฐ๋ค์ ์ ๋ณํด์ ์ฌ์ฉํจ.
- ๋ ์จ
๊ณต๊ณตdata์ ๊ฒฝ์ฐ ์๋น์ค ๋ชฉ์ ์ ๋ง๋ ๋ฐ์ดํฐ๋ผ๊ธฐ ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ถ์์ ์๋ง๋ api๋ก ์๊ฐ์ด ๋์์.
(์ ์ค๋, 5.0m์ง์ค์จ๋, ํ์ ํ์ง๊ฒ์ฌ ๋ฑ ๋ฐ์ดํฐ๊ฐ ์๋ณด์๋ ๋ง์ง ์๋ค๊ณ ํ๋จํจ)
accuweather์ ๊ฒฝ์ฐ ์๋ณด์ผ์ด 5์ผ๋ก openWeather๋ณด๋ค ์๋์ ์ผ๋ก ์งง์์ ์ต์ข
์ ์ผ๋ก openWeatherAPI๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ .
ํด์ธ์ api์ด๋ค ๋ณด๋ ์ขํ๊ฐ ์ค์ ์ด ์์ธ๋ก ์ง์ ๋์ด ์์ด ์๋น์ค์ ๋ง๊ฒ
์ ๊ตญ์ ํน๋ณ/๊ด์ญ์์ ๋๋ก ๋๋ ์ดํ ์ขํ๊ฐ์ค์ ์ ํตํ์ฌ ์ง์ญ์ ๋ง๋ ๋ ์จ์ ํ์ํ ๋ฐ์ดํฐ api๋ฅผ ๊ฐ์ ธ์ด
๋ํ apiCall์ด ํ๋ฃจ 1000๊ฑด์ผ๋ก ์ ํ์ด ๋์ด ์์ด, ํ๋ก ํธ์์ ๊ณ์ ํธ์ถํ๋ ๊ฒ์ด ์๋
๋ฐฑ์๋ ์๋ฒ์ api์ ๋ณด๋ค์ ๋ด์์ FE๋ BE๋ก apiํธ์ถ์ ํ๊ณ , BE๋ ์ง์ ๋ ์๊ฐ์ apiํธ์ถ์ ํ์ฌ ํจ์จ์ ์ผ๋ก ์ด์ ํจ.
๋ฐ์ดํฐ api์ฌ์ฉ / ์นด์นด์ค ๋งต ์ด์ฉ
1. ๋ฌธ์ ์ํฉ
์นด์นด์ค๋งต ์ฌ์ฉ์ X,Y์ขํ์ ์บ ํ์ฅ ์ขํ๊ฐ ๋ด๊ธฐ์ง ์๋ ์๋ฌ๊ฐ ๋ฐ์ํจ.
2. ๋ฌธ์ ํด๊ฒฐ๊ณผ์
1 ) useEffect๋ก ์นด์นด์ค๋งต์ด ์คํ์ ํ๋ค ๋ณด๋, ๋ฐฑ์๋์์ ์ขํ๊ฐ์ ๋ฐ์์ ๋ณ์๋ก
์ฒ๋ฆฌํด ์ค๋ค ํ์ฌ๋ ๋งตcomponent๋ Mount๋์ด ์๊ธฐ ๋๋ฌธ์ ๋งต์ด ๋์ํ์ง ์๋๋ค๊ณ ํ๋จ.
2 ) useEffect์ธ๋ถ์์ ๋ณ์(X,Y)๊ฐ ๋ฐ๋๋๋ง๋ค ์ฌ ๋๋๋ง์ ํ ์ ์๋๋ก ์์กด์ฑ๋ฐฐ์ด์
๋ณ์ ๊ฐ ์ถ๊ฐ ๋ฐ ์ผ์ ๊ธฐ๊ฐ ์ดํ์ ๋ค์ ๋์ํ๋๋ก setTimeoutํจ์ ๊ตฌํ.
3 ) ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋์ํ์ง ์๊ณ ๋๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
4 ) ๋งตcomponent์ ์ขํ ๊ฐ์ ํ๋์ฝ๋ฉ์ผ๋ก ์ซ์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ ๋์ํ๋ค๋ ๊ฒ์ ํ์ธ ํ ํ, ๋ฐฑ์๋์์ ๋ฐ์์ค๋ api๋ฐ์ดํฐ๋ฅผ ํ์ธ ํจ.
5-1 ) ํ๋ก ํธ : ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ฐ์์ค๋ ๊ฒ์ด ์๋ ํ๋ฒ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ณ์์ ๋ด์ ํ ์ฌ์ฉํ์ฌ undefined์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋์๊ณ ๊ฒฝ๋ก๋ ๋ง์ง ์์์ ํ์ธ.
5-2 )๋ฐฑ์๋ : ๊ฒฝ๋ก ์์ ์ด ๋์์ผ๋ ํ๋ก ํธ์ ์ํต์ ํ์ง ๋ชปํ ๋ฌธ์ ๊ฐ ์์์์ ํ์ธ.
6 ) ๋ฐ์ดํฐ ๊ฒฝ๋ก ์์ ํ์ฌ ๋งต ๊ตฌํ
3. ์๊ฒฌ์กฐ์จ ๋ฐ ๊ฒฐ์
1 ) ํ๋ก ํธ ์์๋ ๊ฐ๋ฅํ๋ฉด ๋ฐ์ดํฐ๋ฅผ 2์ค์ผ๋ก ๋ฐ์์ค์ง ์๋๋ก ํ๊ธฐ๋ก ํจ.
2 ) ๋ฐฑ์๋ ์์๋ ์ฌ์ํ ๊ฒฝ๋ก๋ณ๊ฒฝ๋ ์ํต ํ ์์ ํ๊ธฐ๋ก ํจ.
openWether API request scheduling
1. ์๊ตฌ์ฌํญ
๋ ์จ ์ ๋ณด๋ ๋งค์ผ ์
๋ฐ์ดํธ ๋๋ฏ๋ก, ๋น์ผ+7์ผ์ ๋ ์จ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด ์๋ํ์ ํ์์ฑ
2. ๋ฌธ์ ์ํฉ
๋งค์ผ ์ฌ๋์ด ์ ์ํ์ง ์๋ ์๊ฐ์ request ์์ฒญ์ ๋ณด๋ด๋๊ฒ์ ์๋ฒ๊ด๋ฆฌ์ ์ด์์ ์์ด์ ํจ์จ์ด ์ข์ง ๋ชปํจ
3. ์ ํ์ง ๋ฐ ์๊ฒฌ์กฐ์จ
ํ์ ํ ์๊ฐ๋์ธ ์๋ฒฝ5์๋ง๋ค openWether API์ ์์ฒญ์ ๋ณด๋ธ ํ DB์ญ์ ํ ์๋ก ์์ฑ
(๋งค์ผ ๊ธฐ์จ๊ณผ ๋ ์จ ์ ๋ณด๊ฐ ๋ณํ๊ธฐ ๋๋ฌธ์ ์
๋ฐ์ดํธ ๋์ ์ญ์ ํ ์์ฑ์ผ๋ก ์ ํ)
1) node-cron์ ์ด์ฉํ์ฌ server.ts์ ์์ฝ์ฝ๋๋ฅผ ๋ฃ์ด์ ์คํ
2) node-schedule๋ฅผ ์ด์ฉํ์ฌ server.ts์ ์์ฝ์ฝ๋๋ฅผ ๋ฃ์ด์ ์คํ
์ง์ญ๋ณ ๋ฐ ์ฃผ์ ๋ณ ์บ ํ์ฅ ์กฐํ์ ์ด ์บ ํ์ฅ ๊ฐฏ์ ์กฐํ / ์ฑ๋ฅ ๊ฐ์
1. ์๊ตฌ์ฌํญ
doNm:๋์ด๋ฆ, numOfRows : ํ ํ์ด์ง์ ๋ค์ด๊ฐ ๊ฐฏ์, pageNo : ํ์ด์ง ์ซ์, sort : ์ ๋ ฌ ๊ฐ
์ง์ญ๋ณ ๋ฐ ์ฃผ์ ๋ณ ์บ ํ์ฅ ์กฐํ์ doNm, numOfRows, pageNo, sort์ ๊ฐ์ ๋ฐ์
๋๋น์ ์ ๊ทผํ์ฌ ํด๋น ์ปฌ๋ผ์ ๋ชจ๋ ์บ ํ์ฅ์ ์ซ์์ ํ์ด์ง๋ค์ด์
ํด์ ์บ ํ์ฅ์ ์ ๋ณด๋ฅผ ๋ณด๋ด์ค๋ค.
2. ๋ฌธ์ ์ํฉ
์บ ํ์ฅ ์กฐํ์ ํ์ด์ง๋ค์ด์
์ ํด์ ๋ณด๋ด๊ฒ ๋๋ค๋ฉด ์ด ์บ ํ์ฅ์ ์ซ์๋ฅผ ๋ฝ์ ๋ผ ์ ์๋ค.
3. ์ ํ์ง
1) MySQL ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ๊ตฌํ
2) ์ํ๋ผ์ด์ฆ ORM์ผ๋ก ๊ตฌํ
4 . ์๊ฒฌ ์กฐ์จ
1๋ฒ) MySQL ์ฟผ๋ฆฌ๋ฌธ์ ์ ์ฒด์กฐํ,ํ์ด์ง๋ค์ด์
์ฝ๋๋ฅผ ๋๋์ด ์์ฑํ์ฌ ์ด ๊ฐฏ์๋ฅผ ์กฐํ ํ ๋๋ ์ ์ฒด ์กฐํ ์ฟผ๋ฆฌ๋ฌธ ์ฌ์ฉ, ํ์ด์ง๋ค์ด์
์ ๊ตฌํ ํ ๋๋ ๋๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ํฉ์ณ์ ์ฌ์ฉ
2๋ฒ) ์ํ๋ผ์ด์ฆ ORM์ผ๋ก op.like๋ก ์ ์ฒด์กฐํ์,ํ์ด์ง๋ค์ด์
์ฝ๋๋ฅผ ๋๋์ด์ ๊ตฌํ
5. ์๊ฒฌ ๊ฒฐ์
์ํ๋ผ์ด์ฆ ORM์ ์ฌ์ฉ ํ ์ ์ค๋ณต ์ฝ๋๊ฐ ๋ฐ์ํ์ฌ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ธฐ ๋๋ฌธ์
์ค๋ณต์ฝ๋ ์์ด ์ฒ๋ฆฌ ๊ฐ๋ฅํ MySQL ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ ํ
- ver.0.1 : 2022-12-10 / ๋ฒ ํ ๋ฒ์ ๋ฐ์นญ ๋ฐ ์ ์ ํผ๋๋ฐฑ ํต๊ณ
- ver.1.0 : ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฐ ์๋ฒ ๋จ๊ณ ๋ฐฐํฌ (Develop)
์ด๋ฆ | ํฌ์ง์ | Github or Email |
---|---|---|
๊น์งํ | BackEnd (Leader) |
https://github.com/KJIHEON |
๋ฌธ์งํ | BackEnd |
https://github.com/JiHyeunM |
์ต์์ | BackEnd |
https://github.com/wonsunny |
์ด์์ | FrontEnd (Sub Leader) |
https://github.com/buddle6091 |
๋ฐฐ์ธ์ | FrontEnd |
https://github.com/wonstruckk |
๊น์ง์ | Designer |
[email protected] |