<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title> sinau</title>
    <link>https://sinau.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 8 May 2026 11:43:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>niniz</managingEditor>
    <item>
      <title>내가 볼라고 정리한 HTTP Status Code</title>
      <link>https://sinau.tistory.com/157</link>
      <description>&lt;h1&gt;HTTP Status Code&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;1XX : 정보&lt;/li&gt;
&lt;li&gt;2XX : 성공&lt;/li&gt;
&lt;li&gt;3XX : 리다이렉션&lt;/li&gt;
&lt;li&gt;4XX : 클라이언트 오류&lt;/li&gt;
&lt;li&gt;5XX : 서버 오류&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;2XX&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;200 OK : 요청 성공(성공의 의미는 HTTP method에 따라 달라짐)&lt;/li&gt;
&lt;li&gt;201 Created: 새로운 리소스 생성&lt;/li&gt;
&lt;li&gt;202 Accepted: 요청을 수신했지만 그에 대한 행동은 하지 않았음&lt;/li&gt;
&lt;li&gt;204 No Content: 요청에 대해 보내줄 콘텐츠는 없지만, 헤더는 의미가 있을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;3XX&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;301 Mover Permanently: 영구 리다이렉션, 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음&lt;/li&gt;
&lt;li&gt;308 Permanent Redirect: 301과 기능은 같지만, 요청 메서드와 본문 유지&lt;/li&gt;
&lt;li&gt;302 Found: 일시 리다이렉션, 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음&lt;/li&gt;
&lt;li&gt;307 Temporary Redirect: 302와 기능은 같지만, 요청 메서드와 본문 유지&lt;/li&gt;
&lt;li&gt;303 See Other: 302와 기능은 같지만, 요청 메서드가 무조건 GET으로 변경&lt;/li&gt;
&lt;li&gt;304 Not Modified: 캐시를 목적으로 사용. 리소스가 수정되지 않았음을 알려 클라이언트가 캐시 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;301? 302&lt;/h2&gt;
&lt;p&gt;301은 검색엔진이 변경된 URL로 완전히 이동했다고 판단. 캐시에 저장됨&lt;/p&gt;
&lt;h1&gt;4XX&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;400 Bad Request: 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음&lt;/li&gt;
&lt;li&gt;401 Unauthorized: 인증받지 않음&lt;/li&gt;
&lt;li&gt;403 Forbidden: 접근할 권리가 없음&lt;/li&gt;
&lt;li&gt;404 Not Found: 요청받은 리소스를 찾을 수 없음&lt;/li&gt;
&lt;li&gt;405 Method Not Allowed: 요청한 메소드는 서버에서 알고 있지만, 사용할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;5XX&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;500 Internal Server Error: 서버 에러&lt;/li&gt;
&lt;li&gt;502 Bad Gateway: 게이트웨이로 작업하는 동안 잘못된 응답을 수신&lt;/li&gt;
&lt;li&gt;504 Gateway Timeout: 타임 아웃&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Http Status Code</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/157</guid>
      <comments>https://sinau.tistory.com/157#entry157comment</comments>
      <pubDate>Sun, 5 Feb 2023 12:07:15 +0900</pubDate>
    </item>
    <item>
      <title>내가 볼라고 정리한 HTTP Method</title>
      <link>https://sinau.tistory.com/156</link>
      <description>&lt;h1&gt;HTTP Method 종류&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;GET: 특정 리소스의 표시를 요청. 데이터를 받기만 함&lt;/li&gt;
