½ºÇÁ¸µ ºÎÆ® 3¿¡ ´ëÇÑ Æ÷°ýÀûÀÎ °¡À̵å·Î, Ãʺ¸ÀÚºÎÅÍ ¼÷·ÃµÈ °³¹ßÀÚ±îÁö ¸ðµç ¼öÁØÀÇ µ¶ÀÚµéÀÌ È°¿ëÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºµÅ ÀÖ´Ù. º¹ÀâÇÑ ÀÎÇÁ¶ó ¼³Á¤À» ÇÇÇÏ°í È¿À²ÀûÀÎ °³¹ß ¹æ¹ý¿¡ ÃÊÁ¡À» ¸ÂÃç À¥ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÇ ±âÃʺÎÅÍ °í±Þ ÁÖÁ¦±îÁö ´Ù·é´Ù. ÁÖ¿ä ³»¿ëÀ¸·Î´Â ºü¸¥ ¾ÖÇø®ÄÉÀÌ¼Ç ½ÃÀÛ, µ¥ÀÌÅÍ Ã³¸®, º¸¾È, Å×½ºÆÃ, ±×¸®°í GraalVMÀ» ÀÌ¿ëÇÑ ³×ÀÌƼºê À̹ÌÁö ¹èÆ÷¿Í ¹ÝÀÀÇü ÇÁ·Î±×·¡¹Ö °°Àº ÃֽŠ±â¼ú Æ®·»µå¸¦ Æ÷ÇÔÇÑ´Ù. ¶ÇÇÑ ½Ç¿ëÀûÀÎ ¿¹Á¦¸¦ ÅëÇØ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼³°è, °³¹ß, Å×½ºÆ®, ±×¸®°í ¹èÆ÷ °úÁ¤À» ü°èÀûÀ¸·Î ¾È³»Çϸç, ´Ù¾çÇÑ È¯°æ¿¡¼ÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ¿î¿µ ¹æ¹ýµµ Á¦½ÃÇÑ´Ù.
1ºÎ. ½ºÇÁ¸µ ºÎÆ® ±âº»
1Àå. ½ºÇÁ¸µ ºÎÆ®ÀÇ ÇÙ½É ±â´É
±â¼ú ¿ä±¸ »çÇ×
ÀÚ¹Ù 17 ¼³Ä¡
ÃֽŠIDE ¼³Ä¡
±êÇãºê °èÁ¤ »ý¼º
Ãß°¡ Áö¿ø ã±â
½ºÇÁ¸µ ºó ÀÚµ¿ ¼³Á¤
¾ÖÇø®ÄÉÀÌ¼Ç ÄÜÅؽºÆ® ÀÌÇØ
½ºÇÁ¸µ ºÎÆ®ÀÇ ÀÚµ¿ ¼³Á¤ Á¤Ã¥ »ìÆ캸±â
½ºÇÁ¸µ ºÎÆ® ½ºÅ¸Å͸¦ »ç¿ëÇØ Æ÷Æ®Æú¸®¿À ±¸¼º ¿ä¼Ò Ãß°¡
¼³Á¤ ÇÁ·ÎÆÛƼ¸¦ »ç¿ëÇØ ¼³Á¤ »ç¿ëÀÚ ÁöÁ¤
»ç¿ëÀÚ ÁöÁ¤ ÇÁ·ÎÆÛƼ »ý¼º
¾ÖÇø®ÄÉÀÌ¼Ç ¼³Á¤ ¿ÜºÎÈ
ÇÁ·ÎÆÛƼ ±â¹Ý ºó ¼³Á¤
¾ÖÇø®ÄÉÀÌ¼Ç ÀÇÁ¸¼º °ü¸®
¿ä¾à
2ºÎ. ½ºÇÁ¸µ ºÎÆ®·Î ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â
2Àå. ½ºÇÁ¸µ ºÎÆ®·Î À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â
start.spring.ioÀ» »ç¿ëÇØ ¾ÖÇø®ÄÉÀÌ¼Ç ºôµå
½ºÇÁ¸µ MVC À¥ ÄÁÆ®·Ñ·¯ »ý¼º
start.spring.io¸¦ »ç¿ëÇØ ±âÁ¸ ÇÁ·ÎÁ§Æ® º¸°
ÅÛÇø´À» È°¿ëÇØ ÄÜÅÙÃ÷ »ý¼º
ÅÛÇø´¿¡ µ¥¸ð µ¥ÀÌÅÍ Ãß°¡
´õ ³ªÀº µðÀÚÀÎÀ¸·Î ¾ÖÇø®ÄÉÀÌ¼Ç ºôµå
»ý¼ºÀÚ È£ÃâÀ» ÅëÇÑ ÀÇÁ¸¼º ÁÖÀÔ
HTML ÅÛÇø´À» ÅëÇØ µ¥ÀÌÅÍ º¯°æ
JSON ±â¹Ý API »ý¼º
½ºÇÁ¸µ ºÎÆ® À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ Node.js ÈÄÅ·
Node.js·Î ÀÚ¹Ù½ºÅ©¸³Æ® ºôµå
React.js ¾ÖÇø®ÄÉÀÌ¼Ç »ý¼º
¿ä¾à
3Àå. ½ºÇÁ¸µ ºÎÆ®·Î µ¥ÀÌÅÍ Äõ¸®Çϱâ
±âÁ¸ ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀ̼ǿ¡ ½ºÇÁ¸µ µ¥ÀÌÅÍ Ãß°¡Çϱâ
½ºÇÁ¸µ µ¥ÀÌÅ͸¦ »ç¿ëÇØ ¼Õ½±°Ô µ¥ÀÌÅÍ °ü¸®
ÇÁ·ÎÁ§Æ®¿¡ ½ºÇÁ¸µ µ¥ÀÌÅÍ JPA Ãß°¡
DTO, ¿£Æ¼Æ¼, POJO
¿£Æ¼Æ¼
DTO
POJO
½ºÇÁ¸µ µ¥ÀÌÅÍ ¸®Æ÷ÁöÅ͸® »ý¼º
»ç¿ëÀÚ ÁöÁ¤ ÆÄÀδõ »ç¿ë
°á°ú Á¤·Ä
Äõ¸® °á°ú Á¦ÇÑ
±î´Ù·Î¿î ´äº¯À» ã±â À§ÇÑ Äõ¸® ¿¹Á¦
ÀÚ¹Ù Æ۽ýºÅÏÆ® API »ç¿ë
¿ä¾à
4Àå. ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç º¸È£
ÇÁ·ÎÁ§Æ®¿¡ ½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼ Ãß°¡
»ç¿ëÀÚ ÁöÁ¤ º¸¾È Á¤Ã¥À¸·Î ÀÚü »ç¿ëÀÚ »ý¼º
Çϵå ÄÚµùµÈ »ç¿ëÀÚ¸¦ ½ºÇÁ¸µ µ¥ÀÌÅÍ Áö¿ø »ç¿ëÀÚ ÁýÇÕÀ¸·Î ±³Ã¼
À¥ °æ·Î ¹× HTTP ¸Þ¼µå º¸¾È
CSRF¸¦ »ç¿ëÇÒ °ÍÀΰ¡ ¸» °ÍÀΰ¡, ±×°ÍÀÌ ¹®Á¦·Î´Ù
½ºÇÁ¸µ µ¥ÀÌÅÍ ¸Þ¼µå º¸¾È
¸ðµ¨ ¾÷µ¥ÀÌÆ®
µ¥ÀÌÅÍ ¼ÒÀ¯±Ç È®º¸
»èÁ¦ ¹öÆ° Ãß°¡
µ¥ÀÌÅÍ ¼ÒÀ¯ÀÚ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑ Àá±×±â
¸Þ¼µå ¼öÁØ º¸¾È È°¼ºÈ
»çÀÌÆ®¿¡ »ç¿ëÀÚ ¼¼ºÎ Á¤º¸ Ç¥½Ã
±¸±ÛÀ» È°¿ëÇØ »ç¿ëÀÚ ÀÎÁõ
OAuth »ç¿ëÀÇ ÀåÁ¡
OAuth »ç¿ëÀÇ ´ÜÁ¡
±¸±Û OAuth 2.0 ¾ÖÇø®ÄÉÀÌ¼Ç »ý¼º
½ºÇÁ¸µ ºÎÆ® ÇÁ·ÎÁ§Æ®¿¡ OAuth Ŭ¶óÀ̾ðÆ® Ãß°¡
¿ø°ÝÀ¸·Î OAuth2 API È£Ãâ
OAuth2 ±â¹Ý À¥ ¾ÖÇø®ÄÉÀÌ¼Ç »ý¼º
¿ä¾à
5Àå. ½ºÇÁ¸µ ºÎÆ® Å×½ºÆ®
¾ÖÇø®ÄÉÀ̼ǿ¡ JUnit 5 Ãß°¡
µµ¸ÞÀÎ ±â¹Ý Å×½ºÆ® ÄÉÀ̽º »ý¼º
MockMVC¸¦ »ç¿ëÇØ À¥ ÄÁÆ®·Ñ·¯ Å×½ºÆ®
¸ðÅ·À¸·Î µ¥ÀÌÅÍ ¸®Æ÷ÁöÅ͸® Å×½ºÆ®
ÀÓº£µðµå µ¥ÀÌÅͺ£À̽º·Î µ¥ÀÌÅÍ ¸®Æ÷ÁöÅ͸® Å×½ºÆ®
¾ÖÇø®ÄÉÀ̼ǿ¡ Å×½ºÆ®ÄÁÅ×ÀÌ³Ê Ãß°¡
Å×½ºÆ®ÄÁÅ×À̳ʸ¦ »ç¿ëÇÑ µ¥ÀÌÅÍ ¸®Æ÷ÁöÅ͸® Å×½ºÆ®
½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼ Å×½ºÆ®·Î º¸¾È Á¤Ã¥ Å×½ºÆ®
¿ä¾à
3ºÎ. ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç ¸±¸®½º
6Àå. ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç ¼³Á¤
»ç¿ëÀÚ ÁöÁ¤ ÇÁ·ÎÆÛƼ »ý¼º
ÇÁ·ÎÆÄÀÏ ±â¹Ý ÇÁ·ÎÆÛƼ ÆÄÀÏ »ý¼º
YAML Àüȯ
ȯ°æ º¯¼ö·Î ÇÁ·ÎÆÛƼ ¼³Á¤
ÇÁ·ÎÆÛƼ ¿À¹ö¶óÀÌµå ¼ø¼
¿ä¾à
7Àå. ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç ¸±¸®½º
uber JAR »ý¼º
µµÄ¿ ÄÁÅ×ÀÌ³Ê º£ÀÌÅ·
¡®¿Ã¹Ù¸¥¡¯ À¯ÇüÀÇ ÄÁÅ×ÀÌ³Ê ºôµå
¾ÖÇø®ÄÉÀ̼ÇÀ» µµÄ¿ Çãºê¿¡ ¸±¸®½º
ÇÁ·Î´ö¼Ç ȯ°æ Á¶Á¤
½ºÇÁ¸µ ºÎÆ® ½ºÄÉÀϸµ
¿ä¾à
8Àå. ½ºÇÁ¸µ ºÎÆ®·Î ³×ÀÌƼºê Àüȯ
GraalVMÀÌ Áß¿äÇÑ ÀÌÀ¯
GraalVM¿¡ ¸Â°Ô ¾ÖÇø®ÄÉÀÌ¼Ç °»½Å
GraalVMÀ¸·Î ±âº» ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç ½ÇÇà
GraalVMÀ» ´Ù½Ã »ç¿ëÇØ¾ß ÇÏ´Â ÀÌÀ¯
GraalVMÀ¸·Î µµÄ¿ ÄÁÅ×ÀÌ³Ê º£ÀÌÅ·
½ºÇÁ¸µ ºÎÆ® 3.0°ú ½ºÇÁ¸µ ºÎÆ® 2.7 ¹× ½ºÇÁ¸µ ³×ÀÌƼºê ºñ±³
GraalVM ¹× ±âŸ ¶óÀ̺귯¸®
¿ä¾à
4ºÎ. ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç È®Àå
9Àå. ¹ÝÀÀÇü À¥ ÄÁÆ®·Ñ·¯ ÀÛ¼º
¹ÝÀÀÇüÀ̶õ ¹«¾ùÀÌ¸ç °ü½ÉÀ» °¡Á®¾ß ÇÒ ÀÌÀ¯
¹ÝÀÀÇü
¹ÝÀÀÇü ½ºÆ®¸² ¼¼ºÎ Á¤º¸
¹ÝÀÀÇü ½ºÇÁ¸µ ºÎÆ® ¾ÖÇø®ÄÉÀÌ¼Ç »ý¼º
¹ÝÀÀÇü GET ¸Þ¼µå·Î µ¥ÀÌÅÍ ¼ºñ½º
¹ÝÀÀÇü POST ¸Þ¼µå·Î µé¾î¿À´Â µ¥ÀÌÅÍ ¼Òºñ
ÇÁ·ÎÁ§Æ® ¸®¾×ÅÍ·Î ¾ÖÇø®ÄÉÀÌ¼Ç È®Àå
ÀÚ¹Ù µ¿½Ã¼º ÇÁ·Î±×·¡¹Ö ¿ª»ç ºü¸£°Ô ÈȾ±â
¹ÝÀÀÇü ÅÛÇø´ ¼ºñ½º
¸®¾×Ƽºê À¥ ÄÁÆ®·Ñ·¯ »ý¼º
ŸÀÓ¸®ÇÁ ÅÛÇø´ »ý¼º
¹ÝÀÀÇü ÇÏÀÌÆ۹̵ð¾î »ý¼º
¿ä¾à
10Àå. ¹ÝÀÀÇü µ¥ÀÌÅÍ ÀÛ¾÷
¹ÝÀÀÇüÀ¸·Î µ¥ÀÌÅ͸¦ °¡Á®¿Â´Ù´Â °ÍÀÇ ÀǹÌ
¹ÝÀÀÇü µ¥ÀÌÅÍ ÀúÀå¼Ò ¼±ÅÃ
¹ÝÀÀÇü µ¥ÀÌÅÍ ¸®Æ÷ÁöÅ͸® ¸¸µé±â
R2DBC »ç¿ë
R2dbcEntityTemplate·Î µ¥ÀÌÅÍ ·Îµå
API ÄÁÆ®·Ñ·¯¿¡ ¹ÝÀÀÇüÀ¸·Î µ¥ÀÌÅÍ ¹Ýȯ
ÅÛÇø´¿¡¼ µ¥ÀÌÅ͸¦ ¹ÝÀÀÇüÀ¸·Î ó¸®
¿ä¾à