<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>developer_joo.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 14 Sep 2023 11:41:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>developer_joo.log</title>
            <url>https://velog.velcdn.com/images/developer_joo/profile/cf877c45-7333-48b5-9a40-61065b30be65/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. developer_joo.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/developer_joo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Java file outside of source root, Unsupported class file major version 64]]></title>
            <link>https://velog.io/@developer_joo/Java-file-outside-of-source-root-Unsupported-class-file-major-version-64</link>
            <guid>https://velog.io/@developer_joo/Java-file-outside-of-source-root-Unsupported-class-file-major-version-64</guid>
            <pubDate>Thu, 14 Sep 2023 11:41:37 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/developer_joo/post/09a4b411-81d5-4067-9f6a-45a1c4676e1f/image.png" alt=""></p>
<p>스프링 공부를 시작한 초기에 당면했던 에러사항들에 대해 간략하게 정리해두려한다.</p>
<p>우선 Java file outside of source root, Unsupported class file major version 64 이 에러들은 폴더 경로를 다시 설정해볼 것.</p>
<p>위 에러들이 사라지지 않는다면 스프링부트 세팅 시에 Setting에서 (gradle jvm)과 (java compiler version), Project Structure에서 Project SDK의 openjdk version과 build.gradle에서 설정되어있는 java sourceCompatibility의 version, gradle-wrapper.properties의 distributionUrl의 gradle version이 일치해야 돌아간다.</p>
<p>흠..java, gradle 등의 버전들이 맞아떨어지게 설정을 해놔야 한다는 얘기.
gradle에 맞는 java 버전들은 구글링하면 금방 나온다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[boolean 변수 바인딩 에러]]></title>
            <link>https://velog.io/@developer_joo/boolean-%EB%B3%80%EC%88%98-%EB%B0%94%EC%9D%B8%EB%94%A9-%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@developer_joo/boolean-%EB%B3%80%EC%88%98-%EB%B0%94%EC%9D%B8%EB%94%A9-%EC%97%90%EB%9F%AC</guid>
            <pubDate>Thu, 14 Sep 2023 11:34:47 GMT</pubDate>
            <description><![CDATA[<p>우선, Boolean과 boolean의 차이부터 짚고 넘어가자.</p>
<p>Boolean과 boolean은 참조타입과 원시타입이다.</p>
<p>우선 <strong>원시타입(Primitive Type)</strong> 은 기본 데이터 유형을 나타낸다. 이러한 타입은 자바에서 미리 정의되어 있으며, 데이터를 단일 값으로 저장한다. 종류로는 int,double,boolean,char 등등이 있다. 원시 타입 변수는 값을 직접 저장하므로 메모리 사용이 효율적이다(Unboxing을 해줄 필요가 없기 때문에 시간을 단축시킬 수 있다). 하지만 원시타입 변수는 null값을 가질 수 없고, 메서드 호출 시 값을 복사하여 전달한다.</p>
<p><strong>참조타입(Reference Type)</strong> 은 객체를 나타내며 원시 타입과는 달리 데이터의 구조와 메서드를 포함하는 복합 데이터 유형이다. 참조 타입 변수는 객체에 대한 참조(주소)를 저장하므로 객체 자체가 힙(heap)메모리에 저장되고 변수는 해당 객체를 가리킨다. 종류는 class, Interface,Array,Enum 등이 있고, Integer, Boolean, Double 등도 해당된다. 참조 타입 변수는 null 값을 가질 수 있고, 메서드 호출 시 객체의 참조가 전달된다. 이는 메모리 사용이 상대적으로 많을 수 있지만, 더 많은 유연성을 제공한다.</p>
<p>인턴 업무를 하며 Boolean값을 boolean값으로 바꿔야 하는 일이 있었는데 이유는 두 가지 상황만 판단하면 되는 일이었기에 null 값을 포함하는 Boolean보다는 boolean을 사용하는 것이 방어코딩이 원활하기 때문이다.</p>
<p>그래서 boolean으로 바꿔주고 기본세팅인 false를 html, 화면단에서 true값으로 바꿔주려는데 값이 바뀌질 않았다. dto와 html에서는 문제가 없어보였기에 디버깅을 진행해봤더니
<img src="https://velog.velcdn.com/images/developer_joo/post/2f91ce12-966a-45ff-b0de-85d2afc89514/image.png" alt="">
분명 true값을 전달 해줬는데 왜 안될까.. 하며 구글링을 해보니 lombok에서 제공하는 @Getter 혹은 @Setter 어노테이션을 사용할 경우 자동으로 getter/setter메서드를 생성해주는데, 이 때 boolean 타입의 변수에 붙는 prefix는 get이 아닌 is이므로 @RequestBody에서 찾을 수 없어 바인딩 되지 않아 발생하는 문제였다.</p>
<blockquote>
<p><a href="https://projectlombok.org/features/GetterSetter">@Getter and @Setter</a>
<a href="https://kbwplace.tistory.com/167">바인딩 에러 참고 블로그</a></p>
</blockquote>
<p>Boolean을 사용하면 쉽게 해결되는 문제였지만 변수명에서 is prefix를 제거하는 방법을 사용하면 간단하게 해결 가능하다. 제거하면 변수명은 부자연스럽지만 일단 해결된다.</p>
<p>그리고 참조타입이 아닌 원시타입을 사용했기 때문에</p>
<pre><code>&lt;div th:if=&quot;${patientRegistDto.getIsNewPharmacyPatient() &amp;&amp; patientRegistDto.isShowNewPatientModal()}&quot;&gt;</code></pre><p>보면 앞에는 get을 사용했지만 뒤는 is를 사용했다. 참조변수가 아니기 때문에 Unboxing을 해줄 필요가 없는것이다. 이거 한다고 세시간을 넘게 투자했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Thymeleaf]]></title>
            <link>https://velog.io/@developer_joo/Thymeleaf</link>
            <guid>https://velog.io/@developer_joo/Thymeleaf</guid>
            <pubDate>Wed, 13 Sep 2023 06:38:01 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/developer_joo/post/76b8f297-8037-4807-a54a-eee513709674/image.png" alt=""></p>
