<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>섭이의 개발일지</title>
    <link>https://sup2is.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 21 Jun 2026 10:18:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sup2is</managingEditor>
    <item>
      <title>[gradle] gradle build시 OOM 이슈 해결하기</title>
      <link>https://sup2is.tistory.com/115</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것도 꽤 고생했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 크기가 커지면서 테스트케이스들이 많아지고 어느순간부터 OOM 발생 ..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 문서들에서는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradle.properties에서는 아래와 같은 형태로 메모리를 늘리면 된다&lt;/p&gt;
&lt;pre id=&quot;code_1631087653700&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;org.gradle.jvmargs=-Xmx2g&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우는 제대로 잘 동작하지 않았다 &amp;lt;- 사실 이 문제를 아는데까지가 굉장히 오래걸렸음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하면 gradle.properties는 gradle daemon과 관련된 설정이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 jps -lv 명령어를 사용하면 실제로 org.gradle.launcher.daemon.bootstrap.GradleDaemon &amp;lt;- 이놈들의 heap size 설정만 변경된것을 확인할 수 있다&lt;/p&gt;
&lt;pre id=&quot;code_1631087961747&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jps -lv

2634 org.gradle.launcher.daemon.bootstrap.GradleDaemon ... -Xmx2g
16186 org.gradle.launcher.GradleMain ... -Xmx64m -Xms64m 
13051 org.gradle.launcher.daemon.bootstrap.GradleDaemon ... -Xmx2g
16271 worker.org.gradle.process.internal.worker.GradleWorkerMain -Xmx512m
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제 build를 수행하는애들은 worker인게 문제!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 문서에는 아래와 같이 되어있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.gradle.org/current/userguide/upgrading_version_4.html#rel5.0:default_memory_settings&quot;&gt;https://docs.gradle.org/current/userguide/upgrading_version_4.html#rel5.0:default_memory_settings&lt;/a&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;All workers, including compilers and test executors, now start with 512MB of heap. The previous default was 1/4th of physical memory. Large projects may have to increase this setting on the relevant tasks, e.g. JavaCompile or Test&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나랑 비슷한 질문을 한 사람도 있다 &lt;a href=&quot;https://github.com/gradle/gradle/issues/8166&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/gradle/gradle/issues/8166&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631088146563&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Default xmx changed before and after 5.0 for test executor? &amp;middot; Issue #8166 &amp;middot; gradle/gradle&quot; data-og-description=&quot;When upgrading gradle from 4.10.2 to 5.1 (only variable, no other plugin changes), we observed some tests failing due to OOM in 5.1 which passed in 4.10.2 without any issue. With further investigat...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/gradle/gradle/issues/8166&quot; data-og-url=&quot;https://github.com/gradle/gradle/issues/8166&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/V76S7/hyLxzOSaIe/axDxGeEDvkTfx0MDHtyev0/img.png?width=1200&amp;amp;height=600&amp;amp;face=976_135_1054_219&quot;&gt;&lt;a href=&quot;https://github.com/gradle/gradle/issues/8166&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/gradle/gradle/issues/8166&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/V76S7/hyLxzOSaIe/axDxGeEDvkTfx0MDHtyev0/img.png?width=1200&amp;amp;height=600&amp;amp;face=976_135_1054_219');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Default xmx changed before and after 5.0 for test executor? &amp;middot; Issue #8166 &amp;middot; gradle/gradle&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When upgrading gradle from 4.10.2 to 5.1 (only variable, no other plugin changes), we observed some tests failing due to OOM in 5.1 which passed in 4.10.2 without any issue. With further investigat...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 build.gradle에는 아래와 같은 스크립트가 추가되어야한다&lt;/p&gt;
&lt;pre id=&quot;code_1631088268000&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test {
  maxHeapSize = &quot;1024m&quot; //원하는 만큼 변경
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위에서 설정한 heapSize가 실제로 gradle build 명령어에서 사용하는 heap size를 수정하게 해준다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멀티프로젝트라면 아래와 같이 하면 된다&lt;/p&gt;
&lt;pre id=&quot;code_1631088314966&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;subprojects {
  test {
    maxHeapSize = &quot;1024m&quot; //원하는 만큼 변경
  }
  
  ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쩝 ..써놓고 보니까 별거없어보임 ㅠ&lt;/p&gt;</description>
      <category>etc</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/115</guid>
      <comments>https://sup2is.tistory.com/115#entry115comment</comments>
      <pubDate>Wed, 8 Sep 2021 17:05:37 +0900</pubDate>
    </item>
    <item>
      <title>[spring] spring.data.web.pageable.size-parameter not working</title>
      <link>https://sup2is.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아... 2시간정도를 날렸다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;spring pageable의 경우 기본적으로 page, size라는 파라미터를 받아서 페이징을 조금 더 쉽게 구현할 수 있도록 해주는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;page,size라는 이름이 고정값이라 변경이 필요했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 yml파일에서 &lt;b&gt;spring.data.web.pageable.size-parameter&amp;nbsp;&lt;/b&gt;값으로 설정해주면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 블로그를 많이 찾아봤지만 실제로는 되지 않았고 엉뚱한곳만 보다가 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하면 우리가 설정해야 하는 값은 &lt;b&gt;spring.data.rest.limit-parameter&lt;/b&gt; 다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정문제겠지만 &lt;b&gt;spring.data.web.pageable.size-parameter &lt;/b&gt;이 동작하지 않았다면 실제 스프링 빈에 등록되는 애는 HateoasPageableHandlerMethodArgumentResolver 일 확률이 매우 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HateoasPageableHandlerMethodArgumentResolver는 PageableHandlerMethodArgumentResolver의 하위타입이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 PageableHandlerMethodArgumentResolver.setSizeParameterName() 메서드를 단순히 호출하면 안되고RepositoryRestMvcConfiguration 클래스 내부에 있는 pageableResolver() 메서드로 한번 감싸진 HateoasPageableHandlerMethodArgumentResolver를 리턴하도록 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 결론은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;spring.data.web.pageable.size-parameter&amp;nbsp;&lt;/b&gt;가 안된다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;spring.data.rest.limit-parameter&amp;nbsp;&lt;/b&gt;사용하기&lt;/p&gt;</description>
      <category>spring</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/114</guid>
      <comments>https://sup2is.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 21 Jul 2021 12:26:56 +0900</pubDate>
    </item>
    <item>
      <title>[Intellij] intellij breakpoint 지정 후 디버깅시 IDE가 느려질때 해결방법</title>
      <link>https://sup2is.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만쓰 ...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;break 잡고 디버깅모드로 돌리는데 ide가 급격히 느려질때는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신이 코드에 Method Breakpoint를 잡았는지, Line Breakpoint를 잡았는지 확인할 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥 기준으로 Shift + Command + F8 을 누르면 ide에 적용된 모든 breakpoint를 확인할 수 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 Java Method Breakpoints에 브레이크가 걸려있다면 Line Breakpoint로 바꾸면 매우 빨라짐!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://intellij-support.jetbrains.com/hc/en-us/articles/206544799&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://intellij-support.jetbrains.com/hc/en-us/articles/206544799&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1622708871851&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Java: slow performance or hangups when starting debugger and stepping&quot; data-og-description=&quot;Debugger performance can be affected by the following: Method breakpoints will slow down debugger a lot because of the JVM design, they are expensive to evaluate. Remove method breakpoints and co...&quot; data-og-host=&quot;intellij-support.jetbrains.com&quot; data-og-source-url=&quot;https://intellij-support.jetbrains.com/hc/en-us/articles/206544799&quot; data-og-url=&quot;https://intellij-support.jetbrains.com/hc/en-us/articles/206544799-Java-slow-performance-or-hangups-when-starting-debugger-and-stepping&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Pk6An/hyKrGhpzEB/FzKfdZnZyzcbCCraE5ofiK/img.png?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320&quot;&gt;&lt;a href=&quot;https://intellij-support.jetbrains.com/hc/en-us/articles/206544799&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://intellij-support.jetbrains.com/hc/en-us/articles/206544799&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Pk6An/hyKrGhpzEB/FzKfdZnZyzcbCCraE5ofiK/img.png?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Java: slow performance or hangups when starting debugger and stepping&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Debugger performance can be affected by the following: Method breakpoints will slow down debugger a lot because of the JVM design, they are expensive to evaluate. Remove method breakpoints and co...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;intellij-support.jetbrains.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>etc</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/113</guid>
      <comments>https://sup2is.tistory.com/113#entry113comment</comments>
      <pubDate>Thu, 3 Jun 2021 17:31:07 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] max file descriptors [4096] for elasticsearch process is too low 오류 해결</title>
      <link>https://sup2is.tistory.com/112</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;비슷한 내용으로 검색하면 많은 글들에서&amp;nbsp;&lt;b&gt;&lt;span&gt;/etc/security/limits.conf&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt; 를 수정하라는 글들이 있었는데&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;※급하게 테스트가 필요할 경우!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ES 7.x 버전에서 아래와 같이 해결했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;elasticsearch.yml에 아래내용 참고해서 추가&lt;/p&gt;
&lt;pre id=&quot;code_1613640302956&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;network.host: 0.0.0.0
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;transport.host, transport.tcp.port&lt;/b&gt;를 추가해서 다시 재기동하니까 잘 됐다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/46771233/max-file-descriptors-for-elasticsearch-process-is-too-low&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;stackoverflow.com/questions/46771233/max-file-descriptors-for-elasticsearch-process-is-too-low&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1613640110034&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;max file descriptors for elasticsearch process is too low&quot; data-og-description=&quot;Cannot resolve these problems: [2017-10-16T13:54:23,381][WARN ][o.e.b.BootstrapChecks ] [node-1] max file descriptors [65000] for elasticsearch process is too low, increase to at least [65536] [&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/46771233/max-file-descriptors-for-elasticsearch-process-is-too-low&quot; data-og-url=&quot;https://stackoverflow.com/questions/46771233/max-file-descriptors-for-elasticsearch-process-is-too-low&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1byFy/hyJjN96EBy/8AuNgdE7ty1imrs8xRVRLk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/46771233/max-file-descriptors-for-elasticsearch-process-is-too-low&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/46771233/max-file-descriptors-for-elasticsearch-process-is-too-low&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1byFy/hyJjN96EBy/8AuNgdE7ty1imrs8xRVRLk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;max file descriptors for elasticsearch process is too low&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Cannot resolve these problems: [2017-10-16T13:54:23,381][WARN ][o.e.b.BootstrapChecks ] [node-1] max file descriptors [65000] for elasticsearch process is too low, increase to at least [65536] [&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>etc</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/112</guid>
      <comments>https://sup2is.tistory.com/112#entry112comment</comments>
      <pubDate>Thu, 18 Feb 2021 18:25:47 +0900</pubDate>
    </item>
    <item>
      <title>[h2] h2 db에서 제약조건 제거하고 테이블 초기화 &amp;amp; 삭제하기</title>
      <link>https://sup2is.tistory.com/111</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;jpa, spring batch meta table들을 활용할때&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;h2 db를 임의로 초기화하고싶을때가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;근데 truncate할때 fk 등등의 제약조건 걸려서 못할때 &lt;span style=&quot;color: #333333;&quot;&gt;(개빡침)&lt;/span&gt; 하는 방법&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1606203110004&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SET REFERENTIAL_INTEGRITY FALSE --제약조건 무효화

SHOW TABLES

TRUNCATE TABLE {TABLE_NAME}

SET REFERENTIAL_INTEGRITY TRUE --제약조건 재설정&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/27045568/h2-how-to-truncate-all-tables&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;stackoverflow.com/questions/27045568/h2-how-to-truncate-all-tables&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1606203040565&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;H2 - How to truncate all tables?&quot; data-og-description=&quot;I assume there is a way of doing this from code, at least some good workaround. Please consider that I do not want to delete all tables (I've seen this command), just to delete rows from them but to&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/27045568/h2-how-to-truncate-all-tables&quot; data-og-url=&quot;https://stackoverflow.com/questions/27045568/h2-how-to-truncate-all-tables&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2l3Nu/hyIkyAoBIa/nHegEGeqfTQKvaEoxhE46K/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/27045568/h2-how-to-truncate-all-tables&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/27045568/h2-how-to-truncate-all-tables&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2l3Nu/hyIkyAoBIa/nHegEGeqfTQKvaEoxhE46K/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;H2 - How to truncate all tables?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;I assume there is a way of doing this from code, at least some good workaround. Please consider that I do not want to delete all tables (I've seen this command), just to delete rows from them but to&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>etc</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/111</guid>
      <comments>https://sup2is.tistory.com/111#entry111comment</comments>
      <pubDate>Tue, 24 Nov 2020 16:32:17 +0900</pubDate>
    </item>
    <item>
      <title>[QueryDsl] querydsl jpa 사용시 UnsupportedOperationException 해결</title>
      <link>https://sup2is.tistory.com/110</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그냥 뭔가 조금 이상했는데 이유는 잘 모르겠다 ..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;querydsl 4.1.4&lt;/b&gt;버전을 사용중이였는데 쿼리가 나가는 부분에 &lt;b&gt;UnsupportedOperationException&amp;nbsp;&lt;/b&gt;에러가 발생했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추적을 좀 해보고싶었는데 구글링해도 도움이 될만한 내용은 찾지 못했다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;일단 querydsl 버전을 4.1.4 -&amp;gt; 4.4.0(20201026 최신버전)&amp;nbsp; 으로 바꾸니까 정상 동작했다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간단하게 디버깅해봤을때&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;com.querydsl.jpa.JPQLSerializer 내부에 아래와 같은 함수가 있는데&lt;/p&gt;
&lt;pre id=&quot;code_1603697450067&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void visitConstant(Object constant) {
        boolean wrap;
        if (this.inCaseOperation &amp;amp;&amp;amp; this.templates.isCaseWithLiterals()) {
            if (constant instanceof Collection) {
                this.append(&quot;(&quot;);
                wrap = true;

                for(Iterator var5 = ((Collection)constant).iterator(); var5.hasNext(); wrap = false) {
                    Object o = var5.next();
                    if (!wrap) {
                        this.append(&quot;, &quot;);
                    }

                    this.visitLiteral(o);
                }

                this.append(&quot;)&quot;);
            } else {
                this.visitLiteral(constant);
            }
        } else {
            wrap = this.templates.wrapConstant(constant);
            if (wrap) {
                this.append(&quot;(&quot;);
            }

            this.append(&quot;?&quot;);
            if (!this.getConstantToLabel().containsKey(constant)) {
                String constLabel = String.valueOf(this.getConstantToLabel().size() + 1);
                this.getConstantToLabel().put(constant, constLabel); // &amp;lt;-- 요기
                this.append(constLabel);
            } else {
                this.append((String)this.getConstantToLabel().get(constant));
            }

            if (wrap) {
                this.append(&quot;)&quot;);
            }
        }

    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;아래부분에 &lt;b&gt;this.getConstantToLabel().put(constant, constLabel);&amp;nbsp;&lt;/b&gt;로 put을 사용하는데 여기서 사용하는 &lt;b&gt;getConstantToLabel()&lt;/b&gt;이 리턴하는 자료구조가 &lt;b&gt;UnmodifiableMap&lt;/b&gt;이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고로 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;UnmodifiableMap&lt;/b&gt;은 put을 구현하지 않았기 때문에 호출시 &lt;b&gt;UnsupportedOperationException&amp;nbsp;&lt;/b&gt;을리턴하는게당연하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;버전을 4.4.0으로 올려서 확인해보면 같은 부분이라도 조금 다른걸 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1603697769004&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;            this.append(&quot;?&quot;);
            if (!this.getConstantToAllLabels().containsKey(constant)) {
                Integer constLabel = this.getConstantToNumberedLabel().size() + 1;
                this.getConstantToNumberedLabel().put(constant, constLabel);
                this.append(constLabel.toString());
            } else {
                this.append((String)this.getConstantToAllLabels().get(constant));
            }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;getConstantToLabel() -&amp;gt;&lt;/b&gt;&amp;nbsp;&lt;b&gt;getConstantToNumberedLabel()&amp;nbsp;&lt;/b&gt;으로 변경된 것을 확인할 수 있는데 실제로 &lt;b&gt;getConstantToNumberedLabel()&amp;nbsp;&lt;/b&gt;가 리턴하는 자료구조는 &lt;b&gt;HashMap&lt;/b&gt;이다. 고로 정상동작한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;내가 api를 제대로 안본것도 있겠지만 왜 4.1.4 에서는 &lt;b&gt;UnmodifiableMap&lt;/b&gt;을 리턴하게 해놨을지 ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-결론&lt;/p&gt;
&lt;p&gt;&lt;b&gt;버전 올리면 된다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>etc</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/110</guid>
      <comments>https://sup2is.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 26 Oct 2020 16:37:43 +0900</pubDate>
    </item>
    <item>
      <title>[h2] h2 database multi connection 옵션주기</title>
      <link>https://sup2is.tistory.com/108</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;별도로 h2 서버를 띄우지 않고&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;멀티 커넥션을 구성할 수 있는 방법이다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1599003819271&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  datasource:
    url: &quot;jdbc:h2:~/e-commerce-dev;AUTO_SERVER=TRUE&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음과 같이 &lt;b&gt;AUTO_SERVER=TRUE &lt;/b&gt;옵션을 붙여주면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/12401991/h2-database-multiple-connections&quot;&gt;https://stackoverflow.com/questions/12401991/h2-database-multiple-connections&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1599003778151&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;H2 Database multiple connections&quot; data-og-description=&quot;I have the following issue: Two instances of an application on two different systems should share a small database. The main problem is that both systems can only exchange data through a network-fo...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/12401991/h2-database-multiple-connections&quot; data-og-url=&quot;https://stackoverflow.com/questions/12401991/h2-database-multiple-connections&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ls5jG/hyHmQghGJ4/K5aj8QRZxYaDoJkg33LIJ0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/12401991/h2-database-multiple-connections&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/12401991/h2-database-multiple-connections&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ls5jG/hyHmQghGJ4/K5aj8QRZxYaDoJkg33LIJ0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;H2 Database multiple connections&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;I have the following issue: Two instances of an application on two different systems should share a small database. The main problem is that both systems can only exchange data through a network-fo...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>etc</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/108</guid>
      <comments>https://sup2is.tistory.com/108#entry108comment</comments>
      <pubDate>Wed, 2 Sep 2020 08:44:21 +0900</pubDate>
    </item>
    <item>
      <title>[jpa + junit] 슬라이스 테스트 도중 JPA metamodel must not be empty! 해결</title>
      <link>https://sup2is.tistory.com/107</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Spring + jpa 환경에서 @WebMvcTest 등등의 슬라이스 테스트 도중&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;JPA metamodel must not be empty!&amp;nbsp;&lt;/b&gt;라는 에러메세지를 만나게 될 경우 해결 방법이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아마 다음과 같이 bootstrapping 클래스인 ***Application의 모습이 다음과 같을 것이다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598937443687&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package me.sup2is.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class OrderServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;슬라이스 테스트던 어떤 테스트던 가장 기본이 되는 &lt;span style=&quot;color: #333333;&quot;&gt;bootstrapping&lt;span&gt; 클래스는 항상 로딩이된다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;이때 @EnableJpaAuditing 이 붙은 bootstrapping 클래스가 스프링 부트에 의해 로딩되는데 &lt;span style=&quot;color: #333333;&quot;&gt;@WebMvcTest같은 테스트 전용 애너테이션은 JPA 관련 빈들을 로딩하지 않기 때문에 일어나느 현상이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 다음과 같이 별도의 configuration 클래스를 생성해서 @&lt;span style=&quot;color: #333333;&quot;&gt;EnableJpaAuditing&lt;span&gt; 을 붙여주면 해결된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598937544173&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration {}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60606861/spring-boot-jpa-metamodel-must-not-be-empty-when-trying-to-run-junit-integrat&quot;&gt;https://stackoverflow.com/questions/60606861/spring-boot-jpa-metamodel-must-not-be-empty-when-trying-to-run-junit-integrat&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1598937375412&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Spring Boot JPA metamodel must not be empty! when trying to run JUnit / Integration Tests&quot; data-og-description=&quot;Am using Spring Boot, JUnit 4 &amp;amp; Mockito in a maven based project to tests my Spring Boot Microservice REST API. So, on startup, the DataInserter class loads data from owner.json and cars.json.&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/60606861/spring-boot-jpa-metamodel-must-not-be-empty-when-trying-to-run-junit-integrat&quot; data-og-url=&quot;https://stackoverflow.com/questions/60606861/spring-boot-jpa-metamodel-must-not-be-empty-when-trying-to-run-junit-integrat&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmd5mt/hyHmLr39u5/273Vf6rmKklSXplx5L8LBK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60606861/spring-boot-jpa-metamodel-must-not-be-empty-when-trying-to-run-junit-integrat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/60606861/spring-boot-jpa-metamodel-must-not-be-empty-when-trying-to-run-junit-integrat&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmd5mt/hyHmLr39u5/273Vf6rmKklSXplx5L8LBK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring Boot JPA metamodel must not be empty! when trying to run JUnit / Integration Tests&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Am using Spring Boot, JUnit 4 &amp;amp; Mockito in a maven based project to tests my Spring Boot Microservice REST API. So, on startup, the DataInserter class loads data from owner.json and cars.json.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>spring</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/107</guid>
      <comments>https://sup2is.tistory.com/107#entry107comment</comments>
      <pubDate>Tue, 1 Sep 2020 14:19:35 +0900</pubDate>
    </item>
    <item>
      <title>[junit5] MockMvc 테스트중 NestedServletException 통과시키기</title>
      <link>https://sup2is.tistory.com/106</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;애플리케이션 컨트롤러 코드는 다음과 같을 수 있다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598406307325&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @PostMapping(&quot;/token&quot;)
    public ResponseEntity&amp;lt;JsonResult&amp;lt;AuthenticationResponseDto&amp;gt;&amp;gt; generateJwtToken
            (@RequestBody AuthenticationRequestDto authenticationRequestDto) {
        
        
        //bla bla ...
        
        if(!passwordEncoder.matches(authenticationRequestDto.getPassword(), user.getPassword())) {
            throw new BadCredentialsException(&quot;Password not matched&quot;);
    	 }
         
         //bla bla ...
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 코드에서&amp;nbsp;&lt;b&gt;throw new BadCredentialsException(&quot;Password not matched&quot;);&amp;nbsp;&lt;/b&gt;를 발생시키면 mockmvc 테스트 도중 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NestedServletException&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 발생한다. 때문에 테스트를 실패하는데 junit5에서 다음과 같은 방법으로 &lt;span style=&quot;color: #000000;&quot;&gt;NestedServletException 내부에서 발생한 exception을 검사할 수 있도록 다음과 같은 메서드를 제공한다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598406480013&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;org.assertj.core.api.Assertions.assertThatThrownBy(
	() -&amp;gt; mvc.perform(get(&quot;/api/scope&quot;)).andExpect(status().isOk()))
    .hasCause(new AccessDeniedException(&quot;Access is denied&quot;));&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런식으로 테스트하면 테스트를 통과할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/44900646/how-to-prevent-nestedservletexception-when-testing-spring-endpoints&quot;&gt;https://stackoverflow.com/questions/44900646/how-to-prevent-nestedservletexception-when-testing-spring-endpoints&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1598406226744&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How to prevent NestedServletException when testing Spring endpoints?&quot; data-og-description=&quot;I am trying to test the security configuration of some of my endpoints which are secured with @PreAuthorize(#oauth2.hasScope('scope'). When accessing such an endpoint via Postman with a access toke...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/44900646/how-to-prevent-nestedservletexception-when-testing-spring-endpoints&quot; data-og-url=&quot;https://stackoverflow.com/questions/44900646/how-to-prevent-nestedservletexception-when-testing-spring-endpoints&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cyL7tY/hyHikuzGkg/tAoShyIvKdLKdC1UUs99Ok/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/44900646/how-to-prevent-nestedservletexception-when-testing-spring-endpoints&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/44900646/how-to-prevent-nestedservletexception-when-testing-spring-endpoints&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cyL7tY/hyHikuzGkg/tAoShyIvKdLKdC1UUs99Ok/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;How to prevent NestedServletException when testing Spring endpoints?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;I am trying to test the security configuration of some of my endpoints which are secured with @PreAuthorize(#oauth2.hasScope('scope'). When accessing such an endpoint via Postman with a access toke...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>spring</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/106</guid>
      <comments>https://sup2is.tistory.com/106#entry106comment</comments>
      <pubDate>Wed, 26 Aug 2020 10:48:29 +0900</pubDate>
    </item>
    <item>
      <title>[Spring cloud] Netflix Feign Client Mocking하기</title>
      <link>https://sup2is.tistory.com/105</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Netfilix Feign Client 테스트하는 방법이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;github이슈에도 몇개 등록이 되어있는데 자세하게 읽어보지는 않았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1597975365387&quot; class=&quot;java&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;

@FeignClient(name = &quot;authentication-service&quot;)
public interface AuthServiceClient {

    @PostMapping(&quot;/authenticate&quot;)
    Member getMember(String accessToken);

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1597975341349&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @MockBean
    AuthServiceClient authServiceClient;
    
    
    
    ...
    
    
        @Test
        public void access_auth_user() throws Exception {
        
        
        ...
        
        
        Mockito.when(authServiceClient.getMember(accessToken)).thenReturn(member);

        ...
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일반적으로 Feign Client를 다음과같이 mocking하면 mock객체가아니라 실제 feign 구현체가 들어가서 테스트에 실패한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;feign client를 mocking하는 방법은 아래와 같다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1597975438329&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//primary 옵션을 false로 설정
@FeignClient(name = &quot;authentication-service&quot;, primary = false)
public interface AuthServiceClient {

    @PostMapping(&quot;/authenticate&quot;)
    Member getMember(String accessToken);

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1597975458371&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    
    //test에서 선언시 name속성 추가
    @MockBean(name = &quot;authServiceClient&quot;)
    AuthServiceClient authServiceClient;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런식으로 테스트를 하면 mocking된 객체가 들어간다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/spring-cloud/spring-cloud-openfeign/issues/336&quot;&gt;https://github.com/spring-cloud/spring-cloud-openfeign/issues/336&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1597975424771&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;MockBean behaviour for Feign Clients change since Spring Boot 2.2.7 Release &amp;middot; Issue #336 &amp;middot; spring-cloud/spring-cloud-openfeign&quot; data-og-description=&quot;Bug Versions: Spring Boot: 2.2.7 Spring Cloud: Hoxton.SR4 Before the Spring Boot 2.2.7 release, we used to create a Feign client (no fallback needed) and in certain situations we needed to create a...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/spring-cloud/spring-cloud-openfeign/issues/336&quot; data-og-url=&quot;https://github.com/spring-cloud/spring-cloud-openfeign/issues/336&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Wpa4d/hyHduFg34R/r9XoF98E3SSGwgnKNv5ORk/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://github.com/spring-cloud/spring-cloud-openfeign/issues/336&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/spring-cloud/spring-cloud-openfeign/issues/336&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Wpa4d/hyHduFg34R/r9XoF98E3SSGwgnKNv5ORk/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;MockBean behaviour for Feign Clients change since Spring Boot 2.2.7 Release &amp;middot; Issue #336 &amp;middot; spring-cloud/spring-cloud-openfeign&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Bug Versions: Spring Boot: 2.2.7 Spring Cloud: Hoxton.SR4 Before the Spring Boot 2.2.7 release, we used to create a Feign client (no fallback needed) and in certain situations we needed to create a...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;----추가&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로 슬라이스 테스트할때 Feign Client 객체를 autowired받는 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1599032710894&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RestClientTest(MemberServiceClient.class)
@Import({RibbonAutoConfiguration.class,
        FeignRibbonClientAutoConfiguration.class,
        FeignAutoConfiguration.class})
class MemberServiceClientTest {

    @Autowired
    private MemberServiceClient client;
    
  
    //...tests  
  
  
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-boot/issues/7270&quot;&gt;https://github.com/spring-projects/spring-boot/issues/7270&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>spring</category>
      <author>sup2is</author>
      <guid isPermaLink="true">https://sup2is.tistory.com/105</guid>
      <comments>https://sup2is.tistory.com/105#entry105comment</comments>
      <pubDate>Fri, 21 Aug 2020 11:05:23 +0900</pubDate>
    </item>
  </channel>
</rss>