Skip to content

Latest commit

ย 

History

History
284 lines (205 loc) ยท 19 KB

README.md

File metadata and controls

284 lines (205 loc) ยท 19 KB

logo
image

๐Ÿ‘‰๐Ÿป ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๋…์„œ๊ฐ€ ๋ถ€์กฑํ•œ ํ˜„๋Œ€์ธ๋“ค์„ ์œ„ํ•ด! ๊ฐ“์ƒ์„ ์‚ด๊ณ ์‹ถ์€ ํ˜„๋Œ€์ธ๋“ค์„ ์œ„ํ•ด!
์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค๊ณผ ์ฆ๊ฒ๊ฒŒ ์–˜๊ธฐํ•˜๋ฉฐ ๋…์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜




๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง ํŒ€์› ์†Œ๊ฐœ

์ด๋ฆ„ ๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ ํฌ์ง€์…˜
์„œ์ง€์šด MildColor์˜ github Frontend
์กฐ์žฌ์‹  1005jsc์˜ github Frontend
๊ตญ๊ฒฝํ›ˆ kyunghoonkook์˜ github Frontend
๋ฅ˜์ฐฝ๋ฏผ ryucm์˜ github Backend
์กฐ๊ณ„์ผ chokyeil์˜ github Backend
๋ฐ•ํ˜„๋„ atto08์˜ github Backend
์žฅ์Šน์ฃผ Designer



โš™๏ธ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

์„œ๋น„์Šค์•„ํ‚คํ…์ณver 1



๐Ÿ“… ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

๊ธฐ๊ฐ„ : 2022๋…„ 11์›” 03์ผ ~ 2022๋…„ 12์›” 16์ผ(6์ฃผ)



๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ






๐Ÿ—บ API ์„ค๊ณ„

API

image image image image image



โœ’ ์™€์ด์–ด ํ”„๋ ˆ์ž„



๐Ÿ”จ ๊ธฐ์ˆ  ๋„์ž… ์ด์œ  - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ธฐ์ˆ ์  ์˜์‚ฌ ๊ฒฐ์ •

์Šคํƒ ๋„์ž… ์ด์œ  ๋ฒ„์ „
TypeScript 1. ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ฌธ์ œ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์ž‘์„ฑ ๋™์•ˆ์—๋Š” ์˜ค๋ฅ˜๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋‹ค๊ฐ€ ๋Ÿฐํƒ€์ž„ ์‹œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ณณ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Œ. ๋˜ํ•œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ํƒ€์ž…์„ ๋ช…์„ธํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ์‹œ ํ˜•ํƒœ๋ฅผ ์ผ์ผํžˆ ํ™•์ธํ•ด์•ผํ–ˆ์Œ.

2. ๋Œ€์•ˆ : ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
3. ์˜์‚ฌ๊ฒฐ์ • :
ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋„์ž…
์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ฃผ์–ด ํ˜‘์—…ํ•˜๋Š” ํŒ€์›๋“ค์ด ํ†ต์ผ๋œ ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๋งž์ถฐ ์ž‘์„ฑํ•จ.
^4.4.2
Styled-components 1. ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ฌธ์ œ:
CSS์˜ ์ปดํฌ๋„ŒํŠธ & JS์—ฐ์‚ฐ์˜ ํ•„์š”์„ฑ ๋Š๋‚Œ

2. ๋Œ€์•ˆ : styled components, emotion

3. ์˜์‚ฌ ๊ฒฐ์ • : ์œ ์˜๋ฏธํ•œ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์žˆ๋˜ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์กฐ๊ธˆ ๋” ์ต์ˆ™ํ•œ styled components ๋ฅผ ์‚ฌ์šฉ ํ•˜๊ธฐ๋กœ ํ•จ
^5.3.6
RTK 1. ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ฌธ์ œ:
๋ฆฌ์•กํŠธ๋กœ ์•ฑ์„ ์ œ์ž‘ํ•  ์‹œ์— ์ƒ๊ฒจ๋‚˜๋Š” ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ธ prop drilling์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด,์•ฑ ์ „์—ญ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž… ํ•„์š”์„ฑ์„ ๋Š๋‚Œ

2. ๋Œ€์•ˆ : redux, recoli, mobx, context api,

