Skip to content

Latest commit

ย 

History

88 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

New Name



New Name์€ Text, SVG, Image, GIF๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ์„ธ๋กœํ˜• ๋ช…ํ•จ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

๋ช…ํ•จ์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฏธ์ง€ ํ˜น์€ GIF๋กœ ์ €์žฅํ•˜์—ฌ ์†์‰ฝ๊ฒŒ ๋ช…ํ•จ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ชฉ์ฐจ



๋™๊ธฐ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ๋ชจ๋ฐ”์ผ์ด๋ผ๋Š” ํŠน์„ฑ์ƒ ๋งˆ์šฐ์Šค๊ฐ€ ์•„๋‹Œ ์†๊ฐ€๋ฝ์„ ์ด์šฉํ•ด GUI๋ฅผ ์ž˜ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด "ํ„ฐ์น˜๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ์ง€๋ฅผ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ?" ๋ผ๋Š” ๊ณ ๋ฏผ์—์„œ ์‹œ์ž‘ํ•ด ๋ฒ”์œ„๋ฅผ ํ•ธ๋“œํฐ ํ™”๋ฉด์œผ๋กœ ํ•œ์ •์‹œ์ผœ ๋ช…ํ•จ ์—๋””ํ„ฐ๋ผ๋Š” ์ปจํ…์ธ ๋กœ ๊ฒฐ์ •์ง“๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ๋ช…ํ•จ์„ ์Šค์บ”ํ•ด ํ•ธ๋“œํฐ์— ์ €์žฅํ•˜๋Š” ์ƒํ™ฉ์„ ์œ ์ €๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ ์ƒ๊ฐ์„ ํ•ด๋ณด์•˜์„ ๋•Œ, "์‹ค๋ฌผ์„ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ช…ํ•จ์„ ๋ฐ์ดํ„ฐ๋กœ๋งŒ ๊ฐ–๊ณ  ๋‹ค๋‹ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค" ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ๋ช…ํ•จ์€ ์ž์‹ ์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— GIF ๊ฐ™์€ ๋™์  ์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด ๋””์ง€ํ„ธ ๋ช…ํ•จ์ด ๋” ์žฌ๋ฐŒ์–ด ์งˆ ๊ฑฐ๋ผ ์ƒ๊ฐํ•ด ์ ‘๋ชฉํ•ด๋ณด๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

GIF๊ฐ€ ๋ช…ํ•จ์— ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ?


์„œ๋น„์Šค ํ™”๋ฉด

NEWNAME์œผ๋กœ ๋งŒ๋“  ์˜ˆ์‹œ ๋ช…ํ•จ๋“ค๊ณผ ์„œ๋น„์Šค ํ™”๋ฉด

๐ŸŽฅ ์˜์ƒ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ!

๊ณ ๋ฏผํ•œ ๋ถ€๋ถ„

ํ•‘๊ฑฐ ์ œ์Šค์ณ ๋‹ค๋ฃจ๊ธฐ

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ์ œ์ผ ๋จผ์ € ๊ณ ๋ คํ–ˆ๋˜ ๋ถ€๋ถ„์€ ํ„ฐ์น˜์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ปจํŠธ๋กค ํ•  ์ง€ ์˜€์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋Š” ํŠน์„ฑ์ƒ ์†๊ฐ€๋ฝ์˜ ์ œ์Šค์ฒ˜๋ฅผ ์ด์šฉํ•ด ์š”์†Œ๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๊ณ , ์ด๋Ÿฌํ•œ ์ œ์Šค์ฒ˜๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋Šฅ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ์˜์กด์„ฑ์ด ๋†’์•„์งˆ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด์— RN์˜ ๋‚ด์žฅ API์ธ PanResponder๋ฅผ ์ด์šฉํ•ด ๋ฉ€ํ‹ฐ ํ„ฐ์น˜๋ฅผ ํ•˜๋‚˜์˜ ์•ก์…˜์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ทผ๋ณธ์ ์œผ๋กœ ์•Œ์•„๊ฐ€๋ณด๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.



PanResponder๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์†๊ฐ€๋ฝ์˜ ์ด๋™๋งŒํผ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ?


