<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>백엔드 개발자 공부 블로그</title>
    <link>https://back.tistory.com/</link>
    <description>소프트웨어에 종사하는 백엔드 개발자</description>
    <language>ko</language>
    <pubDate>Thu, 20 Aug 2026 12:04:48 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>소프트웨어종사자</managingEditor>
    <image>
      <title>백엔드 개발자 공부 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/4677676/attach/6437dc650bf4474ba40dc60228e58975</url>
      <link>https://back.tistory.com</link>
    </image>
    <item>
      <title>[Selenium] %1 은 올바른 win32 응용 프로그램이 아닙니다. 해결 방법.</title>
      <link>https://back.tistory.com/149</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;에러&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Selenium 사용하여 ChromeDriver Auto install 할 때 발생하는 에러&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;%1 은 올바른 win32 응용 프로그램이 아닙니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;C\{User}\.wdm\drivers.json 을 연다 ({User} 부분은 각 사용자 경로)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;마지막 부분을 변경한다 (THIRD_PARTY_NOTICES 부분)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;변경 전&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1725203962127&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;win64_chromedriver_128.0.6613.86_for_128.0.6613&quot;: {
        &quot;timestamp&quot;: &quot;01/09/2024&quot;,
        &quot;binary_path&quot;: &quot;C:\\Users\\sysadm\\.wdm\\drivers\\chromedriver\\win64\\128.0.6613.86\\chromedriver-win32/THIRD_PARTY_NOTICES.chromedriver&quot;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 변경 후&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725202677087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;win64_chromedriver_128.0.6613.86_for_128.0.6613&quot;: {
        &quot;timestamp&quot;: &quot;01/09/2024&quot;,
        &quot;binary_path&quot;: &quot;C:\\Users\\sysadm\\.wdm\\drivers\\chromedriver\\win64\\128.0.6613.86\\chromedriver-win32/chromedriver.exe&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;원래 없었던 에러인데 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;chrome 127 버전부터 발생하는 것 같다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;구글은 빨리 해결하라!!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Python</category>
      <category>%1 is not a valid win32</category>
      <category>%1 은 올바른 win32 응용 프로그램이 아닙니다.</category>
      <category>chrome driver 에러</category>
      <category>chromedriver third_party_notices</category>
      <category>python selenium win32 is not a valid application</category>
      <category>selenium 드라이버 에러</category>
      <category>selenium 올바른 win32 응용 프로그램이 아닙니다.</category>
      <category>win32 is not a valid application</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/149</guid>
      <comments>https://back.tistory.com/149#entry149comment</comments>
      <pubDate>Mon, 2 Sep 2024 00:08:54 +0900</pubDate>
    </item>
    <item>
      <title>[Springboot] SLF4j logback 로그 파일명 동적으로 변경하기</title>
      <link>https://back.tistory.com/148</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스프링부트에서 로그 파일명을 동적으로 남기고 싶을 때 사용하는 방법&lt;/span&gt;&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex. 사용자 이름별로 로그를 남기고 싶을 때.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;홍길동.log&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이순신.log&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;심청이.log&amp;nbsp;&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자바 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1714917200663&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Slf4j
public class LogShiftTestApplication implements CommandLineRunner {

    private final Logger logger = LoggerFactory.getLogger(LogShiftTestApplication.class);
    
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(LogShiftTestApplication.class);
        application.run(args);
    }
    
    public void run(String... args) throws Exception {
        String[] students = {&quot;홍길동&quot;, &quot;이순신&quot;, &quot;심청이&quot;};
        
        for(String student : students){
    		MDC.put(&quot;STUDENT_NAME&quot;, student);
        	logger.info(&quot;START PROCESS : [&quot; + student + &quot;]&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;logback.xml 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1714917404913&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;configuration scan=&quot;true&quot; scanPeriod=&quot;60 seconds&quot;&amp;gt;
	&amp;lt;property name=&quot;LOGS_PATH&quot; value=&quot;./logs&quot; /&amp;gt;
	&amp;lt;appender name=&quot;STDOUT&quot; class=&quot;ch.qos.logback.core.ConsoleAppender&quot;&amp;gt;
		&amp;lt;withJansi&amp;gt;true&amp;lt;/withJansi&amp;gt;
		&amp;lt;encoder&amp;gt;
			&amp;lt;pattern&amp;gt;[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %green(%-5level) %logger{35} %cyan(%logger{15}) - %msg %n&amp;lt;/pattern&amp;gt;
		&amp;lt;/encoder&amp;gt;
	&amp;lt;/appender&amp;gt;
	&amp;lt;appender name=&quot;SIFT&quot; class=&quot;ch.qos.logback.classic.sift.SiftingAppender&quot;&amp;gt; 
		&amp;lt;discriminator&amp;gt;
			&amp;lt;key&amp;gt;STUDENT_NAME&amp;lt;/key&amp;gt;
			&amp;lt;defaultValue&amp;gt;unknown&amp;lt;/defaultValue&amp;gt;
		&amp;lt;/discriminator&amp;gt;
		&amp;lt;sift&amp;gt;
			&amp;lt;appender name=&quot;DAILY_ROLLING_FILE_APPENDER&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&amp;gt;
				&amp;lt;file&amp;gt;${LOGS_PATH}/${STUDENT_NAME}.log&amp;lt;/file&amp;gt;
				&amp;lt;encoder&amp;gt;
					&amp;lt;pattern&amp;gt;[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level%logger{35} - %msg%n&amp;lt;/pattern&amp;gt;
				&amp;lt;/encoder&amp;gt;
			&amp;lt;/appender&amp;gt;
		&amp;lt;/sift&amp;gt;
	&amp;lt;/appender&amp;gt;

	&amp;lt;root level=&quot;INFO&quot;&amp;gt;
		&amp;lt;appender-ref ref=&quot;SIFT&quot; /&amp;gt;
	&amp;lt;/root&amp;gt;
&amp;lt;/configuration&amp;gt;&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 자바 코드에서 MDC를 사용하여 변수를 put 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. SiftingAppender 를 사용하여 기존 사용하던 log appender 를 감싸준다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. discriminator에 MDC에 담은 변수를 설정한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 파일명을 ${STUDENT_NAME}.log 로 설정한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 제일 아래 level 설정에 SIFT appender 를 추가한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring</category>
      <category>how to change logback log level dynamically</category>
      <category>logback 변수 사용</category>
      <category>mdc logback</category>
      <category>siftingappender</category>
      <category>slf4j 파일명 동적으로</category>
      <category>spring boot change logback file name</category>
      <category>spring boot logback variables</category>
      <category>스레드별 로그 파일 생성</category>
      <category>스프링부트 log 파일명 유동적으로</category>
      <category>스프링부트 동적 로그 파일명 생성</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/148</guid>
      <comments>https://back.tistory.com/148#entry148comment</comments>
      <pubDate>Sun, 5 May 2024 23:02:33 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] Multi DataSource 설정 시  invalid bound statement (not found)  에러</title>
      <link>https://back.tistory.com/147</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이슈&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DatabaseConfig-A&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;-&amp;gt; @Primary 설정&lt;/b&gt;&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 style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DatabaseConfig-B&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;-&amp;gt; @Primary 설정 없음&lt;/b&gt;&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 style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DatabaseConfig-B 에 설정한 Mapper에서 에러 발생&lt;a id=&quot;cb_post_title_url&quot; style=&quot;color: #000000;&quot; href=&quot;https://www.cnblogs.com/aaacarrot/p/17007647.html&quot;&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706566117780&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Invalid bound statement (not found): com.xxx.mapper.xxxMapper.select&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;원인&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;@MapperScan의 basePackages 가 중복됐던 것.&lt;/b&gt;&lt;/span&gt;&lt;/p&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;해결&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DatabaseConfig-A 설정 변경&lt;/b&gt;&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 style=&quot;color: #000000;&quot;&gt;&lt;b&gt;변경 전&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;@MapperScan(basePackages=&quot;com.my.mapper.*&quot;&lt;/b&gt;&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 style=&quot;color: #000000;&quot;&gt;&lt;b&gt;변경 후&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;@MapperScan(basePackages=&quot;com.my.mapper.aaa&quot;&lt;/b&gt;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;각 DB별 MapperScan의 basePackages 를 구체적으로 설정해주니 해결되었다.&lt;/b&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이 분은 다른 방법으로 해결하셨으니 참고하시게.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://okky.kr/questions/867676&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://okky.kr/questions/867676&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706566167563&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;OKKY - mybatis 다중 DB 연결시 에러 Invalid bound statement (not found)&quot; data-og-description=&quot;안녕하세요?스프링부트 + 마이 바티스로 웹서버를 만들려고 합니다.마이바티스 다중 DB 연결시 에러가 발생하여 여러 검색을 통해 봤지만좀처럼 맞는 답변이 없어서 이렇게 조언을 좀 구하게 되&quot; data-og-host=&quot;okky.kr&quot; data-og-source-url=&quot;https://okky.kr/questions/867676&quot; data-og-url=&quot;https://okky.kr/questions/867676&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://okky.kr/questions/867676&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://okky.kr/questions/867676&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;OKKY - mybatis 다중 DB 연결시 에러 Invalid bound statement (not found)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요?스프링부트 + 마이 바티스로 웹서버를 만들려고 합니다.마이바티스 다중 DB 연결시 에러가 발생하여 여러 검색을 통해 봤지만좀처럼 맞는 답변이 없어서 이렇게 조언을 좀 구하게 되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;okky.kr&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이분은 오타이셨다네.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.cnblogs.com/aaacarrot/p/17007647.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.cnblogs.com/aaacarrot/p/17007647.html&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706566185239&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;【mybatis】 Invalid bound statement (not found): com.xxx.mapper.xxxMapper.selectByxx - aaacarrot - 博客园&quot; data-og-description=&quot;背景： 业务功能开发，新增一些查询功能，对应地创建了一个 mapper 接口类，一个 mapper.xml 文件。 这个mapper 的命名是： Rolemapper.xml （盯着它） 什么namespace， 方法名都没有名， 但是在执行方法&quot; data-og-host=&quot;www.cnblogs.com&quot; data-og-source-url=&quot;https://www.cnblogs.com/aaacarrot/p/17007647.html&quot; data-og-url=&quot;https://www.cnblogs.com/aaacarrot/p/17007647.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.cnblogs.com/aaacarrot/p/17007647.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.cnblogs.com/aaacarrot/p/17007647.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;【mybatis】 Invalid bound statement (not found): com.xxx.mapper.xxxMapper.selectByxx - aaacarrot - 博客园&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;背景： 业务功能开发，新增一些查询功能，对应地创建了一个 mapper 接口类，一个 mapper.xml 文件。 这个mapper 的命名是： Rolemapper.xml （盯着它） 什么namespace， 方法名都没有名， 但是在执行方法&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.cnblogs.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;</description>
      <category>Spring</category>
      <category>invalid bound statement mapper</category>
      <category>multi datasource</category>
      <category>Multi DataSource 설정 시 invalid bound statement (not found) 에러</category>
      <category>다중 DataSource</category>
      <category>다중 DataSource 설정 시 invalid bound statement (not found) 에러</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/147</guid>
      <comments>https://back.tistory.com/147#entry147comment</comments>
      <pubDate>Tue, 30 Jan 2024 07:10:18 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] postgresql array column 매핑</title>
      <link>https://back.tistory.com/146</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;하고 싶은 것&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;postgresql 에 로또 번호가 담긴 int[] 컬럼이 존재한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(int array column)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이걸 JPA 에 매핑하여 조회하고 싶다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. hibernate 버전을 확인한다. (아래 소스는 5버전 방법이다. 6버전은 찾아보시오.)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705803812215&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public static void main(String[] args) {
        try {
            String hibernateVersion = org.hibernate.annotations.common.Version.getVersionString();
            System.out.println(&quot;Hibernate Version: &quot;+ hibernateVersion);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Hibernate Version: 5.1.2.Final 로 확인되었다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(gradle 에 &lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;hibernate-core:5.6.0.Final&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; 으로 추가했으나 버전이 바뀌지는 않는다. 아무튼 상관 없다.)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 라이브러리 추가&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705804223824&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'io.hypersistence:hypersistence-utils-hibernate-52:3.7.0'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; &lt;a style=&quot;background-color: #f6f8fa; color: #000000; text-align: start;&quot; href=&quot;https://github.com/vladmihalcea&quot; data-octo-dimensions=&quot;link_type:self&quot; data-octo-click=&quot;hovercard-link-click&quot; data-hovercard-url=&quot;/users/vladmihalcea/hovercard&quot; data-hovercard-type=&quot;user&quot;&gt;vladmihalcea&lt;/a&gt; 라는 사람이 만든 라이브러리 (존경)  &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://github.com/vladmihalcea/hypersistence-utils&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/vladmihalcea/hypersistence-utils&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705804346651&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;GitHub - vladmihalcea/hypersistence-utils: The Hypersistence Utils library (previously known as Hibernate Types) gives you Sprin&quot; data-og-description=&quot;The Hypersistence Utils library (previously known as Hibernate Types) gives you Spring and Hibernate utilities that can help you get the most out of your data access layer. - GitHub - vladmihalcea/...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/vladmihalcea/hypersistence-utils&quot; data-og-url=&quot;https://github.com/vladmihalcea/hypersistence-utils&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bh6U3x/hyU8T4VTx9/wDGDHfCdWCKHILfADvfOFK/img.png?width=1200&amp;amp;height=600&amp;amp;face=1001_127_1089_222&quot;&gt;&lt;a href=&quot;https://github.com/vladmihalcea/hypersistence-utils&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/vladmihalcea/hypersistence-utils&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bh6U3x/hyU8T4VTx9/wDGDHfCdWCKHILfADvfOFK/img.png?width=1200&amp;amp;height=600&amp;amp;face=1001_127_1089_222');&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;GitHub - vladmihalcea/hypersistence-utils: The Hypersistence Utils library (previously known as Hibernate Types) gives you Sprin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Hypersistence Utils library (previously known as Hibernate Types) gives you Spring and Hibernate utilities that can help you get the most out of your data access layer. - GitHub - vladmihalcea/...&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Readme 를 읽어보면 hibernate 버전에 맞는 libaray 버전을 알려준다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. Entity 에 @TypeDef, @Type 을 추가한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(아래 방식은 5버전이므로 deprecated 표시가 된다. 6버전은 참고 사이트에 있다.)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705804011601&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

import io.hypersistence.utils.hibernate.type.array.ListArrayType;

@Entity
@Table(schema = &quot;money&quot;, name = &quot;lotto&quot;)
@TypeDef(name = &quot;list-array&quot;, typeClass = ListArrayType.class)
public class Lotto {
    @Type(type = &quot;list-array&quot;)
    @Column(name = &quot;number_list&quot;, columnDefinition = &quot;integer[]&quot;)
    private List&amp;lt;Integer&amp;gt; numberList;
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4. 끝.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;참고 : &lt;a style=&quot;color: #000000;&quot; href=&quot;https://vladmihalcea.com/postgresql-array-java-list/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://vladmihalcea.com/postgresql-array-java-list/&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;주의 : 반드시 hibernate 버전을 먼저 확인하고 진행하자. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;※시간 걸린 이유 (반성)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. numberList type을 Integer[] 이걸로 받으려고 하다보니 아래와 같은 에러가 났다...&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Caused&amp;nbsp;by:&amp;nbsp;org.hibernate.MappingException:&amp;nbsp;Could&amp;nbsp;not&amp;nbsp;instantiate&amp;nbsp;Type:&amp;nbsp;io.hypersistence.utils.hibernate.type.array.ListArrayType &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;java.lang.UnsupportedOperationException: The property number_list in ~ entity&amp;nbsp;is&amp;nbsp;not&amp;nbsp;parameterized&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;난 그저 라이브러리 문제라고 생각하여 계속 버전 맞추는 작업만 했었다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;결국 List&amp;lt;Integer&amp;gt; 로 받으니까 바로 해결되더라. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;괜히 매뉴얼 대로 따라하지 않아서 시간만 날렸다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. java.lang.NoClassDefFoundError: org/hibernate/query/BindableType &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;@Type 어노테이션에서 계속 에러 발생했다. 처음에 나의 Hibernate 버전이 5버전인지도 모르고 계속 6버전으로 시도했던 것...&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span&gt;&lt;b&gt;안 될 때는 멋대로 바꾸지 말고 매뉴얼 그대로 따라해보자..&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA/JPA</category>
      <category>JPA array column</category>
      <category>JPA array column query</category>
      <category>jpa list&amp;lt;string&amp;gt;</category>
      <category>jpa postgre array</category>
      <category>JPA postgres array parameter</category>
      <category>JPA PostgreSQL array column</category>
      <category>Mapping PostgreSQL Array With Hibernate</category>
      <category>postgresql array column jpa</category>
      <category>PostgreSQL array to java List</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/146</guid>
      <comments>https://back.tistory.com/146#entry146comment</comments>
      <pubDate>Sun, 21 Jan 2024 11:41:53 +0900</pubDate>
    </item>
    <item>
      <title>[postgresql] array 배열 컬럼 조회하기 (리스트 타입)</title>
      <link>https://back.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;postgresql 에는 컬럼을 리스트로 지정할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;로또 테이블이 있다고 가정하고&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;아래와 같이 numbers 컬럼에 리스트 형태로 저장할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;(데이터 타입 :&amp;nbsp;_int4 (=int array))&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLqyzI/btsDFVl1Ejk/NDnMmqZRspv48wERRAOBXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLqyzI/btsDFVl1Ejk/NDnMmqZRspv48wERRAOBXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLqyzI/btsDFVl1Ejk/NDnMmqZRspv48wERRAOBXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLqyzI%2FbtsDFVl1Ejk%2FNDnMmqZRspv48wERRAOBXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;265&quot; height=&quot;275&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;275&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMFBAs/btsDCREGJGB/ibyiFXWLiMABFE5gqTGnR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMFBAs/btsDCREGJGB/ibyiFXWLiMABFE5gqTGnR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMFBAs/btsDCREGJGB/ibyiFXWLiMABFE5gqTGnR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMFBAs%2FbtsDCREGJGB%2FibyiFXWLiMABFE5gqTGnR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;212&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;이 로또 번호를 mybatis 에서 조회하려면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt; 일반적인 방법으로는 안 된다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;resultMap 을 사용해야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #006dd7;&quot;&gt;&lt;b&gt;그리고 typeHandler=&quot;org.apache.ibatis.type.ArrayTypeHandler&quot; 를 이용해야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705578552605&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;resultMap id=&quot;LottoMap&quot; type=&quot;Lotto&quot;&amp;gt;
    &amp;lt;result column=&quot;numbers&quot; property=&quot;numbers&quot; javaType=&quot;Integer&quot; jdbcType=&quot;INTEGER&quot; typeHandler=&quot;org.apache.ibatis.type.ArrayTypeHandler&quot;/&amp;gt;
&amp;lt;/resultMap&amp;gt;

&amp;lt;select id=&quot;selectUserDetail&quot; parameterType=&quot;String&quot; resultMap=&quot; LottoMap &quot;&amp;gt;
    SELECT lotto, numbers
    FROM lottotable
    WHERE lotto = #{lotto}
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Database</category>
      <category>Mybatis Array type handler</category>
      <category>MyBatis postgresql array type</category>
      <category>mybatis select postgresql list</category>
      <category>No typehandler found for property</category>
      <category>postgresql list in mybatis</category>
      <category>postgresql list mybatis 조회</category>
      <category>postgresql list resultmap</category>
      <category>PostgreSQL select array</category>
      <category>postgresql 리스트 컬럼 조회</category>
      <category>PostgreSQL 배열 조회</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/145</guid>
      <comments>https://back.tistory.com/145#entry145comment</comments>
      <pubDate>Thu, 18 Jan 2024 20:54:26 +0900</pubDate>
    </item>
    <item>
      <title>[python] 동적으로 import 모듈 가져오기</title>
      <link>https://back.tistory.com/144</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;내가 하고 싶은 것&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;크롤링 하는데 커뮤니티마다 태그가 달라서&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;각 커뮤니티별 태그를 저장해놓은 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;.py 파일을 동적으로 가져와서 크롤링하고 싶었다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;소스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;예를 들면&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;디시인사이드와 뽐뿌의 태그가 저장된&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;dcinside_tag.py , ppomppu_tag.py 가 있다고 하자.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705140808556&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import importlib

if tagtype == 'dcinside':	
	# 디시인사이드 태그 모듈 상대 경로로 설정
    basepath = os.path.dirname(os.path.abspath(__file__))
    module_path = basepath+'\\crawling\\tag\\dcinside_tag.py'
    
if tagtype == 'ppomppu': 
	# 뽐뿌 태그 모듈 상대 경로로 설정
    basepath = os.path.dirname(os.path.abspath(__file__))
    module_path = basepath+'\\crawling\\tag\\ppomppu_tag.py'


# 모듈 경로를 사용하여 모듈 동적으로 로드
spec = importlib.util.spec_from_file_location(&quot;tag_module&quot;, module_path) 
tagmodule = importlib.util.module_from_spec(spec)
spec.loader.exec_module(tagmodule)

# tagmodule에서 꺼내서 사용하면 된다.
tagmodule.TITLE
tagmodule.TIME&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;좋아요 , 댓글이 큰 힘이 됩니다. 감사합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python</category>
      <category>Importlib import_module example</category>
      <category>Importlib import_module 사용법</category>
      <category>Python import dynamically</category>
      <category>python import module dynamically</category>
      <category>Python import 변수</category>
      <category>python import_module</category>
      <category>python import_module example</category>
      <category>python 동적으로 import 모듈 가져오기</category>
      <category>python에서 조건에 따라 import 부분을 바꾸는 방법</category>
      <category>파이썬 동적 import</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/144</guid>
      <comments>https://back.tistory.com/144#entry144comment</comments>
      <pubDate>Sat, 13 Jan 2024 19:17:13 +0900</pubDate>
    </item>
    <item>
      <title>[python] pyinstaller No such file or directory 에러 (상대 경로 지정)</title>
      <link>https://back.tistory.com/143</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;에러&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1705139830289&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FileNotFoundError: No such file or directory&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;python에서 파일 경로를 지정하는 소스가 있었는데&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;.py 로 실행하면 잘 되고&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Serif KR';&quot;&gt;pyinstaller 로 만든 .exe로 실행하면 에러가 발생했다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; exe 파일은 단독으로 실행되어야 하므로 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;경로를 헷갈리지 않도록 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;절대 경로가 아닌 상대경로로 실행해주어야 한다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; (리눅스는 / 로 사용) &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705139795043&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;basepath = os.path.dirname(os.path.abspath(__file__))
module_path = basepath+'\\src\\util\\myfile.py'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;그리고 pyinstaller 할 때 --add-data 를 사용하여 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;실행&amp;nbsp;&lt;/span&gt;파일&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;에&amp;nbsp;&lt;/span&gt;포함&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;할 추가 데이터&amp;nbsp;&lt;/span&gt;파일&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;을 지정한다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705139813173&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pyinstaller -F main.py --add-data &quot;.\\src\\util\\myfile.py;src/util/&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python</category>
      <category>pyinstaller FileNotFoundError</category>
      <category>pyinstaller no such file</category>
      <category>pyinstaller no such file or directory add</category>
      <category>pyinstaller no such file or directory path</category>
      <category>pyinstaller 경로 오류</category>
      <category>Pyinstaller 경로 지정</category>
      <category>pyinstaller 상대 경로</category>
      <category>pyinstaller 파일 포함</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/143</guid>
      <comments>https://back.tistory.com/143#entry143comment</comments>
      <pubDate>Sat, 13 Jan 2024 18:57:50 +0900</pubDate>
    </item>
    <item>
      <title>[pdfbox] PDF 반으로 자르는 자바 소스</title>
      <link>https://back.tistory.com/142</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 라이브러리&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;implementation&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'org.apache.pdfbox:pdfbox:3.0.0'&lt;/span&gt;&lt;/div&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;b&gt;소스&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1703901939823&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PDFSplitter {

    public static void main(String[] args) throws IOException{
        PDFSplitter pdf = new PDFSplitter();
        pdf.cropPdfTest();
    }



    public File[] cropPdfTest() throws IOException {

        String inputFilePath = &quot;D:\\workspace\\원본PDF.pdf&quot;; 
        String outputFilePath1 = &quot;D:\\workspace\\잘린왼쪽.pdf&quot;; 
        String outputFilePath2 = &quot;D:\\workspace\\잘린오른쪽.pdf&quot;; 
        
        // 저장 변수
        File[] result = new File[2];
        
        // 원본 PDF 파일 경로
        File inputFile  = new File(inputFilePath);
        
        byte[] pdfbyte = Files.readAllBytes(inputFile.toPath());        

        // Load the PDF document (왼쪽)
        PDDocument document1 = Loader.loadPDF(pdfbyte);

        // PDF 페이지 가져오기
        PDPage page1 = document1.getPage(0); // 페이지 번호는 0부터 시작

        // 자르고자 하는 영역의 좌표 (왼쪽 아래 모서리와 오른쪽 위 모서리)
        float left1 = 0; // 왼쪽 모서리의 x 좌표
        float bottom1 = 0; // 아래쪽 모서리의 y 좌표
        float right1 = page1.getMediaBox().getWidth(); // 오른쪽 모서리의 x 좌표
        float top1 = page1.getMediaBox().getHeight(); // 위쪽 모서리의 y 좌표     

        // 페이지 자르기
        page1.setCropBox(new PDRectangle(left1, bottom1, right1 / 2, top1));

        // 자른 PDF 저장
        File outputFile1 = new File(outputFilePath1);
        document1.save(outputFile1);
        result[0] = new File(outputFilePath1);
        
        document1.close();

        // Load the PDF document (오른쪽)
        PDDocument document2 = Loader.loadPDF(pdfbyte);
        
        // PDF 페이지 가져오기
        PDPage page2 = document2.getPage(0); // 페이지 번호는 0부터 시작

        float left2 = page2.getMediaBox().getWidth() / 2;
        float bottom2 = 0;
        float right2 = page2.getMediaBox().getWidth();
        float top2 = page2.getMediaBox().getHeight();

        // 페이지 자르기
        page2.setCropBox(new PDRectangle(left2, bottom2, right2, top2));

        File outputFile2 = new File(outputFilePath2);
        document2.save(outputFile2);
        result[1] = new File(outputFilePath2);

        document2.close();

        System.out.println(&quot;PDF 자르기 완료&quot;);

        return result;
    }&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1OC0V/btsCTVGzBDr/PTEzo7TBOvOi7KPOnX0Km0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1OC0V/btsCTVGzBDr/PTEzo7TBOvOi7KPOnX0Km0/img.png&quot; data-alt=&quot;원본 PDF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1OC0V/btsCTVGzBDr/PTEzo7TBOvOi7KPOnX0Km0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1OC0V%2FbtsCTVGzBDr%2FPTEzo7TBOvOi7KPOnX0Km0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;455&quot; height=&quot;254&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원본 PDF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tN6oH/btsCSB9CHZj/ztpA57yKA8h9RnOKOwGd9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tN6oH/btsCSB9CHZj/ztpA57yKA8h9RnOKOwGd9k/img.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;488&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.5105%; margin-right: 10px;&quot; data-widthpercent=&quot;51.1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tN6oH/btsCSB9CHZj/ztpA57yKA8h9RnOKOwGd9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtN6oH%2FbtsCSB9CHZj%2FztpA57yKA8h9RnOKOwGd9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPRJ74/btsCMp3Jpjq/B3s1f9u6tKd9iqi9qzciX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPRJ74/btsCMp3Jpjq/B3s1f9u6tKd9iqi9qzciX0/img.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;705&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.3268%;&quot; data-widthpercent=&quot;48.9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPRJ74/btsCMp3Jpjq/B3s1f9u6tKd9iqi9qzciX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPRJ74%2FbtsCMp3Jpjq%2FB3s1f9u6tKd9iqi9qzciX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;왼쪽, 오른쪽으로 잘린 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b1RVzQ/btsCN2UJYnu/QzLn9MCQ6lHkHktB2tdgkk/%EC%9B%90%EB%B3%B8.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;원본.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/boo78Y/btsCMocF75S/34PRDIRuUIHc5nq2BvrDI1/%EC%9E%98%EB%A6%B0%EC%99%BC%EC%AA%BD.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;잘린왼쪽.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/QrmFt/btsCUYXomsf/SZbOHzkwfiM3SvCpKGQweK/%EC%9E%98%EB%A6%B0%EC%98%A4%EB%A5%B8%EC%AA%BD.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;잘린오른쪽.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&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;&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;</description>
      <category>JAVA/JAVA</category>
      <category>java pdf split</category>
      <category>java pdf 자르기</category>
      <category>java split pdf by size</category>
      <category>pdf 반으로 자르기</category>
      <category>split pdf using itext java</category>
      <category>자바</category>
      <category>자바 PDF 반으로 자르기</category>
      <category>자바 PDF 분할</category>
      <category>자바 pdf 자르기</category>
      <category>자바pdf반으로자르기</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/142</guid>
      <comments>https://back.tistory.com/142#entry142comment</comments>
      <pubDate>Sat, 30 Dec 2023 11:10:10 +0900</pubDate>
    </item>
    <item>
      <title>[아이폰] icloud 파일 이동 시 에러 (0x8007017B)</title>
      <link>https://back.tistory.com/141</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;icloud 에서 파일을 바탕화면에 이동시키려고 했는데 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이런 에러가 난다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dn4dlr/btsCzr7icAQ/wSXKMSxIcyixKhI3KamwW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dn4dlr/btsCzr7icAQ/wSXKMSxIcyixKhI3KamwW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dn4dlr/btsCzr7icAQ/wSXKMSxIcyixKhI3KamwW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdn4dlr%2FbtsCzr7icAQ%2FwSXKMSxIcyixKhI3KamwW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;434&quot; height=&quot;285&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://discussions.apple.com/thread/251767107?answerId=253573138022&amp;amp;sortBy=best#253573138022&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://discussions.apple.com/thread/251767107?answerId=253573138022&amp;amp;sortBy=best#253573138022&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1703312280551&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;error 0x8007017B - Apple Community&quot; data-og-description=&quot;Another method is to open the files in, say, Photoshop then save each file as jpg, tif or psd. If you have many files, then record a Photoshop action to place each file in a specific, dedicated folder then transfer from that folder to your desired final lo&quot; data-og-host=&quot;discussions.apple.com&quot; data-og-source-url=&quot;https://discussions.apple.com/thread/251767107?answerId=253573138022&amp;amp;sortBy=best#253573138022&quot; data-og-url=&quot;https://discussions.apple.com/thread/251767107?answerId=253573138022&amp;amp;sortBy=best#253573138022&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://discussions.apple.com/thread/251767107?answerId=253573138022&amp;amp;sortBy=best#253573138022&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://discussions.apple.com/thread/251767107?answerId=253573138022&amp;amp;sortBy=best#253573138022&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;error 0x8007017B - Apple Community&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Another method is to open the files in, say, Photoshop then save each file as jpg, tif or psd. If you have many files, then record a Photoshop action to place each file in a specific, dedicated folder then transfer from that folder to your desired final lo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;discussions.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;원인을 찾아보니 파일을 드래그해서 그렇다고...&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;설마했는데&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;ctrl + cv 로 옮기니까 바로 옮겨진다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000;&quot;&gt;&lt;b&gt;(Instead of dragging the file, use ctrl + cv)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이것때문에 3시간은 버린 것 같다. 젠장.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;FuckRonnieGIF.gif&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1h3M5/btsCy4Ep8xr/fBFaOh5enVs6DQ6xfKGbK1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1h3M5/btsCy4Ep8xr/fBFaOh5enVs6DQ6xfKGbK1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1h3M5/btsCy4Ep8xr/fBFaOh5enVs6DQ6xfKGbK1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/1h3M5/btsCy4Ep8xr/fBFaOh5enVs6DQ6xfKGbK1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;229&quot; height=&quot;229&quot; data-filename=&quot;FuckRonnieGIF.gif&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타 IT</category>
      <category>0x8007017B</category>
      <category>8007017B</category>
      <category>icloud 8007017B</category>
      <category>icloud 다운 8007017B</category>
      <category>icloud 파일 이동 에러</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/141</guid>
      <comments>https://back.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 23 Dec 2023 15:21:30 +0900</pubDate>
    </item>
    <item>
      <title>[FTPClient] 550-The filename, directory name, or volume label syntax is incorrect</title>
      <link>https://back.tistory.com/140</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BBBlL/btsyUfDbs75/WwmPZB1I5vosUwm4myPsrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BBBlL/btsyUfDbs75/WwmPZB1I5vosUwm4myPsrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BBBlL/btsyUfDbs75/WwmPZB1I5vosUwm4myPsrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBBBlL%2FbtsyUfDbs75%2FWwmPZB1I5vosUwm4myPsrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;982&quot; height=&quot;43&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1697965068349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;550-The filename, directory name, or volume label syntax is incorrect. 
 Win32 error:   The filename, directory name, or volume label syntax is incorrect. 
 Error details: File system returned an error.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자바 FTP Client 라이브러리에서 사용 중&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;b&gt;boolean&amp;nbsp;uploaded&amp;nbsp;=&amp;nbsp;ftpClient.storeFile(file.getOriginalFilename(),&amp;nbsp;new&amp;nbsp;ByteArrayInputStream(bytes));&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;b&gt;이 소스에서 에러가 났는데&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;b&gt;결국 파일명에 한글이 있어서 에러가 난듯하다.&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;b&gt;파일에 한글명 없애니 해결됨.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA/JAVA</category>
      <category>550-The filename</category>
      <category>550-The filename directory name or volume label syntax is incorrect</category>
      <category>directory name</category>
      <category>or volume label syntax is incorrect</category>
      <author>소프트웨어종사자</author>
      <guid isPermaLink="true">https://back.tistory.com/140</guid>
      <comments>https://back.tistory.com/140#entry140comment</comments>
      <pubDate>Sun, 22 Oct 2023 17:59:13 +0900</pubDate>
    </item>
  </channel>
</rss>