3. ์˜์‚ฌ๊ฒฐ์ • :
์„œ๋ฒ„์—์„œ ๋น„๋™๊ธฐ๋กœ ๋ฐ›์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” React Query๋กœ ๋‹ด๋‹นํ•˜๊ธฐ๋กœ ํ•˜์˜€๊ณ , ์•ฑ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค ํŒ๋‹จ.
recoil, context api, mobx, redux ๋„ค๊ฐ€์ง€ ๋ชจ๋‘ ์œ„์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š”๋ฐ ๋ฌธ์ œ๋Š” ์—†๋‹ค .
recoil์€ ์‚ฌ์šฉ๋ฒ•์ด ์‰ฝ๊ณ  ์ง๊ด€์ ์ด๋ผ๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ๊ฐ€๋” ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค๋Š” ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ง์„ ๋“ค์—ˆ๋‹ค.(์Šค์Šค๋กœ ์ง์ ‘ ๊ฒช์–ด๋ณด์ง€๋Š” ๋ชปํ•˜์˜€์Œ)
mobx๋Š” class ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ ํŒ€์›๋“ค์€ class๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์„ ํƒ์ง€์—์„œ ์ œ์™ธ.
context api๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒ€์›๋“ค๋ผ๋ฆฌ ์ปจ๋ฒค์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ •ํ•ด์ค˜์•ผํ–ˆ๋‹ค ์ด ๊ณผ์ •์— ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋  ๊ฒƒ ๊ฐ™์•„์„œ ํŒจ์Šคํ–ˆ๋‹ค.
๊ฒฐ๊ตญ ํ”„๋ก ํŠธ ํŒ€์›๋“ค ๋ชจ๋‘๊ฐ€ ์นœ์ˆ™ํ•œ redux๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•จ .
๋งŽ์€ Redux ํŒจํ„ด๋“ค ์ค‘์—์„œ Redux์—์„œ ๊ณต์‹์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋Š” Redux ํŒจํ„ด ๋ฐฉ๋ฒ•์ธ Redux toolkit ์‚ฌ์šฉํ•˜์˜€๋‹ค Redux toolkit์€ ํŠนํžˆ typescript์— ๋Œ€ํ•œ ์—ฐ๋™์ด ์ž˜ ๋˜์–ด์žˆ๊ณ  ๊ณต์‹ ๋ฌธ์„œ๋„ ์„ค๋ช…์ด ์ž˜ ๋˜์–ด์žˆ์–ด ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ํˆด์ด๋ผ๊ณ  ํŒ๋‹จ.
^1.8.6
React-Query 1. ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ฌธ์ œ:
- ๊ธฐ์กด์— ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ redux thunk ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, redux์˜ ๊ธฐ๋ณธ์›์น™์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๋ฐฉ๋Œ€ํ•ด์ง€๊ณ , ์„œ๋ฒ„๋ฐ์ดํ„ฐ์™€ ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ž์—ฌ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ์— ๋ฌธ์ œ ๋ฐœ์ƒ.
โ‡’ ์„œ๋ฒ„๋ฐ์ดํ„ฐ์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผœ ๊ด€๋ฆฌํ•˜๊ณ , ์œ ์—ฐํ•œ ์ž‘์—…์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋„์ž…์ด ํ•„์š”.

2. ๋Œ€์•ˆ :
1) redux saga
2) react async
3) redux-thunk
4) react-query

3. ์˜์‚ฌ๊ฒฐ์ • :
- redux saga: ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์€ learning curve