PanResponder๋Š” RN์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” Gesture Responder System์— ์˜ํ•ด ํ„ฐ์น˜๊ฐ€ ํ•˜๋Š” ์ผ์˜ ์˜ˆ์ธก์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

  1. PanResponder ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” PanResponder์˜ ์ •์  ๋ฉ”์†Œ๋“œ์ธ PanResponder.create๋ฅผ ํ†ตํ•ด PanResponder์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋ฅผ React์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” useRef ๋˜๋Š” useEffet์™€ useState๋ฅผ ๊ฒฐํ•ฉํ•œ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image


์—ฌ๊ธฐ์—์„œ ์ €๋Š” useRef๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  useEffect์™€ useState๋ฅผ ์ด์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” useRef๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ฆฌํŽ˜์ธํŒ…์ด ๋˜์ง€ ์•Š๊ณ  ๊ฐ’์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ด๋ฏธ์ง€๋‚˜ GIF ๋˜๋Š” ๋‹ค๋ฅธ ์š”์†Œ๋“ค์˜ ํฌ๊ธฐํ˜น์€ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ž‘์—…์€ ๋ฆฌํŽ˜์ธํŒ…์ด ๋‹ค์‹œ ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›„์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์€ ๋ฐฉ๋ฒ•์ด๋ผ ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ RN์ƒ์—์„œ๋Š” ์–ด๋–ค View๋ฅผ ํ„ฐ์น˜ํ•  ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋ฐœ์ƒํ•ด ์ œ์Šค์ฒ˜์— ๋Œ€์‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง์ด ๊ฐ€์žฅ ์•„๋ž˜ View(RN UI์˜ ๊ธฐ๋ณธ ๋‹จ์œ„)๋กœ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ œ์Šค์ฒ˜ ์ปจํŠธ๋กค์ด ๋‚ด๋ถ€์˜ ์ž์‹ View๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์ปจํŠธ๋กค ํ•˜๋Š” ๊ฒƒ์„ ์›์น˜ ์•Š๋Š”๋‹ค๋ฉด PanResponder์˜ onStartShouldSetPanResponder ์†์„ฑ์„ true๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ PanResponder๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” View๊ฐ€ ์•„๋‹Œ RN์˜ ๋‚ด์žฅ API์ธ Animated.View์™€ Animated.Value๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



image

๋‹ค์Œ์€ onPanResponder์˜ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

  • onPanResponderGrant : PanResponder์˜ ์†๊ฐ€๋ฝ์ด ๋‹ฟ๊ณ ๋‚˜์„œ ์ฒ˜์Œ ์›€์ง์ผ ์‹œ์˜ ์ด๋ฒคํŠธ๋ฅผ ์•ก์…˜์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • onPanResponderMove: ์›€์ง์ด๋Š” ๋„์ค‘ ์ด๋ฒคํŠธ๋ฅผ ์•ก์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์†๊ฐ€๋ฝ์ด ์ฒซ ์›€์ง์ž„์ด ์ƒ๊ธด ํ›„ ๋–ผ์ง€๊ธฐ ์ „๊นŒ์ง€ ์ผ๋ จ์˜ ์—ฐ์†์ ์ธ ์ œ์Šค์ฒ˜๋ฅผ ์•ก์…˜์œผ๋กœ ์ปจํŠธ๋กค ํ•ฉ๋‹ˆ๋‹ค.
  • onPanResponderRelease: ์†๊ฐ€๋ฝ์ด ๋–จ์–ด์ง€๋Š” ์ˆœ๊ฐ„ ์•ก์…˜์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PanResponder ์ด์Šˆ


์›ํ•˜๋Š” ๋งŒํผ ์ด๋™๋˜์ง€ ์•Š๋Š” ์ด์Šˆ


์œ„์˜ ์†์„ฑ์„ ์ด์šฉํ•ด ์ฒ˜์Œ ์ƒ๊ฐ์€ ์†๊ฐ€๋ฝ์ด ์ด๋™ํ•œ ๋งŒํผ ๋ˆ„์ ์‹œ์ผœ์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์›ํ•˜๋Š” ๋งŒํผ ๊ฐ’์ด ์ด๋™๋˜์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ๋ˆ„์ ๋˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์‹œ๋„๋ฅผ ํ•ด๋ณด์•˜๊ณ  ๊ฐ’์„ ์•ก์…˜๋งˆ๋‹ค ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

