<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>비전공개발자</title>
    <link>https://marimo-developer.tistory.com/</link>
    <description>비전공 개발자의 성장기록</description>
    <language>ko</language>
    <pubDate>Tue, 19 May 2026 12:10:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>투리비</managingEditor>
    <image>
      <title>비전공개발자</title>
      <url>https://tistory1.daumcdn.net/tistory/4460127/attach/df419d7cdd77424890bc941af645ae1c</url>
      <link>https://marimo-developer.tistory.com</link>
    </image>
    <item>
      <title>자주 사용하는 JSTL 정리(JSP Standard Tag Library)</title>
      <link>https://marimo-developer.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;더많은 JSTL 이 있지만 내가 자주 사용하는 JSTL 만을 정리 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSTL 사용을 위한 라이브러리 선언&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;&amp;lt;%@ taglib uri=&quot;http://java.sun.com/sjp/jstl/core&quot; prefix=&quot;c&quot; %&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;c:set&amp;gt;&amp;nbsp; 변수를 선언할 때 사용&lt;/p&gt;
&lt;pre id=&quot;code_1703814901549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:set var=&quot;변수명&quot; value=&quot;값&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 사용하면 ${변수이름} 으로 값을 사용할수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;c:out&amp;gt; 변수내용을 출력할 때 사용&lt;/p&gt;
&lt;pre id=&quot;code_1703815121459&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;c:out var=&quot;값&quot; default=&quot;기본값&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;value 값이 null이면 기본값이 출력되고 기본값이 없으면 공백이 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 말한 &amp;lt;c:set&amp;gt; 과 &amp;lt;c:out&amp;gt;을 함께 사용하면 아래처럼 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1703815250855&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:out var=&quot;${변수명}&quot; default=&quot;기본값&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;c:if&amp;gt; test 안의 내용이 true 인지 false 인지에 따라 출력하거나 출력하지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1703815371449&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;c:if test=&quot;${empty dataList}&quot; /&amp;gt;
   등록된 데이터가 없습니다.
&amp;lt;/c:if&amp;gt;
&amp;lt;c:if test=&quot;${mot empty dataList}&quot; /&amp;gt;
   등록된 데이터가 있습니다.
&amp;lt;/c:if&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;c:choose&amp;gt; 스위치 문이다. &amp;lt;c:when&amp;gt; 태그는 한개 이상 존재해야 하며 &amp;lt;c:otherwise&amp;gt; 는 when 조건이 없을시 실행된다.&lt;/p&gt;
&lt;pre id=&quot;code_1703815670282&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:choose&amp;gt;
	&amp;lt;c:when test=&quot;${ 1 &amp;gt; 0}&quot;&amp;gt;
    	1은 0보다 크다
    &amp;lt;/c:when&amp;gt;
    &amp;lt;c:when test=&quot;${ 2 &amp;gt; 0}&quot;&amp;gt;
    	2도 0보다 크다.
    &amp;lt;/c:when&amp;gt;
    &amp;lt;c:otherwise&amp;gt;
    	그외 ...
    &amp;lt;/c:otherwise&amp;gt;
&amp;lt;/c:choose&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;c:forEach&amp;gt; 반복문 이다. var에 지정된 변수명으로 dataList 에 있는 값을 출력 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1703815803102&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;c:forEach var=&quot;result&quot; items=&quot;${dataList}&quot; varStatus=&quot;status&quot;&amp;gt;
	${result.data1}