โ‡’ ๋‹จ๊ธฐ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถ€์ ํ•ฉ
- react async: ์ ์€ ์ฐธ๊ณ ์ž๋ฃŒ์™€ ๋‹ค์šด๋กœ๋“œ ์ˆ˜
โ‡’ ํ˜„์‹œ์ ์—์„œ ๋„์ž…ํ•˜๊ธฐ์— ๋ถ€์ ํ•ฉ
- redux thunk
โ‡’ redux ์„ค์ •์ด ์„œ๋“œํŒŒํ‹ฐ๋กœ ์ธํ•ด ๋”์šฑ ๋น„๋Œ€ํ•ด๊ณ , ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. ํ˜‘์—…์‹œ์— ๋ณต์žกํ•ด์ง€๊ณ , ๊ฐœ๋ฐœ ์‹œ๊ฐ„์—์„œ๋„ ๋‹จ์ ์œผ๋กœ ์ž‘์šฉ.
- react query
โ‡’ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ์˜ ๊ฐ์†Œ, react-query์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ทœ๊ฒฉํ™”๋œ ์ƒํƒœ๊ด€๋ฆฌ ๋ฐฉ์‹์€ ํ˜‘์—…๊ณผ ์ฝ”๋“œ์ž‘์„ฑ์‹œ ํšจ์œจ์ , ์ง€์†์ ์œผ๋กœ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์บ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ์šฉ์ด. ๊ฐœ๋ฐœ ์†๋„์™€ ํŽธ๋ฆฌ์„ฑ์„ ์œ„ํ•ด react query ์ฑ„ํƒ
^3.39.2
Axios 1. ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ฌธ์ œ: ๋ฐฑ์—”๋“œ์™€ ๋ฐ์ดํ„ฐ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž… ํ•„์š”.ํŽธ์˜๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋ธŒ๋ผ์šฐ์ € ์ง€์›๊ณผ ๊ฐ™์€ ํ™•์žฅ์„ฑ ๊ณ ๋ ค.

2. ๋Œ€์•ˆ : AXIOS, FETCH, AJAX

3.์˜์‚ฌ๊ฒฐ์ •:
- FETCH : ๋ณ„๋„์˜ ์„ค์น˜๊ณผ์ •์ด ๋ถˆํ•„์š”ํ•˜์ง€๋งŒ, ์‘๋‹ต๋ฐ์ดํ„ฐ๋ฅผ JSON๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•œ ๋ณ€ํ™˜ ๊ณผ์ •์ด ํ•„์š”, ๋ธŒ๋ผ์šฐ์ € ์ง€์›๋ฒ”์œ„๋Š” AXIOS ๋ณด๋‹ค ์ ์Œ.
-AJAX : jquery ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„๊ฐ€๋Šฅ, Error, Success, Complete์˜ ์ƒํƒœ๋ฅผ ํ†ตํ•ด ํ๋ฆ„์„ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ, ๊ทธ๋Ÿฌ๋‚˜ promise๊ธฐ๋ฐ˜์ด ์•„๋‹˜.
-AXIOS : ์„ค์น˜๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€๋งŒ, ๋” ๋„“์€ ๋ธŒ๋ผ์šฐ์ € ์ง€์›๋ฒ”์œ„, ์‘๋‹ต๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜, ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ฐ€๋Šฅ์œผ๋กœ ์ธํ•œ ์œ ์ง€๋ณด์ˆ˜, ๊ฐ€๋…์„ฑ ๋ฉด์—์„œ ์žฅ์ , interceptor ๊ธฐ๋Šฅ ์ œ๊ณต
โ‡’ jquery๋Š” ํ”„๋กœ์ ํŠธ์— ๋„์ž…ํ•˜์ง€ ์•Š๊ณ , Fetch์™€ AJAX ๋ณด๋‹ค ๋” ๋งŽ์€ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” AXIOS๋ฅผ ๋„์ž….
^1.1.3
Socket, StompJs 1. ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๋ฌธ์ œ:
์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ๋ฐฉํ–ฅ์ ์ธ httpํ†ต์‹ ์„ ์“ฐ๋Š” ๊ฒƒ์€ ์„œ๋ฒ„, ํ”„๋ก ํŠธ ๋‘˜ ๋‹ค์—๊ฒŒ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ด๊ธฐ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ œ๊ณตํ•˜๋Š” ์›น์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•จ. ์›น์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒ€์ฆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ ์„ธํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ๋œ์Œ.

2. ๋Œ€์•ˆ : ์›น์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ : socket.io, ws, sockJs-client , ์›น์†Œ์ผ“ ๊ธฐ๋Šฅ API : stompJS