image


๊ฐ’์ด ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ์ด์Šˆ


์ฒ˜์Œ ๊ตฌํ˜„ ๋‹น์‹œ ํ„ฐ์น˜๋ฅผ ํ•ด์„œ ์ด๋™ํ•  ๊ฒฝ์šฐ, ์›ํ•˜๋Š” ๊ฐ’ ๋งŒํผ ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ์˜ˆ์ƒ๋˜๋Š” ๊ฐ’์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์„ ์–ป๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ PanResponder๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ useState์˜ ๊ฒฝ์šฐ batch๋ผ๋Š” ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๋Š” ์†์„ฑ์„ ์ด์šฉํ•ด ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰์ด ๋˜๋‹ค ๋ณด๋‹ˆ ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ฐ’์ด ๋ฐ˜์˜ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ํ„ฐ์น˜๊ฐ€ ๋  ๋•Œ, ํ„ฐ์น˜๊ฐ€ ๋ฐ”๋กœ ๋ˆŒ๋ฆฐ ํ˜„์žฌ์˜ ๊ฐ’๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  PanResponder ์ธ์Šคํ„ด์Šค ์†์— useState๋กœ ๊ด€๋ฆฌํ•œ ๊ฐ’์˜ ๊ฒฝ์šฐ ์ฆ‰๊ฐ์ ์œผ๋กœ ํ”ผ๋“œ๋ฐฑ๋˜์–ด ๋ฐ˜์˜๋  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ useRef๋ฅผ ์ด์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. useRef๋Š” ํ•ญ์ƒ ์ตœ์‹ ์˜ ์ƒํƒœ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ์— ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

image


์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?


์ด๋™์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ์†๊ฐ€๋ฝ์ด ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ๋งŒํผ์„ ๋ˆ„์ ์œผ๋กœ ํ•ฉ์‚ฐํ•ด ํ‘œ์‹œ๋ฅผ ํ•ด์ฃผ์—ˆ๋Š”๋ฐ, ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ๋ผ๋Š” ๊ณ ๋ฏผ์— ๋งž๋‹ฅ๋œจ๋ฆฌ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ์‚ฌ์šฉ์ž๊ฐ€ ์นœ์ˆ™ํ•˜๊ฒŒ ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ ๋ฐฉ๋ฒ•์„ ๋‘๊ฐ€์ง€ ์ƒ๊ฐํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‘๊ฐœ์˜ ์†๊ฐ€๋ฝ์„ ์ด์šฉํ•ด ํ•€์น˜ ์คŒ,์•„์›ƒ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. ์Šฌ๋ผ์ด๋” ์Šคํฌ๋กค์„ ์ด์šฉํ•ด ์ •๋ฐ€ํ•˜๊ฒŒ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•!


๋‘๊ฐœ์˜ ์†๊ฐ€๋ฝ์„ ์ด์šฉํ•ด ํ•€์น˜ ์คŒ,์•„์›ƒ์œผ๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆ ํ•˜๋Š” ๋ฐฉ๋ฒ•



์ €๋Š” ๋‘๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ๋‹ค ์ ์šฉํ•˜๋˜, ์ฒ˜์Œ ๋ฐฉ๋ฒ•์ธ ๋‘ ์†๊ฐ€๋ฝ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ฒ˜์Œ ๋‹ฟ์•˜์„ ๋•Œ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘์„ ํ•ด๋ณด์ž๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋‘ ์†๊ฐ€๋ฝ์ด ๋‹ฟ๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— PanResponder์˜ ๊ฐ ์†์„ฑ์˜ ๋‚ด๋ถ€๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์„œ event์ธ์ž ์†์˜ nativeEvent๋ฅผ ์ฐพ์•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ touches๋ผ๋Š” ๋ฐฐ์—ด์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ดํ›„ touches ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ์†๊ฐ€๋ฝ์ด ๋งž๋‹ฟ์•„ ์žˆ๋Š” ์ƒํƒœ์˜ ๊ธธ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋‘ ์†๊ฐ€๋ฝ์˜ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์ด ๊ทธ ๋‹ค์Œ์˜ ํ™”๋‘ ์˜€์Šต๋‹ˆ๋‹ค.

  1. ํฌ๊ธฐ์˜ ์กฐ์ ˆ์€ ํ•€์น˜ ์คŒ๋“ฑ์„ ํ†ตํ•ด ์กฐ์ ˆํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์กฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ๋‹ค๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ์ ‘๊ทผํ•ด ๋ณด๋‹ˆ ํ”ผํƒ€๊ณ ๋ผ์Šค์˜ ์ •๋ฆฌ๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ์—ฌ๊ธฐ์—์„œ ๋‘ ์†๊ฐ€๋ฝ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ํ”ผํƒ€๊ณ ๋ผ์Šค์˜ ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•ด getDistanceํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜์—ฌ ๊ฐ’์„ ๊ตฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