<h3 id="thymeleaf의-특징">Thymeleaf의 특징</h3>
<p>HTML5 웹 표준을 준수하는 템플릿</p>
<ul>
<li>전체적인 문법이 HTML5 마크업 표준을 최대한 해치지 않게끔 설계</li>
<li>Decoupled logic : 템플릿 문법을 아예 템플릿에서 분리 가능<ul>
<li>순수한 마크업만 남음 -&gt; 템플릿 엔진이 작동하지 않아도 렌더링되는 정적 목업 페이지<ul>
<li>디자이너가 이해하기 쉬운 코드</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="템플릿-문법-적용-방법-3가지">템플릿 문법 적용 방법 3가지</h3>
<ul>
<li>&quot;th:&quot; tag</li>
<li>&quot;data-th-&quot; attribute</li>
<li>decoupled logic</li>
</ul>
<h3 id="expressions">Expressions</h3>
<ul>
<li>Vatiable Expressions : ${...}</li>
<li>Selection Vatiable Expressions : *{...}</li>
<li>Message Expressions : #{...}</li>
<li>Link URL Expressions : @{...}</li>
<li>Fragment Expressions : ~{...}</li>
</ul>
<h3 id="literals">Literals</h3>
<ul>
<li>Text literals : &#39;one text&#39;,&#39;Another one!&#39;,...</li>
<li>Number literals : 0,34,3.0,12.3,...</li>
<li>Null literals : true, false</li>
<li>Null literal : null</li>
<li>Literal tokens : one, sometext, main,...</li>
</ul>
<h3 id="text-operations">Text operations</h3>
<ul>
<li>String concatenation : +</li>
<li>Literal substitutions : |The name is ${name}|</li>
</ul>
<h3 id="arithmetic-operations">Arithmetic operations</h3>
<ul>
<li>Binary operators : +,-,*,/,%</li>
<li>Minus sign (unary operator) : -</li>
</ul>
<h3 id="boolean-operations">Boolean operations</h3>
<ul>
<li>Binary operator : and, or</li>
<li>Boolean negation (unary operator) : !, not</li>
</ul>
<h3 id="comparisons-and-equality">Comparisons and equality</h3>
<ul>
<li>Comparators : &gt;, &lt;, &gt;=, &lt;= (gt, lt, ge, le)</li>
<li>Equality operators : ==, != (eq, ne)</li>
</ul>
<h3 id="conditional-operators">Conditional operators</h3>
<ul>
<li>if-then : (if) ? (then)</li>
<li>if-then : (if) ? (then) : (else)</li>
<li>Default : (value) ?: (defaultvalue)</li>
</ul>
<h3 id="special-tokens">Special tokens</h3>
<ul>
<li>No-Operation : _</li>
</ul>
<h3 id="구글-트렌드">구글 트렌드</h3>
<ul>
<li><p>한국 트렌드
<img src="https://velog.velcdn.com/images/developer_joo/post/18b5d363-0ef1-4d54-8624-c13ae455f384/image.png" alt=""></p>
</li>
<li><p>전세계 트렌드
<img src="https://velog.velcdn.com/images/developer_joo/post/777d980b-aeb6-4225-bb90-112c6e71cff6/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[error = 206]파일 이름이나 확장자명이 너무 깁니다.]]></title>
            <link>https://velog.io/@developer_joo/error-206%ED%8C%8C%EC%9D%BC-%EC%9D%B4%EB%A6%84%EC%9D%B4%EB%82%98-%ED%99%95%EC%9E%A5%EC%9E%90%EB%AA%85%EC%9D%B4-%EB%84%88%EB%AC%B4-%EA%B9%81%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@developer_joo/error-206%ED%8C%8C%EC%9D%BC-%EC%9D%B4%EB%A6%84%EC%9D%B4%EB%82%98-%ED%99%95%EC%9E%A5%EC%9E%90%EB%AA%85%EC%9D%B4-%EB%84%88%EB%AC%B4-%EA%B9%81%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Mon, 11 Sep 2023 01:29:42 GMT</pubDate>
            <description><![CDATA[<h3 id="파일-이름이나-확장자명이-너무-깁니다">파일 이름이나 확장자명이 너무 깁니다.</h3>
<p>위 에러는 보통 윈도우 기반 OS에서 자주 발생하는데, 우선 해당 에러가 발생하는 원인은 gradle에서 java를 실행할 때, commandline으로 실행을 ㅎ는데, classpath의 길이가 너무 길어서 발생하는것이다. 하여 이 classpath를 JAR manifest로 만들어서 실행해주면 해결된다.</p>
<p>찾아보니 해결 방법은 생각보다 단순했고, 다음 과정을 따르면 해결 가능하다.
인턴을 하던중에 맞닥뜨린 에러라서 회사 코드에 관한건 최대한 가리고 업로드 하도록 하겠다.</p>
<ol>
<li>Edit Configuration에 들어간다.
<img src="https://velog.velcdn.com/images/developer_joo/post/99c31719-b2d8-4857-b9ea-df35a172b94a/image.png" alt=""></li>
</ol>
<ol start="2">
<li><p>Application을 들어가 Main Class를 설정하는 곳에서 빌드하고자 하는 class와 module을 설정해준다.
<img src="https://velog.velcdn.com/images/developer_joo/post/88b5b0ce-7173-4f71-b3d3-60b02913e54b/image.png" alt=""></p>
</li>
<li><p>다음으로 우측 상단의 Modify options를 클릭하여 shorten command line을 켜주고
<img src="https://velog.velcdn.com/images/developer_joo/post/47eff14b-6643-4579-b4b0-d929fa314bfc/image.png" alt=""></p>
</li>
<li><p>JAR manifest를 선택, 적용 후에 다시 빌드하면 문제없이 해결 될 것이다.
<img src="https://velog.velcdn.com/images/developer_joo/post/d4285c41-5ee3-4249-b9c9-99cb924e8866/image.png" alt=""></p>
</li>
</ol>
<h3 id="끝">끝</h3>
<p>참고한 사이트를 공유합니다. 같은 어려움에 봉착한 모든분들께서도 도움이 되셨으면 좋겠습니다.</p>
<blockquote>
<p><a href="https://velog.io/@shwj203/CreateProcess-error206-%ED%8C%8C%EC%9D%BC-%EC%9D%B4%EB%A6%84%EC%9D%B4%EB%82%98-%ED%99%95%EC%9E%A5%EB%AA%85%EC%9D%B4-%EB%84%88%EB%AC%B4-%EA%B9%81%EB%8B%88%EB%8B%A4.-bulid-%EC%97%90%EB%9F%AC">에러해결방법법</a>
<a href="https://deviscreen.tistory.com/121">에러 발생 원인</a></p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>