3. ์˜์‚ฌ๊ฒฐ์ • :
์ˆœ์ˆ˜ ์›น์†Œ์ผ“์€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ WebSocket์„ ์ง€์›ํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค, ๋˜๋Š” ์„œ๋ฒ„๊ฐ€ ์ˆœ์ˆ˜ ์›น์†Œ์ผ“ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— websocket ํ”„๋กœํ† ์ฝœ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•จ
websocket ํ”„๋กœํ† ์ฝœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ค‘ socket.io, ws๋Š” ๋…ธ๋“œ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ๊ณ , Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Servlet ์Šคํƒ ์œ„์—์„œ Server/Client ์šฉ๋„์˜ SockJS ํ”„๋กœํ† ์ฝœ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SockJs๋ฅผ์ฑ„ํƒํ•จ
์„œ๋ฒ„์™€ ์ปค๋„ฅํŠธ ๋˜์—ˆ์„ ๋•Œ, ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ, ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์ด ๋Š๊ฒผ์„ ๋•Œ์™€๊ฐ™์€ ์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•  ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”๋กœํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ๋“ค์–ด์žˆ๋Š” Stomp๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋„์›€์„ ๋ฐ›์•„ ์ฑ„ํŒ… ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ•จ
^6.1.2

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

ํŽ˜์ด์ง€ API ์—ฐ๊ฒฐ, ๊ธฐ๋Šฅ ๋ฐ CSS
๋กœ๊ทธ์ธ - ์„œ์ง€์šด โœ…์นด์นด์˜ค ๋กœ๊ทธ์ธ
โœ…๋กœ๊ทธ์ธ
โœ…์•„์ด๋”” ์ฐพ๊ธฐ
โœ…๋น„๋ฐ€๋ฒˆํ˜ธ
ํšŒ์›๊ฐ€์ž… - ์„œ์ง€์šด โœ…ํšŒ์›๊ฐ€์ž…
โœ…์•„์ด๋”” ์ค‘๋ณต ์ฒดํฌ
โœ…๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ
๋งˆ์ด ํŽ˜์ด์ง€ - ์„œ์ง€์šด โœ…๋กœ๊ทธ์•„์›ƒ
โœ…๋ฌธ์˜ํ•˜๊ธฐ
โœ…๊ฐœ์ธ์ •๋ณด ์ˆ˜์ •
โœ…Pagination
๋ฉ”์ธํŽ˜์ด์ง€ - ๊ตญ๊ฒฝํ›ˆ โœ…๋ฐฐ๋„ˆ
โœ…์นดํ…Œ๊ณ ๋ฆฌ
โœ…์ธ๊ธฐ๋ชจ์ž„
โœ…์ƒ๋‹จTOP ๋ฒ„ํŠผ
โœ…์ฑ„ํŒ… ๋ฒ„ํŠผ
โœ… ํ›„๊ธฐ 3๊ฐœ ์ตœ์‹  ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
๋ชจ์ž„ ์ „์ฒด ํŽ˜์ด์ง€ - ๊ตญ๊ฒฝํ›ˆ โœ…์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ sort
๋ชจ์ž„ ์ƒ์„ธ ํŽ˜์ด์ง€ - ๊ตญ๊ฒฝํ›ˆ โœ…๋“ฑ๋ก๋œ ๋ชจ์ž„ ์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
๋ชจ์ž„ ๊ด€์‹ฌ - ๊ตญ๊ฒฝํ›ˆ โœ…๊ด€์‹ฌ ๋ชจ์ž„ ๋“ฑ๋ก
๋ชจ์ž„ ์ฐธ์„/ํƒˆํ‡ด - ๊ตญ๊ฒฝํ›ˆ โœ…๋ชจ์ž„ ๊ฐ€์ž…ํ•˜๊ธฐ ํƒˆํ‡ดํ•˜๊ธฐ
๋ชจ์ž„ ์ž‘์„ฑ ํŽ˜์ด์ง€ - ์กฐ์žฌ์‹  โœ…๋ชจ์ž„ ์ž‘์„ฑํ•˜๊ธฐ, ๋„ค์ด๋ฒ„ ์ฑ… ๊ฒ€์ƒ‰, Pagination
๋ชจ์ž„ ์ˆ˜์ • ํŽ˜์ด์ง€ - ์กฐ์žฌ์‹  โœ…๋ชจ์ž„ ์ˆ˜์ •ํ•˜๊ธฐ, ๋„ค์ด๋ฒ„ ์ฑ… ๊ฒ€์ƒ‰, Pagination
๋ชจ์ž„ ์‚ญ์ œ ๊ธฐ๋Šฅ - ์„œ์ง€์šด โœ…๋ชจ์ž„ ์‚ญ์ œํ•˜๊ธฐ
์ฑ„ํŒ… - ์กฐ์žฌ์‹  โœ… SockJS, Stomp๋ฅผ ์ด์šฉํ•œ ์ฑ„ํŒ… ๊ตฌํ˜„(์ฑ„ํŒ…, ๋ฐฉ ๋งŒ๋“ค๊ธฐ)
๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ - ์กฐ์žฌ์‹  โœ… ๋„ค์ด๋ฒ„ ์ฑ… ๊ฒ€์ƒ‰, Pagination
๋ชจ๋‹ฌ - ์„œ์ง€์šด โœ…๋ชจ๋‹ฌ css
ํ›„๊ธฐ - ๊ตญ๊ฒฝํ›ˆ โœ…ํ›„๊ธฐ ์ƒ์„ฑ,์‚ญ์ œ,๋ถˆ๋Ÿฌ์˜ค๊ธฐ
ํ—ค๋” - ์„œ์ง€์šด & ๊ตญ๊ฒฝํ›ˆ โœ…ํ—ค๋” css
โœ…ํ—ค๋” ๊ฒ€์ƒ‰
ํ‘ธํ„ฐ - ๊ตญ๊ฒฝํ›ˆ โœ…ํ‘ธํ„ฐ css
๋ฐ˜์‘ํ˜• - ์ „์ฒด โœ…๋ชจ๋ฐ”์ผ
โœ…PC