image

image

  1. onPanResponderGrant์˜ distance๋ฅผ ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ ์žก์•„ ์ค€ ๋’ค onPanResponderMove๋ฅผ ์ด์šฉํ•ด ์ด๋™ ์ค‘์ผ ๋•Œ์˜ ๊ฐ’๊ณผ ์ดˆ๊ธฐ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ scaleFactor๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

image

  1. ์ด๋ฅผ ์ด์šฉํ•ด Animate.View์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€ํ™” ์‹œ์ผœ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

X์ถ•๊ณผ Y์ถ• ๊ฐœ๋ณ„ ์กฐ์ ˆ


๊ทธ ์ดํ›„๋Š” ๋น„๋ก€๊ฐ€ ์•„๋‹Œ X์ถ•๊ณผ Y์ถ•์˜ scale์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์กฐ์ ˆ ํ•  ์ˆ˜๋Š” ์—†์„๊นŒ? ๋ผ๋Š” ๊ณ ๋ฏผ์„ ํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฒˆ์—๋Š” ํ”ผํƒ€๊ณ ๋ผ์Šค์˜ ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์†๊ฐ€๋ฝ์˜ X์ถ• ์ด๋™ ๋ฒ”์œ„์™€ Y์ถ• ์ด๋™ ๋ฒ”์œ„์ค‘ ํฐ ๋ถ€๋ถ„์ด ์ค‘์‹ฌ์ด ๋˜์–ด ์ด๋™ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค ๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

image

  • sizeProportionMode๋ฅผ ์„ค์ •ํ•œ ๋’ค ๋น„๋ก€ ๋ชจ๋“œ๊ฐ€ ์•„๋‹ ๋•Œ๋Š” X์™€ Y์˜ scaleFactor๋ฅผ ๊ฑฐ๋ฆฌ์˜ ์ฐจ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.


์ƒํƒœ ๊ด€๋ฆฌ


์—ฌ๋Ÿฌ ์š”์†Œ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ?


์ด๋ ‡๊ฒŒ ์œ„์˜ ๊ณ ๋ฏผ๋“ค์„ ์ง€๋‚˜์ณ ์˜ค๋‹ˆ ์ด๋ฏธ์ง€์™€ ์š”์†Œ๋“ค์„ ํ„ฐ์น˜๋ฅผ ์ด์šฉํ•ด ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ•๊ตฌํ•˜์˜€์œผ๋‚˜, ์ถ”๊ฐ€์ ์ธ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Text, Image, Gif, SVG๋“ค์—๊ฒŒ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๋ ˆ์ด์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค์˜ ์ƒํƒœ๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์—˜๋ ˆ๋ฉ˜ํŠธ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ชจ์„ ์ˆ˜ ์žˆ๋Š” ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ–ˆ๊ณ , ์ด๋ฅผ ์œ„ํ•ด Redux๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Untitled


์š”์†Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋Š” ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๋กœ๋ฐ”๋กœ ๊ด€๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ?


ํ•˜๋‚˜์˜ ํ™”๋ฉด์— ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด ๋ณธ ๋’ค, ๊ฐ ์š”์†Œ๋งˆ๋‹ค Elements๋ฅผ ๋ถ„๋ฆฌํ•ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Text์š”์†Œ ์˜ˆ์‹œ

  1. TextEditor ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด Text ์ถ”๊ฐ€๋ฅผ ๋ˆ„๋ฅผ ๊ฒฝ์šฐ,
  2. Redux๋ฅผ ํ†ตํ•ด textSlice์— ํฌํ•จ๋˜๊ณ  TextElements์—์„œ ๋ Œ๋”๋ง ๋ฉ๋‹ˆ๋‹ค.
  3. ์ถ”๊ฐ€๋œ ์š”์†Œ๋“ค์„ ๋‹ค์‹œ EditorRenderer ์ปดํฌ๋„ŒํŠธ์—์„œ editorSlice์— ์ถ”๊ฐ€ํ•ด์ค€ ํ›„ Layer๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

