¸®¾×Æ® SPA ±â¹ÝÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÅëÇØ ÇÁ·ÐÆ®¿£µå ±¸Çö¿¡¼ºÎÅÍ ¹é¿£µå ±¸Çö±îÁö Ç®½ºÅà °³¹ß °úÁ¤À» ÀÚ¼¼È÷ »ìÆ캼 ¼ö ÀÖ´Ù. °³¹ß °úÁ¤°ú »ó¿ë ȯ°æ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÑ ÀûÀýÇÑ ÆÁÀ» Á¦°øÇÑ´Ù. »ó¿ë Ŭ¶ó¿ìµå ȯ°æ¿¡¼ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷ÇÏ°í ¼³Á¤ÇÏ´Â ¹æ¹ýµµ ´Ù·é´Ù. ÀúÀÚÀÇ ¿À·£ ½Ç¹« °æÇè°ú ³ëÇϿ츦 ÅëÇØ Ç÷§Æû°ú µµ±¸µéÀ» °æÇèÇÏ°í ÀÌÇØÇÒ ¼ö ÀÖÀ¸¸ç, ´õ ³ª¾Æ°¡ ÀÚ½ÅÀÇ ¾ÆÀ̵ð¾î¸¦ ±¸Ã¼ÈÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ãÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.
1Àå. ŸÀÔ½ºÅ©¸³Æ® ÀÌÇØÇϱâ__±â¼úÀû ¿ä±¸ »çÇ×__ŸÀÔ½ºÅ©¸³Æ®¶õ ¹«¾ùÀΰ¡?__¿Ö ŸÀÔ½ºÅ©¸³Æ®°¡ ÇÊ¿äÇÑ°¡?____µ¿Àû ŸÀÔ°ú Á¤Àû ŸÀÔ____°´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö__¿ä¾à2Àå. ŸÀÔ½ºÅ©¸³Æ® »ìÆ캸±â__±â¼úÀû ¿ä±¸ »çÇ×__ŸÀÔÀº ¹«¾ùÀΰ¡? ____ŸÀÔÀº ¾î¶»°Ô µ¿ÀÛÇϴ°¡?__ŸÀÔ½ºÅ©¸³Æ®ÀÇ Å¸ÀÔ »ìÆ캸±â____any ŸÀÔ____unknown ŸÀÔ____ÀÎÅͼ½¼Ç ŸÀÔ°ú À¯´Ï¿Â ŸÀÔ____¸®ÅÍ·² ŸÀÔ____ŸÀÔ º°Äª____ÇÔ¼ö ¹Ýȯ ŸÀÔ____ÇÔ¼ö ŸÀÔ____never ŸÀÔ__Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º ÀÌÇØÇϱâ ____Ŭ·¡½º____ÀÎÅÍÆäÀ̽º__»ó¼Ó ÀÌÇØÇϱâ ____Ãß»ó Ŭ·¡½º____ÀÎÅÍÆäÀ̽º__Á¦³×¸¯ ÀÌÇØÇϱâ__ÃֽŠ±â´É°ú ÄÄÆÄÀÏ·¯ ¼³Á¤____¼±ÅÃÀû ¿¬°á____³Î º´ÇÕ____ŸÀÔ½ºÅ©¸³Æ® ¼³Á¤__¿ä¾à3Àå. ES6+·Î ¾Û ¸¸µé±â__±â¼úÀû ¿ä±¸ »çÇ×__ES6 º¯¼ö ŸÀÔ°ú ÀÚ¹Ù½ºÅ©¸³Æ® ¹üÀ§__È»ìÇ¥ ÇÔ¼ö__this ÄÁÅؽºÆ® º¯°æÇϱâ ____½ºÇÁ·¹µå, ±¸Á¶ ºÐÇØ, ·¹½ºÆ®____½ºÇÁ·¹µå¿Í Object.assign, Array.concat ____±¸Á¶ ºÐÇØ____·¹½ºÆ®____»õ·Î¿î ¹è¿ ÇÔ¼ö____»õ·Î¿î Ä÷º¼Ç ŸÀÔ____async await__¿ä¾à4Àå. SPAÀÇ °³³ä°ú ¸®¾×Æ®¿¡¼ »ç¿ëÇÏ´Â ¹æ¹ý__±â¼úÀû ¿ä±¸ »çÇ×__ÀüÅëÀûÀÎ À¥»çÀÌÆ® °³¹ß ¹æ¹ý ÀÌÇØÇϱâ__SPAÀÇ ÀÌÁ¡°ú Ư¼º ÀÌÇØÇϱâ__¸®¾×Æ® SPA ¹æ½Ä ÀÌÇØÇϱâ__¸®¾×Æ® ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¿©·¯ °¡Áö ¼Ó¼º__¿ä¾à5Àå. ÈÅÀ» »ç¿ëÇÑ ¸®¾×Æ® °³¹ß__±â¼úÀû ¿ä±¸ »çÇ×__Ŭ·¡½º ¹æ½Ä ÄÄÆ÷³ÍÆ®ÀÇ ÇÑ°è¿Í ¹®Á¦Á¡ ÀÌÇØÇϱâ____»óÅÂ____¶óÀÌÇÁ »çÀÌŬ ¸Þ¼µå__¸®¾×Æ® ÈÅ°ú ÀåÁ¡ ÀÌÇØÇϱâ__Ŭ·¡½º ¹æ½Ä°ú ÈÅ ¹æ½ÄÀÇ À¯»çÁ¡°ú Â÷ÀÌÁ¡____ÄÚµå Àç»ç¿ë____´Ü¼ø¼º__¿ä¾à6Àå. create-react-appÀ» »ç¿ëÇÑ ÇÁ·ÎÁ§Æ® ¼³Á¤°ú Jest È°¿ë Å×½ºÆ®__±â¼úÀû ¿ä±¸ »çÇ×__¸®¾×Æ® °³¹ß ¹æ¹ý°ú ºôµå ½Ã½ºÅÛ ÀÌÇØÇϱâ____ÇÁ·ÎÁ§Æ® µµ±¸____Æ®·£½ºÆÄÀÏ____ÄÚµå ÀúÀå¼Ò__¸®¾×Æ® Ŭ¶óÀ̾ðÆ® Ãø Å×½ºÆ® ÀÌÇØÇϱâ__¸ðÅ·____jest.fn ¸ðÅ·____ÄÄÆ÷³ÍÆ® ¸ðÅ·__¸®¾×Æ® °³¹ß¿¡ »ç¿ëÇÏ´Â ÀϹÝÀûÀÎ µµ±¸¿Í »ç¿ë¹ý____VS Code____ÇÁ¸®Æ¼¾î____Å©·Ò µð¹ö°Å____±× ¹ÛÀÇ IDE__¿ä¾à7Àå. ¸®´ö½º¿Í ¸®¾×Æ® ¶ó¿ìÅÍ__±â¼úÀû ¿ä±¸ »çÇ×__¸®´ö½º »óÅ ____¸®µà¼¿Í ¾×¼Ç____¸®¾×Æ® ÄÁÅؽºÆ®__¸®¾×Æ® ¶ó¿ìÅÍ__¿ä¾à8Àå. Node.js¿Í Express¸¦ »ç¿ëÇÑ ¼¹ö Ãø °³¹ß__±â¼úÀû ¿ä±¸ »çÇ×__³ëµå µ¿ÀÛ ¹æ½Ä ÀÌÇØÇϱâ____À̺¥Æ® ·çÇÁ__³ëµåÀÇ ±â´É ÇнÀÇϱâ____³ëµå ¼³Ä¡Çϱâ____°£´ÜÇÑ ³ëµå ¼¹ö ¸¸µé±â____Request¿Í Response____¶ó¿ìÆÃ____µð¹ö±ë__Express·Î ³ëµå °³¹ßÀ» °³¼±ÇÏ´Â ¹æ¹ý ÀÌÇØÇϱâ__Express ±â´É ÇнÀÇϱâ__Express·Î À¥ API ¸¸µé±â__¿ä¾à9Àå. GraphQL__±â¼úÀû ¿ä±¸ »çÇ×__GraphQL ÀÌÇØÇϱâ__GraphQL ½ºÅ°¸¶ ÀÌÇØÇϱâ__typedef¿Í resolver ÀÌÇØÇϱâ__Äõ¸®¿Í ¹ÂÅ×À̼Ç, ±¸µ¶ ÀÌÇØÇϱâ__¿ä¾à10Àå. ŸÀÔ½ºÅ©¸³Æ®¿Í GraphQL ÀÇÁ¸¼ºÀ¸·Î Express ÇÁ·ÎÁ§Æ® ±¸¼ºÇϱâ__±â¼úÀû ¿ä±¸ »çÇ×__ŸÀÔ½ºÅ©¸³Æ® ±â¹Ý Express ÇÁ·ÎÁ§Æ® ¸¸µé±â__ÇÁ·ÎÁ§Æ®¿¡ GraphQL°ú ÀÇÁ¸¼º Ãß°¡Çϱâ__º¸Á¶ ÆÐÅ°Áö »ìÆ캸±â__¿ä¾à11Àå. ¿Â¶óÀÎ Æ÷·³ ¾ÖÇø®ÄÉÀ̼Ç__Æ÷·³ ¾ÖÇø®ÄÉÀÌ¼Ç ºÐ¼®__Æ÷·³ ÀÎÁõ ºÐ¼®__½º·¹µå °ü¸® ºÐ¼®__½º·¹µå Æ÷ÀÎÆ® ½Ã½ºÅÛ ºÐ¼®__¿ä¾à12Àå. ¿Â¶óÀÎ Æ÷·³ ¾ÖÇø®ÄÉÀÌ¼Ç ¸®¾×Æ® Ŭ¶óÀ̾ðÆ® ¸¸µé±â__±â¼úÀû ¿ä±¸ »çÇ×__Ãʱ⠹öÀüÀÇ ¸®¾×Æ® ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â ____CSS Grid____¿¡·¯ °æ°è____µ¥ÀÌÅÍ ¼ºñ½º °èÃþ____³»ºñ°ÔÀÌ¼Ç ¸Þ´º____ÀÎÁõ ÄÄÆ÷³ÍÆ®____¶ó¿ìÆðú ȸé____Ȩ ȸé____½º·¹µå °Ô½Ã ȸé __¿ä¾à13Àå. Express¿Í Redis·Î ¼¼¼Ç »óÅ ±¸¼ºÇϱâ__±â¼úÀû ¿ä±¸ »çÇ×__¼¼¼Ç »óÅ ÀÌÇØÇϱâ__Redis ÀÌÇØÇϱâ__Express¿Í Redis¸¦ »ç¿ëÇØ ¼¼¼Ç »óÅ ¸¸µé±â__¿ä¾à14Àå. TypeORMÀ¸·Î ÀúÀå¼Ò °èÃþ°ú Postgres ±¸¼ºÇϱâ__±â¼úÀû ¿ä±¸ »çÇ×__Postgres µ¥ÀÌÅͺ£À̽º ¼³Á¤Çϱâ__TypeORMÀ» »ç¿ëÇØ °´Ã¼ °ü°è ¸ÅÆÛ ÀÌÇØÇϱâ__TypeORM°ú Postgres¸¦ »ç¿ëÇØ ÀúÀå¼Ò °èÃþ ¸¸µé±â __¿ä¾à15Àå. GraphQL ½ºÅ°¸¶ Ãß°¡Çϱâ - 1ºÎ__±â¼úÀû ¿ä±¸ »çÇ×__GraphQL ¼¹ö Ãø typedefs¿Í ¸®Á¹¹ö ¸¸µé±â____ThreadPoint ½Ã½ºÅÛ__ÀÎÁõ°ú GraphQL ¸®Á¹¹ö ÅëÇÕÇϱâ__Apollo GraphQLÀ» Äõ¸®Çϱâ À§ÇÑ ¸®¾×Æ® Ŭ¶óÀ̾ðÆ® Ãø ÈÅ ¸¸µé±â____¸ÞÀΠȸé____ÀÎÁõ °ü·Ã ±â´É ____UserProfile ȸé__¿ä¾à16Àå. GraphQL ½ºÅ°¸¶ Ãß°¡Çϱâ - 2ºÎ__½º·¹µå °æ·Î____Æ÷ÀÎÆ® ½Ã½ºÅÛ__¿ä¾à17Àå. AWS¿¡ ¾ÖÇø®ÄÉÀÌ¼Ç ¹èÆ÷Çϱâ__±â¼úÀû ¿ä±¸ »çÇ×__AWS Ŭ¶ó¿ìµå¿¡¼ ¿ìºÐÅõ ¸®´ª½º ¼³Á¤Çϱâ__¿ìºÐÅõ¿¡¼ Redis, Postgres, ³ëµå ¼³Á¤Çϱâ____Redis ¼³Á¤____Postgres ¼³Á¤Çϱâ ____³ëµå ¼³Á¤Çϱâ __NGINX¿¡¼ ¾ÛÀ» ¼³Á¤ÇÏ°í ¹èÆ÷Çϱâ____super-forum-server ¼³Á¤Çϱâ ____super-forum-client ¼³Á¤Çϱâ____Æ®·¯ºí ½´ÆÃ__¿ä¾à