๐ŸŽฏ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

์ฑ„ํŒ…๋ฐฉ PCํ™”๋ฉด์—์„œ ๋ชจ๋ฐ”์ผ๋กœ ์ „ํ™˜, ๋ชจ๋ฐ”์ผํ™”๋ฉด์—์„œ PCํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ ์‹œ ๋ถ€๋“œ๋Ÿฌ์šด UX์ ์šฉ

๋ถ€๋“œ๋Ÿฌ์šด UX

๊ตฌ๋ถ„ ์„ค๋ช…
๋ฌธ์ œ์ƒํ™ฉ ์ฑ„ํŒ…๋ฐฉ์˜ PCํ™”๋ฉด(ํŒ์—…ํ™”๋ฉด)์—์„œ ๋ชจ๋ฐ”์ผํ™”๋ฉด(ํ’€ํ™”๋ฉด)์œผ๋กœ ์ „ํ™˜ ๋˜ ๊ทธ ์—ญ์ˆœ์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ ์ฑ„ํŒ…์ฐฝ์ด ๋‹ซํ˜€์ง
๋” ๋ถ€๋“œ๋Ÿฌ์šด UX๋กœ ๊ฐœ์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ์Œ
๋” ๋ถ€๋“œ๋Ÿฌ์šด UX๋กœ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” PCํ™”๋ฉด์ผ๋•Œ์™€ ๋ชจ๋ฐ”์ผํ™”๋ฉด์ผ๋•Œ์˜ ์ฑ„ํŒ…์ฐฝ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„
์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€์•ผ ํ•  ํ•„์š”์„ฑ์„ ๋Š๋‚Œ
๋ฌธ์ œ์›์ธ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์ผ๋•Œ๋Š” ํ’€ํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ  PCํ™”๋ฉด์ผ ๋–„์—๋Š” ํŒ์—…ํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ•จ
ํ’€ํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ โ€˜/mobile_chatโ€™์ด๋ผ๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ๋”ฐ๋กœ ์—ด์–ด ์คŒ
๊ธฐ์กด ์ฝ”๋“œ๋Š” ์ฑ„ํŒ…์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๋Š” state๊ฐ€ ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ์Œ
ํ™”๋ฉด์˜ width๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒ๋‹จํ•˜๋Š” hook์ด ์—†์–ด
์–ด๋Š width์— ๋ชจ๋ฐ”์ผํ™”๋ฉด์œผ๋กœ ์ ‘๊ทผํ•˜๋Š”์ง€, PCํ™”๋ฉด์œผ๋กœ ๋“ค์–ด์˜ค๋Š”์ง€ ์•ฑ์ด ์•Œ์ˆ˜๊ฐ€ ์—†์—ˆ์Œ
๋ฌธ์ œํ•ด๊ฒฐ ์ฑ„ํŒ…์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๋Š” ์ƒํƒœ๋ฅผ ๋‹ด๋Š” redux์˜ slice๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๋ฐ”๊ฟ”์คŒ
ํ™”๋ฉด์˜ width๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒ๋‹จํ•˜๋Š” hook์„ ๋งŒ๋“ฌ
pcํ™”๋ฉด์—์„œ ๋ชจ๋ฐ”์ผํ™”๋ฉด ์ƒํƒœ๋กœ ๋Œ์ž…๋  ์‹œ , ๋˜ ์—ญ์ˆœ ์ผ ์‹œ hook์ด ์ž‘๋™์ด ๋˜๊ณ ,
์ด์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๊ฒŒ๋” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
์ด๋ฒคํŠธ์˜ ์ฝœ๋ฐฑ์œผ๋กœ PCํ™”๋ฉด โ†’ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด ์ผ ๊ฒฝ์šฐ, โ€˜/mobile_chatโ€™์œผ๋กœ ์ฃผ์†Œ๋ฅผ ์˜ฎ๊ธฐ๊ณ 
๋ชจ๋ฐ”์ผ ํ™”๋ฉด โ†’ PCํ™”๋ฉด ์ผ ๊ฒฝ์šฐ ์ฑ„ํŒ…์ฐฝ ํŒ์—…์„ ๋„์šฐ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ
ํ•ด๊ฒฐ๊ฒฐ๊ณผ ์œ ์ €๋Š” ์ฑ„ํŒ…์„ ํ•˜๋Š”์ค‘์— ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ ํ™”๋ฉด ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„, ๋Š๊ธฐ์ง€ ์•Š๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฑ„ํŒ…์„ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

