¸®¾×Æ®¿Í ½ºÅ丮ºÏÀ¸·Î ¹è¿ì´Â ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ß!ÀÌ Ã¥Àº À¥ °³¹ßÀ» ÇÏ´Â °³¹ßÀÚ, ¸®¾×Æ®·Î ½Ì±Û ÆäÀÌÁö ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ°í ÀÖ´Â °³¹ßÀÚ ±×¸®°í ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ß(Component Driven Development, CDD)À» ÇÏ°íÀÚ ÇÏ´Â °³¹ßÀÚ¸¦ ´ë»óÀ¸·Î ÇÏ°í ÀÖ´Ù. ¸®¾×Æ®¿Í ½ºÅ丮ºÏÀ» »ç¿ëÇÏ¿© ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ßÀ» ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï, ¸®¾×Æ®ÀÇ ±âÃʺÎÅÍ ½ºÅ丮ºÏÀÇ ¼³Á¤, ½ºÅ丮ºÏÀ» ÅëÇØ ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ßÀ» ´Ù·ç´Â ¹æ¹ýÀ» ¿¹Á¦¸¦ ÅëÇØ ¼³¸íÇÏ°í ÀÖ´Ù. ÀÌ Ã¥À» ÅëÇØ, ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ßÀ» ÇÏÁö ¾Ê°í ÀÖ´Â ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡ ½ºÅ丮ºÏÀ» Àû¿ëÇÏ¿© ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ßÀ» È°¿ëÇÒ ¼ö ÀÖµµ·Ï ¾È³»ÇÏ°í ÀÖ´Ù.
Çѱ¹ÀÇ Áß¼Ò±â¾÷¿¡¼ MFC¸¦ »ç¿ëÇÑ À©µµ¿ì ÇÁ·Î±×·¥ °³¹ßÀ» ½ÃÀÛÀ¸·Î ¾Èµå·ÎÀ̵å, iOS, À¥ °³¹ßÀÚ·Î È°µ¿À» ÇÏ¿´´Ù. ±× ÈÄ, À¥ ÇÁ·Î±×·¡¸Ó·Î¼ È£ÁÖ¿¡¼ È°µ¿ÇÏ¿´À¸¸ç ÇöÀç´Â ÀϺ» ±â¾÷¿¡¼ Ç®½ºÅà ¿£Áö´Ï¾î·Î¼ ¸®¾×Æ®, ¸®¾×Æ® ³×ÀÌƼºê¸¦ »ç¿ëÇÑ ¼ºñ½º¸¦ °³¹ß ÁßÀÌ´Ù. ¾÷¹« ÀÌ¿Ü¿¡µµ ¸®¾×Æ®¿Í ¸®¾×Æ® ³×ÀÌƼºê¸¦ »ç¿ëÇÑ ¾ÛÀ» °³¹ß ÁßÀÌ¸ç ¾Û °³¹ß Áß¿¡ °Þ¾ú´ø ÀÏÀ» ºí·Î±×·Î °ÔÀçÇÏ°í ÀÖ´Ù. 2019³â¿¡´Â ¸¹Àº »ç¶÷ÀÌ ¸®¾×Æ® ³×ÀÌƼºê¸¦ »ç¿ëÇÏ¿© Á» ´õ ½±°Ô iOS¿Í ¾Èµå·ÎÀÌµå ¾ÛÀ» °³¹ßÇÒ ¼ö ÀÖµµ·Ï, <½º¹«µð ÇÑ ÀÜ ¸¶½Ã¸ç ³¡³»´Â React Native>¸¦ Ãâ°£ÇÏ¿´´Ù.
- ºí·Î±×
https://dev-yakuza.posstree.com/ko/
- ÀúÀÚ ¾Û ¸®½ºÆ®
https://dev-yakuza.posstree.com/app/list/ko/
- ½º¹«µð ÇÑ ÀÜ ¸¶½Ã¸ç ³¡³»´Â React Native
https://github.com/bjpublic/Reactnative
1Àå ¸®¾×Æ®¶õ?1.1 À¥ÀÇ ¿ª»ç1) À¥ 1.0 - À¥ ÆäÀÌÁö ½Ã´ë2) À¥ 2.0 - À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ½Ã´ë1.2 ¸®¾×Æ®ÀÇ Æ¯Â¡1) JSX2) ´Ü¹æÇâ µ¥ÀÌÅÍ ¹ÙÀεù3) °¡»ó µ¼4) ¼±¾ðÇü ÇÁ·Î±×·¡¹Ö5) ÄÄÆ÷³ÍÆ® ±â¹Ý1.3 ¿ä¾à2Àå ¸®¾×Æ® °³¹ß ȯ°æ2.1 À©µµ¿ì °³¹ß ȯ°æ ¼³Á¤1) ÃÊÄݸ®Æ¼ ¼³Ä¡2) ³ëµå ¼³Ä¡2.3 ¸®¾×Æ®¸¦ ½ÃÀÛÇÏ´Â ¹æ¹ý1) ½ºÅ©¸³Æ® ÅÂ±× Ãß°¡2) WebpackÀ̳ª BabelÀ» ¼³Á¤ÇÏ¿© °³¹ß3) create-react-app4) Next.js ÇÁ·¹ÀÓ¿öÅ©2.4 create-react-app1) create-react-app ¼³Ä¡2) create-react-appÀ¸·Î ÇÁ·ÎÁ§Æ® »ý¼º ¹× ½ÇÇà3) create-react-app ÇÁ·ÎÁ§Æ®ÀÇ Æú´õ ±¸Á¶2.5 ¿ä¾à3Àå ³ªÀÇ Ã¹ ¸®¾×Æ® ÇÁ·ÎÁ§Æ®3.1 ŸÀÔ½ºÅ©¸³Æ®1) create-react-app°ú ŸÀÔ½ºÅ©¸³Æ®2) create-react-appÀÇ Å¸ÀÔ½ºÅ©¸³Æ® ÅÛÇø´ »ç¿ëÇϱâ3.2 ½ºÅ¸Àϸµ1) CSS¿Í Link ű×2) CSS¿Í import3) CSS-in-JS (Emotion)3.3 Àý´ë °æ·Î·Î ÄÄÆ÷³ÍÆ® Ãß°¡3.4 Prettier1) Prettier ¼³Ä¡2) Prettier ¼³Á¤3) Prettier ½ÇÇà3.5 ESLint1) ESLint ¼³Ä¡2) ESLint ¼³Á¤3) ESLint ½ÇÇà3.6 ¿ä¾à4Àå Ä«¿îÅÍ ¾Û - Props¿Í State 4.1 Props¿Í State4.2 ÇÁ·ÎÁ§Æ® Áغñ 4.3 °³¹ß1) ¡´Container /¡µ ÄÄÆ÷³ÍÆ®2) ¡´Title /¡µ ÄÄÆ÷³ÍÆ®3) ¡´Label /¡µ ÄÄÆ÷³ÍÆ®4) ¡´Button /¡µ ÄÄÆ÷³ÍÆ®5) State6) Props4.4 ¿ä¾à5Àå Ŭ·¡½º ÄÄÆ÷³ÍÆ®5.1 Ŭ·¡½º ÄÄÆ÷³ÍÆ®5.2 ÇÁ·ÎÁ§Æ® Áغñ5.3 °³¹ß1) ¡´Button /¡µ ÄÄÆ÷³ÍÆ®2) ¡´Label /¡µ ÄÄÆ÷³ÍÆ®3) ¡´App /¡µ ÄÄÆ÷³ÍÆ®5.4 ¶óÀÌÇÁ»çÀÌŬ ÇÔ¼ö1) constructor ÇÔ¼ö2) render ÇÔ¼ö3) getDerivedStateFromProps ÇÔ¼ö4) componentDidMount ÇÔ¼ö5) shouldComponentUpdate ÇÔ¼ö6) getSnapshotBeforeUpdate ÇÔ¼ö7) componentDidUpdate ÇÔ¼ö8) componentWillUnmount ÇÔ¼ö9) componentDidCatch ÇÔ¼ö10) È£Ãâ ¼ø¼5.5 ¿ä¾à6Àå ÇÒ ÀÏ ¸ñ·Ï ¾Û - Context API6.1 Context API6.2 ÇÁ·ÎÁ§Æ® Áغñ6.3 State¿Í Props·Î ÇÒ ÀÏ ¸ñ·Ï ¾Û °³¹ß1) ¡´Title /¡µ ÄÄÆ÷³ÍÆ®2) ¡´Button /¡µ ÄÄÆ÷³ÍÆ®3) ¡´ToDoItem /¡µ ÄÄÆ÷³ÍÆ®4) ¡´ToDoList /¡µ ÄÄÆ÷³ÍÆ®5) useState·Î ÇÒ ÀÏ ¸ñ·Ï µ¥ÀÌÅÍ °ü¸®Çϱâ6) ¡´DataView /¡µ ÄÄÆ÷³ÍÆ®7) ¡´TextInput /¡µ ÄÄÆ÷³ÍÆ®8) Ãß°¡ ¹öÆ° ÄÄÆ÷³ÍÆ®9) ¡´ToDoInput /¡µ ÄÄÆ÷³ÍÆ®10) ¡´ShowInputButton /¡µ ÄÄÆ÷³ÍÆ®11) ¡´InputContainer /¡µ ÄÄÆ÷³ÍÆ®6.4 Context API·Î ÇÒ ÀÏ ¸ñ·Ï ¾Û °³¹ß1) ¡´ToDoList /¡µ »ý¼º2) ¡´App /¡µ ÄÄÆ÷³ÍÆ®¿¡ Provider Á¦°ø3) ¡´ToDoList /¡µ ÄÄÆ÷³ÍÆ®: Consumer¸¦ »ç¿ëÇÏ¿© Context µ¥ÀÌÅÍ »ç¿ëÇϱâ4) ¡´ToDoInput /¡µ ÄÄÆ÷³ÍÆ®: Consumer¸¦ »ç¿ëÇÏ¿© Context µ¥ÀÌÅÍ »ç¿ëÇϱâ6.5 ¿ä¾à7Àå react-router7.1 react-router7.2 ÇÁ·ÎÁ§Æ® Áغñ7.3 °³¹ß1) react-router2) ¡´DataView /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®3) ¡´ToDoInput /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®4) ¡´Header /¡µ ÄÄÆ÷³ÍÆ® Ãß°¡7.4 ¿ä¾à 8Àå Fetch API 8.1 Fetch API 8.2 ÇÁ·ÎÁ§Æ® Áغñ8.3 °³¹ß1) ¡´Header /¡µ ÄÄÆ÷³ÍÆ®2) ¡´BlogPost /¡µ ÄÄÆ÷³ÍÆ®3) ºí·Î±× ±Û ¸ñ·Ï State4) useEffect ÈÅ5) Fetch API·Î µ¥ÀÌÅÍ °¡Á®¿À±â6) ¡´Button /¡µ ÄÄÆ÷³ÍÆ®7) ¡´Form /¡µ ÄÄÆ÷³ÍÆ®8) ¡´Form /¡µ Ç¥½Ã State9) ºí·Î±× ±Û State µ¥ÀÌÅÍ10) Fetch API·Î ºí·Î±× ±Û µî·ÏÇϱâ8.4 ¿ä¾à9Àå ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ß9.1 ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ß9.2 ¾ÆÅä¹Í µðÀÚÀÎ9.3 ½ºÅ丮ºÏ9.4 ÇÁ·ÎÁ§Æ® Áغñ9.5 ½ºÅ丮ºÏ ¼³Ä¡9.6 ½ºÅ丮ºÏ ¼³Á¤9.7 ½ºÅ丮ºÏ È®ÀÎ 1) .storybook Æú´õ2) .eslintrc.js ÆÄÀÏ3) .npmrc ÆÄÀÏ4) package.json ÆÄÀÏ5) ./src/stories Æú´õ6) ./src/stories/Button.tsx ÆÄÀÏ 7) ./src/stories/Button.stories.tsx ÆÄÀÏ8) ./src/stories/Introduction.stories.mdx ÆÄÀÏ9.8 ½ºÅ丮ºÏ ½ÇÇà1) ¸Þ´º2) ÄÁÆ®·Ñ ÆгÎ3) ¾×¼Ç ÅÇ4) »ó´Ü ¸Þ´º ¹Ù - ¹è°æ»ö5) »ó´Ü ¸Þ´º ¹Ù - ȸé Å©±â9.9 ¿ä¾à10Àå ÄÄÆ÷³ÍÆ® ÁÖµµ °³¹ß - Ä«¿îÅÍ ¾Û 10.1 Ä«¿îÅÍ ¾Û10.2 ÇÁ·ÎÁ§Æ® Áغñ10.3 °³¹ß1) ¡´Title /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®2) ¡´Button /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®3) ¡´Count /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®4) ¡´Counter /¡µ À¯±âü ÄÄÆ÷³ÍÆ®5) ¡´CounterApp /¡µ ÅÛÇø´ ÄÄÆ÷³ÍÆ®6) ¡´Home /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®7) Ä«¿îÅÍ ¾Û10.4 ¿ä¾à11Àå CDD - ÇÒ ÀÏ ¸ñ·Ï ¾Û 11.2 ÇÁ·ÎÁ§Æ® Áغñ11.3 °³¹ß1) ¡´AppTitle /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®2) ¡´PageTitle /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®3) ¡´Label /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®4) ¡´Button /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®5) ¡´Input /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®6) ¡´Header /¡µ À¯±âü ÄÄÆ÷³ÍÆ®7) ¡´ToDoItem /¡µ À¯±âü ÄÄÆ÷³ÍÆ®8) ¡´InputToDo /¡µ À¯±âü ÄÄÆ÷³ÍÆ®9) ¡´ToDoList /¡µ ÅÛÇø´ ÄÄÆ÷³ÍÆ®10) ¡´ToDoInput /¡µ ÅÛÇø´ ÄÄÆ÷³ÍÆ®11) ¡´ToDoListPage /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®12) ToDoList ÄÁÅؽºÆ®13) ¡´ToDoInputPage /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®14) ¡´NotFound /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®15) ÇÒ ÀÏ ¸ñ·Ï ¾Û11.4 ¿ä¾à12Àå CDD - ºí·Î±× ¾Û 12.1 ºí·Î±× ¾Û12.2 ÇÁ·ÎÁ§Æ® Áغñ12.3 °³¹ß1) ¡´AppTitle /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®2) ¡´BlogTitle /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®3) ¡´BlogBody /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®4) ¡´Button /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®5) ¡´DialogTitle /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®6) ¡´Label /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®7) ¡´InputText /¡µ ¿øÀÚ ÄÄÆ÷³ÍÆ®8) ¡´Input /¡µ ºÐÀÚ ÄÄÆ÷³ÍÆ®9) ¡´Header /¡µ À¯±âü ÄÄÆ÷³ÍÆ®10) ¡´BlogItem /¡µ À¯±âü ÄÄÆ÷³ÍÆ®11) ¡´RegisterBlogDialog /¡µ À¯±âü ÄÄÆ÷³ÍÆ®12) ¡´BlogList /¡µ ÅÛÇø´ ÄÄÆ÷³ÍÆ®13) ¡´BlogListPage /¡µ ÆäÀÌÁö ÄÄÆ÷³ÍÆ®14) ºí·Î±× ¾Û12.4 ¿ä¾àºÎ·Ï1. Lefthook1) ÇÁ·ÎÁ§Æ® Áغñ2) Lefthook ¼³Ä¡3) Lefthook ¼³Á¤4) Lefthook ½ÇÇà5) Lefthook Àû¿ë2. ¹èÆ÷