&amp;lt;/c:forEach&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;fmt:parseDate&amp;gt; 날짜&amp;nbsp;형식으로&amp;nbsp;작성된&amp;nbsp;문자열로&amp;nbsp;java.util.Date&amp;nbsp;객체를&amp;nbsp;생성한다.&amp;nbsp;그리고&amp;nbsp;지정된&amp;nbsp;보관소에&amp;nbsp;저장한다.&lt;/p&gt;
&lt;pre id=&quot;code_1703816201931&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;fmt:parseDate var=&quot;date1&quot; value=&quot;2023-12-29&quot; pattern=&quot;yyyy-MM-dd&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;fmt:formatDate&amp;gt;&amp;nbsp;날짜&amp;nbsp;객체로부터&amp;nbsp;원하는&amp;nbsp;형식으로&amp;nbsp;날짜를&amp;nbsp;표현하고자&amp;nbsp;할때&amp;nbsp;사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1703816252381&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;fmt:formatDate value=&quot;${date1}&quot; pattern=&quot;MM/dd/yy&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/FrontEnd</category>
      <category>jsp</category>
      <category>JSTL</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/17</guid>
      <comments>https://marimo-developer.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 29 Dec 2023 11:20:49 +0900</pubDate>
    </item>
    <item>
      <title>내가 보려고 쓰는 페이징유틸(PagingUtil)</title>
      <link>https://marimo-developer.tistory.com/16</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가보려고 쓰는 페이징 유틸이다. 기존소스를 일부 수정 이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-12-27 100424.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWE9iG/btsCGaLsuj6/iM59kV4u1nVmhkgR8EiQN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWE9iG/btsCGaLsuj6/iM59kV4u1nVmhkgR8EiQN0/img.png&quot; data-alt=&quot;화면부분에서 페이지수와 리스트갯수 지정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWE9iG/btsCGaLsuj6/iM59kV4u1nVmhkgR8EiQN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWE9iG%2FbtsCGaLsuj6%2FiM59kV4u1nVmhkgR8EiQN0%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;773&quot; height=&quot;43&quot; data-filename=&quot;화면 캡처 2023-12-27 100424.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화면부분에서 페이지수와 리스트갯수 지정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-12-27 100019.png&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE46vQ/btsCJhXPIue/3rUwJY0kAs6Fyojx7UT0pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE46vQ/btsCJhXPIue/3rUwJY0kAs6Fyojx7UT0pk/img.png&quot; data-alt=&quot;컨트롤러에서 PagingUtil을 호출한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE46vQ/btsCJhXPIue/3rUwJY0kAs6Fyojx7UT0pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE46vQ%2FbtsCJhXPIue%2F3rUwJY0kAs6Fyojx7UT0pk%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;64&quot; data-filename=&quot;화면 캡처 2023-12-27 100019.png&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨트롤러에서 PagingUtil을 호출한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1703638882223&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PagingUtil {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(PagingUtil.class.getName());
	
	public static void setPagingLimitValues(Map&amp;lt;String, Object&amp;gt; data, int pRowCount) {
        // 현제 페이지수
        int cPage = Integer.parseInt(nvl(data.get(&quot;cPage&quot;), &quot;1&quot;));
        // 한페이지에 보여질 데이터 수
        int rowCount = 10;
        if(pRowCount &amp;gt; 0){
            rowCount = pRowCount;
        } else{
            rowCount = Integer.parseInt(&quot;10&quot;);
        }

        if (cPage &amp;lt; 1) cPage = 1;
        data.put(&quot;cPage&quot;, cPage);
        data.put(&quot;offset&quot;, (cPage - 1) * rowCount);
        data.put(&quot;rowCount&quot;, rowCount);

	}
    
	public static void setPagingLimitValue(Map&amp;lt;String, Object&amp;gt; data) {
		
	    if (data.containsKey(&quot;rowCount&quot;) &amp;amp;&amp;amp; data.get(&quot;rowCount&quot;) != null) {
	        String rowCountString = data.get(&quot;rowCount&quot;).toString().trim();
	        if (!rowCountString.isEmpty()) {
	            try {
	                int rowCount = Integer.parseInt(rowCountString);
	                setPagingLimitValues(data, rowCount);
	            } catch (NumberFormatException e) {
	                e.printStackTrace();
	                setPagingLimitValues(data, 10); // Set a default value, or handle it in another way
	            }
	        } else {
	            setPagingLimitValues(data, 10); // Set a default value, or handle it in another way
	        }
	    } else {
	        setPagingLimitValues(data, 10); // Set a default value, or handle it in another way
	    }
	}
	
	public static String nvl(Object obj, String nullVal) {
        if(obj == null)
            return nullVal;
        if(isEmpty(obj)) {
            return nullVal;
        } else {
            if(obj instanceof java.math.BigDecimal) {
                double d = ((java.math.BigDecimal)obj).doubleValue();
                return String.valueOf(d);
            }
            else if(obj instanceof Integer) {
                int i = ((Integer)obj).intValue();
                return String.valueOf(i);
            }
            else if(obj instanceof Long) {
                long l = ((Long)obj).longValue();
                return String.valueOf(l);
            }
            return (String)obj;
        }
    }
	
	 public static boolean isEmpty(Object obj) {
	        if(obj == null)
	            return true;

	        String val = &quot;&quot;;

	        if(obj instanceof java.math.BigDecimal) {
	            double d = ((java.math.BigDecimal)obj).doubleValue();
	            val = String.valueOf(d);
	        } else if(obj instanceof Integer) {
	            int i = ((Integer)obj).intValue();
	            val = String.valueOf(i);
	        } else if(obj instanceof java.lang.Double) {
	            double i = ((Double)obj).doubleValue();
	            val = String.valueOf(i);
	        }  else if(obj instanceof java.lang.Long) {
	            double i = ((Long)obj).longValue();
	            val = String.valueOf(i);
	        } else {
	            val = (String)obj;
	        }
	        if(val.equals(&quot;&quot;))
	            return true;
	        else
	            return false;
	    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;화면부분에서 별도로 페이지수와 리스트 갯수가 지정되지 않았을시,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-12-27 100554.png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLF58G/btsCzHKjfDk/EMxraLovzneje1FsxyFJKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLF58G/btsCzHKjfDk/EMxraLovzneje1FsxyFJKk/img.png&quot; data-alt=&quot;컨트롤러 부분에 페이징 유틸대신 시작값과 끝값을 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLF58G/btsCzHKjfDk/EMxraLovzneje1FsxyFJKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLF58G%2FbtsCzHKjfDk%2FEMxraLovzneje1FsxyFJKk%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;436&quot; height=&quot;66&quot; data-filename=&quot;화면 캡처 2023-12-27 100554.png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨트롤러 부분에 페이징 유틸대신 시작값과 끝값을 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;리스트 쿼리 호출부분 하단에&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-12-27 100255.png&quot; data-origin-width=&quot;299&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q7pk6/btsCG1VdsET/kUarexW148V9oPsqDvuVSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q7pk6/btsCG1VdsET/kUarexW148V9oPsqDvuVSk/img.png&quot; data-alt=&quot;유틸에서 설정한 값으로 리미트 시작과 끝값을 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q7pk6/btsCG1VdsET/kUarexW148V9oPsqDvuVSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq7pk6%2FbtsCG1VdsET%2FkUarexW148V9oPsqDvuVSk%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;299&quot; height=&quot;54&quot; data-filename=&quot;화면 캡처 2023-12-27 100255.png&quot; data-origin-width=&quot;299&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유틸에서 설정한 값으로 리미트 시작과 끝값을 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발/BackEnd</category>
      <category>Java</category>
      <category>Paging</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/16</guid>
      <comments>https://marimo-developer.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 27 Dec 2023 10:07:34 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB 데이터베이스 생성, 계정 생성, 권한 부여</title>
      <link>https://marimo-developer.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CLI를&amp;nbsp;통한&amp;nbsp;MariaDB&amp;nbsp;데이터베이스&amp;nbsp;생성,&amp;nbsp;계정&amp;nbsp;생성,&amp;nbsp;권한&amp;nbsp;부여&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL(MariaDB)&amp;nbsp;접속&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1697421058163&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -u root -p
/ 특정 포트를 지정하려면 (-P 포트번호) 추가&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스&amp;nbsp;확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1697421080204&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SHOW DATABASES;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스&amp;nbsp;생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1697421108655&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE 생성할데이터베이스명;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아이디&amp;nbsp;생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1697421144233&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE USER '아이디'@'%' IDENTIFIED BY '비밀번호';&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자&amp;nbsp;권한&amp;nbsp;주기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1697421166637&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON 데이터베이스명.* TO '아이디'@'%';&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1697421191205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발/Etc</category>
      <category>mariadb</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/15</guid>
      <comments>https://marimo-developer.tistory.com/15#entry15comment</comments>
      <pubDate>Mon, 16 Oct 2023 10:53:35 +0900</pubDate>
    </item>
    <item>
      <title>XSSFDrawing 사용 엑셀 메모박스 만들기</title>
      <link>https://marimo-developer.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;XSSFCreationHelper&amp;nbsp;richTextFactory&amp;nbsp;=&amp;nbsp;workbook.getCreationHelper(); &lt;br /&gt;XSSFDrawing drawing = sheet.createDrawingPatriarch(); &lt;br /&gt;XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 5, 10, 8, 15); &lt;br /&gt;XSSFComment comment = drawing.createCellComment((ClientAnchor)anchor); &lt;br /&gt;String text = &quot;띄어쓰기 없이 이렇게만 입력해 주세요. 숫자만 입력해 주세요.&quot;; &lt;br /&gt;XSSFRichTextString rtf1 = richTextFactory.createRichTextString(text); &lt;br /&gt;comment.setString((RichTextString)rtf1);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 생성후 메모가 보여질 위치에 하단의 코드를 삽입.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cell.setCellComment((Comment)comment);&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dc4HL7/btsc1uJcWNr/wUj6dQb6C8wlfQMUEDYqZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dc4HL7/btsc1uJcWNr/wUj6dQb6C8wlfQMUEDYqZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dc4HL7/btsc1uJcWNr/wUj6dQb6C8wlfQMUEDYqZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdc4HL7%2Fbtsc1uJcWNr%2FwUj6dQb6C8wlfQMUEDYqZk%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;572&quot; height=&quot;144&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&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;</description>
      <category>개발/BackEnd</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/14</guid>
      <comments>https://marimo-developer.tistory.com/14#entry14comment</comments>
      <pubDate>Fri, 28 Apr 2023 14:46:51 +0900</pubDate>
    </item>
    <item>
      <title>poi HSSF 사용시 Excel DropDownListBox 사용  (java 엑셀 드롭다운, 셀렉트박스)</title>
      <link>https://marimo-developer.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&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;현재는 xls 에서만 동작 하고 xlsx 에서는 정상적으로 동작 하는지 여부는 조금더 파악을 해보아야 겠다.&lt;/p&gt;
&lt;pre id=&quot;code_1682659016123&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//드록박스 시작
String[] strFormula = null;
CellRangeAddressList addressList = null;
DVConstraint constraing = null;
HSSFDataValidation dataValidation = null;
	      
strFormula = new String[] { &quot;100&quot;, &quot;200&quot;, &quot;300&quot;, &quot;400&quot;, &quot;500&quot; };
addressList = new CellRangeAddressList();
          
//순서대로 int firstRow, int firstCol, int lastRow, int lastCol
addressList.addCellRangeAddress(1, 0, 1000, 0);
constraing = DVConstraint.createExplicitListConstraint(strFormula);
dataValidation = new HSSFDataValidation(addressList, constraing);
          
//공백무시 옵션 true : 무시, false: 무시안함
dataValidation.setEmptyCellAllowed(false);
          
//cell 선택시 설명메시지 보이기 옵션&amp;nbsp; true: 표시, false : 표시안함
dataValidation.setShowPromptBox(true);
          
//cell 선택시 드롭다운박스 list 표시여부 설정 true : 안보이게, false : 보이게
dataValidation.setSuppressDropDownArrow(false);
          
//오류메시지 생성. 형식에 맞지 않는 데이터 입력시&amp;nbsp; createErrorBox(String title,String text)
dataValidation.createErrorBox(&quot;알림&quot;, &quot;입력값이 바르지 않습니다. 지정된 값만 입력해 주세요.&quot;);
sheet.addValidationData(dataValidation);
          
/*오류메시지 스타일(중지,경보,정보).
HSSFDataValidation.ErrorStyle.STOP : 데이터외의값 허용안함.
HSSFDataValidation.ErrorStyle.WARNING : 데이터외의값 입력시 경고(선택)창.
HSSFDataValidation.ErrorStyle.INFO : 데이터외의값 입력시 정보창.*/
dataValidation.setErrorStyle(HSSFDataValidation.ErrorStyle.STOP);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;104&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/luTtb/btsdaBfbPUO/pIFo94GuBTmmRdu3RUcppk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/luTtb/btsdaBfbPUO/pIFo94GuBTmmRdu3RUcppk/img.png&quot; data-alt=&quot;적용된 드롭박스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/luTtb/btsdaBfbPUO/pIFo94GuBTmmRdu3RUcppk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FluTtb%2FbtsdaBfbPUO%2FpIFo94GuBTmmRdu3RUcppk%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;104&quot; height=&quot;103&quot; data-origin-width=&quot;104&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;적용된 드롭박스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PZadx/btsc9JkzYCr/OF6Pw2wXrdY74n4IkifGN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PZadx/btsc9JkzYCr/OF6Pw2wXrdY74n4IkifGN1/img.png&quot; data-alt=&quot;설정된 데이터 외의값을 입력 했을시 나오는 팝업&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PZadx/btsc9JkzYCr/OF6Pw2wXrdY74n4IkifGN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPZadx%2Fbtsc9JkzYCr%2FOF6Pw2wXrdY74n4IkifGN1%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;524&quot; height=&quot;119&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설정된 데이터 외의값을 입력 했을시 나오는 팝업&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발/BackEnd</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/13</guid>
      <comments>https://marimo-developer.tistory.com/13#entry13comment</comments>
      <pubDate>Fri, 28 Apr 2023 14:24:02 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트(JavaScript)동일한 문자열 반복하기</title>
      <link>https://marimo-developer.tistory.com/12</link>
      <description>&lt;h2 id=&quot;stringrepeatcount&quot; data-ke-size=&quot;size26&quot;&gt;string.repeat(count)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;repeat 는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;string : 문자열&lt;br /&gt;count 매개변수 : 문자열을 반복할 횟수 (양의 정수)&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;'abc'.repeat(1) // abc
'abc'.repeat(2) // abcabc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 반복이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단. es6 문법으로 이전 버전 에서는 사용이 되지 않는다.&lt;/p&gt;</description>
      <category>개발/FrontEnd</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/12</guid>
      <comments>https://marimo-developer.tistory.com/12#entry12comment</comments>
      <pubDate>Mon, 23 May 2022 17:22:59 +0900</pubDate>
    </item>
    <item>
      <title>JAVA 디컴파일러 JD-GUI 설치 및 사용</title>
      <link>https://marimo-developer.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;war 나 jar 등에 있는 컴파일이 완료된 class 파일은 직접적으로 열어 볼 수 가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴때 사용하게 되는것이 디컴파일러 이다. 그중 내가 제일 자주 사용하는 디컴파일러는 JD-GUI 이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JD-GUI 설치하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://java-decompiler.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://java-decompiler.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646355125016&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 Decompiler&quot; data-og-description=&quot;The &amp;ldquo;Java Decompiler project&amp;rdquo; aims to develop tools in order to decompile and analyze Java 5 &amp;ldquo;byte code&amp;rdquo; and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of &amp;ldquo;.class&amp;rdquo; files. You can browse the reco&quot; data-og-host=&quot;java-decompiler.github.io&quot; data-og-source-url=&quot;http://java-decompiler.github.io/&quot; data-og-url=&quot;http://java-decompiler.github.io/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://java-decompiler.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://java-decompiler.github.io/&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;Java Decompiler&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The &amp;ldquo;Java Decompiler project&amp;rdquo; aims to develop tools in order to decompile and analyze Java 5 &amp;ldquo;byte code&amp;rdquo; and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of &amp;ldquo;.class&amp;rdquo; files. You can browse the reco&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;java-decompiler.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째로 위 링크로 접속한후 아래와 사진과 같이 &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;Download(다운로드)를 클릭 후 &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;자신의 OS(Operating System) 운영체제에 맞게 설치를 하면 된다. 나는 window이기 떄문에 window 버전을 설치 한다.&lt;/span&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;1192&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AbnSP/btruZQBincW/u8ocJqg9vmzu6BgKX839p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AbnSP/btruZQBincW/u8ocJqg9vmzu6BgKX839p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AbnSP/btruZQBincW/u8ocJqg9vmzu6BgKX839p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAbnSP%2FbtruZQBincW%2Fu8ocJqg9vmzu6BgKX839p1%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;1192&quot; height=&quot;518&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 받은 압축파일의 압축을 푼 후 jd-gui.exe 를 실행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vij6D/btru7rGxhrD/eyOuTjkRtESkb8zRZnsY51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vij6D/btru7rGxhrD/eyOuTjkRtESkb8zRZnsY51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vij6D/btru7rGxhrD/eyOuTjkRtESkb8zRZnsY51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvij6D%2Fbtru7rGxhrD%2FeyOuTjkRtESkb8zRZnsY51%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;635&quot; height=&quot;175&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JD-GUI 실행하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Davtj/btruZQ88aJ1/woA7Qj4x3gOikDVApkMp91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Davtj/btruZQ88aJ1/woA7Qj4x3gOikDVApkMp91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Davtj/btruZQ88aJ1/woA7Qj4x3gOikDVApkMp91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDavtj%2FbtruZQ88aJ1%2FwoA7Qj4x3gOikDVApkMp91%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;589&quot; height=&quot;393&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더모양을 누르거나 원하는 class 파일을 드래그앤 드롭으로 끌어다 놓는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9LXIB/btru6LFep8r/vfUCp0SKkEIopx6d0UN58k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9LXIB/btru6LFep8r/vfUCp0SKkEIopx6d0UN58k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9LXIB/btru6LFep8r/vfUCp0SKkEIopx6d0UN58k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9LXIB%2Fbtru6LFep8r%2FvfUCp0SKkEIopx6d0UN58k%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;1357&quot; height=&quot;418&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번이 컴파일전 class 파일이고, 2번이 JD-GUI 를 이용하여 디컴파일된 모습이다. class 파일을 읽기 어려웠지만 디컴파일을 통해 한눈에 쉽게 볼수 있다.&lt;/p&gt;</description>
      <category>개발/Support</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/11</guid>
      <comments>https://marimo-developer.tistory.com/11#entry11comment</comments>
      <pubDate>Fri, 4 Mar 2022 11:47:02 +0900</pubDate>
    </item>
    <item>
      <title>이클립트(Eclipse)자바스크립트(javaScript) 에디터 설정 하는방법</title>
      <link>https://marimo-developer.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이클립스로 작업을 하다보면 가끔 자바스크립트(.js)파일을 열었지만 아래 사진과 같이 그냥 메모장에서 연듯한 흑백문자와 자동완성 기능이 안되는 현상이 발생한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmNxBw/btrrQxXx65U/5QKaKY9lhHWLcw2MCridw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmNxBw/btrrQxXx65U/5QKaKY9lhHWLcw2MCridw0/img.png&quot; data-alt=&quot;기본 Ttext Editor 로 열린 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmNxBw/btrrQxXx65U/5QKaKY9lhHWLcw2MCridw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmNxBw%2FbtrrQxXx65U%2F5QKaKY9lhHWLcw2MCridw0%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;226&quot; height=&quot;65&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 Ttext Editor 로 열린 상태&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 이클립스 기본 Text Editor로 js 파일이 열렸기 때문이다. 이럴때 간단한 이클립스 설정변경으로 Text Editor 가 아닌 다른 Editor 로 변경할수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 파일만 Editor 변경하기&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clwJEu/btrrJuobDGg/sSkEIJnWUkHKuNP8z6LqjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clwJEu/btrrJuobDGg/sSkEIJnWUkHKuNP8z6LqjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clwJEu/btrrJuobDGg/sSkEIJnWUkHKuNP8z6LqjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclwJEu%2FbtrrJuobDGg%2FsSkEIJnWUkHKuNP8z6LqjK%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;537&quot; height=&quot;261&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
현재 보고있는 파일 또는 보고싶은 파일을 우클릭 한후 Open With - Generic Text Editor 를 선택해 주면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 javaScript 파일을 변경 하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l2lyI/btrrPN7DgMI/vh0XknNyaYP846Zo19eET0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l2lyI/btrrPN7DgMI/vh0XknNyaYP846Zo19eET0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l2lyI/btrrPN7DgMI/vh0XknNyaYP846Zo19eET0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl2lyI%2FbtrrPN7DgMI%2Fvh0XknNyaYP846Zo19eET0%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;223&quot; height=&quot;200&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dknVVz/btrrI9xTxmf/xnLVn3ZJOEkLiRhVHmZDIk/img.png&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검은배경이라 잘 안보이지만 General - Editors - File Assoclations 에 들어온후 우측에 있는 Add... 를 클릭 후 나타나는 팝업창에 *.js 를 입력 해 주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFu4qV/btrrKIM54Y5/7Y1GqwmfmMb0sgPWnhkw4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFu4qV/btrrKIM54Y5/7Y1GqwmfmMb0sgPWnhkw4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFu4qV/btrrKIM54Y5/7Y1GqwmfmMb0sgPWnhkw4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFu4qV%2FbtrrKIM54Y5%2F7Y1GqwmfmMb0sgPWnhkw4k%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;626&quot; height=&quot;373&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그후 아래를 보면 Associated editors 부분에서 Add.. 를 누른후 Generic 검색 Generic Text Editor 선택해 줍니다.&lt;br /&gt;리면 위와같이 2개의 목록이 생기는데 여기에서 Generic Text Editor 선택후 Default를 누른후 Apply and Close를 해준다.&lt;/p&gt;</description>
      <category>개발/Support</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/10</guid>
      <comments>https://marimo-developer.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 26 Jan 2022 17:10:42 +0900</pubDate>
    </item>
    <item>
      <title>트랜잭션(Transaction)처리 하기</title>
      <link>https://marimo-developer.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;트랜잭션(Transaction) 이란&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;하나의 메소드(method) 에서 여러 개의 쿼리가 실행해야 하는 경우 전부 정상적으로 실행이 되면 문제가 없겠지만 중간에 어느 하나의 쿼리에서 오류나 문제가 생긴다면 시스템에 큰 문제가 생길수 있다.&amp;nbsp; 그때 정상적으로 실행이 된다면 사용했던 쿼리를 commit 하고 만약 문제가 생긴다면 다시 rollback 을 하기때문에 문제가 생기더라도 조금 덜 걱정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JAVA에서 트랜잭션을 처리하려면 context-transaction.xml 과 JAVA 소스 수정이 조금 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 전자정부프레임워크를 사용하다 보니 src/main/resources/egovframework/spring/com 경로에 context-transaction.xml 가 있어서 별도의 생성을 할 필요는 없었다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643180568994&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&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;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;
	xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;
	xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
						http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
						http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd&quot;&amp;gt;

	&amp;lt;bean id=&quot;txManager&quot; class=&quot;org.springframework.jdbc.datasource.DataSourceTransactionManager&quot;&amp;gt;
		&amp;lt;property name=&quot;dataSource&quot; ref=&quot;egov.dataSource&quot;/&amp;gt;
	&amp;lt;/bean&amp;gt;
	  
	&amp;lt;tx:advice id=&quot;txAdvice&quot; transaction-manager=&quot;txManager&quot;&amp;gt;
	   &amp;lt;tx:attributes&amp;gt;	 
	       &amp;lt;tx:method name=&quot;*&quot; propagation=&quot;REQUIRED&quot; rollback-for=&quot;Exception&quot;/&amp;gt;
	   &amp;lt;/tx:attributes&amp;gt;
	&amp;lt;/tx:advice&amp;gt;
    
	&amp;lt;aop:config&amp;gt;
		&amp;lt;aop:pointcut id=&quot;requiredTx&quot; expression=&quot;execution(* egovframework.com..*Impl.*(..)) or
												  execution(* egovframework.rte.fdl.excel.impl.*Impl.*(..))&quot;/&amp;gt;
		&amp;lt;aop:advisor advice-ref=&quot;txAdvice&quot; pointcut-ref=&quot;requiredTx&quot; /&amp;gt;
	&amp;lt;/aop:config&amp;gt;

&amp;lt;/beans&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 context-transaction.xml 가 있다면 바로 자바 코드를 수정할 수 있다. 방법은 어렵지 않다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf1kDO/btrrLOznyFq/ZEVJl5RRUkkjGGDyQiHhm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf1kDO/btrrLOznyFq/ZEVJl5RRUkkjGGDyQiHhm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf1kDO/btrrLOznyFq/ZEVJl5RRUkkjGGDyQiHhm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf1kDO%2FbtrrLOznyFq%2FZEVJl5RRUkkjGGDyQiHhm1%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;745&quot; height=&quot;529&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스명 아래에 &lt;br /&gt;@Resource(name&amp;nbsp;=&amp;nbsp;&quot;txManager&quot;)&amp;nbsp; &lt;br /&gt;protected DataSourceTransactionManager txManager; &lt;br /&gt;를 입력 해 준다.&lt;/li&gt;
&lt;li&gt;실행이 필요한 메소드 안쪽에&amp;nbsp;&lt;br /&gt;DefaultTransactionDefinition&amp;nbsp;def&amp;nbsp;=&amp;nbsp;new&amp;nbsp;DefaultTransactionDefinition(); &lt;br /&gt;def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); &lt;br /&gt;TransactionStatus&amp;nbsp;txStatus&amp;nbsp;=&amp;nbsp;txManager.getTransaction(def);&lt;br /&gt;를 입력 해 준다.&lt;/li&gt;
&lt;li&gt;try 안에 실행할 여러 쿼리들을 작성해 준후 try 제일 마지막 부분에 정상적으로 실행이 된다면 commit을 할수 있도록&amp;nbsp; txManager.commit(txStatus);&amp;nbsp; 을 작성해준다.&lt;/li&gt;
&lt;li&gt;catch 안에는 try와 반대로 정상적으로 실행이 되지 않았을 경우 에러 로그와 rollback 을 진행하기 위하여&amp;nbsp;&lt;br /&gt;e.printStackTrace(); &lt;br /&gt;txManager.rollback(txStatus);&amp;nbsp; 를 작성해 준다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>개발/BackEnd</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/9</guid>
      <comments>https://marimo-developer.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 26 Jan 2022 16:09:15 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트(Javascript)배열을 초기화 하는 방법</title>
      <link>https://marimo-developer.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;흔히 자바스크립트에서 배열을 초기화 할때는 아래와 같이 사용했엇다.&lt;/p&gt;