์ ์šฉ ์ „

default.mp4

์ ์šฉ ํ›„

default.mp4

Infinite Carousel

Infinite Carousel

๊ตฌ๋ถ„ ์„ค๋ช…
๋ฌธ์ œ
์ƒํ™ฉ
๋งจ ๋ ๋ฐฐ๋„ˆ์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐฐ๋„ˆ๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ  ์—ญ์žฌ์ƒ ๋˜๋Š” ๋“ฏํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐœ์ƒ
๋ฌธ์ œ์›์ธ transition + ์–‘ ๋ ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€์ ์ธ ์ด๋ฏธ์ง€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ ๋•Œ๋ฌธ์— ์—ญ์žฌ์ƒ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐœ์ƒ
๋ฌธ์ œํ•ด๊ฒฐ ๋ฐฐ๋„ˆ ์–‘ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ด ์ฃผ๊ณ  ๋ ๋ฐฐ๋„ˆ์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐฐ๋„ˆ๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ transition์„ ์—†์• ์คŒ
ํ•ด๊ฒฐ๊ฒฐ๊ณผ ํ•ด๋‹น ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐฐ๋„ˆ ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฃจ์–ด ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋„˜์–ด๊ฐ€๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ƒ๊น€
Infinite Carousel ์ ์šฉ ์ „/ํ›„

์ ์šฉ ์ „

c.mp4

์ ์šฉ ํ›„

_2022_12_10_23_52_01_642.mp4


๐Ÿ‘ฉโ€๐Ÿ’ป ์œ ์ € ํ”ผ๋“œ๋ฐฑ ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ


๋ชจ์ž„ ์ฐธ์„ ์ธ์› ๋‹ค ์ฐผ์„๋•Œ ์ฐธ์„ ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด null์ด alert ์œผ๋กœ ์ถœ๋ ฅ

์ธ์› ๋‹ค ์ฐผ์„๋•Œ post์š”์ฒญ์— ๋Œ€ํ•œ response๋ฅผ error๋กœ ๋ณด๋‚ด์ฃผ์…จ๋Š”๋ฐ ํ•ด๋‹น response๋ฅผ data๋กœ ์žก๊ณ  ์žˆ์—ˆ์Œ back์—์„œ error -> data๋กœ ๋ณด๋‚ด์ฃผ์‹ฌ

