Ã¥¼Ò°³
°¡Àå Áøº¸ÇÑ ÇÁ·¹ÀÓ¿öÅ©·Î ¿ì¾ÆÇÏ°Ô ¹é¿£µå ÀÔ¹®Çϱâ
NestJS´Â Express¸¦ ±â¹ÝÀ¸·Î DB, ORM, À¯È¿¼º °Ë»ç µîÀÇ ¶óÀ̺귯¸®¸¦ ³»ÀåÇÑ Â÷¼¼´ë ¹é¿£µå ÇÁ·¹ÀÓ¿öÅ©´Ù. Á¦¾î ¹ÝÀü, ÀÇÁ¸¼º ÁÖÀÔ, AOP µî °´Ã¼ ÁöÇâ °³³äÀ» µµÀÔÇß°í ŸÀÔ½ºÅ©¸³Æ®·Î ¸ðµâ/ÄÄÆ÷³ÍÆ® ±â¹ÝÀÇ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö ÀÖ´Ù. ÀÌ Ã¥Àº ÀúÀÚ°¡ ¸ðµÎ½ÎÀο¡ ¸ö´ãÀ¸¸ç ÀÍÈù ³ëÇÏ¿ì¿Í ÀλçÀÌÆ®¸¦ ¹ÙÅÁÀ¸·Î NestJS¸¦ È°¿ëÇØ È¸¿ø °¡ÀÔ, À̸ÞÀÏ ÀÎÁõ, ·Î±×ÀÎ, ȸ¿ø Á¤º¸ Á¶È¸ ±â´ÉÀ» °®Ãá REST API À¯Àú ¼ºñ½º¸¦ ¸¸µé¾îº»´Ù. ÇÁ·ÎÁ§Æ®¿¡ Á¡Â÷ »ìÀ» ºÙ¿©³ª°¡¸ç ¹é¿£µå °³¹ß¿¡ ÇÊ¿äÇÑ È¯°æ º¯¼ö ¼³Á¤, ¿äû À¯È¿¼º °Ë»ç, ÀÎÁõ(JWT), ·Î±ë, Çコ üũ, CQRS, Ŭ¸° ¾ÆÅ°ÅØó, ´ÜÀ§ Å×½ºÆ® µî Áö½Ä°ú ±â¼úÀ» Á¦´ë·Î ÀÍÈú ¼ö ÀÖ°Ô ÁýÇÊÇß´Ù.
ÀúÀÚ¼Ò°³
Àú : ÇÑ¿ëÀç
¿À·£ ±â°£ ÈÞ´ëÆù¿¡ žÀçµÇ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µé´Ù ÇöÀç´Â ¸ðµÎ½ÎÀο¡¼ ¹é¿£µå ¿£Áö´Ï¾î·Î È°µ¿ ÁßÀÌ´Ù. ¸ðÅä´Â ÀϽſìÀϽÅ(ìíãæéÑìíãæ)ÀÌ°í, ¿µÈ¿Í ±³¾ç °úÇÐ ¼ÀûÀ» ÁÁ¾ÆÇÑ´Ù. Àú¼·Î´Â ¡¶NestJS·Î ¹è¿ì´Â ¹é¿£µå ÇÁ·Î±×·¡¹Ö¡·(2022, Á¦ÀÌÆà)ÀÌ ÀÖ´Ù.
¸ñÂ÷
º£Å¸¸®´õ Èıâ x ¸Ó¸®¸» xii ÀÌ Ã¥¿¡ ´ëÇÏ¿© xiii
CHAPTER 1 Hello NestJS 1
1.1 NestJSÀÇ ÀåÁ¡ 1
1.2 Express°¡ ÁÁÀ»±î, NestJS°¡ ÁÁÀ»±î 2
1.3 NestJS ¼³Ä¡ 6
__1.3.1 Node.js ¼³Ä¡ 6 / 1.3.2 NestJS ÇÁ·ÎÁ§Æ® »ý¼º 7
1.4 Ã¥¿¡¼ ¸¸µé ¾ÖÇø®ÄÉÀ̼Ç: À¯Àú ¼ºñ½º 9
CHAPTER 2 À¥ °³¹ß ±âÃÊ Áö½Ä 13
2.1 À¥ ÇÁ·¹ÀÓ¿öÅ© 13
2.2 Node.js 16
2.3 À̺¥Æ® ·çÇÁ 18
2.4 ÆÐÅ°Áö ÀÇÁ¸¼º °ü¸® 21
__2.4.1 package.json 21 / 2.4.2 package-lock.json 23 / 2.4.3 package.json ÆÄÀÏ ºÐ¼® 23
2.5 ŸÀÔ½ºÅ©¸³Æ® 25
__2.5.1 º¯¼ö ¼±¾ð 26 / 2.5.2 ŸÀÔ½ºÅ©¸³Æ®¿¡¼ Áö¿øÇϴ ŸÀÔ 27
__2.5.3 ŸÀÔ Á¤ÀÇÇϱâ 29 / 2.5.4 ŸÀÔ ±¸¼ºÇϱâ 30
2.6 µ¥Ä¿·¹ÀÌÅÍ 32
__2.6.1 µ¥Ä¿·¹ÀÌÅÍ ÇÕ¼º 34 / 2.6.2 Ŭ·¡½º µ¥Ä¿·¹ÀÌÅÍ 35 / 2.6.3 ¸Þ¼µå µ¥Ä¿·¹ÀÌÅÍ 36
__2.6.4 Á¢±ÙÀÚ µ¥Ä¿·¹ÀÌÅÍ 38 / 2.6.5 ¼Ó¼º µ¥Ä¿·¹ÀÌÅÍ 39 / 2.6.6 ¸Å°³º¯¼ö µ¥Ä¿·¹ÀÌÅÍ 40
__2.6.7 µ¥Ä¿·¹ÀÌÅÍ ¿ä¾à 42
½¬¾î °¡´Â ÆäÀÌÁö ¹é¿£µå ·Îµå¸Ê 43
CHAPTER 3 ¾ÖÇø®ÄÉÀ̼ÇÀÇ °ü¹®: ÀÎÅÍÆäÀ̽º 45
3.1 ÄÁÆ®·Ñ·¯ 45
__3.1.1 ¶ó¿ìÆà 47 / 3.1.2 ¿ÍÀϵå Ä«µå »ç¿ë 48 / 3.1.3 ¿äû °´Ã¼ 48 / 3.1.4 ÀÀ´ä 49
__3.1.5 Çì´õ 52 / 3.1.6 ¸®µð·º¼Ç 54 / 3.1.7 ¶ó¿ìÆ® ¸Å°³º¯¼ö 55
__3.1.8 ÇÏÀ§ µµ¸ÞÀÎ ¶ó¿ìÆà 56 / 3.1.9 ÆäÀÌ·Îµå ´Ù·ç±â 58
3.2 À¯Àú ¼ºñ½ºÀÇ ÀÎÅÍÆäÀ̽º 59
½¬¾î °¡´Â ÆäÀÌÁö °üÁ¡ ÁöÇâ ÇÁ·Î±×·¡¹Ö 64
CHAPTER 4 ÇÙ½É µµ¸ÞÀÎ ·ÎÁ÷À» Æ÷ÇÔÇÏ´Â ÇÁ·Î¹ÙÀÌ´õ 65
4.1 ÇÁ·Î¹ÙÀÌ´õ 65
4.2 ÇÁ·Î¹ÙÀÌ´õ µî·Ï°ú »ç¿ë 67
__4.2.1 ÇÁ·Î¹ÙÀÌ´õ µî·Ï 67 / 4.2.2 ¼Ó¼º ±â¹Ý ÁÖÀÔ 67
4.3 À¯Àú ¼ºñ½º¿¡ ȸ¿ø °¡ÀÔ ·ÎÁ÷ ±¸ÇöÇϱâ 70
__4.3.1 UsersService ÇÁ·Î¹ÙÀÌ´õ »ý¼º 70 / 4.3.2 ȸ¿ø °¡ÀÔ 71
__4.3.3 ȸ¿ø °¡ÀÔ À̸ÞÀÏ ¹ß¼Û 73 / 4.3.4 À̸ÞÀÏ ÀÎÁõ 77
__4.3.5 ·Î±×ÀÎ 77 / 4.3.6 À¯Àú Á¤º¸ Á¶È¸ 78
½¬¾î °¡´Â ÆäÀÌÁö ½ºÄÚÇÁ 79
½ÉÈ ÇнÀ 1 Ä¿½ºÅÒ ÇÁ·Î¹ÙÀÌ´õ 82
CHAPTER 5 SW º¹Àâµµ¸¦ ³·Ãß±â À§ÇÑ ¸ðµâ ¼³°è 91
5.1 ¸ðµâ: ÀÀÁý¼º ÀÖ´Â ¼³°è 91
__5.1.1 ¸ðµâ ´Ù½Ã ³»º¸³»±â 92 / 5.1.2 Àü¿ª ¸ðµâ 94
5.2 À¯Àú ¼ºñ½ºÀÇ ¸ðµâ ºÐ¸® 95
__5.2.1 UsersModule ºÐ¸® 95 / 5.2.2 EmailModule ºÐ¸® 96
CHAPTER 6 µ¿Àû ¸ðµâÀ» È°¿ëÇÑ È¯°æ º¯¼ö ±¸¼º 99
6.1 µ¿Àû ¸ðµâ 99
6.2 dotenv¸¦ ÀÌ¿ëÇÑ Config ¼³Á¤ 99
6.3 Nest¿¡¼ Á¦°øÇÏ´Â Config ÆÐÅ°Áö 102
6.4 À¯Àú ¼ºñ½º¿¡ ȯ°æ º¯¼ö ±¸¼ºÇϱâ 105
__6.4.1 Ä¿½ºÅÒ Config ÆÄÀÏ ÀÛ¼º 105 / 6.4.2 µ¿Àû ConfigModule µî·Ï 106
½¬¾î °¡´Â ÆäÀÌÁö ÀÇÁ¸¼º ÁÖÀÔ°ú Á¦¾î ¹ÝÀü 110
CHAPTER 7 ÆÄÀÌÇÁ¿Í À¯È¿¼º °Ë»ç: ¿äûÀÌ Á¦´ë·Î Àü´ÞµÇ¾ú´Â°¡ 113
7.1 ÆÄÀÌÇÁ 113
7.2 ÆÄÀÌÇÁÀÇ ³»ºÎ ±¸Çö ÀÌÇØÇϱâ 116
7.3 À¯È¿¼º °Ë»ç ÆÄÀÌÇÁ ¸¸µé±â 117
7.4 À¯Àú ¼ºñ½º¿¡ À¯È¿¼º °Ë»ç Àû¿ëÇϱâ 120
__7.4.1 À¯Àú »ý¼º º»¹®ÀÇ À¯È¿¼º °Ë»ç 120 / 7.4.2 class-transformer È°¿ë 121
__7.4.3 Ä¿½ºÅÒ À¯È¿¼º °Ë»ç±â ÀÛ¼º 124
½¬¾î °¡´Â ÆäÀÌÁö ÀÎÁõ vs Àΰ¡ 127
CHAPTER 8 ¿µ¼ÓÈ: µ¥ÀÌÅ͸¦ ±â·ÏÇÏ°í ´Ù·ç±â 131
8.1 MySQL µ¥ÀÌÅͺ£À̽º ¼³Á¤ 131
8.2 TypeORMÀ¸·Î µ¥ÀÌÅͺ£À̽º ¿¬°á 134
8.3 ȸ¿ø °¡ÀÔÀ» ¿äûÇÑ À¯ÀúÀÇ Á¤º¸ ÀúÀåÇϱâ 138
8.4 Æ®·£Àè¼Ç Àû¿ë 141
__8.4.1 QueryRunner¸¦ »ç¿ëÇÏ´Â ¹æ¹ý 142
__8.4.2 transaction ÇÔ¼ö¸¦ Á÷Á¢ ÀÌ¿ëÇÏ´Â ¹æ¹ý 143
8.5 ¸¶À̱׷¹ÀÌ¼Ç 144
½¬¾î °¡´Â ÆäÀÌÁö ÀúÀå¼Ò ÆÐÅÏ 151
CHAPTER 9 ¿äû ó¸® Àü¿¡ ºÎ°¡ ±â´ÉÀ» ¼öÇàÇϱâ À§ÇÑ ¹Ìµé¿þ¾î 153
9.1 ¹Ìµé¿þ¾î 153
9.2 Logger ¹Ìµé¿þ¾î 154
9.3 MiddlewareConsumer 155
9.4 Àü¿ªÀ¸·Î Àû¿ëÇϱâ 157
CHAPTER 10 ±ÇÇÑ È®ÀÎÀ» À§ÇÑ °¡µå: JWT ÀÎÁõ/Àΰ¡ 159
10.1 °¡µå 159
10.2 °¡µå¸¦ ÀÌ¿ëÇÑ Àΰ¡ 160
__10.2.1 ½ÇÇà ÄÜÅؽºÆ® 160 / 10.2.2 °¡µå Àû¿ë 161
10.3 ÀÎÁõ 162
__10.3.1 ¼¼¼Ç ±â¹Ý ÀÎÁõ 163 / 10.3.2 ÅäÅ« ±â¹Ý ÀÎÁõ 164
10.4 JWT 165
__10.4.1 Çì´õ 166 / 10.4.2 ÆäÀ̷εå 166 / 10.4.3 ½Ã±×³Êó 167
10.5 À¯Àú ¼ºñ½ºÀÇ À̸ÞÀÏ ÀÎÁõ ó¸®¿Í JWT ¹ß±Þ 169
__10.5.1 ȸ¿ø °¡ÀÔ À̸ÞÀÏ ÀÎÁõ 169 / 10.5.2 ·Î±×ÀÎ 172
__10.5.3 JWT ÀÎÁõ: ȸ¿ø Á¤º¸ Á¶È¸ 173 / 10.5.4 °¡µå¸¦ ÀÌ¿ëÇÑ Àΰ¡ ó¸® 175
½¬¾î °¡´Â ÆäÀÌÁö ½½¶óÀ̵ù ¼¼¼Ç°ú ¸®ÇÁ·¹½Ã ÅäÅ« 178
½ÉÈ ÇнÀ 2 Ä¿½ºÅÒ ¸Å°³º¯¼ö µ¥Ä¿·¹ÀÌÅÍ 181
½ÉÈ ÇнÀ 3 ¸ÞŸµ¥ÀÌÅÍ(Reflection Ŭ·¡½º) 186
CHAPTER 11 ·Î±ë: ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¿ÀÛ ±â·Ï 193
11.1 ³»Àå ·Î°Å 194
__11.1.1 ·Î±ë ºñÈ°¼ºÈ 195 / 11.1.2 ·Î±× ·¹º§ ÁöÁ¤ 195
11.2 Ä¿½ºÅÒ ·Î°Å 196
__11.2.1 Ä¿½ºÅÒ ·Î°Å ÁÖÀÔÇؼ »ç¿ëÇϱâ 197 / 11.2.2 Ä¿½ºÅÒ ·Î°Å¸¦ Àü¿ªÀ¸·Î »ç¿ëÇϱâ 198
__11.2.3 ¿ÜºÎ ·Î°Å »ç¿ëÇϱâ 198
11.3 À¯Àú ¼ºñ½º¿¡ winston ·Î°Å Àû¿ëÇϱâ 199
__11.3.1 nest-winston Àû¿ë 199 / 11.3.2 ³»Àå ·Î°Å ´ëüÇϱâ 202
__11.3.3 ºÎÆ®½ºÆ®·¡ÇαîÁö Æ÷ÇÔÇÏ¿© ³»Àå ·Î°Å ´ëüÇϱâ 204
__11.3.4 ·Î±× Àü¼ÛÀ» ´Ù¾çÇÏ°Ô 206
CHAPTER 12 ¸ðµç °ÍÀº Ç×»ó ½ÇÆÐÇÑ´Ù: ¿¹¿Ü ÇÊÅÍ 209
12.1 ¿¹¿Ü ó¸® 209
12.2 ¿¹¿Ü ÇÊÅÍ 214
12.3 À¯Àú ¼ºñ½º¿¡ ¿¹¿Ü ÇÊÅÍ Àû¿ëÇϱâ 217
CHAPTER 13 ÀÎÅͼÁÅÍ·Î ¿äû°ú ÀÀ´äÀ» ÀÔ¸À¿¡ ¸Â°Ô ¹Ù²Ù±â 219
13.1 ÀÎÅͼÁÅÍ 219
13.2 ÀÀ´ä°ú ¿¹¿Ü ¸ÅÇÎ 222
13.3 À¯Àú ¼ºñ½º¿¡ ÀÎÅͼÁÅÍ Àû¿ëÇϱâ 224
½¬¾î °¡´Â ÆäÀÌÁö ¿äû »ý¸íÁÖ±â 226
CHAPTER 14 ŽºÅ© ½ºÄÉÁÙ¸µ 229
14.1 @nestjs/schedule ÆÐÅ°Áö 229
14.2 ŽºÅ© ½ºÄÉÁÙ¸µÀ» ¼±¾ðÇÏ´Â 3°¡Áö ¹æ½Ä 230
__14.2.1 Å©·Ð Àâ ¼±¾ð ¹æ½Ä 230 / 14.2.2 ÀÎÅ͹ú ¼±¾ð ¹æ½Ä 232 / 14.2.3 ŸÀӾƿô ¼±¾ð ¹æ½Ä 233
14.3 µ¿Àû ŽºÅ© ½ºÄÉÁÙ¸µ 233
CHAPTER 15 Çコ üũ: ´ìÀÇ ¼¹ö´Â °Ç°ÇϽŰ¡¿ä 237
15.1 Terminus Àû¿ë 238
15.2 Çコ üũ 238
15.3 TypeOrm Çコ üũ 240
15.4 Ä¿½ºÅÒ »óÅ ǥ½Ã±â 241
CHAPTER 16 CQRS¸¦ ÀÌ¿ëÇÑ °ü½É»ç ºÐ¸® 247
16.1 CQRS ÆÐÅÏ 247
16.2 À¯Àú ¼ºñ½º¿¡ CQRS Àû¿ëÇϱâ 249
__16.2.1 Ä¿¸Çµå 249 / 16.2.2 À̺¥Æ® 251 / 16.2.3 Äõ¸® 254
CHAPTER 17 Ŭ¸° ¾ÆÅ°ÅØó 257
17.1 Ŭ¸° ¾ÆÅ°ÅØó 259
17.2 SOLID °´Ã¼ ÁöÇâ ¼³°è ¿øÄ¢ 261
17.3 À¯Àú ¼ºñ½º¿¡ Ŭ¸° ¾ÆÅ°ÅØó Àû¿ëÇϱâ 262
CHAPTER 18 Å×½ºÆ® ÀÚµ¿È 273
18.1 ¼ÒÇÁÆ®¿þ¾î Å×½ºÆ® 273
18.2 NestÀÇ ±âº» Å×½ºÆ® ÇÁ·¹ÀÓ¿öÅ©: Jest¿Í SuperTest 276
18.3 Jest¸¦ ÀÌ¿ëÇÑ ´ÜÀ§ Å×½ºÆ® ¿¹½Ã 276
18.4 À¯Àú ¼ºñ½º Å×½ºÆ® 279
18.5 Å×½ºÆ® Ä¿¹ö¸®Áö ÃøÁ¤ 287
APPENDIX ormconfig.json µ¿Àû »ý¼º 291
ã¾Æº¸±â 295