&lt;li&gt;HEAD: &lt;code&gt;GET&lt;/code&gt;메서드와 동일한 응답을 요구하지만, 응답 본문은 받지 않음&lt;/li&gt;
&lt;li&gt;POST: 특정 리소스에 엔티티를 제출. 종종 서버의 상태의 변화나 부작용을 일으킴&lt;/li&gt;
&lt;li&gt;PUT: 특정 리소스를 요청 payload로 바꿈&lt;/li&gt;
&lt;li&gt;DELETE: 특정 리소스를 삭제&lt;/li&gt;
&lt;li&gt;CONNECT: 목적 리소스로 식별되는 서버로의 터널을 맺음&lt;/li&gt;
&lt;li&gt;OPTIONS: 목적 리소스의 통신을 설정하느데 쓰임&lt;/li&gt;
&lt;li&gt;TRACE: 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 함&lt;/li&gt;
&lt;li&gt;PATCH: 특정 리소스의 부분만을 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;GET vs POST&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;GET&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;POST&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;캐시&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;O&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;브라우저 기록&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;O&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;북마크&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;O&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;길이제한&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;O&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;뒤로가기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;뒤로감&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;데이터가 다시 제출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터 유형 제한&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ASCII&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET&lt;/code&gt;의 길이제한은 URL 길이의 제한(2048자)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST&lt;/code&gt;도 기본적으로 WAS에 따라 요청 바디의 길이 제한이 있을 수 있으나 설정으로 해제 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;POST vs PUT&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;PUT&lt;/code&gt;은 요청이 멱등적(여러 번 호출해도 동일한 결과)&lt;/p&gt;
&lt;h2&gt;PUT 응답&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PUT&lt;/code&gt; 요청으로 데이터를 생성한 경우 &lt;code&gt;201&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUT&lt;/code&gt; 요청으로 데이터를 수정한 경우 &lt;code&gt;200&lt;/code&gt; 또는 &lt;code&gt;204&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;DELETE 응답&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;아마도 명령을 성공적으로 실행할 것 같으나 아직 실행하지 않은 경우 &lt;code&gt;202&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;명령을 수행했고 더 이상 제공할 정보가 없는 경우 &lt;code&gt;204&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;명령을 수행했고 응답 메시지가 이후의 상태를 설명하는 경우 &lt;code&gt;200&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>http method</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/156</guid>
      <comments>https://sinau.tistory.com/156#entry156comment</comments>
      <pubDate>Sun, 5 Feb 2023 12:06:29 +0900</pubDate>
    </item>
    <item>
      <title>정리</title>
      <link>https://sinau.tistory.com/155</link>
      <description>&lt;h1&gt;약수&lt;/h1&gt;
