{"id":221,"date":"2024-04-20T00:31:04","date_gmt":"2024-04-19T15:31:04","guid":{"rendered":"https:\/\/redutan.synology.me\/wordpress\/?p=221"},"modified":"2024-04-20T12:40:39","modified_gmt":"2024-04-20T03:40:39","slug":"spring-boot-3-1-to-3-2-%eb%a7%88%ec%9d%b4%ea%b7%b8%eb%a0%88%ec%9d%b4%ec%85%98","status":"publish","type":"post","link":"https:\/\/redutan.synology.me\/wordpress\/2024\/04\/20\/spring-boot-3-1-to-3-2-%eb%a7%88%ec%9d%b4%ea%b7%b8%eb%a0%88%ec%9d%b4%ec%85%98\/","title":{"rendered":"spring-boot 3.1 to 3.2 \uc5c5\uadf8\ub808\uc774\ub4dc \ub9c8\uc774\uadf8\ub808\uc774\uc158"},"content":{"rendered":"\n<p>spring-boot 3.1.10 -> 3.2.5 \ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ud558\ub294 \uc2dc\ub098\ub9ac\uc624\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"257\" src=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-13-1024x257.png\" alt=\"\" class=\"wp-image-240\" srcset=\"https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-13-1024x257.png 1024w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-13-300x75.png 300w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-13-768x193.png 768w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-13-1536x386.png 1536w, https:\/\/redutan.synology.me\/wordpress\/wp-content\/uploads\/2024\/04\/image-13.png 1968w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>\ucd9c\ucc98: https:\/\/spring.io\/projects\/spring-boot#support<\/em><\/figcaption><\/figure>\n\n\n\n<p>\ubcf4\uc2dc\ub2e4\uc2dc\ud53c spring-boot 3.1.x\ub294 \uc624\ud508\uc18c\uc2a4 EoL\uc774 <strong>2024-05-18<\/strong>\uc785\ub2c8\ub2e4.<br>(\uae00\uc744 \ubc1c\ud589\ud55c \uc2dc\uc810\uc774 2024-04-20 \uc774\uc5b4\uc11c \uc624\ub298 \ub0a0\uc9dc\ub85c \ube57\uae08\uc774 \uc788\ub124\uc694) <br>spring-boot \uc624\ud508\uc18c\uc2a4 \ubc84\uc804 EoL \uc8fc\uae30\uac00 \uc9e7\uae30 \ub54c\ubb38\uc5d0 \ubbf8\ub9ac \ubbf8\ub9ac \ubc84\uc804\uc5c5\uc744 \ud574\uc57c\ud560 \uac83 \uac19\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \ucde8\uc57d\uc810\uc774 \ubc1c\uacac\ub418\ub294 \uacbd\uc6b0 \uce58\uba85\uc801\uc778 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>\uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.2-Release-Notes#upgrading-from-spring-boot-31\">https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.2-Release-Notes#upgrading-from-spring-boot-31<\/a><\/p>\n\n\n\n<p>\ub2e4\ub4e4 \uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc\ub97c \uc815\ub3c5\ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Gradle<\/h2>\n\n\n\n<p><code>build.gradle.kts<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"plugins {\n    java\n    groovy\n    idea\n    checkstyle\n    jacoco\n    id(&quot;org.springframework.boot&quot;) version &quot;3.2.5&quot;           \/\/ Modified\n    id(&quot;io.spring.dependency-management&quot;) version &quot;1.1.4&quot;    \/\/ Modified\n    id(&quot;com.google.cloud.tools.jib&quot;) version &quot;3.4.1&quot;\n    id(&quot;org.sonarqube&quot;) version &quot;4.4.1.3373&quot;\n}\n...\n\/\/ Properties\nextra[&quot;springCloudVersion&quot;] = &quot;2023.0.1&quot;                    \/\/ Modifyed\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #50FA7B\">plugins<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    java<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    groovy<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    idea<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    checkstyle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    jacoco<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">id<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;org.springframework.boot&quot;<\/span><span style=\"color: #F8F8F2\">) version <\/span><span style=\"color: #F1FA8C\">&quot;3.2.5&quot;<\/span><span style=\"color: #F8F8F2\">           <\/span><span style=\"color: #6272A4\">\/\/ Modified<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">id<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;io.spring.dependency-management&quot;<\/span><span style=\"color: #F8F8F2\">) version <\/span><span style=\"color: #F1FA8C\">&quot;1.1.4&quot;<\/span><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\">\/\/ Modified<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">id<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;com.google.cloud.tools.jib&quot;<\/span><span style=\"color: #F8F8F2\">) version <\/span><span style=\"color: #F1FA8C\">&quot;3.4.1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">id<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;org.sonarqube&quot;<\/span><span style=\"color: #F8F8F2\">) version <\/span><span style=\"color: #F1FA8C\">&quot;4.4.1.3373&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">..<\/span><span style=\"color: #F8F8F2\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Properties<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">extra[<\/span><span style=\"color: #F1FA8C\">&quot;springCloudVersion&quot;<\/span><span style=\"color: #F8F8F2\">] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;2023.0.1&quot;<\/span><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #6272A4\">\/\/ Modifyed<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Kotlin<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2>Compile Error<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<h3>1. ErrorAttributes.ERROR_ATTRIBUTE \uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc74c<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"    @Nullable\n    @Override\n    public Throwable getError(WebRequest webRequest) {\n        Throwable exception = getAttribute(webRequest, ERROR_INTERNAL_ATTRIBUTE);\n        if (exception == null) {\n            exception = getAttribute(webRequest, RequestDispatcher.ERROR_EXCEPTION);\n        }\n        if (exception == null) {\n            return null;\n        }\n        \/\/ webRequest.setAttribute(ErrorAttributes.ERROR_ATTRIBUTE, exception, RequestAttributes.SCOPE_REQUEST);    \/\/ \ucef4\ud30c\uc77c \uc624\ub958\uac00 \ubc1c\uc0dd\ud574\uc11c \uc81c\uac70: \ud544\uc694\ud558\uc9c0 \uc54a\uc74c.\n        return exception;\n    }\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">@Nullable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">@Override<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> Throwable <\/span><span style=\"color: #50FA7B\">getError<\/span><span style=\"color: #F8F8F2\">(WebRequest webRequest) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        Throwable exception <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">getAttribute<\/span><span style=\"color: #F8F8F2\">(webRequest, ERROR_INTERNAL_ATTRIBUTE);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (exception <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            exception <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">getAttribute<\/span><span style=\"color: #F8F8F2\">(webRequest, RequestDispatcher.ERROR_EXCEPTION);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (exception <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #6272A4\">\/\/ webRequest.setAttribute(ErrorAttributes.ERROR_ATTRIBUTE, exception, RequestAttributes.SCOPE_REQUEST);    \/\/ \ucef4\ud30c\uc77c \uc624\ub958\uac00 \ubc1c\uc0dd\ud574\uc11c \uc81c\uac70: \ud544\uc694\ud558\uc9c0 \uc54a\uc74c.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> exception;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Kotlin<\/span><\/div>\n\n\n\n<p>\uad00\ub828\ud574\uc11c spring-boot \uc5d0 \ub4f1\ub85d\ub41c \uc774\uc288\ub97c \uc0b4\ud3b4\ubcf4\uba74 \uae30\uc874 \ub808\uac70\uc2dc \ucf54\ub4dc \ucc0c\uaebc\uae30\uc5ec\uc11c \uc81c\uac70 \uc694\ub9dd.<\/p>\n\n\n\n<p>Ref: <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/issues\/38907\" target=\"_blank\" rel=\"noopener\" title=\"\">https:\/\/github.com\/spring-projects\/spring-boot\/issues\/38907<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Deprecated<\/h2>\n\n\n\n<h3>1. MethodArgumentNotValidException#resolveErrorMessages<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\t\/**\n\t * Resolve global and field errors to messages with the given\n\t * {@link MessageSource} and {@link Locale}.\n\t * @return a Map with errors as keys and resolved messages as values\n\t * @since 6.0.3\n\t * @deprecated in favor of using {@link BindErrorUtils} and\n\t * {@link #getAllErrors()}, to be removed in 6.2\n\t *\/\n\t@Deprecated(since = &quot;6.1&quot;, forRemoval = true)\n\tpublic Map&lt;ObjectError, String&gt; resolveErrorMessages(MessageSource messageSource, Locale locale) {\n\t\treturn BindErrorUtils.resolve(getAllErrors(), messageSource, locale);\n\t}\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6272A4\">\t\/**<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t * Resolve global and field errors to messages with the given<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t * {@link MessageSource} and {@link Locale}.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t * <\/span><span style=\"color: #FF79C6\">@return<\/span><span style=\"color: #6272A4\"> a Map with errors as keys and resolved messages as values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t * <\/span><span style=\"color: #FF79C6\">@since<\/span><span style=\"color: #6272A4\"> 6.0.3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t * <\/span><span style=\"color: #FF79C6\">@deprecated<\/span><span style=\"color: #6272A4\"> in favor of using {@link BindErrorUtils} and<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t * {<\/span><span style=\"color: #FF79C6\">@link<\/span><span style=\"color: #6272A4\"> #<\/span><span style=\"color: #FFB86C; font-style: italic\">getAllErrors()<\/span><span style=\"color: #6272A4\">}, to be removed in 6.2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\t *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t@<\/span><span style=\"color: #8BE9FD; font-style: italic\">Deprecated<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">since<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">6.1<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">forRemoval<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t<\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Map<\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\">ObjectError, String<\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">resolveErrorMessages<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">MessageSource<\/span><span style=\"color: #F8F8F2\"> messageSource, <\/span><span style=\"color: #8BE9FD; font-style: italic\">Locale<\/span><span style=\"color: #F8F8F2\"> locale) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t<\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> BindErrorUtils.<\/span><span style=\"color: #50FA7B\">resolve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">getAllErrors<\/span><span style=\"color: #F8F8F2\">(), messageSource, locale);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Java<\/span><\/div>\n\n\n\n<p><code>BindErrorUtils<\/code> \uacfc <code>getAllErrors()<\/code> \uac00 spirng-web-mvc 6.2 \uc5d0\uc11c \uc81c\uac70\ub420 \uc608\uc815\uc774\ub77c\uace0 \ud568.<br>\ubcf4\ud1b5 Deprecated \uc5d0\ub294 \ub300\uc548\uc744 \uc9c0\uc815\ud574\uc8fc\ub294\ub370, \uc5ec\uae30\uc5d0\uc11c\ub294 \uadf8\ub7f0 \uac83\ub3c4 \uc5c6\uc74c.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"private List&lt;FieldErrorView&gt; getFieldErrorViews(MethodArgumentNotValidException ex, Locale locale) {\n    Map&lt;ObjectError, String&gt; messageMap = \n            \/\/ ex.resolveErrorMessages(messageSource, locale); AS-IS\n            BindErrorUtils.resolve(ex.getAllErrors(), messageSource, locale); \/\/ TO-BE\n    return ex.getFieldErrors().stream()\n             .map(f -&gt; new FieldErrorView(f, messageMap.get(f)))\n             .toList();\n}\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">private<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">List<\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\">FieldErrorView<\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">getFieldErrorViews<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">MethodArgumentNotValidException<\/span><span style=\"color: #F8F8F2\"> ex, <\/span><span style=\"color: #8BE9FD; font-style: italic\">Locale<\/span><span style=\"color: #F8F8F2\"> locale) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Map<\/span><span style=\"color: #F8F8F2\">&lt;ObjectError, String&gt; messageMap <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #6272A4\">\/\/ ex.resolveErrorMessages(messageSource, locale); AS-IS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            BindErrorUtils.<\/span><span style=\"color: #50FA7B\">resolve<\/span><span style=\"color: #F8F8F2\">(ex.<\/span><span style=\"color: #50FA7B\">getAllErrors<\/span><span style=\"color: #F8F8F2\">(), messageSource, locale); <\/span><span style=\"color: #6272A4\">\/\/ TO-BE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> ex.<\/span><span style=\"color: #50FA7B\">getFieldErrors<\/span><span style=\"color: #F8F8F2\">().<\/span><span style=\"color: #50FA7B\">stream<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">             .<\/span><span style=\"color: #50FA7B\">map<\/span><span style=\"color: #F8F8F2\">(f <\/span><span style=\"color: #8BE9FD; font-style: italic\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6; font-weight: bold\">new<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">FieldErrorView<\/span><span style=\"color: #F8F8F2\">(f, messageMap.<\/span><span style=\"color: #50FA7B\">get<\/span><span style=\"color: #F8F8F2\">(f)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">             .<\/span><span style=\"color: #50FA7B\">toList<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Java<\/span><\/div>\n\n\n\n<p>\uc6b0\uc120 \uc704\ucc98\ub7fc \ubcc0\uacbd\ud588\ub294\ub370, \ud6a8\uacfc\uac00 \uc788\uc744\uc9c0&#8230;.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Spring Initialization Error<\/h2>\n\n\n\n<h3>1. java.lang.IllegalStateException: @TransactionalEventListener method must not be annotated with @Transactional unless when declared as REQUIRES_NEW or NOT_SUPPORTED<\/h3>\n\n\n\n<p>\uc774\uac83\uc744 Spring Initialization \uc2dc \uac80\uc99d\ud574\uc8fc\ub294 \uac83\uc744 \uc88b\ub2e4\uace0 \ubd04.<br><code>@TransactionalEventListener<\/code> \ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 <code>phase<\/code>\uac00 <code>AFTER_COMMIT<\/code> \uc778 \uacbd\uc6b0\uc5d0\ub294 \uc0c8\ub85c\uc6b4 \ud2b8\ub79c\uc7ad\uc158\uc774 \ud544\uc694\ud558\uae30 \ub54c\ubb38\uc5d0 \uaf2d <code>REQUIRES_NEW<\/code> \ub85c \ud2b8\ub79c\uc7ad\uc158\uc774 \uc0dd\uc131\ub418\uac8c \uc120\uc5b8\ud574\uc8fc\uc5b4\uc57c\ud568.<br>\ubc18\ub300\ub85c <code>phase<\/code>\uac00 <code>BEFORE_COMMIT<\/code> \uc778 \uacbd\uc6b0\uc5d0\ub294 \uc5b4\uc9dc\ud53c \ud2b8\ub79c\uc7ad\uc158 \ubc94\uc704 \uc548\uc5d0 \uc788\uc73c\ub2c8 <code>@Transactional<\/code> \uc744 \uc81c\uac70\ud558\ub3c4\ub85d \ud558\uace0 \uc788\uc74c.(\uad73\uc774 \uc720\uc9c0\ud574\ub3c4 \ub420 \uac83 \uac19\uc740\ub370, \uc81c\uac70\ud558\uac8c \uc608\uc678\uac00 \ubc1c\uc0dd\ub428.)<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"    @TransactionalEventListener(value = OpenChattingProfileSaved.class, phase = TransactionPhase.BEFORE_COMMIT)\n    \/\/ @Transactional \uc81c\uac70 \uc694\ub9dd: BEFORE_COMMIT \uc774\uae30 \ub54c\ubb38\uc5d0 \uc874\uc7ac\ud558\ub294 \ud2b8\ub79c\uc7ad\uc158 \ub0b4\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \ubd88\ud544\uc694\ud55c @Transactional \uc560\ub178\ud14c\uc774\uc158\uc774 \uc788\uc5b4\uc11c \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uace0 \uc788\uc5c8\uc74c.\n    public void subscribeOpenChattingProfileSaved(OpenChattingProfileSaved event) {\n        KakaoId kakaoId = event.getKakaoId();\n        agree(Kind.OPEN_CHATTING_PERSONAL_INFO, kakaoId);\n    }\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">    @<\/span><span style=\"color: #8BE9FD; font-style: italic\">TransactionalEventListener<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">value<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> OpenChattingProfileSaved.class, <\/span><span style=\"color: #BD93F9\">phase<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> TransactionPhase.BEFORE_COMMIT)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\">\/\/ @Transactional \uc81c\uac70 \uc694\ub9dd: BEFORE_COMMIT \uc774\uae30 \ub54c\ubb38\uc5d0 \uc874\uc7ac\ud558\ub294 \ud2b8\ub79c\uc7ad\uc158 \ub0b4\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \ubd88\ud544\uc694\ud55c @Transactional \uc560\ub178\ud14c\uc774\uc158\uc774 \uc788\uc5b4\uc11c \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uace0 \uc788\uc5c8\uc74c.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">subscribeOpenChattingProfileSaved<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">OpenChattingProfileSaved<\/span><span style=\"color: #F8F8F2\"> event) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">KakaoId<\/span><span style=\"color: #F8F8F2\"> kakaoId <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> event.<\/span><span style=\"color: #50FA7B\">getKakaoId<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">agree<\/span><span style=\"color: #F8F8F2\">(Kind.OPEN_CHATTING_PERSONAL_INFO, kakaoId);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Java<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Ref: <a href=\"https:\/\/bin-repository.tistory.com\/167\" target=\"_blank\" rel=\"noopener\" title=\"\">https:\/\/bin-repository.tistory.com\/167<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Test<\/h2>\n\n\n\n<h3>1. 400 BadRequest \uae30\ubcf8 \uba54\uc2dc\uc9c0 \ubcc0\uacbd<\/h3>\n\n\n\n<ul>\n<li><code>AS-IS<\/code>: &#8220;<code>title: '\uacf5\ubc31\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4'<\/code>&#8220;<\/li>\n\n\n\n<li><code>TO-BE<\/code>: &#8220;\uacf5\ubc31\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.&#8221;<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\" .andExpect(status().isBadRequest())\n\n .andExpect(jsonPath(&quot;$.err&quot;).value(&quot;\uc694\uccad \ubcf8\ubb38\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. errors\ub97c \ucc38\uace0\ud558\uc138\uc694.&quot;))\n .andExpect(jsonPath(&quot;$.errors.length()&quot;).value(6))\n .andExpect(jsonPath(&quot;$.errors[?(@.field == 'title')].message&quot;)\n              \/\/ \ubcc0\uacbd \uc804\n              \/\/.value(&quot;title: '\uacf5\ubc31\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4'&quot;))\n              \/\/ \ubcc0\uacbd \ud6c4\n              .value(&quot;title: '\uacf5\ubc31\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4'&quot;))\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\"> .<\/span><span style=\"color: #50FA7B\">andExpect<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">status<\/span><span style=\"color: #F8F8F2\">().<\/span><span style=\"color: #50FA7B\">isBadRequest<\/span><span style=\"color: #F8F8F2\">())<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\"> .<\/span><span style=\"color: #50FA7B\">andExpect<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">jsonPath<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">$.err<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">).<\/span><span style=\"color: #50FA7B\">value<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">\uc694\uccad \ubcf8\ubb38\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. errors\ub97c \ucc38\uace0\ud558\uc138\uc694.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\"> .<\/span><span style=\"color: #50FA7B\">andExpect<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">jsonPath<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">$.errors.length()<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">).<\/span><span style=\"color: #50FA7B\">value<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\"> .<\/span><span style=\"color: #50FA7B\">andExpect<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">jsonPath<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">$.errors[?(@.field == &#39;title&#39;)].message<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">              <\/span><span style=\"color: #6272A4\">\/\/ \ubcc0\uacbd \uc804<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">              <\/span><span style=\"color: #6272A4\">\/\/.value(&quot;title: &#39;\uacf5\ubc31\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4&#39;&quot;))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">              <\/span><span style=\"color: #6272A4\">\/\/ \ubcc0\uacbd \ud6c4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">              .<\/span><span style=\"color: #50FA7B\">value<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">title: &#39;\uacf5\ubc31\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4&#39;<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Java<\/span><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>spring-boot 3.1.10 -> 3.2.5 \ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ud558\ub294 \uc2dc\ub098\ub9ac\uc624\uc785\ub2c8\ub2e4. \ubcf4\uc2dc\ub2e4\uc2dc\ud53c spring-boot 3.1.x\ub294 \uc624\ud508\uc18c\uc2a4 EoL\uc774 2024-05-18\uc785\ub2c8\ub2e4.(\uae00\uc744 \ubc1c\ud589\ud55c \uc2dc\uc810\uc774 2024-04-20 \uc774\uc5b4\uc11c \uc624\ub298 \ub0a0\uc9dc\ub85c \ube57\uae08\uc774 \uc788\ub124\uc694) spring-boot \uc624\ud508\uc18c\uc2a4 \ubc84\uc804 EoL \uc8fc\uae30\uac00 \uc9e7\uae30 \ub54c\ubb38\uc5d0 \ubbf8\ub9ac \ubbf8\ub9ac \ubc84\uc804\uc5c5\uc744 \ud574\uc57c\ud560 \uac83 \uac19\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \ucde8\uc57d\uc810\uc774 \ubc1c\uacac\ub418\ub294 \uacbd\uc6b0 \uce58\uba85\uc801\uc778 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-3.2-Release-Notes#upgrading-from-spring-boot-31 \ub2e4\ub4e4 \uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc\ub97c \uc815\ub3c5\ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4. &#8230; <a title=\"spring-boot 3.1 to 3.2 \uc5c5\uadf8\ub808\uc774\ub4dc \ub9c8\uc774\uadf8\ub808\uc774\uc158\" class=\"read-more\" href=\"https:\/\/redutan.synology.me\/wordpress\/2024\/04\/20\/spring-boot-3-1-to-3-2-%eb%a7%88%ec%9d%b4%ea%b7%b8%eb%a0%88%ec%9d%b4%ec%85%98\/\" aria-label=\"Read more about spring-boot 3.1 to 3.2 \uc5c5\uadf8\ub808\uc774\ub4dc \ub9c8\uc774\uadf8\ub808\uc774\uc158\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[28],"tags":[37,36,26,38],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/221"}],"collection":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/comments?post=221"}],"version-history":[{"count":14,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/221\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/221\/revisions\/242"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/media\/232"}],"wp:attachment":[{"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/media?parent=221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/categories?post=221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redutan.synology.me\/wordpress\/wp-json\/wp\/v2\/tags?post=221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}