<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>김사비의 개발 블로그</title>
    <link>https://kimxavi.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 15 Jun 2026 07:35:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>kimxavi</managingEditor>
    <item>
      <title>[spring data elasticsearch] document indexName 에 date pattern 넣기</title>
      <link>https://kimxavi.tistory.com/entry/spring-data-elasticsearch-document-indexName-%EC%97%90-date-pattern-%EB%84%A3%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Document 어노테이션 indexName 에 datePattern 넣는 방법&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결&lt;/h2&gt;
&lt;pre id=&quot;code_1662646016449&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Document(indexName = &quot;test-index-#{@elasticsearchIndexPattern.getToday()}&quot;, createIndex = false)
public class TestLog {
    @Id
    private String id;

    @Field(type= FieldType.Text)
    private String title;

    @Field(type= FieldType.Ip)
    private String ip;

    @Field(type= FieldType.Keyword)
    private String data;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에 @다음 부분에 아래 component 와 함수 호출을 넣어주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1662646087275&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Component
public class ElasticsearchIndexPattern {
    public String getToday() {
        DateFormat dateFormat = new SimpleDateFormat(&quot;yyyyMMdd&quot;);
        Date date = new Date();
        return dateFormat.format(date);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;추가 의문&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;getToday() 함수는 언제언제 호출 될까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; ES operation 이 작동할 때마다 호출이 돼서 날짜가 바로바로 반영이 된다.&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://stackoverflow.com/questions/24333327/rolling-index-dynamic-index-name-in-spring-data-elasticsearch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/24333327/rolling-index-dynamic-index-name-in-spring-data-elasticsearch&lt;/a&gt;&lt;/p&gt;</description>
      <category>elastic search</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/50</guid>
      <comments>https://kimxavi.tistory.com/entry/spring-data-elasticsearch-document-indexName-%EC%97%90-date-pattern-%EB%84%A3%EA%B8%B0#entry50comment</comments>
      <pubDate>Thu, 8 Sep 2022 23:09:43 +0900</pubDate>
    </item>
    <item>
      <title>[java] JVM 옵션 -Xms 와 -Xmx 를 같게 하는 이유</title>
      <link>https://kimxavi.tistory.com/entry/java-JVM-%EC%98%B5%EC%85%98-Xms-%EC%99%80-Xmx-%EB%A5%BC-%EA%B0%99%EA%B2%8C-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka 의 jvm 옵션을 보니 Xms 와 Xmx 가 같게 설정되어 있어서 찾아보게 되었다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답변&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 힙 크기를 늘릴 때 OS 에 추가 메모리를 요청해야 하므로 시간이 걸린다 (GC 가 처리되었던 요청의 응답시간에 추가됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. JVM 은 힙으로 늘린 메모리를 다시 해제하지 않아 결국엔 Xmx 값이 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 힙 크기를 늘리는 작업은 stop-the-world 이벤트여서 이를 방지할 수 있다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Xms 가 작게 시작하는 경우 GC 가 더 많이 발생하게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 일반적으로 다른 앱과 메모리 경쟁을 하지 않는 경우에 이렇게 설정&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://stackoverflow.com/questions/43651167/is-there-any-advantage-in-setting-xms-and-xmx-to-the-same-value&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/43651167/is-there-any-advantage-in-setting-xms-and-xmx-to-the-same-value&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.jboss.org/thread/149559&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.jboss.org/thread/149559&lt;/a&gt;&lt;/p&gt;</description>
      <category>java</category>
      <category>jvm</category>
      <category>jvm heap size</category>
      <category>JVM Option</category>
      <category>same value</category>
      <category>XMS</category>
      <category>Xmx</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/49</guid>
      <comments>https://kimxavi.tistory.com/entry/java-JVM-%EC%98%B5%EC%85%98-Xms-%EC%99%80-Xmx-%EB%A5%BC-%EA%B0%99%EA%B2%8C-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0#entry49comment</comments>
      <pubDate>Thu, 26 May 2022 23:46:26 +0900</pubDate>
    </item>
    <item>
      <title>Using @PageableDefault in webflux</title>
      <link>https://kimxavi.tistory.com/entry/Using-PageableDefault-in-webflux</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WebFlux Controller에 Paging 적용하려고 하니&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@RequiredArgsConstructor
@RestController
public class PlayerController {

    private final MemberRepository memberRepository;

    @GetMapping(&quot;/members&quot;)
    public List&amp;lt;Member&amp;gt; requestMembers(@PageableDefault(size = 10) Pageable pageable) {
        return memberRepository.findAll(pageable);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래와 같이 에러 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;No primary or default constructor found for interface org.springframework.data.domain.Pageable&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WebfluxConfig 추가 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@Configuration
@ConditionalOnClass(EnableWebFlux.class)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
public class WebfluxConfig implements WebFluxConfigurer {
    @Override
    public void configureArgumentResolvers(ArgumentResolverConfigurer configurer) {
        configurer.addCustomResolver(new ReactivePageableHandlerMethodArgumentResolver());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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://stackoverflow.com/questions/50730446/resolving-pageable-in-webflux&quot;&gt;https://stackoverflow.com/questions/50730446/resolving-pageable-in-webflux&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>java</category>
      <category>PageableDefault</category>
      <category>webflux</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/48</guid>
      <comments>https://kimxavi.tistory.com/entry/Using-PageableDefault-in-webflux#entry48comment</comments>
      <pubDate>Wed, 20 Apr 2022 22:24:54 +0900</pubDate>
    </item>
    <item>
      <title>[react] HOC Functional Component</title>
      <link>https://kimxavi.tistory.com/entry/react-HOC-Functional-Component</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;상황&lt;/h3&gt;
&lt;p&gt;React Functional Component로 HOC 를 만들어보자&lt;/p&gt;
&lt;p&gt;(CUSTOM hooks를 사용하는 방법도 있음)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결&lt;/h3&gt;
&lt;pre id=&quot;code_1601115612474&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const withSomething = WrappedComponent =&amp;gt; {

    // 대문자로 시작 안하면, Lint 에서 에러 발생 (compile error)
    const Hoc = (props) =&amp;gt; {
        useEffect(() =&amp;gt; {
           // something
        }, []);

        return &amp;lt;WrappedComponent {...props}/&amp;gt;
    };

    return Hoc;
};

export default withSomething;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>react</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/46</guid>
      <comments>https://kimxavi.tistory.com/entry/react-HOC-Functional-Component#entry46comment</comments>
      <pubDate>Sat, 26 Sep 2020 19:20:15 +0900</pubDate>
    </item>
    <item>
      <title>[kafka] auto.create.topics.enable</title>
      <link>https://kimxavi.tistory.com/entry/kafka-autocreatetopicsenable</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;상황&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽을 생성한 적이 없는데, produce 하는 것만으로 토픽이 자동 생성됐다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인해보니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;auto.create.topics.enable = true 가 기본값&lt;/span&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;span&gt;&lt;a href=&quot;https://kafka.apache.org/documentation/#auto.create.topics.enable&quot;&gt;https://kafka.apache.org/documentation/#auto.create.topics.enable&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>kafka</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/45</guid>
      <comments>https://kimxavi.tistory.com/entry/kafka-autocreatetopicsenable#entry45comment</comments>
      <pubDate>Wed, 26 Aug 2020 12:46:30 +0900</pubDate>
    </item>
    <item>
      <title>[spring boot] jooq query logging / show sql</title>
      <link>https://kimxavi.tistory.com/entry/spring-boot-jooq-sql-logging</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p&gt;jOOQ 에서 실행되는 SQL 을 show, print, logging 해보자&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Listener 생성&lt;/h3&gt;
&lt;pre id=&quot;code_1596619724262&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class LoggingExecuteListener extends DefaultExecuteListener {

	@Override
	public void executeStart(ExecuteContext ctx) {
		// Create a new DSLContext for logging rendering purposes
		// This DSLContext doesn't need a connection, only the SQLDialect...
		DSLContext create = DSL.using(ctx.dialect(),
				// ... and the flag for pretty-printing
				new Settings().withRenderFormatted(true));
		// If we're executing a query
		if (ctx.query() != null) {
			System.out.println(create.renderInlined(ctx.query()));
		} else if (ctx.routine() != null) {
			// If we're executing a routine
			System.out.println(create.renderInlined(ctx.routine()));
		} else if (ctx.batchQueries() != null) {
			// If we're executing a batch queries
			Arrays.stream(ctx.batchQueries()).forEach(query -&amp;gt; System.out.println(create.renderInlined(query)));
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. ListenerProvider Bean 생성&lt;/h3&gt;
&lt;pre id=&quot;code_1596619793434&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Bean
public ExecuteListenerProvider executeListenerProvider() {
    return new DefaultExecuteListenerProvider(new LoggingExecuteListener());
}&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;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.jooq.org/doc/3.13/manual/sql-execution/execute-listeners&quot;&gt;https://www.jooq.org/doc/3.13/manual/sql-execution/execute-listeners&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.jooq.org/doc/latest/manual/sql-building/queryparts/pretty-printing/&quot;&gt;https://www.jooq.org/doc/latest/manual/sql-building/queryparts/pretty-printing/&lt;/a&gt;&lt;/p&gt;</description>
      <category>java</category>
      <category>jooq</category>
      <category>logging</category>
      <category>Query</category>
      <category>show sql</category>
      <category>spring</category>
      <category>spring boot</category>
      <category>SQL</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/44</guid>
      <comments>https://kimxavi.tistory.com/entry/spring-boot-jooq-sql-logging#entry44comment</comments>
      <pubDate>Wed, 5 Aug 2020 18:35:03 +0900</pubDate>
    </item>
    <item>
      <title>[java] jar 압축 해제</title>
      <link>https://kimxavi.tistory.com/entry/java-jar-%EC%95%95%EC%B6%95-%ED%95%B4%EC%A0%9C</link>
      <description>&lt;pre id=&quot;code_1596421535740&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jar xf JAR_FILE_NAME.jar&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;출처&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/javase/tutorial/deployment/jar/unpack.html&quot;&gt;https://docs.oracle.com/javase/tutorial/deployment/jar/unpack.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>java</category>
      <category>Extract</category>
      <category>jar</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/43</guid>
      <comments>https://kimxavi.tistory.com/entry/java-jar-%EC%95%95%EC%B6%95-%ED%95%B4%EC%A0%9C#entry43comment</comments>
      <pubDate>Mon, 3 Aug 2020 11:25:48 +0900</pubDate>
    </item>
    <item>
      <title>[mysql] Select column if string is empty</title>
      <link>https://kimxavi.tistory.com/entry/mysql-Select-column-if-string-is-empty</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p&gt;WHERE 절이 아닌 가져오는 칼럼이 NULL 이나 빈 값이면 다른 칼럼 가져오기&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결&lt;/h2&gt;
&lt;pre id=&quot;code_1596093515299&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT IF(col1 IS NULL or col1 = '', col2, col1) as col FROM TABLE

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1596093591395&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT IF(CONDITION, IF_TRUE_VALUE, IF_FALSE_VALUE) FROM TABLE&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출처&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8470813/how-do-i-check-if-a-column-is-empty-or-null-in-mysql&quot;&gt;https://stackoverflow.com/questions/8470813/how-do-i-check-if-a-column-is-empty-or-null-in-mysql&lt;/a&gt;&lt;/p&gt;</description>
      <category>database</category>
      <category>empty</category>
      <category>If</category>
      <category>mysql</category>
      <category>string</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/42</guid>
      <comments>https://kimxavi.tistory.com/entry/mysql-Select-column-if-string-is-empty#entry42comment</comments>
      <pubDate>Thu, 30 Jul 2020 16:20:30 +0900</pubDate>
    </item>
    <item>
      <title>[thymeleaf] 조건으로 style 넣기</title>
      <link>https://kimxavi.tistory.com/entry/thymeleaf-if-%EC%A1%B0%EA%B1%B4%EC%9C%BC%EB%A1%9C-style-%EB%84%A3%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p&gt;반복문으로 나온 Element 를 이용해서 if 조건으로 style을 넣기&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결&lt;/h2&gt;
&lt;pre id=&quot;code_1596079446989&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &amp;lt;tr th:each=&quot;element: ${Elements}&quot; th:inline=&quot;text&quot; th:style=&quot;${element.name == 'kimxavi' ? 'font-weight: bold;' : ''}&quot;&amp;gt;
 &amp;lt;tr/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HTML CSS</category>
      <category>CSS</category>
      <category>Style</category>
      <category>Thymeleaf</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/41</guid>
      <comments>https://kimxavi.tistory.com/entry/thymeleaf-if-%EC%A1%B0%EA%B1%B4%EC%9C%BC%EB%A1%9C-style-%EB%84%A3%EA%B8%B0#entry41comment</comments>
      <pubDate>Thu, 30 Jul 2020 12:24:35 +0900</pubDate>
    </item>
    <item>
      <title>[mysql] 특정 문자열 제외</title>
      <link>https://kimxavi.tistory.com/entry/mysql-%ED%8A%B9%EC%A0%95-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%A0%9C%EC%99%B8</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p&gt;특정 문자열이 들어가지 않은 데이터 조회하고 싶다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결&lt;/h2&gt;
&lt;pre id=&quot;code_1595839819396&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM TABLE WHERE FIELD_NAME NOT LIKE '%STRING%';&lt;/code&gt;&lt;/pre&gt;</description>
      <category>database</category>
      <author>kimxavi</author>
      <guid isPermaLink="true">https://kimxavi.tistory.com/40</guid>
      <comments>https://kimxavi.tistory.com/entry/mysql-%ED%8A%B9%EC%A0%95-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%A0%9C%EC%99%B8#entry40comment</comments>
      <pubDate>Mon, 27 Jul 2020 17:50:22 +0900</pubDate>
    </item>
  </channel>
</rss>