<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ymym-j.log</title>
        <link>https://velog.io/</link>
        <description>개발을 즐기기 위해 공부하는 백앤드 개발자</description>
        <lastBuildDate>Wed, 06 Jul 2022 10:48:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ymym-j.log</title>
            <url>https://velog.velcdn.com/images/ymym-j/profile/0cd44023-a1f2-403e-abea-aa6f16fe95d0/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ymym-j.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ymym-j" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Http와 Https의 차이]]></title>
            <link>https://velog.io/@ymym-j/Http%EC%99%80-Https%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@ymym-j/Http%EC%99%80-Https%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 06 Jul 2022 10:48:23 GMT</pubDate>
            <description><![CDATA[<h1 id=""></h1>
<h1 id="http란-">HTTP란 ?</h1>
<p>Hyper Text Transfer Protocol의 줄임말이며, 클라이언트와 서버 간에 통신을 주고 받는 기본적인 프로토콜 입니다.</p>
<p>주용도로 서버에서 브라우저로 데이터를 전송하는 용도로 많이 사용한다. 하지만 전송되는 데이터가 암호화 되지 않기 때문에, 노출 위험이 있다.</p>
<h2 id="https란">HTTPS란?</h2>
<p>Hyper Text Transfer Protocol Secure의 줄임말이며 SSL을 사용한다는 특징이 있다.</p>
<p>SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버와 브라우저가 정보를 주고받을 때 도난당하는 것을 막아준다.</p>
<p>HTTP 전체를 암호화하는 것이 아닌 HTTP Body를 암호화한다. HTTP Header는 암호화 하지 않는다!</p>
<h2 id="https의-핵심인-ssl에-대해-상세히-알아보자">HTTPS의 핵심인 SSL에 대해 상세히 알아보자!</h2>
<p>Secure Sockets Layer의 줄임말로 웹 서버와 브라우저간의 보안을 위해 만든 프로토콜이다.</p>
<p>공개키 / 개인키 기반으로 사용함</p>
<h2 id="https를-사용해야되는-이유">HTTPS를 사용해야되는 이유</h2>
<ol>
<li>보안성<ul>
<li>HTTP로 데이터를 전송하는 경우, 데이터는 원본 그 자체로 전송되기 때문에 해커가 가로채면 데이터가 바로 노출된다</li>
<li>HTTPS로 데이터로 전송하였을 때 데이터는 암호화되기 때문에 데이터가 노출되더라도 안의 데이터는 알 수 없다</li>
</ul>
</li>
<li>검색엔진 최적화 (SEO)<ul>
<li>구글에서 HTTPS 웹 사이트에 가산점을 부여하기 때문에, 검색엔진에 노출되기 위해서는 HTTPS는 거의 필수라고 볼수있다.</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Mysql] Too Many Connection error 및 Processlist]]></title>
            <link>https://velog.io/@ymym-j/Mysql-Connection-%EA%B4%80%EB%A6%AC</link>
            <guid>https://velog.io/@ymym-j/Mysql-Connection-%EA%B4%80%EB%A6%AC</guid>
            <pubDate>Tue, 28 Jun 2022 14:21:35 GMT</pubDate>
            <description><![CDATA[<p>mysql로 작업하다보면 빈번하게 발생하는 에러이며,</p>
<p>process list에 대하여 정리가 필요하여 정리를 시작해본다.</p>
<h2 id="😵💫-쿼리로-상태-확인해보기">😵‍💫 쿼리로 상태 확인해보기</h2>
<p>첫번째로 mysql에 접속한 후</p>
<pre><code class="language-sql">mysql &gt; show processlist</code></pre>
<p>해당 명령어를 통해 실행되고있는 SQL문 리스트를 확인해본다</p>
<p>(위의 명령어는 100개까지 노출되고 전체 리스트를 보고싶음 full로 확인)</p>
<h2 id="👩🏻💻-show-processlist-컬럼-comment">👩🏻‍💻 Show Processlist 컬럼 comment</h2>
<p><img src="https://velog.velcdn.com/images/ymym-j/post/bdc0e51d-60fa-4e5d-ae8d-fd71d083b9ed/image.png" alt=""></p>
<p>실행중인 프로세스 확인 후 </p>
<blockquote>
<p>show variables like &quot;%max_connections%&quot;;</p>
</blockquote>
<p>해당 명령어로 max connections를 확인해본다. </p>
<p>서비스의 실행중인 프로세스는 74개였고, max 값은 75개였다.</p>
<p>일단, 작동하고있는 process 중 내 ip로 확인되는 것들은 모두 Kill로 죽여놓았다. (당장 서버에서의 디비 접근이 안됐었음)</p>
<ul>
<li>process를 강제 종료하는 명령어는</li>
</ul>
<pre><code class="language-sql">mysql &gt; kill [processid]</code></pre>
<h2 id="🤝-이슈-해결방법">🤝 이슈 해결방법</h2>
<h3 id="첫-번째로-떠오른-방법은-max_connection-개수를-늘리는-방법이다">첫 번째로 떠오른 방법은, max_connection 개수를 늘리는 방법이다.</h3>
<pre><code class="language-sql">-- 임시 세팅 방법
mysql &gt; set global max_connections=100;

-- 영구적 변경 방법 (파일 변경)
[mysqld]
max_connections = 500</code></pre>
<p>사용하고 있는 서버의 cpu, ram의 여유공간이 넉넉해서 늘려도 되지만, 해당 방법으로는 근본적인 이슈가 해결이 되지 않았다.</p>
<p>현재 서버에 붙여서 테스트하는 수가 많았고 스래드가 종료되기 까지의 time이 길었다.</p>
<h3 id="두-번째-방법-wait_timeout-변경하기">두 번째 방법 wa<strong>it_timeout 변경하기</strong></h3>
<p>wait_timeout은 API를 이용한 client 프로그램 상에서 최대 연결시간을 뜻한다.</p>
<p>설정한 시간 동안 요청이 없으면 연결이 취소되고 다시 요청이 들어오면 자동으로 연결이 된다.</p>
<p>해당 기본 값이 <strong>28800초</strong> 였기 때문에.. 해당 값을 변경하는 것으로 이슈를 해결하기로 하였다.</p>
<p>테스트하는 서버였기 때문에 500초로 변경하였다.</p>
<p><strong>설정 확인방법</strong></p>
<pre><code class="language-sql">-- 글로벌 설정 확인
mysql&gt; show global variables like &#39;%timeout&#39;;

-- session 설정 확인
mysql&gt; show variables like &#39;%timeout&#39;;</code></pre>
<p><strong>설정 변경 방법</strong></p>
<pre><code class="language-sql">-- 임시 설정 (재부팅시 제거)
mysql&gt; set global interactive_timeout=10;

mysql&gt; set global wait_timeout=10;

mysql&gt; set interactive_timeout=10;

mysql&gt; set wait_timeout=10;</code></pre>
<pre><code class="language-sql">-- 설정파일 변경
[mysqld]

interactive_timeout=10

wait_timeout=10</code></pre>
<p>아 추가로 interactive_timeout 은 콘솔이나 터미널 모드(대화형 클라이언트)에서 mysqld와 client가 연결을 맺은 다음 요청을 기다리는 최대시간이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java/Spring] POJO를 다시 짚어보자!]]></title>
            <link>https://velog.io/@ymym-j/POJO%EB%A5%BC-%EB%8B%A4%EC%8B%9C-%EC%A7%9A%EC%96%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@ymym-j/POJO%EB%A5%BC-%EB%8B%A4%EC%8B%9C-%EC%A7%9A%EC%96%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Tue, 28 Jun 2022 13:36:21 GMT</pubDate>
            <description><![CDATA[<h2 id="pojo-plain-old-java-object-란">POJO (Plain Old Java Object) 란?</h2>
<p>POJO는 자바 및 스프링 공부를 하다보면 많이 볼 수 있는 기본개념이다.</p>
<p>일단, 사전적 정의를 해보자면</p>
<blockquote>
<p>오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 &quot;무거운&quot; 객체를 만들게 된 것에 반발해서 사용되게 된 용어</p>
</blockquote>
<p>특정 기술과 환경에 종속되어 의존하게 된 자바코드는, 자바가 가진 객체지향의 장점을 잃으며 유지보수가 떨어지고 가독성이 나빠지게 되었다.</p>
<p>아래의 예제코드를 보면 쉽게 이해가 가능할 것 같다.</p>
<pre><code class="language-java">public class User { 
    private String name; 
    private String address; 

    public String getName() { 
        return name; 
    } 

    public String getAddress() { 
        return address 
    } 

    public void setName(String name) { 
        this.name = name; 
    } 

    public void setAddress(String address) { 
        this.address = addres; 
    } 
}
</code></pre>
<p>이처럼 가장 기본적인 getter, setter 형태를 띄고있는 순수한 클래스를 POJO라 한다.</p>
<h2 id="pojo-조건-및-장점은">POJO 조건 및 장점은?</h2>
<ol>
<li><p><strong>특정 규약에 종속되지 않음</strong></p>
<ul>
<li>객체지향적으로 설계가 가능해짐</li>
<li>로우레벨과 비지니스 코드가 분리되어 가독성 좋은 코드 작성이 가능</li>
</ul>
</li>
<li><p><strong>특정 환경에 종속되지 않음</strong></p>
<ul>
<li>테스트 하기 유용함</li>
</ul>
</li>
<li><p><strong>단일 책임 원칙을 지켜야 함</strong></p>
</li>
</ol>
<h2 id="pojo-프레임워크">POJO 프레임워크</h2>
<p>pojo의 장점과 기존 EJB에서 제공하는 기술을 사용할 수 있도록 도와주는 프레임워크이다.</p>
<p>대표적으로 스프링과 하이버네이트가 있다.</p>
<ul>
<li><strong>스프링</strong></li>
</ul>
<p>IoC 컨테이너를 제공해서, 인스턴스들의 라이프 사이클을 관리한다.</p>
<p>특정 인터페이스를 구현하거나 상속할 필요가 없고 라이브러리를 지원하기에 용이하다.</p>
<p>객체가 가벼운 것이 특징이며, <strong>OOP를 더 OOP답게 쓸 수 있게 해주는 AOP</strong> 기술을 적용해서 POJO 개발을 더 쉽게 만들어준다.
Aop는 나중에 한번 더 다룰 예정</p>
<ul>
<li>하이버네이트</li>
</ul>
<p>Persistence 기술과 오브젝트-관계형 DB 매핑을 순수한 POJO를 이용해 사용할 수 있게 만드는 POJO기반의 퍼시스턴스 프레임워크이다.</p>
<p>하이버네이트가 사용하는 POJO Entity들은 객체지향적인 다양한 설계와 구현이 가능하다는 장점이 있다.</p>
<p>근데 위에서 계속 특정 규역 및 환경에 종속적이면 POJO가 아니라 하였는데, 하이버네이트는 어떻게 사용하는걸까? 🤔 </p>
<p>스프링에서 정한 표준 인터페이스인 <strong>JPA</strong>가 있기 때문이다.</p>
<p>여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래에서 실행된다.</p>
<p>그리하여 스프링이 새로운 엔터프라이즈 기술을 도입하면서 POJO를 유지할 수 있다.</p>
<p>이러한 방법을 <strong>스프링의 PSA</strong>라고 한다.</p>
<p><strong>마지막으로..</strong> 유명한 개발 저서인 토비의 스프링에서</p>
<blockquote>
<p>그럼 특정 기술 규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가? 많은 개발자가 크게 오해하는 것이 이거다.  진정한 POJO란 <strong>객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트</strong>를 말한다.</p>
</blockquote>
<p>POJO 방식을 활용한 많은 라이브러리도 있지만.. 그 개념을 잊지 않고 의식하며 개발해야되는 것이 개발자의 몫이라 생각된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022년 6월 START]]></title>
            <link>https://velog.io/@ymym-j/2022%EB%85%84-6%EC%9B%94-START</link>
            <guid>https://velog.io/@ymym-j/2022%EB%85%84-6%EC%9B%94-START</guid>
            <pubDate>Tue, 28 Jun 2022 13:25:08 GMT</pubDate>
            <description><![CDATA[<p>블로그를 다시 써보려 한다..</p>
<p>음 일단
쓰려 하는 이유는 큰 이유는 없고...</p>
<p>오늘 회사에서 일하던 중 내가 작업했던 부분이 헷갈려서 다시 검색을 하게 되었고,</p>
<p>그 과정에서 현타(??)가 좀 왔기 때문에 기록을 하면 더 머리속에 저장이 잘 될거라 믿으며</p>
<p>회사에서 고민한 부분, 새로 공부한 부분에 대하여 기록을 해보려 한다.</p>
<p> 기존에 Tistory로 쓰고있엇는데, 코드 붙여넣는 서식이 맘에안들어서(? 넘어왔다</p>
<p>추가로 요즘 공부를 생각없이 하고있다는 기분이 든다.</p>
<p>뭔가.. 공부 안하기에는 불안하니까 일주일에 몇시간 씩 의무적으로 하는 느낌..</p>
<p>그래서 계획을 세워서 공부를 하고 그 과정을 차곡차곡 블로그에 담아보고자 한다.</p>
<p>주에 두세개씩 올려보자 아자아자 !!</p>
]]></description>
        </item>
    </channel>
</rss>