½ºÇÁ¸µ ºÎÆ®¿Í JPA¸¦ È°¿ëÇÏ¿© ½ÇÁ¦ ÀÌÄ¿¸Ó½º ¾÷°è¿¡¼ È°¿ëµÇ´Â ¼îÇθô ±â¼úµéÀ» Á÷Á¢ ±¸ÇöÇغ¼ ¼ö ÀÖ°Ô ±¸¼ºÇÏ¿´´Ù. JPA¿Í Thymeleaf¿¡ ´ëÇÑ °£´ÜÇÑ ¿¹Á¦·Î ±âº» °³³ä°ú »ç¿ë¹ýÀ» ÀÍÈ÷°í ±× ÈÄ ¼îÇθôÀÇ ±âº»ÀûÀÎ ±â´ÉµéÀ» ±¸ÇöÇØ °¡¸ç JPA¿Í ½ºÇÁ¸µ ºÎÆ®¸¦ ÀÚ¿¬½º·¹ ÀÍÈú ¼ö ÀÖ´Ù. "Just Do It" ÄÁ¼ÁÀ» ÅëÇØ ÇϳªÀÇ ¿Ï¼ºµÈ ¼ºñ½º¸¦ ¸¸µå´Â °ÍÀ» ¸ñÇ¥·Î ÇÏ¸ç º¹ÀâÇÑ ÄÚµå ¾øÀÌ ÃÖ´ëÇÑ °£°áÇÑ ÄÚµå À§ÁÖ·Î ÀÛ¼ºÇÏ¿´´Ù. ÀÌ Ã¥À» Âü°íÇÏ¿© ÀڽŸ¸ÀÇ Æ÷Æ®Æú¸®¿À¸¦ ¸¸µé¾îº¸´Â °Íµµ °¡´ÉÇÏ´Ù. Å×½ºÆ® Äڵ带 ÀÛ¼ºÇÏ¸é¼ °³¹ßÀ» ÁøÇàÇÏ´Â TDD ¹æ½ÄÀ» Àû¿ëÇÏ¿´±â ¶§¹®¿¡ ½Ç¹«ÁöÇâÀû Ư¼º±îÁö °®Ãß¾ú´Ù.
ÄÄÇ»ÅÍ °øÇÐÀ» Àü°øÇÏ¿´À¸¸ç, ÇöÀç ÀÌÄ¿¸Ó½º ȸ»ç¿¡¼ Á¦ÈÞ»ç »óÇ° ¿¬µ¿ ¹× ¾îµå¹Î °³¹ßÀ» ¸Ã°í ÀÖ´Ù. ÇÏ·ç¿¡ ¸îõ¸¸ °ÇÀÇ µ¥ÀÌÅ͸¦ ¿¬µ¿ÇÏ¸é¼ ¹é¿£µå ¿£Áö´Ï¾î·Î ¼ºÀå ÁßÀÌ´Ù. »õ·Î¿î Áö½ÄÀ» ¹è¿ì°í, ¹è¿î ³»¿ëÀ» Åä´ë·Î ½ÇÁ¦ ¼ºñ½º¸¦ °³¹ßÇÏ¿© »ç¿ëÀڵ鿡°Ô ¹èÆ÷ÇÏ´Â µ¥ °ü½ÉÀÌ ¸¹´Ù.
ÇöÀç±îÁö °³¹ßÇؼ »ç¶÷µé¿¡°Ô ¹èÆ÷Çغ» ¼ºñ½º°¡ 3°¡Áö Á¤µµ µÈ´Ù. °³ÀÎ ºí·Î±× ¿î¿µÀÌ Àο¬ÀÌ µÇ¾î ÁýÇʱîÁö ÁøÇàÇÏ°Ô µÇ¾ú´Ù.
ÁöÀºÀÌÀÇ ¸» º£Å¸Å×½ºÅÍÀÇ ¸» ÀÏ·¯µÎ±â 1Àå °³¹ß ȯ°æ ±¸Ãà1.1 ½ºÇÁ¸µ ºÎÆ®ÀÇ Æ¯Â¡ 1.2 JDK ¼³Ä¡ 1.3 ÀÎÅÚ¸®Á¦ÀÌ ¼³Ä¡ 1.4 ¾ÖÇø®ÄÉÀÌ¼Ç ½ÇÇàÇϱâ 1.4.1 Spring Boot Project »ý¼ºÇϱâ 1.4.2 ºôµå µµ±¸ 1.4.3 ¼³Á¤ ÆÄÀÏ(application.properties) 1.4.4 Hello World Ãâ·ÂÇϱâ 1.5 Lombok ¶óÀ̺귯¸® 1.6 MySQL ¼³Ä¡Çϱâ [ÇÔ²² ÇغÁ¿ä 1-1] application.properties ¼³Á¤Çϱâ [ÇÔ²² ÇغÁ¿ä 1-2] Hello World Ãâ·ÂÇϱâ [ÇÔ²² ÇغÁ¿ä 1-3] ¾ÖÇø®ÄÉÀÌ¼Ç Æ÷Æ® º¯°æÇϱâ [ÇÔ²² ÇغÁ¿ä 1-4] Lombok ¶óÀ̺귯¸® Àû¿ëÇϱâ 2Àå Spring Data JPA2.1 JPA 2.1.1 JPA¶õ? 2.1.2 JPA µ¿ÀÛ ¹æ½Ä 2.2 ¼îÇθô ÇÁ·ÎÁ§Æ® »ý¼ºÇϱâ 2.2.1 ÇÁ·ÎÁ§Æ® »ý¼ºÇϱâ 2.2.2 application.properties ¼³Á¤Çϱâ 2.3 »óÇ° ¿£Æ¼Æ¼ ¼³°èÇϱâ 2.3.1 »óÇ° ¿£Æ¼Æ¼ ¼³°èÇϱâ 2.4 Repository ¼³°èÇϱâ 2.5 Äõ¸® ¸Þ¼Òµå 2.6 Spring DATA JPA @Query ¾î³ëÅ×ÀÌ¼Ç 2.7 Spring DATA JPA Querydsl [ÇÔ²² ÇغÁ¿ä 2-1] »óÇ° Ŭ·¡½º »ý¼ºÇϱâ_Ver01 [ÇÔ²² ÇغÁ¿ä 2-2] »óÇ° Ŭ·¡½º ¿£Æ¼Æ¼ ¸ÅÇÎ_Ver02 [ÇÔ²² ÇغÁ¿ä 2-3] »óÇ° Repository ÀÛ¼º ¹× Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 2-4] Äõ¸® ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÑ »óÇ° Á¶È¸Çϱâ [ÇÔ²² ÇغÁ¿ä 2-5] OR Á¶°Ç ó¸®Çϱâ [ÇÔ²² ÇغÁ¿ä 2-6] LessThan Á¶°Ç ó¸®Çϱâ [ÇÔ²² ÇغÁ¿ä 2-7] OrderBy·Î Á¤·Ä ó¸®Çϱâ [ÇÔ²² ÇغÁ¿ä 2-8] @Query¸¦ ÀÌ¿ëÇÑ °Ë»ö ó¸®Çϱâ [ÇÔ²² ÇغÁ¿ä 2-9] @Query-nativeQuery ¼Ó¼º ¿¹Á¦ [ÇÔ²² ÇغÁ¿ä 2-10] JPAQueryFactory¸¦ ÀÌ¿ëÇÑ »óÇ° Á¶È¸ ¿¹Á¦ [ÇÔ²² ÇغÁ¿ä 2-11] QuerydslPredicateExecutor¸¦ ÀÌ¿ëÇÑ »óÇ° Á¶È¸ ¿¹Á¦ 3Àå Thymeleaf ÇнÀÇϱâ3.1 Thymeleaf ¼Ò°³ 3.2 Spring Boot Devtools 3.2.1 Automatic Restart Àû¿ëÇϱâ 3.2.2 Live Reload Àû¿ëÇϱâ 3.2.3 Property Defaults Àû¿ëÇϱâ 3.3 Thymeleaf ¿¹Á¦ ÁøÇàÇϱâ 3.3.1 th:text ¿¹Á¦ 3.3.2 th:each ¿¹Á¦ 3.3.3 th:if, th:unless ¿¹Á¦ 3.3.4 th:switch, th:case ¿¹Á¦ 3.3.5 th:href ¿¹Á¦ 3.4 Thymeleaf ÆäÀÌÁö ·¹À̾ƿô 3.4.1 Thymeleaf Layout Dialect dependency Ãß°¡Çϱâ 3.5 ºÎÆ®½ºÆ®·¦À¸·Î header, footer ¿µ¿ª ¼öÁ¤Çϱâ 3.5.1 Bootstrap CDN Ãß°¡Çϱâ 3.5.2 Bootstrap Navbar Component È°¿ëÇϱâ [ÇÔ²² ÇغÁ¿ä 3-1] À¥ ºê¶ó¿ìÀú¿¡¼ Thymeleaf ÆÄÀÏ ¿¾îº¸±â [ÇÔ²² ÇغÁ¿ä 3-2] Thymeleaf ¿¹Á¦¿ë ÄÁÆ®·Ñ·¯ Ŭ·¡½º ¸¸µé±â [ÇÔ²² ÇغÁ¿ä 3-3] ¼¹ö¿ë Thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-4] pom.xml¿¡ ÀÇÁ¸¼º Ãß°¡Çϱâ [ÇÔ²² ÇغÁ¿ä 3-5] application.properties Live Reload Àû¿ë ¼³Á¤ Ãß°¡Çϱâ [ÇÔ²² ÇغÁ¿ä 3-6] application.properties Property Defaults ¼³Á¤ Ãß°¡Çϱâ [ÇÔ²² ÇغÁ¿ä 3-7] th:text¸¦ ÀÌ¿ëÇÑ »óÇ° µ¥ÀÌÅÍ Ãâ·Â¿ë Dto Ŭ·¡½º [ÇÔ²² ÇغÁ¿ä 3-8] th:text¸¦ ÀÌ¿ëÇÑ »óÇ° µ¥ÀÌÅÍ Ãâ·Â¿ë ÄÁÆ®·Ñ·¯ Ŭ·¡½º [ÇÔ²² ÇغÁ¿ä 3-9] th:text¸¦ ÀÌ¿ëÇÑ »óÇ° µ¥ÀÌÅÍ Ãâ·Â¿ë thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-10] th:each¸¦ ÀÌ¿ëÇÑ »óÇ° ¸®½ºÆ® Ãâ·Â¿ë ÄÁÆ®·Ñ·¯ [ÇÔ²² ÇغÁ¿ä 3-11] th:each¸¦ ÀÌ¿ëÇÑ »óÇ° ¸®½ºÆ® Ãâ·Â¿ë thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-12] th:if, th:unless¸¦ ÀÌ¿ëÇÑ Á¶°Ç¹® 󸮿ë ÄÁÆ®·Ñ·¯ ÀÛ¼ºÇϱâ [ÇÔ²² ÇغÁ¿ä 3-13] th:if, th:unless¸¦ ÀÌ¿ëÇÑ Á¶°Ç¹® 󸮿ë thymeleaf ÆÄÀÏ ¸¸µé±â [ÇÔ²² ÇغÁ¿ä 3-14] th:switch, th:case¸¦ ÀÌ¿ëÇÑ Á¶°Ç¹® 󸮿ë thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-15] th:href¸¦ ÀÌ¿ëÇÑ ¸µÅ© 󸮿ë ÄÁÆ®·Ñ·¯ [ÇÔ²² ÇغÁ¿ä 3-16] th:href¸¦ ÀÌ¿ëÇÑ ¸µÅ© 󸮿ë thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-17] th:href¸¦ ÀÌ¿ëÇÑ ÆĶó¹ÌÅÍ µ¥ÀÌÅÍ Àü´Þ¿ë thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-18] th:href¸¦ ÀÌ¿ëÇÑ ÆĶó¹ÌÅÍ µ¥ÀÌÅÍ Àü´Þ¿ë ÄÁÆ®·Ñ·¯ ÀÛ¼ºÇϱâ [ÇÔ²² ÇغÁ¿ä 3-19] th:href¸¦ ÀÌ¿ëÇÑ ÆĶó¹ÌÅÍ µ¥ÀÌÅÍ Àü´Þ¿ë thymeleaf ÆÄÀÏ [ÇÔ²² ÇغÁ¿ä 3-20] pom.xml¿¡ Thymeleaf Layout Dialect ÀÇÁ¸¼º Ãß°¡Çϱâ [ÇÔ²² ÇغÁ¿ä 3-21] Thymeleaf ÆäÀÌÁö ·¹À̾ƿô ¿¹Á¦: ǪÅÍ ¸¸µé±â [ÇÔ²² ÇغÁ¿ä 3-22] Thymeleaf ÆäÀÌÁö ·¹À̾ƿô ¿¹Á¦: Çì´õ ¸¸µé±â [ÇÔ²² ÇغÁ¿ä 3-23] Thymeleaf ÆäÀÌÁö ·¹À̾ƿô ¿¹Á¦: º»¹® ·¹À̾ƿô [ÇÔ²² ÇغÁ¿ä 3-24] Thymeleaf ÆäÀÌÁö ·¹À̾ƿô ¿¹Á¦: thymeleaf ÆÄÀÏ ¸¸µé±â [ÇÔ²² ÇغÁ¿ä 3-25] Thymeleaf ÆäÀÌÁö ·¹À̾ƿô ¿¹Á¦: ÄÁÆ®·Ñ·¯ Ŭ·¡½º ÀÛ¼ºÇϱâ [ÇÔ²² ÇغÁ¿ä 3-26] ·¹À̾ƿô¿¡ Bootstrap CDN Ãß°¡Çϱâ [ÇÔ²² ÇغÁ¿ä 3-27] Çì´õ ¿µ¿ª¿¡ Navbar Ãß°¡Çϱâ [ÇÔ²² ÇغÁ¿ä 3-28] ǪÅÍ ¿µ¿ª ¼öÁ¤Çϱâ [ÇÔ²² ÇغÁ¿ä 3-29] CSS Àû¿ëÇϱâ [ÇÔ²² ÇغÁ¿ä 3-30] CSS¿Í HTML ÆÄÀÏ ¿¬°áÇϱâ 4Àå ½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼¸¦ ÀÌ¿ëÇÑ È¸¿ø °¡ÀÔ ¹× ·Î±×ÀÎ4.1 ½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼ ¼Ò°³ 4.2 ½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼ ¼³Á¤ Ãß°¡Çϱâ 4.2.1 security dependency Ãß°¡Çϱâ 4.2.2 ½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼ ¼³Á¤Çϱâ 4.3 ȸ¿ø °¡ÀÔ ±â´É ±¸ÇöÇϱâ 4.4 ·Î±×ÀÎ/·Î±×¾Æ¿ô ±¸ÇöÇϱâ 4.4.1 UserDetailsService 4.4.2 UserDetail 4.4.3 ·Î±×ÀÎ/·Î±×¾Æ¿ô ±¸ÇöÇϱâ 4.5 ÆäÀÌÁö ±ÇÇÑ ¼³Á¤Çϱâ [ÇÔ²² ÇغÁ¿ä 4-1] ½ºÇÁ¸µ ½ÃÅ¥¸®Æ¼ ·Î±×ÀÎÇϱâ [ÇÔ²² ÇغÁ¿ä 4-2] SecurityConfig Ŭ·¡½º ÀÛ¼ºÇϱâ [ÇÔ²² ÇغÁ¿ä 4-3] ȸ¿ø °¡ÀÔ ±â´É ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 4-4] ȸ¿ø °¡ÀÔ ±â´É Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 4-5] ȸ¿ø °¡ÀÔ ÆäÀÌÁö ÀÛ¼ºÇϱâ [ÇÔ²² ÇغÁ¿ä 4-6] ȸ¿ø °¡ÀÔ ÄÁÆ®·Ñ·¯ ¼Ò½ºÄÚµå ÀÛ¼ºÇϱâ [ÇÔ²² ÇغÁ¿ä 4-7] ȸ¿ø °¡ÀÔ Ã³¸®Çϱâ [ÇÔ²² ÇغÁ¿ä 4-8] ·Î±×ÀÎ/·Î±×¾Æ¿ô ±â´É ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 4-9] ·Î±×ÀÎ Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 4-10] ·Î±×ÀÎ/·Î±×¾Æ¿ô È¸é ¿¬µ¿Çϱâ [ÇÔ²² ÇغÁ¿ä 4-11] ÆäÀÌÁö ±ÇÇÑ ¼³Á¤Çϱâ [ÇÔ²² ÇغÁ¿ä 4-12] À¯Àú Á¢±Ù ±ÇÇÑ Å×½ºÆ®Çϱâ 5Àå ¿¬°ü °ü°è ¸ÅÇÎ5.1 ¿¬°ü °ü°è ¸ÅÇÎ Á¾·ù 5.1.1 ÀÏ´ëÀÏ ´Ü¹æÇâ ¸ÅÇÎÇϱâ 5.1.2 ´Ù´ëÀÏ ´Ü¹æÇâ ¸ÅÇÎÇϱâ 5.1.3 ´Ù´ëÀÏ/ÀÏ´ë´Ù ¾ç¹æÇâ ¸ÅÇÎÇϱâ 5.1.4 ´Ù´ë´Ù ¸ÅÇÎÇϱâ 5.2 ¿µ¼Ó¼º ÀüÀÌ 5.2.1 ¿µ¼Ó¼º ÀüÀ̶õ? 5.2.2 °í¾Æ °´Ã¼ Á¦°ÅÇϱâ 5.3 Áö¿¬ ·Îµù 5.4 AuditingÀ» ÀÌ¿ëÇÑ ¿£Æ¼Æ¼ °øÅë ¼Ó¼º °øÅëÈ [ÇÔ²² ÇغÁ¿ä 5-1] Àå¹Ù±¸´Ï ¿£Æ¼Æ¼ ¼³°èÇϱâ [ÇÔ²² ÇغÁ¿ä 5-2] Àå¹Ù±¸´Ï ¿£Æ¼Æ¼ Á¶È¸ Å×½ºÆ®Çϱâ(Áï½Ã ·Îµù) [ÇÔ²² ÇغÁ¿ä 5-3] Àå¹Ù±¸´Ï ¾ÆÀÌÅÛ ¿£Æ¼Æ¼ ¼³°èÇϱâ [ÇÔ²² ÇغÁ¿ä 5-4] ÁÖ¹® µµ¸ÞÀÎ ¿£Æ¼Æ¼ ¼³°èÇϱâ [ÇÔ²² ÇغÁ¿ä 5-5] ÁÖ¹® ¿µ¼Ó¼º ÀüÀÌ Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 5-6] °í¾Æ °´Ã¼ Á¦°Å Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 5-7] ÁÖ¹® ¿£Æ¼Æ¼ Á¶È¸ Å×½ºÆ®Çϱâ(Áï½Ã ·Îµù) [ÇÔ²² ÇغÁ¿ä 5-8] ¿£Æ¼Æ¼ Áö¿¬ ·Îµù ¼³Á¤Çϱâ [ÇÔ²² ÇغÁ¿ä 5-9] Auditing ±â´ÉÀ» È°¿ëÇÑ µ¥ÀÌÅÍ ÃßÀûÇϱâ 6Àå »óÇ° µî·Ï ¹× Á¶È¸Çϱâ6.1 »óÇ° µî·ÏÇϱâ 6.2 »óÇ° ¼öÁ¤Çϱâ 6.3 »óÇ° °ü¸®Çϱâ 6.4 ¸ÞÀΠȸé 6.5 »óÇ° »ó¼¼ ÆäÀÌÁö [ÇÔ²² ÇغÁ¿ä 6-1] »óÇ° µî·Ï ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 6-2] »óÇ° ¼öÁ¤Çϱâ [ÇÔ²² ÇغÁ¿ä 6-3] »óÇ° °ü¸® ¸Þ´º ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 6-4] ¸ÞÀÎ ÆäÀÌÁö ±¸ÇöÇϱâ 7Àå ÁÖ¹®7.1 ÁÖ¹® ±â´É ±¸ÇöÇϱâ 7.2 ÁÖ¹® ÀÌ·Â Á¶È¸Çϱâ 7.3 ÁÖ¹® Ãë¼ÒÇϱâ [ÇÔ²² ÇغÁ¿ä 7-1] ÁÖ¹® ±â´É ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 7-2] ÁÖ¹® ±â´É Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 7-3] ÁÖ¹® È£Ãâ ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 7-4] ±¸¸Å ÀÌ·Â [ÇÔ²² ÇغÁ¿ä 7-5] ÁÖ¹® Ãë¼Ò ±â´É ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 7-6] ÁÖ¹® Ãë¼Ò Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 7-7] ÁÖ¹® Ãë¼Ò È£Ãâ ±¸ÇöÇϱâ 8Àå Àå¹Ù±¸´Ï8.1 Àå¹Ù±¸´Ï ´ã±â 8.2 Àå¹Ù±¸´Ï Á¶È¸Çϱâ 8.3 Àå¹Ù±¸´Ï »óÇ° ÁÖ¹®Çϱâ [ÇÔ²² ÇغÁ¿ä 8-1] Àå¹Ù±¸´Ï ´ã±â ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 8-2] Àå¹Ù±¸´Ï ´ã±â Å×½ºÆ®Çϱâ [ÇÔ²² ÇغÁ¿ä 8-3] Àå¹Ù±¸´Ï ´ã±â È£Ãâ ±¸ÇöÇϱâ [ÇÔ²² ÇغÁ¿ä 8-4] Àå¹Ù±¸´Ï Á¶È¸Çϱâ [ÇÔ²² ÇغÁ¿ä 8-5] Àå¹Ù±¸´Ï »óÇ° ¼ö·® º¯°æÇϱâ [ÇÔ²² ÇغÁ¿ä 8-6] Àå¹Ù±¸´Ï »óÇ° »èÁ¦Çϱâ [ÇÔ²² ÇغÁ¿ä 8-7] Àå¹Ù±¸´Ï »óÇ° ÁÖ¹®Çϱâ