<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>mongma-n.log</title>
        <link>https://velog.io/</link>
        <description>골프, 영화, 만화, 경제, 정치, 투자, 당구 등 여러가지 분야에 관심만 많은 개발자입니다. :)</description>
        <lastBuildDate>Mon, 14 Feb 2022 06:59:42 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>mongma-n.log</title>
            <url>https://velog.velcdn.com/images/mongma-n/profile/9a59b1fe-f135-4a57-92e3-77d8cc8d1a48/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. mongma-n.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/mongma-n" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[IntelliJ] Community Edition DB Browser 사용]]></title>
            <link>https://velog.io/@mongma-n/IntelliJ-Community-Edition-DB-Browser-%EC%82%AC%EC%9A%A9</link>
            <guid>https://velog.io/@mongma-n/IntelliJ-Community-Edition-DB-Browser-%EC%82%AC%EC%9A%A9</guid>
            <pubDate>Mon, 14 Feb 2022 06:59:42 GMT</pubDate>
            <description><![CDATA[<h3 id="intellij-community-db-browser-사용">IntelliJ Community DB Browser 사용</h3>
<p>기본적으로 Community Edition 에서는 DB Browser 가 제공되지 않는다.
Community Edition 에서도 DB Browser 를 사용하기 위해서는 별도로 DB Navigator Plugin 을 설치해야 한다.
<img src="https://images.velog.io/images/mongma-n/post/f59efca6-f2ac-430e-bc0d-fdd66104a690/image.png" alt=""></p>
<h3 id="connection-설정">Connection 설정</h3>
<p>Plugin 설치 후 연결하고자 하는 DB Connection 정보를 입력한다.
<img src="https://images.velog.io/images/mongma-n/post/b81f893c-b989-415c-8dc4-40cf1283db84/image.png" alt=""></p>
<h3 id="db-browser">DB Browser</h3>
<p>Connection 정보 설정을 하게 되면 아래와 같이 기본 Scheme 정보를 Browser 상에서 조회할 수 있다.
<img src="https://images.velog.io/images/mongma-n/post/cc47d4cb-9423-4b34-9293-762521309728/image.png" alt=""></p>
<h3 id="sql-사용">SQL 사용</h3>
<p>Consoles &gt; 사용 DB 정보를 클릭한 후, 아래와 같이 select, insert 등 DML 수행이 가능하다.
<img src="https://images.velog.io/images/mongma-n/post/7e333941-5c0e-47b9-a50f-c7df10f691ca/image.png" alt="">
<img src="https://images.velog.io/images/mongma-n/post/8145ed25-5893-4e31-9f53-876883ba8e14/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Proxy HttpsUrlConnection 오류]]></title>
            <link>https://velog.io/@mongma-n/Proxy-HttpsUrlConnection-%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@mongma-n/Proxy-HttpsUrlConnection-%EC%98%A4%EB%A5%98</guid>
            <pubDate>Thu, 10 Feb 2022 04:25:11 GMT</pubDate>
            <description><![CDATA[<h2 id="bug-내용">Bug 내용</h2>
<p>Proxy 환경에서 HttpsUrlConnection 통신으로 POST Method 전송 시, 1회 성공 후 retry 시 실패하는 오류가 있다.
이 때 실패는 서버 측에서 Header 에 담긴 Length 만큼 Body 가 오지 않아, 끝까지 기다리다 Socket Timeout 나는 오류이다.
현상은 1회 성공, 1회 실패, 1회 성공, 1회 실패를 반복하게 되는데 해결 방안은 여러 가지가 있다.</p>
<h3 id="사용-code">사용 Code</h3>
<pre><code>URL url = new URL( &quot;https://example.com/api/test&quot;);

SocketAddress socket = new InetSocketAddress(&quot;IP Addr&quot;,8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, socket);

HttpsUrlConnection urlConnection = url.openConnection(proxy);
urlConnection.setRequestMethod(&quot;POST&quot;);</code></pre><h3 id="case--solution">Case &amp; Solution</h3>
<p>동일한 환경이라도 모든 POST 요청 시 재현되는 것은 아니고, Request Body 중 공백이 포함되는 Case 에서 발생하는 것으로 보인다.
필자의 재현된 Case 는 Body 에 JSONArray + JSONObject 로 구성된 String 을 설정했을 경우에 발생했다.</p>
<p>위의 경우, 아래와 같이 Stable 한 http client 라이브러리를 사용하여 해결할 수 있었다. (ex. apache httpclient-4.4.x.jar)</p>
<p>다른 해결방법으로 참고 링크에 나온 JDK 최신 버전으로 업그레이드도 있을 수 있다.</p>
<pre><code>HttpHost proxy = new HttpHost(proxyIp, proxyPort);
DefaultProxyPlanner router = new DefaultProxyRoutePlanner(proxy);
HttpClient client = HttpClient.custom()
                            .setRoutePlanner(router)
                            .build();

RequestConfig config = RequestConfig.custom()
                            .setSocketTimeout(timeout)
                            .build();

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader(&quot;Content-Type&quot;, &quot;application/json&quot;);
httpPost.setEntity(new StringEntity(jsonString));
httpPost.setConfig(config);

HttpResponse response = client.execute(httpPost);
</code></pre><h3 id="참고">참고</h3>
<p><a href="https://bugs.openjdk.java.net/browse/JDK-8209178">JDK Bug Report</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS Safari Window.open 팝업 제한]]></title>
            <link>https://velog.io/@mongma-n/iOS-Safari-Window.open-%ED%8C%9D%EC%97%85-%EC%A0%9C%ED%95%9C</link>
            <guid>https://velog.io/@mongma-n/iOS-Safari-Window.open-%ED%8C%9D%EC%97%85-%EC%A0%9C%ED%95%9C</guid>
            <pubDate>Thu, 10 Feb 2022 03:35:07 GMT</pubDate>
            <description><![CDATA[<h2 id="ios-safari-팝업-제한-정책">ios safari 팝업 제한 정책</h2>
<p>기본적으로 Safari 에서는 사용자 Click Event 에서만 window.open 을 통한 팝업을 허용하고 있다.
보안 정책 중 하나로 Script 만으로 무분별한 팝업 호출을 제한하고자 하는 목적이다.</p>
<p>Ajax Callback 이나 다른 Function 의 호출 scope 안에서의 window.open 도 허용되지 않는 것과 같다.
아래와 같이 해결할 수 있다.</p>
<h3 id="solution">Solution</h3>
<pre><code>function callA() {
    let winOpen = window.open();

    $.ajax({
        url: &#39;/userAction.do&#39;,
        type: &#39;GET&#39;,
        success: function (data) {
            winOpen.location = data.url;
        }
    });
}</code></pre>]]></description>
        </item>
    </channel>
</rss>