&lt;h2&gt;개념&lt;/h2&gt;
&lt;p&gt;어떤 수를 나누어 나머지가 없이 떨어지게 하는 수&lt;/p&gt;
&lt;h2&gt;약수의 개수 구하기&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;int divisorCount = 0;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문1&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 1; i &amp;lt;= n; i++) {
    if (n % i == 0) {
        divisorCount++;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문2&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 1; i &amp;lt;= Math.sqrt(n); i++) {
    if (i == Math.sqrt(n)) divisorCount++;
    else if (n% i == 0) divisorCount += 2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;약수 모두 구하기&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;List&amp;lt;Integer&amp;gt; divisors = new ArrayList&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문1&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 1; i &amp;lt;= n; i++) {
    if (n % i == 0) {
        divisors.add(i);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문2&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 1; i &amp;lt;= Math.sqrt(n); i++) {
    if (i == Math.sqrt(n)) {
        divisors.add(i);
    } else if (n % i == 0) {
        divisors.add(i);
        divisors.add(n / i);
    }
}

Collections.sort(divisors);&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;최대 공약수&lt;/h1&gt;
&lt;h2&gt;개념&lt;/h2&gt;
&lt;p&gt;정수 a, b가 주어지고 r은 a % b 일 때, GCD(a, b) = GCD(b, r)&lt;/p&gt;
&lt;h2&gt;구현&lt;/h2&gt;
&lt;h3&gt;재귀&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;int gcd(int a, int b) {
    while (b != 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;최소 공배수&lt;/h1&gt;
&lt;h2&gt;개념&lt;/h2&gt;
&lt;p&gt;A = ad, B = bd에서 a, b는 서로소이고, d는 최대공약수이다&lt;br&gt;따라서 a * b * d 이고, 이는 (A * B / d) 이므로 최대공약수를 구함&lt;/p&gt;
&lt;h2&gt;구현&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

private int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;소수&lt;/h1&gt;
&lt;h2&gt;개념&lt;/h2&gt;
&lt;p&gt;소수는 1 이상의 자연수에서 1과 자기 자신만을 약수로 갖는 자연수&lt;/p&gt;
&lt;h2&gt;소수 판독&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;Set&amp;lt;Integer&amp;gt; primeNumbers = new LinkedHashSet&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문1&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 2; i &amp;lt; number; i++) {
    if (number % i == 0) {
        return false;
    }
}
return true;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문2&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 2; i &amp;lt;= Math.sqrt(number); i++) {
    if (number % i == 0) {
        return false;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;N 이하의 모든 소수 구하기&lt;/h2&gt;
&lt;h3&gt;반복문1&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 2; i &amp;lt;= N; i++) {
    boolean flag = true;
    for (int j = 2; j &amp;lt; i; j++) {
        if (i % j == 0) {
            flag = false;
            break;
        }
    }
    if (flag) primeNumbers.add(i);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;반복문2&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;for (int i = 2; i &amp;lt;= N; i++) {
    boolean flag = true;
    for (int j = 2; j &amp;lt;= Math.sqrt(i); j++) {
        if (i % j == 0) {
            flag = false;
            break;
        }
    }
    if (flag) primeNumbers.add(i);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;에라토스테네스의 체&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;boolean[] primes = new boolean[N + 1];  
for (int i = 2; i &amp;lt;= N; i++) {  
    primes[i] = true;  
}  

for (int i = 2; i &amp;lt;= Math.sqrt(N); i++) {  
    if (!primes[i]) continue;  
    for (int j = i * i; j &amp;lt;= N; j+=i) {  
        primes[j] = false;  
    }  
}  

for (int i = 0; i &amp;lt;= N; i++) {  
    if (primes[i]) {  
        primeNumbers.add(i);  
    }  
}&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;소인수분해&lt;/h1&gt;
&lt;h2&gt;개념&lt;/h2&gt;
&lt;p&gt;어떤 수를 소수(Prime)인 인수로 분해하는 것&lt;/p&gt;
&lt;h2&gt;구현&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;List&amp;lt;Integer&amp;gt; factors = new ArrayList&amp;lt;&amp;gt;();
for (int i = 2; i &amp;lt; Math.sqrt(n); i++) {
    while(n % i == 0) {
        factors.add(i);
        n /= i;
    }
}

if (n &amp;gt; 1) {
    factors.add(n);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;각 소수가 몇번씩 들어있나 구현&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;Map&amp;lt;Integer, Integer&amp;gt; factors = new HashMap&amp;lt;&amp;gt;();
for (int i = 2; i &amp;lt; Math.sqrt(n); i++) {
    while(n % i == 0) {
        factors.put(i, factors.getOrDefault(i, 0) + 1);
    }
}

if (n &amp;gt; 1) {  
    factors.put(n, factors.getOrDefault(n, 0) + 1);  
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/155</guid>
      <comments>https://sinau.tistory.com/155#entry155comment</comments>
      <pubDate>Sat, 21 Jan 2023 14:29:34 +0900</pubDate>
    </item>
    <item>
      <title>cURL을 이용한 간단하게 CORS 테스트</title>
      <link>https://sinau.tistory.com/154</link>
      <description>&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;curl --verbose --request OPTIONS \
'http://localhost:8080' (서버) \
--header 'Origin: http://localhost:3000' (클라이언트) \
--header 'Access-Control-Request-Headers: Origin, Accept, Content-Type' \
--header 'Access-Control-Request-Method: GET'&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;567&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nBAzW/btrWv8ol1iG/FeEWZVCx64OlgaN9p0ikfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nBAzW/btrWv8ol1iG/FeEWZVCx64OlgaN9p0ikfk/img.png&quot; data-alt=&quot;성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nBAzW/btrWv8ol1iG/FeEWZVCx64OlgaN9p0ikfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnBAzW%2FbtrWv8ol1iG%2FFeEWZVCx64OlgaN9p0ikfk%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; alt=&quot;성공&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;435&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;435&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;564&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3EEdd/btrWwIJsopT/X8utBToOJoGK4jXi5qdctk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3EEdd/btrWwIJsopT/X8utBToOJoGK4jXi5qdctk/img.png&quot; data-alt=&quot;실패&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3EEdd/btrWwIJsopT/X8utBToOJoGK4jXi5qdctk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3EEdd%2FbtrWwIJsopT%2FX8utBToOJoGK4jXi5qdctk%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; alt=&quot;실패&quot; loading=&quot;lazy&quot; width=&quot;564&quot; height=&quot;362&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실패&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;405 또는 403 반환이면 CORS 허용 설정이 잘 안된 것&lt;/p&gt;</description>
      <category>기타</category>
      <category>CORS</category>
      <category>cors 테스트</category>
      <category>cors 허용</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/154</guid>
      <comments>https://sinau.tistory.com/154#entry154comment</comments>
      <pubDate>Wed, 18 Jan 2023 00:27:17 +0900</pubDate>
    </item>
    <item>
      <title>[Java] jwt 라이브러리에서 Date를 쓰는 이유</title>
      <link>https://sinau.tistory.com/153</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;며칠을 찾다가 chatGPT에게 물어봤다. 가끔 틀린 답변을 내놓기도 해서 어디서 그런 정보를 찾았는지도 물어보았다.&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;우선, 결론은 JWT 라이브러리가 Unix epoch 이후의 초 수를 나타내기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LocalDateTime 클래스는 특정 시간대나 달력을 참조하지 않고 날짜와 시간을 나타내는데&lt;br /&gt;Date 클래스는 특정시간대의 날짜,시간을 잘 주기때문이란다.&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEGSuW/btrWwLlT872/wBqFcCrALXbhyJuFqN793k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEGSuW/btrWwLlT872/wBqFcCrALXbhyJuFqN793k/img.png&quot; data-alt=&quot;java doc의 Date Constructors 설명 부분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEGSuW/btrWwLlT872/wBqFcCrALXbhyJuFqN793k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEGSuW%2FbtrWwLlT872%2FwBqFcCrALXbhyJuFqN793k%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; alt=&quot;설명&quot; loading=&quot;lazy&quot; width=&quot;1327&quot; height=&quot;52&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;java doc의 Date Constructors 설명 부분&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg8n3A/btrWyKlZ4kO/uyCKLnzXjSUrkawX9gvH4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg8n3A/btrWyKlZ4kO/uyCKLnzXjSUrkawX9gvH4k/img.png&quot; data-alt=&quot;RFC 7519&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg8n3A/btrWyKlZ4kO/uyCKLnzXjSUrkawX9gvH4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg8n3A%2FbtrWyKlZ4kO%2FuyCKLnzXjSUrkawX9gvH4k%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; alt=&quot;RFC 7519&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;198&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RFC 7519&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 data-ke-size=&quot;size16&quot;&gt;chatGPT는 &lt;a title=&quot;RFC 7519&quot; href=&quot;https://tools.ietf.org/html/rfc7519&quot;&gt;RFC 7519&lt;/a&gt;를 참고하였다고 했다.&lt;/p&gt;</description>
      <category>Java</category>
      <category>date</category>
      <category>jwt</category>
      <category>LocalDateTime</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/153</guid>
      <comments>https://sinau.tistory.com/153#entry153comment</comments>
      <pubDate>Sat, 14 Jan 2023 21:09:08 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 특정 파일의 히스토리 삭제</title>
      <link>https://sinau.tistory.com/150</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;java_pid**.hprof&lt;/code&gt;파일의 용량때문에 push를 하다 오류가 났습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니 깃허브는 50MB보다 큰 파일을 추가, 업데이트 하는 경우 알림을 받고 100MB보다 큰 파일은 차단하고있었습니다. 이 경우 &lt;code&gt;Git LFS(Git Large File Storage)&lt;/code&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;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3lFs8/btrU01XFcTQ/ydACtdwaczJmuf3g0sqM5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3lFs8/btrU01XFcTQ/ydACtdwaczJmuf3g0sqM5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3lFs8/btrU01XFcTQ/ydACtdwaczJmuf3g0sqM5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3lFs8%2FbtrU01XFcTQ%2FydACtdwaczJmuf3g0sqM5K%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; alt=&quot;깃허브 용량&quot; loading=&quot;lazy&quot; width=&quot;1462&quot; height=&quot;718&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;718&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 해당 파일이 &lt;code&gt;OutOfMemoryError&lt;/code&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;code&gt;filter-branch&lt;/code&gt;을 사용하여 해당 파일의 히스토리를 삭제할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 모든 &lt;code&gt;hprof&lt;/code&gt;확장자의 파일을 삭제하려했기 때문에 아래와 같은 명령어를 통해서 해당 파일의 히스토리를 모두 삭제했습니다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.hprof' \
--prune-empty --tag-name-filter cat -- --all&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;filter-branch&lt;/code&gt;를 사용하니 &lt;code&gt;filter-repo&lt;/code&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;a title=&quot;깃허브 공식문서&quot; href=&quot;https://docs.github.com/ko/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github doc&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;filter-repo&quot; href=&quot;https://github.com/newren/git-filter-repo/#filter-branch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;filter-repo&lt;/a&gt;&lt;/p&gt;</description>
      <category>Git</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/150</guid>
      <comments>https://sinau.tistory.com/150#entry150comment</comments>
      <pubDate>Sat, 31 Dec 2022 09:43:39 +0900</pubDate>
    </item>
    <item>
      <title>[Tomcat] Post요청시 컨트롤러에서 null이 찍힐 때</title>
      <link>https://sinau.tistory.com/149</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 HTTP 메서드에서 Request Body의 용량은 무제한입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 공부 중 Post 요청으로 엄청 긴(많은) 데이터를 보낼 때 Request Body가 특정 길이 이상이면 null이 찍히는 현상이 발생했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니 Tomcat은 기본적으로 post로 전송하는 데이터의 크기와 파라미터 갯수를 제한하고 있습니다.&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;데이터 크기는 기본적으로 2MB(2097152B), 파라미터 갯수는 10,000개입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이보다 많은 데이터를 보내려면 설정을 바꾸어주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 크기는&lt;code&gt;maxPostSize&lt;/code&gt;, 파라미터 갯수는 &lt;code&gt;maxParameterCount&lt;/code&gt; 속성으로 설정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 무제한으로 설정하려면 0보다 작은 수를 입력하면 됩니다.&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1647&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V1i37/btrUvXis4Ez/uePjkoeE7SFumiQRup0dck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V1i37/btrUvXis4Ez/uePjkoeE7SFumiQRup0dck/img.png&quot; data-alt=&quot;톰캣 공식문서&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V1i37/btrUvXis4Ez/uePjkoeE7SFumiQRup0dck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV1i37%2FbtrUvXis4Ez%2FuePjkoeE7SFumiQRup0dck%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;1647&quot; height=&quot;150&quot; data-origin-width=&quot;1647&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;톰캣 공식문서&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9uyW9/btrUCjK6Bmh/PBlEp9JITWm0hPXZhTnlPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9uyW9/btrUCjK6Bmh/PBlEp9JITWm0hPXZhTnlPK/img.png&quot; data-alt=&quot;설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9uyW9/btrUCjK6Bmh/PBlEp9JITWm0hPXZhTnlPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9uyW9%2FbtrUCjK6Bmh%2FPBlEp9JITWm0hPXZhTnlPK%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;691&quot; height=&quot;78&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설정&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 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;figure id=&quot;og_1672029374548&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;Apache Tomcat 9 Configuration Reference (9.0.70) - The HTTP Connector&quot; data-og-description=&quot;This Connector supports all of the required features of the HTTP/1.1 protocol, as described in RFCs 7230-7235, including persistent connections, pipelining, expectations and chunked encoding. If the client supports only HTTP/1.0 or HTTP/0.9, the Connector &quot; data-og-host=&quot;tomcat.apache.org&quot; data-og-source-url=&quot;https://tomcat.apache.org/tomcat-9.0-doc/config/http.html&quot; data-og-url=&quot;https://tomcat.apache.org/tomcat-9.0-doc/config/http.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://tomcat.apache.org/tomcat-9.0-doc/config/http.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tomcat.apache.org/tomcat-9.0-doc/config/http.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;Apache Tomcat 9 Configuration Reference (9.0.70) - The HTTP Connector&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This Connector supports all of the required features of the HTTP/1.1 protocol, as described in RFCs 7230-7235, including persistent connections, pipelining, expectations and chunked encoding. If the client supports only HTTP/1.0 or HTTP/0.9, the Connector&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tomcat.apache.org&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>controller</category>
      <category>NULL</category>
      <category>post</category>
      <category>tomcat</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/149</guid>
      <comments>https://sinau.tistory.com/149#entry149comment</comments>
      <pubDate>Mon, 26 Dec 2022 13:36:32 +0900</pubDate>
    </item>
    <item>
      <title>Gradle Querydsl Annotation Processor로 설정</title>
      <link>https://sinau.tistory.com/148</link>
      <description>&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;implementation 'com.querydsl:querydsl-jpa'

// Querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor &quot;com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa&quot;
// java.lang.NoClassDefFoundError(javax.annotation.Entity) 발생 대응
annotationProcessor &quot;jakarta.persistence:jakarta.persistence-api&quot;
// java.lang.NoClassDefFoundError(javax.annotation.Generated) 발생 대응
annotationProcessor &quot;jakarta.annotation:jakarta.annotation-api&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 가운데의 &lt;code&gt;annotationProcessor 'jakarta.persistence:jakarta.persistence-api'&lt;/code&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;code&gt;annotationProcessor &quot;jakarta.annotation:jakarta.annotation-api&quot;&lt;/code&gt;를 주석처리해도 정상작동 할 지 보려는데 java.lang.NoClassDefFoundError(javax.annotation.Entity)이 발생했다.&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qxt2m/btrRBIT2qTe/SYnrJgNd6Qr9hujqYNgDBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qxt2m/btrRBIT2qTe/SYnrJgNd6Qr9hujqYNgDBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qxt2m/btrRBIT2qTe/SYnrJgNd6Qr9hujqYNgDBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqxt2m%2FbtrRBIT2qTe%2FSYnrJgNd6Qr9hujqYNgDBK%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; alt=&quot;Error&quot; loading=&quot;lazy&quot; width=&quot;757&quot; height=&quot;398&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 저대로 쓰는걸로..&lt;/p&gt;</description>
      <category>Spring</category>
      <category>Annotation Processor</category>
      <category>Gradle</category>
      <category>querydsl</category>
      <category>Q클래스 생성</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/148</guid>
      <comments>https://sinau.tistory.com/148#entry148comment</comments>
      <pubDate>Sat, 19 Nov 2022 01:38:11 +0900</pubDate>
    </item>
    <item>
      <title>Gradle 빌드시 Deprecated Gradle features were used in this build 오류</title>
      <link>https://sinau.tistory.com/147</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;인터넷에 나오는 방법&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2854&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mhKHM/btrRwXDxeq4/tx91TvADKxuxeO4USEQtH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mhKHM/btrRwXDxeq4/tx91TvADKxuxeO4USEQtH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mhKHM/btrRwXDxeq4/tx91TvADKxuxeO4USEQtH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmhKHM%2FbtrRwXDxeq4%2Ftx91TvADKxuxeO4USEQtH1%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;2854&quot; height=&quot;1648&quot; data-origin-width=&quot;2854&quot; data-origin-height=&quot;1648&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 하거나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2854&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsjqEv/btrRv77oQNx/HdwbchU2MJC3W69mKSCmM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsjqEv/btrRv77oQNx/HdwbchU2MJC3W69mKSCmM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsjqEv/btrRv77oQNx/HdwbchU2MJC3W69mKSCmM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsjqEv%2FbtrRv77oQNx%2FHdwbchU2MJC3W69mKSCmM1%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; alt=&quot;설정2&quot; loading=&quot;lazy&quot; width=&quot;2854&quot; height=&quot;1648&quot; data-origin-width=&quot;2854&quot; data-origin-height=&quot;1648&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 하라는데 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;root 폴더에 &lt;code&gt;gradle.properties&lt;/code&gt; 파일 만들고 &lt;code&gt;org.gradle.warning.mode=all&lt;/code&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;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2910&quot; data-origin-height=&quot;2012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buP6AR/btrRt62s5bL/ysUKePbhyfm4VZ7J5eOTK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buP6AR/btrRt62s5bL/ysUKePbhyfm4VZ7J5eOTK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buP6AR/btrRt62s5bL/ysUKePbhyfm4VZ7J5eOTK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuP6AR%2FbtrRt62s5bL%2FysUKePbhyfm4VZ7J5eOTK1%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; alt=&quot;설정3&quot; loading=&quot;lazy&quot; width=&quot;2910&quot; height=&quot;2012&quot; data-origin-width=&quot;2910&quot; data-origin-height=&quot;2012&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Spring</category>
      <category>Deprecated Gradle features were used in this build</category>
      <category>Gradle</category>
      <category>IntelliJ</category>
      <category>warning.mode</category>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/147</guid>
      <comments>https://sinau.tistory.com/147#entry147comment</comments>
      <pubDate>Fri, 18 Nov 2022 04:50:18 +0900</pubDate>
    </item>
    <item>
      <title>[Effective Java] Item85. 자바 직렬화의 대안을 찾으라</title>
      <link>https://sinau.tistory.com/146</link>
      <description>&lt;p&gt;직렬화는 위험합니다. 직렬화의 위험성을 회피하는 가장 좋은 방법은 역직렬화는 하지 않는 것입니다.&lt;/p&gt;
&lt;p&gt;직렬화가 위험한 이유는 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기가 어렵기 때문입니다.&lt;br&gt;직렬화를 완전히 배제할 수 없을 때의 차선책은 신뢰할 수 없는 데이터는 절대 역직렬화하지 않는 것입니다. 특히, 신뢰할 수 없는 발신원으로부터의 RMI는 절대 수용해서는 안됩니다.&lt;br&gt;만약, 직렬화를 피할 수 없고 역직렬화한 데이터가 안전하지 완전히 확신할 수 없는 경우 &lt;code&gt;객체 역직렬화 필터링(java.io.ObjectInputFilter)&lt;/code&gt;를 사용합니다. 이는 자바9에 추가되었고, 이전 버전에서도 사용가능하도록 이식되었습니다. &lt;/p&gt;
&lt;h1&gt;객체 역직렬화 필터링&lt;/h1&gt;
&lt;p&gt;데이터 스트림이 역직렬화되기 전에 필터를 설치하는 기능입니다. 클래슷 단위로, 특정 클래스를 받아들이거나 거부할 수 있습니다. &amp;#39;기본 수용&amp;#39;모드에서는 블랙리스트에 기록된 잠재적으로 위험한 클래스들을 거부합니다. 반대로 &amp;#39;기본 거부&amp;#39;모드에서는 화이트리스트에 기록된 클래스들만 수용합니다.&lt;/p&gt;
&lt;p&gt;블랙리스트방식(기본수용)보다는 화이트리스트(기본거부)방식이 더 좋습니다. 블랙리스트 방식은 이미 알려진 위험으로부터만 보호할 수 있기 때문입니다.&lt;/p&gt;
&lt;h1&gt;SWAT&lt;/h1&gt;
&lt;p&gt;스왓(SWAT, Serial Wwhitelist Application Trainer)는 애플리케이션을 위한 화이트리스트를 자동으로 생성해주는 도구입니다.&lt;/p&gt;</description>
      <author>niniz</author>
      <guid isPermaLink="true">https://sinau.tistory.com/146</guid>
      <comments>https://sinau.tistory.com/146#entry146comment</comments>
      <pubDate>Sun, 2 Oct 2022 12:37:47 +0900</pubDate>
    </item>
  </channel>
</rss>