&lt;pre id=&quot;code_1643158626153&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var arr = [];
for (var i=0; i&amp;lt;10; i++){
    arr.push(i);
}
console.log(arr);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문을 사용하여 배열을 초기화 하고있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순하게 초기화만 하기에는 3줄의 코드를 더 추가하는 것은 가독성을 낮추게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 아래와 같이 효율적인 초기화 방법을 사용하고자 한다.&lt;/p&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;pre id=&quot;code_1643158872334&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var arr = Array.from({length:10});
console.log(arr);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길이가 10인 배열을 생성했고, 이때 arr의 내부의 값은 따로 지정하지 않았기 때문에, undefined로 정의되어 있다.&lt;/p&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;pre id=&quot;code_1643158908303&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var arr = Array.from({length:10}, (value, index) =&amp;gt; index);
console.log(arr);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 내부의값을 초기화 한후 value를 추가함. ( index는 반복문의 배열을 의미함)&lt;/p&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;pre id=&quot;code_1643158939207&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Array.from(Array(3), () =&amp;gt; Array(5).fill(0));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/FrontEnd</category>
      <author>투리비</author>
      <guid isPermaLink="true">https://marimo-developer.tistory.com/8</guid>
      <comments>https://marimo-developer.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 26 Jan 2022 10:05:03 +0900</pubDate>
    </item>
  </channel>
</rss>