Untitled


image

๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋ Œ๋”๋ง ๋˜๋Š” View

image


๋ณ€๊ฒฝ๋œ ๋ ˆ์ด์–ด(zIndex)๋ฅผ ์–ด๋–ป๊ฒŒ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉํ•ด ์ค„ ์ˆ˜ ์žˆ์„๊นŒ?


์ด๋ฏธ์ง€ ํˆด์˜ ๊ฒฝ์šฐ์—๋Š” ํŽธ์ง‘์ด ์ž์ฃผ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ด์–ด๊ฐ€ ์ˆ˜์‹œ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์—์„œ ๋ถ€์—ฌํ•œ layer๋ฅผ ๋ณ€ํ™”์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ๊ฐ€ ๋‘๋ฒˆ์žฌ ํ™”๋‘๋กœ ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์€ ์ด๊ฑธ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. textElements => allElements => layerElements
  2. layerElements => textElements (layer ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜)

Untitled

image

์ €์žฅํ•˜๊ธฐ


SVG, Text, Image, GIF๋ฅผ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ผ๊นŒ?


์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ๋œ ๊ฐ์ฒด๋“ค์„ ๋‹ค์‹œ ๋ Œ๋”๋ง ์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…๊นŒ์ง€ ์™„๋ฃŒํ•˜์˜€์œผ๋‚˜, ๊ฐ๊ฐ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์„ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜๋กœ ์ €์žฅํ•ด์•ผ ํ•˜์ง€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์กฐ์‚ฌ๋ฅผ ํ•ด๋ณธ ๋’ค ๋‘๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ ์‹œ์ผœ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
  2. ํ•˜๋‚˜์˜ ์˜์—ญ์„ ์บก์ณํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ์ค‘์—์„œ 2๋ฒˆ์˜ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ•˜๋‚˜์˜ ์บก์ณ ์˜์—ญ๋งŒ ๊ด€๋ฆฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ธฐ์— ์šฉ์ดํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ด ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์บก์ณํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒํ•˜๋ฉด GIF๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?


์ด์ œ ๋‹ค์Œ ๋ฌธ์ œ๋Š” Image์˜ ๊ฒฝ์šฐ์—๋Š” ์‰ฝ๊ฒŒ Expo์˜ ๋‚ด์žฅ API๋ฅผ ์ด์šฉํ•ด ์บก์ณ๋ฅผ ํ•˜๋ฉด ๋์ง€๋งŒ GIF์˜ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„๊นŒ?์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

GIF๋กœ ๋ณ€ํ™˜ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ PNG๋กœ ์˜์—ญ ๋‚ด์˜ ๊ฐ€์žฅ ๊ธด GIF์˜ ๊ธธ์ด ๋งŒํผ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์บก์ณํ•ด์ค€ ๋’ค ๊ทธ๊ฒƒ์„ GIF๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ ‘๊ทผ์œผ๋กœ ์‹œ์ž‘ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