ํด๋Ÿฝ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€๊ฐ€ null ์ด๋ฉด ์—‘๋ฐ•์ด ๋œฌ๋‹ค.

ํ”„๋ก ํŠธ/๋ฐฑ์—์„œ ์ธ๋„ค์ผ์ด๋ฏธ์ง€๊ฐ€ null ์ผ๋•Œ ๋””ํดํŠธ ์ธ๋„ค์ผ ๋„ฃ์–ด์ฃผ์–ด ์ธ๋„ค์ผ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์ง€ ์•Š์€ ๋ชจ์ž„๋„ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‹ฌ์–ด์ฃผ์—ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ์ผ์น˜ํ•ด๋„ ์•ˆ ๋จ

์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ˆ˜์ • ๊ฐ’์œผ๋กœ ํ™•์ธ ํ•˜๊ณ  ์žˆ์–ด์„œ ์ผ์น˜ ํ™•์ธ์ด ๋ถˆ๊ฐ€ ํ–ˆ์—ˆ์Œ

๋ชจ์ž„๊ฐœ์„ค ํ•  ๋•Œ ์ŠคํŽ˜์ด์Šค๋ฐ”๋งŒ ๋ˆŒ๋Ÿฌ์„œ ๋ชจ์ž„๊ฐœ์„ค์ด ๋จ

ํ”„๋ก ํŠธ ์„œ๋ฒ„๋กœ input์— ๋“ค์–ด์˜จ ๊ฐ’์„ ๋ณด๋‚ด๊ธฐ ์ „์— trim(โ€™ โ€™)์„ ์ด์šฉํ•ด ๋นˆ ๊ฐ’๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค
๋ฐฑ์—”๋“œ ๊ฐœ์„ค์‹œ ๋ฐ›์•„์˜ค๋Š” requestDto์— ํ•„์ˆ˜๋กœ ์š”๊ตฌํ•˜๋Š” ์ž…๋ ฅ๊ฐ’์€ NotBlank ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„๋†“์•„ ํ•„์ˆ˜๋กœ ์š”๊ตฌํ•˜๋Š” ์ž…๋ ฅ๊ฐ’์€ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด 400์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋ณ€๊ฒฝ

๋ชจ์ž„๊ฐœ์„ค์‹œ์— ์–ด๋– ํ•œ ๊ฐ’(์ธํ’‹)์ด ์ž…๋ ฅ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํŒ๋‹จํ•˜๋ฉด ์ข‹์„ ๋“ฏ

inputํƒœ๊ทธ์— required ์˜ต์…˜์„ ๋‹ฌ์•„์ฃผ์–ด์„œ form ์ œ์ถœ ์‹œ ์ž…๋ ฅ๋˜์ง€ ์•Š์€ ๊ฐ’์„ ๋ช…์‹œํ•˜๊ฒŒ ํ•ด์คŒ

๊ณผ๊ฑฐ ์ฑ„ํŒ… infinite scroll๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

์ ์šฉ ์™„๋ฃŒ

๐Ÿ‘ป ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ

Front-end
- ๋ฐ˜์‘ํ˜• ๋„์ž… โ€” ๋ชจ๋ฐ”์ผver --์™„๋ฃŒ
- ๋ณด์•ˆ ๊ฐ•ํ™” โ€” https -- ์™„๋ฃŒ
- infinite carousel -- ์™„๋ฃŒ
- infinite scroll โ€” ๋ชจ๋ฐ”์ผver -- ์™„๋ฃŒ
- ๊ณผ๊ฑฐ ์ฑ„ํŒ… ๋ฌดํ•œ ์Šคํฌ๋กค๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ -- ์™„๋ฃŒ
- ํ›„๊ธฐ ๊ธฐ๋Šฅ -- ์™„๋ฃŒ
- api instance -- ์™„๋ฃŒ
- ๊ฒ€์ƒ‰, ์ข‹์•„์š”๋“ฑ ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋Š” api call ์ตœ์ ํ™”
- ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰ ์ตœ์ ํ™”
- ์ฑ„ํŒ…์—์„œ ์ด๋ฏธ์ง€ ์ „์†ก ๊ธฐ๋Šฅ ์ถ”๊ฐ€