Airflow ¼³Ä¡ºÎÅÍ ÆÄÀÌÇÁ¶óÀÎ ÀÛ¼º, Å×½ºÆ®, ºÐ¼®, ¹éÇÊ ±×¸®°í ¹èÆ÷ ¹× °ü¸®±îÁö¸¦ ÇÑ ±ÇÀ¸·Î ÇØ°á!ÀÌ Ã¥Àº È¿°úÀûÀÎ µ¥ÀÌÅÍ ÆÄÀÌÇÁ¶óÀÎÀ» ¸¸µé°í À¯ÁöÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÏ°í ÀÖÀ¸¸ç, À̸¦ ÅëÇØ ¿©·¯ºÐÀº ´Ù¾çÇÑ µ¥ÀÌÅÍ ¼Ò½ºÀÇ Áý°è, µ¥ÀÌÅÍ ·¹ÀÌÅ©¿ÍÀÇ ¿¬°á ¹× Ŭ¶ó¿ìµå ¹èÆ÷¸¦ Æ÷ÇÔÇؼ °¡Àå ÀϹÝÀûÀÎ »ç¿ë¹ýÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. °¢ ÀåÀÇ ¼³¸í°ú Æ©Å丮¾ó ÇüÅÂÀÇ ½Ç¿ëÀûÀÎ °¡À̵带 ÅëÇØ, Airflow¸¦ ±¸µ¿ÇÏ´Â ¹æÇ⼺ ºñ¼øȯ ±×·¡ÇÁ(DAG)ÀÇ ¸ðµç ³»¿ë°ú ¿ä±¸»çÇ׿¡ ¸Â°Ô ÆÄÀÌÇÁ¶óÀÎÀ» Ä¿½ºÅ͸¶ÀÌ¡ÇÏ´Â ¹æ¹ýÀ» ´Ù·é´Ù. ÀÌ Ã¥Àº Áß±Þ ÀÌ»óÀÇ ÆÄÀ̽㠽ºÅ³À» º¸À¯ÇÑ µ¥ºê¿É½º ¿£Áö´Ï¾î, µ¥ÀÌÅÍ ¿£Áö´Ï¾î, ¸Ó½Å·¯´× ¿£Áö´Ï¾î, ±×¸®°í ½Ã½ºÅÛ °ü¸®ÀÚ¸¦ À§ÇÑ Ã¥ÀÌ´Ù.
³×´ú¶õµå ¾Ï½ºÅ׸£´ã¿¡ À§Ä¡ÇÑ µ¥ÀÌÅÍ ±â¹Ý ¼Ö·ç¼ÇÀ» °³¹ßÇÏ´Â GoDataDrivenÀÇ µ¥ÀÌÅÍ ¿£Áö´Ï¾î´Ù. ¼ÒÇÁÆ®¿þ¾î °øÇаú ÄÄÇ»ÅÍ °úÇп¡ ´ëÇÑ Áö½ÄÀÌ ¸¹Àº ±×´Â ¼ÒÇÁÆ®¿þ¾î °³¹ßÀ̳ª µ¥ÀÌÅÍ ÀÛ¾÷À» ¸¶Ä¡ ¾î·Á¿î ÆÛÁñÀ» Ǫ´Â °Íó·³ Áñ°Ì°Ô ÇÑ´Ù. ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î ÀÛ¾÷À» ¼±È£Çϸç, Apache Airflow ÇÁ·ÎÁ§Æ®ÀÇ ±â¿©ÀÚÀÌÀÚ ¾Ï½ºÅ׸£´ã Airflow ¸ðÀÓÀÇ °øµ¿ ÁÖÃÖÀÚ´Ù.
¿Å±äÀÌ ¸Ó¸®¸» xiii</br>¹ø¿ª¼ Ãßõ»ç xv</br>º£Å¸¸®´õ Èıâ xvii</br>¿ø¼ Ãßõ»ç xix</br>½ÃÀÛÇϸç xx</br>°¨»çÀÇ ±Û xxii</br>ÀÌ Ã¥¿¡ ´ëÇÏ¿© xxiv</br>Ç¥Áö¿¡ ´ëÇÏ¿© xxviii</br></br><b>PART I ±âº»Æí</b></br></br>CHAPTER 1 Apache Airflow »ìÆ캸±â 3</br>1.1 µ¥ÀÌÅÍ ÆÄÀÌÇÁ¶óÀÎ ¼Ò°³ 4</br> 1.1.1 µ¥ÀÌÅÍ ÆÄÀÌÇÁ¶óÀÎ ±×·¡ÇÁ 4 </br> 1.1.2 ÆÄÀÌÇÁ¶óÀÎ ±×·¡ÇÁ ½ÇÇà 6</br> 1.1.3 ±×·¡ÇÁ ÆÄÀÌÇÁ¶óÀΰú ÀýÂ÷Àû ½ºÅ©¸³Æ® ÆÄÀÌÇÁ¶óÀÎ ºñ±³ 7</br> 1.1.4 ¿öÅ©Ç÷Π¸Å´ÏÀú¸¦ ÀÌ¿ëÇÑ ÆÄÀÌÇÁ¶óÀÎ ½ÇÇà 9</br>1.2 Airflow ¼Ò°³ 10</br> 1.2.1 ÆÄÀ̽ã ÄÚµå·Î À¯¿¬ÇÑ ÆÄÀÌÇÁ¶óÀÎ Á¤ÀÇ 10</br> 1.2.2 ÆÄÀÌÇÁ¶óÀÎ ½ºÄÉÁÙ¸µ ¹× ½ÇÇà 11</br> 1.2.3 ¸ð´ÏÅ͸µ°ú ½ÇÆРó¸® 13 </br> 1.2.4 Á¡ÁøÀû ·Îµù ¹× ¹éÇÊ 16</br>1.3 ¾ðÁ¦ Airflow¸¦ »ç¿ëÇØ¾ß ÇÒ±î 16</br> 1.3.1 Airflow¸¦ ¼±ÅÃÇÏ´Â ÀÌÀ¯ 17 </br> 1.3.2 Airflow°¡ ÀûÇÕÇÏÁö ¾ÊÀº °æ¿ì 17</br>1.4 ÀÌÈÄ ³»¿ë 18</br>¿ä¾à 19</br></br>CHAPTER 2 Airflow DAGÀÇ ±¸Á¶ 20</br>2.1 ´Ù¾çÇÑ ¼Ò½º¿¡¼ µ¥ÀÌÅÍ ¼öÁý 21</br> 2.1.1 µ¥ÀÌÅÍ Å½»ö 21</br>2.2 ù ¹ø° Airflow DAG ÀÛ¼º 23</br> 2.2.1 ŽºÅ©¿Í ¿ÀÆÛ·¹ÀÌÅÍ Â÷ÀÌÁ¡ 27 </br> 2.2.2 ÀÓÀÇ ÆÄÀ̽ã ÄÚµå ½ÇÇà 27</br>2.3 Airflow¿¡¼ DAG ½ÇÇàÇϱâ 30</br> 2.3.1 ÆÄÀ̽ã ȯ°æ¿¡¼ Airflow ½ÇÇà 30</br> 2.3.2 µµÄ¿ ÄÁÅ×À̳ʿ¡¼ Airflow ½ÇÇàÇϱâ 31</br> 2.3.3 Airflow UI µÑ·¯º¸±â 32</br>2.4 ½ºÄÉÁÙ °£°ÝÀ¸·Î ½ÇÇàÇϱâ 36</br>2.5 ½ÇÆÐÇÑ Å½ºÅ©¿¡ ´ëÇÑ Ã³¸® 37</br>¿ä¾à 40</br></br>CHAPTER 3 AirflowÀÇ ½ºÄÉÁÙ¸µ 41</br>3.1 ¿¹½Ã: »ç¿ëÀÚ À̺¥Æ® ó¸®Çϱâ 41</br>3.2 Á¤±âÀûÀ¸·Î ½ÇÇàÇϱâ 43</br> 3.2.1 ½ºÄÉÁÙ °£°Ý Á¤ÀÇÇϱâ 43 </br> 3.2.2 Cron ±â¹ÝÀÇ ½ºÄÉÁÙ °£°Ý ¼³Á¤Çϱâ 45</br> 3.2.3 ºóµµ ±â¹ÝÀÇ ½ºÄÉÁÙ °£°Ý ¼³Á¤Çϱâ 47</br>3.3 µ¥ÀÌÅÍ ÁõºÐ ó¸®Çϱâ 48</br> 3.3.1 À̺¥Æ® µ¥ÀÌÅÍ ÁõºÐ °¡Á®¿À±â 48</br> 3.3.2 ½ÇÇà ³¯Â¥¸¦ »ç¿ëÇÏ¿© µ¿Àû ½Ã°£ ÂüÁ¶Çϱâ 49</br> 3.3.3 µ¥ÀÌÅÍ ÆÄƼ¼Å´× 51</br>3.4 AirflowÀÇ ½ÇÇà ³¯Â¥ ÀÌÇØ 53</br> 3.4.1 °íÁ¤µÈ ½ºÄÉÁÙ °£°ÝÀ¸·Î ŽºÅ© ½ÇÇà 53</br>3.5 °ú°Å µ¥ÀÌÅÍ °£°ÝÀ» ¸Þ²Ù±â À§ÇØ ¹éÇÊ »ç¿ëÇϱâ 56</br> 3.5.1 °ú°Å ½ÃÁ¡ÀÇ ÀÛ¾÷ ½ÇÇàÇϱâ 56</br>3.6 ŽºÅ© µðÀÚÀÎÀ» À§ÇÑ ¸ð¹ü »ç·Ê 57</br> 3.6.1 ¿øÀÚ¼º 57 </br> 3.6.2 ¸èµî¼º 59</br>¿ä¾à 60</br></br>CHAPTER 4 Airflow ÄÜÅؽºÆ®¸¦ »ç¿ëÇÏ¿© ŽºÅ© ÅÛÇø´ ÀÛ¾÷Çϱâ 62</br>4.1 Airflow·Î ó¸®ÇÒ µ¥ÀÌÅÍ °Ë»çÇϱâ 62</br> 4.1.1 ÁõºÐ µ¥ÀÌÅ͸¦ ÀûÀçÇÏ´Â ¹æ¹ý °áÁ¤Çϱâ 63</br>4.2 ŽºÅ© ÄÜÅؽºÆ®¿Í Jinja ÅÛÇø´ ÀÛ¾÷ 65</br> 4.2.1 ¿ÀÆÛ·¹ÀÌÅÍÀÇ Àμö ÅÛÇø´ ÀÛ¾÷ 65</br> 4.2.2 ÅÛÇø´¿¡ ¹«¾ùÀÌ »ç¿ë °¡´ÉÇÒ±î¿ä? 67</br> 4.2.3 PythonOperator ÅÛÇø´ 70</br> 4.2.4 PythonOperator¿¡ º¯¼ö Á¦°ø 75</br> 4.2.5 ÅÛÇø´ÀÇ Àμö °Ë»çÇϱâ 76</br>4.3 ´Ù¸¥ ½Ã½ºÅÛ°ú ¿¬°áÇϱâ 78</br>¿ä¾à 86</br></br>CHAPTER 5 ŽºÅ© °£ ÀÇÁ¸¼º Á¤ÀÇÇϱâ 87</br>5.1 ±âº» ÀÇÁ¸¼º À¯Çü 88</br> 5.1.1 ¼±Çü ÀÇÁ¸¼º À¯Çü 88 </br> 5.1.2 ÆÒÀÎ/ÆҾƿô(Fan-in/Fan-out) ÀÇÁ¸¼º 89</br>5.2 ºê·£Ä¡Çϱâ 92</br> 5.2.1 ŽºÅ© ³»¿¡¼ ºê·£Ä¡Çϱâ 92 </br> 5.2.2 DAG ³»ºÎ¿¡¼ ºê·£Ä¡Çϱâ 94</br>5.3 Á¶°ÇºÎ ŽºÅ© 99</br> 5.3.1 ŽºÅ© ³»¿¡¼ Á¶°Ç 99 </br> 5.3.2 Á¶°ÇºÎ ŽºÅ© ¸¸µé±â 100</br> 5.3.3 ³»Àå ¿ÀÆÛ·¹ÀÌÅÍ »ç¿ëÇϱâ 102</br>5.4 Æ®¸®°Å ±ÔÄ¢¿¡ ´ëÇÑ Ãß°¡ Á¤º¸ 102</br> 5.4.1 Æ®¸®°Å ±ÔÄ¢À̶õ? 103 </br> 5.4.2 ½ÇÆÐÀÇ ¿µÇâ 104</br> 5.4.3 ±âŸ Æ®¸®°Å ±ÔÄ¢ 104</br>5.5 ŽºÅ© °£ µ¥ÀÌÅÍ °øÀ¯ 106</br> 5.5.1 XComÀ» »ç¿ëÇÏ¿© µ¥ÀÌÅÍ °øÀ¯Çϱâ 106</br> 5.5.2 XCom »ç¿ë ½Ã °í·Á»çÇ× 109</br> 5.5.3 Ä¿½ºÅÒ XCom ¹é¿£µå »ç¿ëÇϱâ 110</br>5.6 Taskflow API·Î ÆÄÀ̽ã ŽºÅ© ¿¬°áÇϱâ 111</br> 5.6.1 Taskflow API·Î ÆÄÀ̽ã ŽºÅ© ´Ü¼øÈÇϱâ 111</br> 5.6.2 Taskflow API¸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì 113</br>¿ä¾à 115</br></br><b>PART II Áß±ÞÆí</b></br></br>CHAPTER 6 ¿öÅ©Ç÷ΠƮ¸®°Å 119</br>6.1 ¼¾¼¸¦ »ç¿ëÇÑ Æú¸µ Á¶°Ç 120</br> 6.1.1 »ç¿ëÀÚ ÁöÁ¤ Á¶°Ç Æú¸µ 123 </br> 6.1.2 ¿øÈ°ÇÏÁö ¾Ê´Â È帧ÀÇ ¼¾¼ ó¸® 124</br>6.2 ´Ù¸¥ DAG¸¦ Æ®¸®°ÅÇϱâ 127</br> 6.2.1 TriggerDagRunOperator·Î ¹éÇÊ ÀÛ¾÷ 131</br> 6.2.2 ´Ù¸¥ DAGÀÇ »óŸ¦ Æú¸µÇϱâ 132</br>6.3 REST/CLI¸¦ ÀÌ¿ëÇØ ¿öÅ©Ç÷Π½ÃÀÛÇϱâ 135</br>¿ä¾à 138</br></br>CHAPTER 7 ¿ÜºÎ ½Ã½ºÅÛ°ú Åë½ÅÇϱâ 139</br>7.1 Ŭ¶ó¿ìµå ¼ºñ½º¿¡ ¿¬°áÇϱâ 140</br> 7.1.1 Ãß°¡ ÀÇÁ¸¼º ÆÐÅ°Áö ¼³Ä¡Çϱâ 141 </br> 7.1.2 ¸Ó½Å·¯´× ¸ðµ¨ °³¹ßÇϱâ 142</br> 7.1.3 ¿ÜºÎ ½Ã½ºÅÛÀ» »ç¿ëÇÏ¿© °³¹ßÇϱâ 147</br>7.2 ½Ã½ºÅÛ °£ µ¥ÀÌÅÍ À̵¿Çϱâ 155</br> 7.2.1 PostgresToS3Operator ±¸ÇöÇϱâ 156</br> 7.2.2 Å« ÀÛ¾÷À» ¿ÜºÎ¿¡¼ ¼öÇàÇϱâ 160</br>¿ä¾à 162</br></br>CHAPTER 8 Ä¿½ºÅÒ ÄÄÆ÷³ÍÆ® ºôµå 163</br>8.1 PythonOperator·Î ÀÛ¾÷Çϱâ 164</br> 8.1.1 ¿µÈ ÆòÁ¡ API ½Ã¹Ä·¹À̼ÇÇϱâ 164</br> 8.1.2 API¿¡¼ ÆòÁ¡ µ¥ÀÌÅÍ °¡Á®¿À±â 167</br> 8.1.3 ½ÇÁ¦ DAG ±¸ÃàÇϱâ 170</br>8.2 Ä¿½ºÅÒ ÈÅ ºôµåÇϱâ 173</br> 8.2.1 Ä¿½ºÅÒ ÈÅ ¼³°èÇϱâ 173 </br> 8.2.2 MovielensHook·Î DAG ºôµåÇϱâ 179</br>8.3 Ä¿½ºÅÒ ¿ÀÆÛ·¹ÀÌÅÍ ºôµåÇϱâ 181</br> 8.3.1 Ä¿½ºÅÒ ¿ÀÆÛ·¹ÀÌÅÍ Á¤ÀÇÇϱâ 182</br> 8.3.2 ÆòÁ¡ µ¥ÀÌÅ͸¦ °¡Á®¿À±â À§ÇÑ ¿ÀÆÛ·¹ÀÌÅÍ ºôµåÇϱâ 183</br>8.4 Ä¿½ºÅÒ ¼¾¼ ºôµåÇϱâ 187</br>8.5 ÄÄÆ÷³ÍÆ® ÆÐŰ¡Çϱâ 190</br> 8.5.1 ÆÄÀ̽ã ÆÐÅ°Áö ºÎÆ®½ºÆ®·¦ ÀÛ¾÷Çϱâ 191 </br> 8.5.2 ÆÐÅ°Áö ¼³Ä¡Çϱâ 194</br>¿ä¾à 195</br></br>CHAPTER 9 Å×½ºÆ®Çϱâ 197</br>9.1 Å×½ºÆ® ½ÃÀÛÇϱâ 198</br> 9.1.1 ¸ðµç DAG¿¡ ´ëÇÑ ¹«°á¼º Å×½ºÆ® 198 </br> 9.1.2 CI/CD ÆÄÀÌÇÁ¶óÀÎ ¼³Á¤Çϱâ 205 </br> 9.1.3 ´ÜÀ§ Å×½ºÆ® ÀÛ¼ºÇϱâ 207</br> 9.1.4 Pytest ÇÁ·ÎÁ§Æ® ±¸¼ºÇϱâ 209 </br> 9.1.5 µð½ºÅ©ÀÇ ÆÄÀÏ·Î Å×½ºÆ®Çϱâ 214</br>9.2 Å×½ºÆ®¿¡¼ DAG ¹× ŽºÅ© ÄÜÅؽºÆ®·Î ÀÛ¾÷Çϱâ 216</br> 9.2.1 ¿ÜºÎ ½Ã½ºÅÛ ÀÛ¾÷ 222</br>9.3 °³¹ßÀ» À§ÇØ Å×½ºÆ® »ç¿ëÇϱâ 229</br> 9.3.1 DAG ¿Ï·á Å×½ºÆ®Çϱâ 232</br>9.4 WhirlÀ» ÀÌ¿ëÇÑ ÇÁ·Î´ö¼Ç ȯ°æ ¿¡¹Ä·¹ÀÌ¼Ç 233</br>9.5 DTAP ȯ°æ »ý¼ºÇϱâ 233</br>¿ä¾à 234</br></br>CHAPTER 10 ÄÁÅ×À̳ʿ¡¼ ŽºÅ© ½ÇÇàÇϱâ 235</br>10.1 ´Ù¾çÇÑ ¿ÀÆÛ·¹ÀÌÅ͸¦ ¾µ ¶§ °í·ÁÇØ¾ß ÇÒ Á¡ 235</br> 10.1.1 ¿ÀÆÛ·¹ÀÌÅÍ ÀÎÅÍÆäÀ̽º ¹× ±¸ÇöÇϱâ 236</br> 10.1.2 º¹ÀâÇϸç Á¾¼Ó¼ºÀÌ Ãæµ¹Çϴ ȯ°æ 236</br> 10.1.3 Á¦³×¸¯ ¿ÀÆÛ·¹ÀÌÅÍ ÁöÇâÇϱâ 237</br>10.2 ÄÁÅ×ÀÌ³Ê ¼Ò°³Çϱâ 238</br> 10.2.1 ÄÁÅ×À̳ʶõ ¹«¾ùÀΰ¡? 238 </br> 10.2.2 ù µµÄ¿ ÄÁÅ×ÀÌ³Ê ½ÇÇàÇϱâ 239</br> 10.2.3 µµÄ¿ À̹ÌÁö »ý¼ºÇϱâ 240</br> 10.2.4 º¼·ýÀ» »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ À¯ÁöÇϱâ 243</br>10.3 ÄÁÅ×ÀÌ³Ê¿Í Airflow 245</br> 10.3.1 ÄÁÅ×ÀÌ³Ê ³»ÀÇ Å½ºÅ© 245 </br> 10.3.2 ¿Ö ÄÁÅ×À̳ʸ¦ »ç¿ëÇϴ°¡? 246</br>10.4 µµÄ¿¿¡¼ ŽºÅ© ½ÇÇàÇϱâ 247</br> 10.4.1 DockerOperator ¼Ò°³ 247</br> 10.4.2 ŽºÅ©¸¦ À§ÇÑ ÄÁÅ×ÀÌ³Ê À̹ÌÁö »ý¼ºÇϱâ 249</br> 10.4.3 µµÄ¿ ŽºÅ©·Î DAG ±¸¼ºÇϱâ 252</br> 10.4.4 µµÄ¿ ±â¹ÝÀÇ ¿öÅ©Ç÷Π255</br>10.5 Äí¹ö³×Ƽ½º¿¡¼ ŽºÅ© ½ÇÇà 256</br> 10.5.1 Äí¹ö³×Ƽ½º ¼Ò°³ 257 </br> 10.5.2 Äí¹ö³×Ƽ½º ¼³Á¤Çϱâ 258</br> 10.5.3 KubernetesPodOperator »ç¿ëÇϱâ 261</br> 10.5.4 Äí¹ö³×Ƽ½º °ü·Ã ¹®Á¦ Áø´ÜÇϱâ 265</br> 10.5.5 µµÄ¿ ±â¹Ý ¿öÅ©ÇÃ·Î¿Í Â÷ÀÌÁ¡ 267</br>¿ä¾à 268</br></br><b>PART III Airflow ½Ç½À</b></br></br>CHAPTER 11 ¸ð¹ü »ç·Ê 271</br>11.1 ±ò²ûÇÑ DAG ÀÛ¼º 271</br> 11.1.1 ½ºÅ¸ÀÏ °¡ÀÌµå »ç¿ë 272 </br> 11.1.2 Áß¾Ó¿¡¼ ÀÚ°Ý Áõ¸í °ü¸® 276</br> 11.1.3 ±¸¼º ¼¼ºÎ Á¤º¸¸¦ ÀÏ°ü¼º ÀÖ°Ô ÁöÁ¤Çϱâ 278</br> 11.1.4 DAG ±¸¼º ½Ã ¿¬»ê ºÎºÐ ¹èÁ¦ 280</br> 11.1.5 Factory ÇÔ¼ö¸¦ »ç¿ëÇÑ °øÅë ÆÐÅÏ »ý¼º 283</br> 11.1.6 ŽºÅ© ±×·ìÀ» »ç¿ëÇÏ¿© °ü·ÃµÈ ŽºÅ©µéÀÇ ±×·ì ¸¸µé±â 286</br> 11.1.7 ´ë±Ô¸ð ¼öÁ¤À» À§ÇÑ »õ·Î¿î DAG »ý¼º 288</br>11.2 ÀçÇö °¡´ÉÇÑ Å½ºÅ© ¼³°è 288</br> 11.2.1 ŽºÅ©´Â Ç×»ó ¸èµî¼ºÀ» °¡Á®¾ß ÇÕ´Ï´Ù 289</br> 11.2.2 ŽºÅ© °á°ú´Â °áÁ¤ÀûÀ̾î¾ß ÇÕ´Ï´Ù 289</br> 11.2.3 ÇÔ¼öÇü Æз¯´ÙÀÓÀ» »ç¿ëÇÏ¿© ŽºÅ© ¼³°èÇÕ´Ï´Ù 290</br>11.3 È¿À²ÀûÀÎ µ¥ÀÌÅÍ Ã³¸® 291</br> 11.3.1 µ¥ÀÌÅÍÀÇ Ã³¸®·® Á¦ÇÑÇϱâ 291 </br> 11.3.2 ÁõºÐ ÀûÀç ¹× Ã³¸® 292</br> 11.3.3 Áß°£ ´Ü°è µ¥ÀÌÅÍ Ä³½Ì 293</br> 11.3.4 ·ÎÄà ÆÄÀÏ ½Ã½ºÅÛ¿¡ µ¥ÀÌÅÍ ÀúÀå ¹æÁö 294</br> 11.3.5 ¿ÜºÎ/¼Ò½º ½Ã½ºÅÛÀ¸·Î ÀÛ¾÷À» ÀÌÀüÇϱâ 295</br>11.4 ÀÚ¿ø°ü¸® 295</br> 11.4.1 PoolÀ» ÀÌ¿ëÇÑ µ¿½Ã¼º °ü¸®Çϱâ 295</br> 11.4.2 SLA ¹× °æ°í¸¦ »ç¿ëÇÏ¿© Àå±â ½ÇÇà ÀÛ¾÷ ŽÁö 297</br>¿ä¾à 298</br></br>CHAPTER 12 ¿î¿µÈ¯°æ¿¡¼ Airflow °ü¸® 300</br>12.1 Airflow ¾ÆÅ°ÅØó 301</br> 12.1.1 ¾î¶² ÀͽºÅ¥ÅÍ°¡ ÀûÇÕÇÑ°¡? 302</br> 12.1.2 Airflow¸¦ À§ÇÑ ¸ÞŸ½ºÅä¾î ¼³Á¤ 304</br> 12.1.3 ½ºÄÉÁÙ·¯ ÀÚ¼¼È÷ »ìÆ캸±â 306</br>12.2 ÀͽºÅ¥ÅÍ ¼³Ä¡ 311</br> 12.2.1 SequentialExecutor ¼³Á¤ 312 </br> 12.2.2 LocalExecutor ¼³Á¤ 312</br> 12.2.3 CeleryExecutor ¼³Á¤ 313 </br> 12.2.4 KubernetesExecutor ¼³Á¤ 317</br>12.3 ¸ðµç Airflow ÇÁ·Î¼¼½ºÀÇ ·Î±× È®ÀÎ 324</br> 12.3.1 À¥ ¼¹ö ·Î±× ÀúÀå 325 </br> 12.3.2 ½ºÄÉÁÙ·¯ ·Î±× ÀúÀå 326</br> 12.3.3 ŽºÅ© ·Î±× ÀúÀå 327 </br> 12.3.4 ¿ø°Ý ÀúÀå¼Ò·Î ·Î±× º¸³»±â 328</br>12.4 Airflow ¸ÞÆ®¸¯ ½Ã°¢È ¹× ¸ð´ÏÅ͸µ 328</br> 12.4.1 Airflow·ÎºÎÅÍ ¸ÞÆ®¸¯ ¼öÁýÇϱâ 329</br> 12.4.2 ÃøÁ¤ Ç׸ñÀ» Àü¼ÛÇϵµ·Ï Airflow ±¸¼º 331</br> 12.4.3 ¸ÞÆ®¸¯À» ¼öÁýÇϵµ·Ï Prometheus ±¸¼º 331</br> 12.4.4 Grafana¸¦ ÀÌ¿ëÇÑ ´ë½Ãº¸µå »ý¼º 334</br> 12.4.5 ¹«¾ùÀ» ¸ð´ÏÅ͸µÇØ¾ß Çϴ°¡? 336</br>12.5 ½ÇÆÐÇÑ Å½ºÅ©¿¡ ´ëÇÑ ¾Ë¸²À» ¹Þ´Â ¹æ¹ý 338</br> 12.5.1 DAG ¹× ¿ÀÆÛ·¹ÀÌÅÍ¿¡¼ °æ°í 338 </br> 12.5.2 ¼ºñ½º ¼öÁØ °è¾à Á¤ÀÇ 341</br>12.6 È®À强 ¹× ¼º´É 342</br> 12.6.1 ½ÇÇàÁßÀΠŽºÅ©ÀÇ ÃÖ´ë ¼ö Á¦¾î 343 </br> 12.6.2 ½Ã½ºÅÛ ¼º´É ±¸¼º 344</br> 12.6.3 ¿©·¯ ½ºÄÉÁÙ·¯ ½ÇÇà 345</br>¿ä¾à 346</br></br>CHAPTER 13 Airflow º¸¾È 347</br>13.1 Airflow À¥ ÀÎÅÍÆäÀ̽º¿¡¼ º¸¾È 348</br> 13.1.1 RBAC ÀÎÅÍÆäÀ̽º¿¡¼ »ç¿ëÀÚ Ãß°¡ 348</br> 13.1.2 RBAC ÀÎÅÍÆäÀ̽º ¼³Á¤ 352</br>13.2 ¹Ì»ç¿ë µ¥ÀÌÅÍ ¾ÏÈ£È 353</br> 13.2.1 Fernet Key »ý¼º 354</br>13.3 LDAP ¼ºñ½º·Î ¿¬°á 355</br> 13.3.1 LDAPÀÇ ÀÌÇØ 356 </br> 13.3.2 LDAP ¼ºñ½º¿¡¼ »ç¿ëÀÚ °¡Á®¿À±â 358</br>13.4 À¥ ¼¹ö¿¡ ´ëÇÑ Æ®·¡ÇÈ ¾ÏÈ£È 359</br> 13.4.1 HTTPS ÀÌÇØ 360 </br> 13.4.2 HTTPS¿ë ÀÎÁõ¼ ±¸¼º 362</br>13.5 ½ÃÅ©¸´ °ü¸® ½Ã½ºÅÛ¿¡¼ ÀÚ°Ý Áõ¸í °¡Á®¿À±â 366</br>¿ä¾à 370</br></br>CHAPTER 14 ÇÁ·ÎÁ§Æ®: ´º¿å¿¡¼ °¡Àå ºü¸¥ ±æ ã±â 371</br>14.1 µ¥ÀÌÅÍ¿¡ ´ëÇÑ ÀÌÇØ 374</br> 14.1.1 Yellow Cab ÆÄÀÏ °øÀ¯ 375 </br> 14.1.2 Citi Bike REST API 376</br> 14.1.3 Á¢±Ù °èȹ °áÁ¤ 377</br>14.2 µ¥ÀÌÅÍ ÃßÃâ 378</br> 14.2.1 Citi Bike µ¥ÀÌÅÍ ´Ù¿î·ÎµåÇϱâ 378</br> 14.2.2 Yellow Cab µ¥ÀÌÅÍ ´Ù¿î·Îµå 380</br>14.3 µ¥ÀÌÅÍ¿¡ À¯»çÇÑ º¯È¯ Àû¿ë 383</br>14.4 µ¥ÀÌÅÍ ÆÄÀÌÇÁ ¶óÀÎ ±¸Á¶È 388</br>14.5 ÀçÇö °¡´ÉÇÑ µ¥ÀÌÅÍ ÆÄÀÌÇÁ ¶óÀÎ °³¹ß 390</br>¿ä¾à 392</br></br><b>PART IV Ŭ¶ó¿ìµå¿¡¼ÀÇ Airflow</b></br></br>CHAPTER 15 Ŭ¶ó¿ìµå¿¡¼ÀÇ Airflow 395</br>15.1 Ŭ¶ó¿ìµå ¹èÆ÷ Á¤Ã¥ ¼³°è 396</br>15.2 Ŭ¶ó¿ìµå Àü¿ë ¿ÀÆÛ·¹ÀÌÅÍ¿Í ÈÅ 397</br>15.3 °ü¸®Çü ¼ºñ½º 398</br> 15.3.1 Astronomer.io 399 </br> 15.3.2 ±¸±Û Cloud Composer 400</br> 15.3.3 ¾Æ¸¶Á¸ Managed Workflows for Apache Airflow 400</br>15.4 ¹èÆ÷ Àü·« ¼±Åà 401</br>¿ä¾à 402</br></br>CHAPTER 16 AWS¿¡¼ÀÇ Airflow 404</br>16.1 AWS¿¡¼ Airflow ¹èÆ÷ 404</br> 16.1.1 Ŭ¶ó¿ìµå ¼ºñ½º ¼±Åà 405 </br> 16.1.2 ³×Æ®¿öÅ© ¼³°è 406</br> 16.1.3 DAG µ¿±âÈ Ãß°¡ 407 </br> 16.1.4 CeleryExecutor¸¦ »ç¿ëÇÏ¿© ½ºÄÉÀϸµ 407</br> 16.1.5 Ãß°¡ ´Ü°è 409</br>16.2 AWS Àü¿ë ÈÅ°ú ¿ÀÆÛ·¹ÀÌÅÍ 410</br>16.3 »ç¿ë »ç·Ê: AWS Athena¸¦ »ç¿ëÇÑ ¼¹ö¸®½º ¿µÈ ·©Å· ±¸Ãà 412</br> 16.3.1 °³¿ä 412 </br> 16.3.2 ¸®¼Ò½º ¼³Á¤ 413</br> 16.3.3 DAG ±¸Çö 416 </br> 16.3.4 ¸®¼Ò½º Á¤¸® 422</br>¿ä¾à 422</br></br>CHAPTER 17 Azure¿¡¼ÀÇ Airflow 424</br>17.1 Azure¿¡¼ Airflow ¹èÆ÷ 424</br> 17.1.1 ¼ºñ½º ¼±Åà 425 </br> 17.1.2 ³×Æ®¿öÅ© ¼³°è 426</br> 17.1.3 CeleryExecutor¸¦ »ç¿ëÇÏ¿© È®À强 °³¼± 428</br> 17.1.4 Ãß°¡ ´Ü°è 429</br>17.2 Azure Àü¿ë ÈÅ/¿ÀÆÛ·¹ÀÌÅÍ 429</br>17.3 ¿¹Á¦: Azure Synapse¸¦ »ç¿ëÇÏ¿© ¼¹ö¸®½º ¿µÈ ·©Å· ±¸Ãà 430</br> 17.3.1 °³¿ä 430 </br> 17.3.2 ¸®¼Ò½º ±¸¼º 431</br> 17.3.3 DAG ±¸Çö 435 </br> 17.3.4 Á¤¸® ÀÛ¾÷ 442</br>¿ä¾à 442</br></br>CHAPTER 18 GCP¿¡¼ÀÇ Airflow 443</br>18.1 GCP¿¡¼ Airflow ¹èÆ÷ 443</br> 18.1.1 ¼ºñ½º ¼±Åà 444 </br> 18.1.2 Ç︧À¸·Î GKE¿¡ ¹èÆ÷ 447</br> 18.1.3 ±¸±Û ¼ºñ½º¿Í ¿¬µ¿Çϱâ 449 </br> 18.1.4 ³×Æ®¿öÅ© ¼³°è 451</br> 18.1.5 CeleryExecutor¸¦ »ç¿ëÇÑ ½ºÄÉÀϸµ 452</br>18.2 GCP Àü¿ë ÈÅ°ú ¿ÀÆÛ·¹ÀÌÅÍ 455</br>18.3 »ç¿ë »ç·Ê: GCP¿¡¼ ¼¹ö¸®½º ¿µÈ ·©Å· ±¸Ãà 460</br> 18.3.1 GCS·Î µ¥ÀÌÅÍ ¾÷·Îµå 461 </br> 18.3.2 BigQuery¿¡ µ¥ÀÌÅÍ ·ÎµåÇϱâ 463</br> 18.3.3 ÃÖ°í ¿µÈ ÆòÁ¡ ÃßÃâ 466</br>¿ä¾à 468</br></br>APPENDIX A ½ÇÇà ÄÚµå ¿¹Á¦ 470</br>A.1 ÄÚµå ±¸¼º 470</br>A.2 ¿¹Á¦ ½ÇÇà 471</br> A.2.1 µµÄ¿ ȯ°æ ½ÃÀÛÇϱâ 471 </br> A.2.2 ½ÇÇà ÁßÀÎ ¼ºñ½º °Ë»çÇϱâ 472</br> A.2.3 ȯ°æ Á¦°Å 472</br></br>APPENDIX B Airflow 1°ú 2ÀÇ ÆÐÅ°Áö ±¸¼º 474</br>B.1 Airflow 1 ÆÐÅ°Áö ±¸¼º 474</br>B.2 Airflow 2 ÆÐÅ°Áö ±¸¼º 475</br></br>APPENDIX C Prometheus ¸ÞÆ®¸¯ ¸ÅÇÎ 479