PNG๋ฅผ GIF๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ์‹œ๋„ํ•ด ๋ณด์•˜์œผ๋‚˜, PNG๋ฅผ GIF๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์— ์ƒ๋‹นํ•œ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์—ˆ๊ธฐ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด์—๋„ ๋ฌธ์ œ๋Š” ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • RN์ด ๊ฐ€์ง€๋Š” ํ•œ๊ณ„์ : RN์ด๊ธฐ ๋•Œ๋ฌธ์— PNG๋ฅผ GIF๋กœ ๋ฐ”๊พธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ NODE๊ธฐ๋ฐ˜์ด๊ธฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ค€ ๋’ค ๊ทธ๊ฒƒ๋“ค์„ ์„œ๋ฒ„์—์„œ GIF๋กœ ๋งŒ๋“ค์–ด ๋‹ค์‹œ RN์œผ๋กœ ๋ณด๋‚ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ๋ จ์˜ ์ž‘์—…: PNG๋ฅผ GIF๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์€ ์ƒ๋‹นํžˆ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”๋กœ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค.
  1. PNG๋ฅผ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์บก์ณํ•˜๊ณ  Expo์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ
  2. ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ PNG๋ฅผ base64๋กœ ์ธ์ฝ”๋”ฉ
  3. base64๋กœ ์ธ์ฝ”๋”ฉํ•œ PNG ๋ฐฐ์—ด์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ฃผ๊ธฐ
  4. ์„œ๋ฒ„์—์„œ๋Š” base64์„ ๋””์ฝ”๋”ฉํ•˜์—ฌ GIF๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ๋‹ค์‹œ base64๋กœ ์ธ์ฝ”๋”ฉ ํ•œ ํ›„ RN์œผ๋กœ ๋ฐ˜ํ™˜
  5. RN์—์„œ๋Š” base64๋ฅผ ๋‹ค์‹œ ๋””์ฝ”๋”ฉํ•œ ํ›„ GIF๋กœ ์ €์žฅํ•˜๊ธฐ.

Untitled

์—ฌ๊ธฐ์—์„œ base64๋ž€ ์ด๋ฏธ์ง€๋“ฑ์„ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์Šคํ‚ค์ฝ”๋“œ์˜ ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ 64์ง„๋ฒ•์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

image

frame์ด ๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜ ๋งŒํผ capture๋ฅผ ํ•ด์ค€ ๋’ค

image

frames์— capture๊ฐ€ ๋œ ๊ฒƒ์„ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ํ†ตํ•ด ์ฒดํฌ => ์ด๊ฒƒ๋“ค์„ base64๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋‹ค์‹œ ๋ฐฐ์—ด์— ๋‹ด์•„ ์„œ๋ฒ„๋กœ ์ „์†ก.

์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋’ค

image

์„œ๋ฒ„์—์„œ GIF ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด GIF ๊ตฌํ˜„

Buffer๋ฅผ ์ด์šฉํ•ด ํ•œ ํ”„๋ ˆ์ž„์˜ base64๊ฐ€ ๋‹ค ๋“ค์–ด์˜ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜๋งˆ๋‹ค sharp ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด PNG๋กœ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ์ค€ ๋’ค GIFEncoder๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ”„๋ ˆ์ž„ ๋งˆ๋‹ค ๋„ฃ์–ด GIF๋กœ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.


Untitled (1)

ํ•˜๋‚˜์˜ ์„ฑ๊ณต์ ์ธ GIF๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!


UX


์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์œ ์ € ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊นŒ?

์ €๋Š” ํ•ญ์ƒ ์œ ์ €์˜ ์ž…์žฅ์—์„œ ์ƒ๊ฐํ•ด ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๊ฐ€ ๋ถˆํŽธํ•จ์„ ๋А๋ผ์ง€ ์•Š์„ ํ™”๋ฉด ๋‹จ๊ณ„์™€ ์กฐ์ž‘๋ถ€๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ๋Š” ๋ชจ๋ฐ”์ผ ์ด๋ผ๋Š” ํŠน์„ฑ์ƒ ์†๊ฐ€๋ฝ์œผ๋กœ ์ ‘์ด‰ํ•ด ์ปจํŠธ๋กค ํ•˜๋Š” ๊ฒƒ๋“ค์ด ์›น๋ณด๋‹ค ๋” ํฌ๊ฒŒ ๋‹ค๊ฐ€์˜ฌ ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํ„ฐ์น˜๋กœ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข€ ๋” ์œ ์ €๋“ค์ด ๋А๋ผ๊ธฐ์— ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ผ๋Š” ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

๋‘๋ฒˆ์งธ๋Š” ํ™”๋ฉด ๊ตฌ์„ฑ์„ ์œ ์ €๋“ค์ด ๊ธฐ์‹œ๊ฐ์„ ๋А๋ผ์ง€ ์•Š์„ ํ™”๋ฉด ๋‹จ๊ณ„์™€ GUI๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.


๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋ž์„ ํ™œ์šฉํ•ด ๋ณด์ž!


  1. Layer์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋ž์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฉด์—์„œ ์ข€ ๋” ์นœํ™”์ ์ผ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  2. ์ด๋ฅผ ์œ„ํ•ด PanResponder์˜ ์ด๋ฒคํŠธ ์†์—์„œ ๋“œ๋ž˜๊ทธํ•œ ๋ ˆ์ด์–ด๋ฅผ ์˜ฎ๊ธฐ๋Š” ํ–‰์œ„๊ฐ€ ์ผ์ • ์ˆ˜์น˜ ๋ฒ”์œ„ ์ด์ƒ์„ ๋„˜์–ด๊ฐˆ ๋•Œ ์ž๋ฃŒ์˜ ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  3. newIndex๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
  4. zIndex๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋“ค์„ ์žฌ์ •๋ ฌ ํ•ด์ค€ ๋’ค ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  5. Stack(LIFO) ๊ตฌ์กฐ๋ฅผ ์ฐจ์šฉํ•ด ๋งˆ์ง€๋ง‰ ์ƒ๊ธด ์—˜๋ ˆ๋ฉ˜ํŠธ๊ฐ€ ๊ฐ€์žฅ ์œ„์— ์Œ“์ด๊ฒŒ ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
image

image

image

์ด๋ฏธ์ง€ ์—๋””ํ„ฐ ํˆด์˜ ์œ ์ € ์ž์œ ๋„๋ฅผ ์œ„ํ•œ Color Picker ๊ตฌํ˜„


3rd Party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์˜์กด์„ฑ์„ ๋†’์ด๊ธฐ ๋ณด๋‹ค๋Š”, ์ž์ฒด์ ์œผ๋กœ Color Picker๋ฅผ ๊ตฌํ˜„ํ•ด ์ด๋ฏธ์ง€ ์—๋””ํ„ฐ ํˆด์˜ ์ž์œ ๋„๋ฅผ ๋†’์ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. Fill, Stroke, Opacity Slider๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๊ณ ,

PanResponder๋ฅผ ์‚ฌ์šฉํ•ด Opacity Slider๋ฅผ ์ปจํŠธ๋กค ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ์†๊ฐ€๋ฝ์˜ ์œ„์น˜๋ฅผ Opacity Handler์— ์ œํ•œ ์‹œ์ผœ ๊ทธ ์•ˆ์—์„œ x์ขŒํ‘œ๋กœ ์ด๋™ํ•œ ๊ฐ’ ๋งŒํผ์˜ Opacity๋ฅผ ๊ณ„์‚ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

image

image image image image



Schedule

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : 2023.04.3 ~ 2023.04.24 / [๊ธฐํš 7์ผ, ๊ฐœ๋ฐœ 14์ผ]

1 ์ฃผ์ฐจ : ๊ธฐํš ๋ฐ ์„ค๊ณ„
  • ์•„์ด๋””์–ด ์ˆ˜์ง‘
  • ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ •
  • Git ์ž‘์—… ํ”Œ๋กœ์šฐ ๊ฒฐ์ •
  • Figma๋ฅผ ์‚ฌ์šฉํ•œ Mockup ์ œ์ž‘
  • MongoDb๋ฅผ ์ด์šฉํ•œ DB Schema ์„ค๊ณ„
  • Notion์„ ์ด์šฉํ•œ ์นธ๋ฐ˜ ์ž‘์„ฑ
2 ~ 3 ์ฃผ์ฐจ : ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ๋ฐœํ‘œ
  • RN ๊ตฌํ˜„

  • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ตฌํ˜„

  • ๋ฆฌ๋“œ๋ฏธ ์ž‘์„ฑ



Repository Link



Tech Stacks

Frontend

1. Why Redux?

  • ๊ด€๋ฆฌ์˜ ์šฉ์ด: ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋กœ ๋ถ€ํ„ฐ ๊ทผ์›์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์ธก์„ฑ: ์—„๊ฒฉํ•œ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ œ๊ณตํ•˜๊ณ , ์ด์ „ ์ƒํƒœ์™€ ์•ก์…˜์„ ๋ฐ›์•„ ๋‹ค์Œ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ธ ๋ฆฌ๋“€์„œ๋ฅผ ํ†ตํ•ด ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
  • ๋””๋ฒ„๊น…: ์•ฑ์˜ ์ƒํƒœ๊ฐ€ ์–ธ์ œ, ์–ด๋””์„œ, ์™œ, ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ: ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋น„ํ•ด ๋ฌด๊ฑฐ์›Œ ๋Œ€๊ทœ๋ชจ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ์— ์šฉ์ดํ•ด ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Backend

2. Why MongoDB?

  • ์ž์œ ๋กœ์šด ์Šคํ‚ค๋งˆ: ๊ทœ๊ฒฉํ™” ๋œ ์Šคํ‚ค๋งˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์„ ์›ํ•  ๋•Œ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด ํ™•์žฅ ๋˜ํ•œ ์ž์œ ๋กญ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ ์ง€ํ–ฅ: ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํ•„๋“œ ์„ธํŠธ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ JSON(BSON) ์œ ์‚ฌ ํ˜•์‹์œผ๋กœ ์ €์žฅ๋˜์–ด, ๋ณต์žกํ•œ ๊ฒƒ์„ ๋‹จ์ˆœํ™” ์‹œํ‚ค๊ธฐ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ํ’๋ถ€ํ•œ ์ฟผ๋ฆฌ: ๋‹ค์–‘ํ•œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰๊ณผ ์œ„์น˜ ๋“ฑ ํ’๋ถ€ํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด์™€ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ณตํ•ด DB๋ฅผ ์†์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Memoir

React Native๋ฅผ ์ฒ˜์Œ ๋‹ค๋ค„๋ณด๋ฉฐ ๋А๊ผˆ๋˜ ์ ์€ "์†๊ฐ€๋ฝ์ด๋ผ๋Š” ์ ‘์ ์œผ๋กœ ๋ฒŒ์–ด์ง€๋Š”, ์ˆ˜ ๋งŽ์€ ์ผ๋“ค์ด ์žˆ๊ตฌ๋‚˜" ์˜€์Šต๋‹ˆ๋‹ค. ์›น๋งŒ์„ ๊ณต๋ถ€ํ–ˆ๋‹ค๋ฉด ์ง‘์ค‘ํ•ด๋ณด์ง€ ๋ชปํ–ˆ์„ ์ œ์Šค์ณ๋ผ๋Š” ๋ถ€๋ถ„์ด ์žฌ๋ฏธ์žˆ๋Š” ์š”์†Œ๋กœ์จ ์ž‘์šฉํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์™€ ๋™์‹œ์— ๊ธฐ์กด์˜ ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ ์•ฑ๋“ค์ด ๊ทธ๋ƒฅ ํ—ˆํˆฌ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋””ํ…Œ์ผ์„ ์ฑ™๊ธด ๋ถ€๋ถ„๋“ค์ด ์ •๋ง ๋งŽ๊ตฌ๋‚˜๋ผ๋Š” ๊ฒƒ์„ ๋‹ค์‹œ๊ธˆ ๋А๊ปด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ๋ชจ๋ฐ”์ผ ์„œ๋น„์Šค๋“ค์„ ์†๊ฐ€๋ฝ์ด ๋ˆŒ๋ฆด ๋•Œ ๋ถ€ํ„ฐ ๋–ผ์–ด์งˆ ๋•Œ ๊นŒ์ง€์˜ ์ผ๋“ค์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๋งŽ์ด ๊ฐ€์ ธ๋ณด๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ€ ๋˜์–ด ์ €์—๊ฒŒ ์ข‹์€ ์˜ํ–ฅ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์•ž์œผ๋กœ๋„ ์ด์™€ ๊ฐ™์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์š”์†Œ๋“ค์ด ๊ฐ€๋“ํ•œ ํ”„๋กœ์ ํŠธ๋“ค๊ณผ ํ•จ๊ป˜ํ•  ๊ฒƒ์ธ๋ฐ ์ด ์ƒํ™ฉ์ด ๊ฐœ๋ฐœ์„ ์ง€์†์ ์œผ๋กœ ํฅ๋ฏธ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง€์†์ ์ธ ํฅ๋ฏธ์™€ ํƒ๊ตฌ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋“ค์„ ํ’€์–ด ๋‚˜๊ฐ€๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ์ข‹์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages