<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>coding_egg.log</title>
        <link>https://velog.io/</link>
        <description>코딩💻 고양이😺</description>
        <lastBuildDate>Mon, 06 May 2024 16:04:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>coding_egg.log</title>
            <url>https://velog.velcdn.com/images/coding_egg/profile/0afbade4-78b5-4095-8ec9-018d3ac7af1f/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. coding_egg.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/coding_egg" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[객체지향에 대한 배경을 쌓고 싶다면 읽을 책 : 객체지향의 사실과 오해]]></title>
            <link>https://velog.io/@coding_egg/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%97%90-%EB%8C%80%ED%95%9C-%EB%B0%B0%EA%B2%BD%EC%9D%84-%EC%8C%93%EA%B3%A0-%EC%8B%B6%EB%8B%A4%EB%A9%B4-%EC%9D%BD%EC%9D%84-%EC%B1%85-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9D%98-%EC%82%AC%EC%8B%A4%EA%B3%BC-%EC%98%A4%ED%95%B4</link>
            <guid>https://velog.io/@coding_egg/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%97%90-%EB%8C%80%ED%95%9C-%EB%B0%B0%EA%B2%BD%EC%9D%84-%EC%8C%93%EA%B3%A0-%EC%8B%B6%EB%8B%A4%EB%A9%B4-%EC%9D%BD%EC%9D%84-%EC%B1%85-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9D%98-%EC%82%AC%EC%8B%A4%EA%B3%BC-%EC%98%A4%ED%95%B4</guid>
            <pubDate>Mon, 06 May 2024 16:04:23 GMT</pubDate>
            <description><![CDATA[<h2 id="읽게된-이유">읽게된 이유</h2>
<p>개발 얘기를 하다보면 객체지향이란 단어를 자주 듣고 사용하게 되는데
나는 단어가 추상적이라 관련 지식도 전부 추상적으로만 알고 있었다.
그러다 현재 진행중인 마이그레이션을 기존과 다른 최대한 이상적인 형태로 완성시키고 싶었고 배경지식을 쌓기위한 책으로 해당 책을 읽기 시작했다.</p>
<br/>

<h2 id="리뷰">리뷰</h2>
<p>해당 책은 이해도가 낮아도 읽는데 지장이 없다 생각한다.
코드도 마지막장을 제외하고 일절 나오지 않는다.</p>
<p>저자가 전하고싶은 내용을 친절한 비유를 통해 설명을 하는데 내용 자체가 추상적인 개념이 많기에 예시보다 적절한 비유가 꽤나 읽기 좋았다.
그리고 강조하고 싶은 부분은 책에서도 엄~청나게 강조하고 또 반복한다. (단점이자 장점)</p>
<p>현재는 DDD, MSA에 대해서 스터디를 진행 중인데 해당 책에서 읽은 지식이 많이 도움이 됐다. 
<code>예를 들면 책에서 객체간 역할, 책임, 협력에 대한 얘기를 자주하는데 MSA 책에서는 서버간 분리 과정에서 역할, 책임에 대한 얘기를 거의 동일하게 한다</code></p>
<br/>

<h2 id="추천하는-독자">추천하는 독자</h2>
<ul>
<li>객체지향 프로그래밍이란게 좋아보이고 해보고 싶은데 감이 안잡히는 사람</li>
<li>스스로에게 객체지향을 설명하고 이상함이나 어색함을 느끼는 사람</li>
<li>개발 경험이 한번이라도 있는 사람 (사이드 프로젝트도 좋아용)<ul>
<li>사실 경험이 없더라도 괜찮다 생각하지만 개발경험이 있다면 <code>아하~</code> 하는 상황을 자주 맞이하게 된다</li>
</ul>
</li>
</ul>
<br/>

<blockquote>
<p><strong>한줄평</strong>
인터넷에 흩뿌려져 있는 객체지향의 기본 지식을 모아두고 이쁘게 설명해주는 책</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[블로그 다시 시작합니다!]]></title>
            <link>https://velog.io/@coding_egg/%EB%B8%94%EB%A1%9C%EA%B7%B8-%EB%8B%A4%EC%8B%9C-%EC%8B%9C%EC%9E%91%ED%95%A9%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@coding_egg/%EB%B8%94%EB%A1%9C%EA%B7%B8-%EB%8B%A4%EC%8B%9C-%EC%8B%9C%EC%9E%91%ED%95%A9%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Sun, 17 Mar 2024 18:13:01 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/coding_egg/post/068df990-0ff3-4a9c-a1b5-0fdbca47cf14/image.png" alt=""><em>토스뱅크에 입사하고 올렸던 글 (2022년 6월 6일)</em></p>
<br>

<p>안녕하세요! 저는 현재 기업여신 스쿼드에서 Corebanking Developer로 일하고 있습니다.</p>
<p>저는 금융 분야와 토스뱅크의 도메인을 학습하며 성장해왔습니다. 현재는 대출 신청부터 실행까지의 영역에서 기존 corebanking 시스템을 Kotlin Spring 환경으로 마이그레이션하는 프로젝트를 주도하고 있습니다.</p>
<p>이를 통해 새로운 기술을 습득하고, 사내 및 외부 스터디를 통해 지식을 공유하고 있습니다. 
이로 인해 업무 외에도 개발 관련하여 더 많은 것들을 시도하고 있습니다.</p>
<p>이러한 경험과 성장을 기록하고 공유하기 위해 블로그 활동을 다시 시작해보려고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/1894cb44-4953-40e3-951a-55b26d46b2cf/image.png" alt="">
블로그를 통해 이전에는 제 열정을 TIL, WIL 등으로 기록해왔으나, 이제는 이력성 공유보다는 진정으로 공유하고 싶은 내용을 다루고자 합니다.</p>
<p>따라서 이전의 글들을 삭제하고, 새로운 시작으로 블로그의 퀄리티를 높이고자 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 당분간 보류]]></title>
            <link>https://velog.io/@coding_egg/WIL-%EB%8B%B9%EB%B6%84%EA%B0%84-%EB%B3%B4%EB%A5%98-w50sx4ee</link>
            <guid>https://velog.io/@coding_egg/WIL-%EB%8B%B9%EB%B6%84%EA%B0%84-%EB%B3%B4%EB%A5%98-w50sx4ee</guid>
            <pubDate>Mon, 06 Jun 2022 10:20:23 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="현재-회사의-일정에-따라-활동을-하고-있고">현재 회사의 일정에 따라 활동을 하고 있고</h3>
<h3 id="해당-내용을-기록을-할-수-없기에-당분간은-기록을-안하려한다">해당 내용을 기록을 할 수 없기에 당분간은 기록을 안하려한다.</h3>
<p>빨리 적응하자!</p>
<p>*<em>5/31 ~ *</em></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Flutter] 위젯 공략집!! (feat. 위젯 한글 문서)]]></title>
            <link>https://velog.io/@coding_egg/Flutter-%EC%9C%84%EC%A0%AF-%EA%B3%B5%EB%9E%B5%EC%A7%91-feat.-%EC%9C%84%EC%A0%AF-%ED%95%9C%EA%B8%80-%EB%AC%B8%EC%84%9C</link>
            <guid>https://velog.io/@coding_egg/Flutter-%EC%9C%84%EC%A0%AF-%EA%B3%B5%EB%9E%B5%EC%A7%91-feat.-%EC%9C%84%EC%A0%AF-%ED%95%9C%EA%B8%80-%EB%AC%B8%EC%84%9C</guid>
            <pubDate>Fri, 27 May 2022 05:19:33 GMT</pubDate>
            <description><![CDATA[<h3 id="✨플러터-개발에-도움을-주기-위한-한글-문서-링크"><a href="https://github.com/youjeonghan/Flutter_Widget_Document">✨플러터 개발에 도움을 주기 위한 한글 문서 링크</a></h3>
<blockquote>
<p>지금까지 Flutter개발을 해오면서 공부하고 정리했던 <code>Widget</code> 정리 내용입니다!
Flutter 위젯에 익숙하지 않거나 한글로 된 내용을 확인하고 싶은분들이 활용하여 개발에 도움이 됬으면 좋겠습니다.</p>
</blockquote>
<br>

<p><img src="https://velog.velcdn.com/images/coding_egg/post/f67b61ae-6d98-428c-a331-ba68c4d7c265/image.png" alt=""><img src="https://velog.velcdn.com/images/coding_egg/post/66133024-7303-4ca9-968d-00c785621465/image.png" alt="">메인 <code>readme</code> 화면</p>
<br>

<blockquote>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/11dea3f0-77db-44c4-9276-4e55b45f2873/image.png" alt="">위젯 &gt; container 를 들어간 화면(문서)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[올탈락에서 올합격까지 (feat. 토스뱅크 합격)]]></title>
            <link>https://velog.io/@coding_egg/%EC%98%AC%ED%83%88%EB%9D%BD%EC%97%90%EC%84%9C-%EC%98%AC%ED%95%A9%EA%B2%A9%EA%B9%8C%EC%A7%80-feat.-%ED%86%A0%EC%8A%A4%EB%B1%85%ED%81%AC-%ED%95%A9%EA%B2%A9</link>
            <guid>https://velog.io/@coding_egg/%EC%98%AC%ED%83%88%EB%9D%BD%EC%97%90%EC%84%9C-%EC%98%AC%ED%95%A9%EA%B2%A9%EA%B9%8C%EC%A7%80-feat.-%ED%86%A0%EC%8A%A4%EB%B1%85%ED%81%AC-%ED%95%A9%EA%B2%A9</guid>
            <pubDate>Tue, 24 May 2022 18:14:27 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>입사를 하기전에 이번 경험을 기록도 해둘겸 도움이 될 사람들이 없지 않을까하여 글을 작성한다</p>
</blockquote>
<h2 id="🙄-얼마나-지원해봤나">🙄 얼마나 지원해봤나?</h2>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/10bcc993-0d81-42ad-a6a3-7617083071e5/image.png" alt="">
위의 사진이 지금껏 내가 기록한 내 지원 리스트이다.</p>
<p>사실 저기있는 지원서가 전부도 아니고 몇몇은 빠져있는 정도인데 1년간 많은 지원을 했었다.</p>
<p>사실 이번에 졸업하고 취준을 하기전에는 학업, 네이버 부스트캠프 등을 병행하면서 했기 때문에 취준에 목을 매고 있다기보단 경험 및 연습을 위해 많이 도전했었다. <em>(물론 붙었다면 들어갔겠지만...ㅎ)</em></p>
<br>

<h2 id="🔥-어떻게-준비했나">🔥 어떻게 준비했나</h2>
<blockquote>
<p>이 내용은 토스뱅크 면접 보단 모든 면접에 대한 관점에서의 내용입니다</p>
</blockquote>
<h3 id="알고리즘과-프로젝트포트폴리오-준비">알고리즘과 프로젝트(포트폴리오?) 준비</h3>
<p>사실 준비를 언제부터했다 얘기하기가 애매한데
군대를 전역한 2학년 2학기부터 알고리즘과 개발은 꾸준히 해왔었다. <em>(현재는 22년 2월에 졸업했습니다)</em></p>
<p>딱히 취업을 위해 준비했다기보단... 오로지 알고리즘과 개발이 재미있어서 공부를 하고 있었고 자연스럽게 꿈과 목표로 자리를 잡았다.</p>
<p>그래서 알고리즘과 프로젝트 준비는 크게 신경을 쓰진 않았고 다른 좋은 글들이 많기 때문에 다른글에서 잘안나오지만 좋았던 것들 위주로 얘기하려한다.</p>
<br>

<h3 id="기술-면접">기술 면접</h3>
<p>참고로 나는 컴퓨터공학과이고 전공점수는 <code>4.1</code>점대 정도이다.</p>
<p>원래부터 교양보단 전공 수업을 굉장히 좋아해서 어느정도 베이스는 갖고있었다.</p>
<p>많은 면접을 통해 느꼈던 점은 대부분의 면접에서 인터넷에 검색해서 간단히 나오는 리스트 정도의 질문은 상회하는 퀄리티의 질문이 나온다.</p>
<p>그럼 이를 어떻게 준비하나라고하면 <strong>스터디와 공부하는 자세</strong>에서 크게 도움을 받았던 것 같다.</p>
<br>

<p>먼저 <strong>스터디</strong>는 총 <code>5</code>번정도를 했었는데 사실 나는 시간의 효율성을 굉장히 중요하게 생각해서 스터디가 혼자 공부하는 것 보다 효율이 안좋다고 생각했었다.</p>
<p>그런데 공부를 하다가 느낀점은 혼자 공부하면 결국 <strong>러닝커브</strong>가 빠르게 온다.</p>
<p>이게 무슨말이냐면 혼자할때는 내가 생각할 수 있는 범위내에서만 공부를 하게되는데 결국 어느 정도 수준에 이르면 내 생각을 벗어나기가 힘들어 성장이 뎌더진다.</p>
<p>반대로 스터디를 하면 내가 생각하지도 못한 부분을 발견할 수 있고 내 취약한점이나 보완해야할점 새로운 생각을 많이할 수 있게 되어 계속해서 성장할 수 있었던거 같다.</p>
<p>면접 스터디를 예로들면 동료가 갑자기 생각지도 못한 질문을 해주었는데 내가 그 부분에 대해서 전혀 대답하지 못 하면 그 부분을 공부하고 내것으로 만들어 성장하는 식이다.</p>
<br>

<p>두번째는 <strong>공부하는 자세</strong>라고 했는데 <strong>공부하는 방식</strong>에 대한 얘기다.</p>
<p>개발이든 CS든 뭐든 공부하다보면 의문점이 생기기 마련인데 많은 경우 지나치고 잊게 된다.</p>
<p>우리는 한정된 시간안에 살고있으니 지나칠 수 있다! 하지만 적어도 기술 면접을 제대로 준비하고 싶다면 지나치지 말고 스스로 되물어보자
되물어보고 모르겠다면 공부하고 알아내자 최대한 해봐도 도저히 내 수준에서 도달이 불가능하다면 거기서 만족하면된다.</p>
<p>기술 면접에서는 일반적인 질문에서 내가 전형적인 대답을 내놓는다면 거의 항상 꼬리질문이 들어온다.
위의 방식으로 공부한다면 전보다 훨씬 많은 대답을 할수 있을 거고
같은 질문에 대해서도 대답하는 퀄리티가 분명 달라질 것이 분명하다.</p>
<br>

<h3 id="문화-임원-면접-feat-나를-가꾸자">문화, 임원 면접 (feat. 나를 가꾸자)</h3>
<p>이건 도움이 될지 모르겠지만 자기자신은 자신이 가장 잘 알테니 분명히 나의 약점이 있고 이를 면접때 알리기 싫을 것이다.</p>
<p>그럼 이를 그럴싸하게 거짓말을 쳐서 넘어가보자! 보단 <strong>나를 진짜 그 거짓말 같은 사람으로 만들어보자</strong></p>
<p>내가 그랬는데 나는 원래 굉장히 게으른 사람이다.
그래서 이점을 고치기 위해서 내게 성취감을 부여하려고 여러 방법을 사용했다</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/1256da86-33f1-4a5e-b239-d86d5641ba55/image.png" alt=""><img src="https://velog.velcdn.com/images/coding_egg/post/f328bd27-da56-49a4-a42d-616e6bf0cedd/image.png" alt=""><img src="https://velog.velcdn.com/images/coding_egg/post/911169cd-af5a-4bfe-aad1-cb0567059c75/image.png" alt="">
위와 같이 github, WIL(TIL의 week버전), 시간기록 등을 통해서 성취감을 부여해 쉬는것보다 공부하고 성장하는게 더 행복한 시간으로 만들기 위해 노력했다.</p>
</blockquote>
<p>이렇다보니 면접에서 내가 하는 얘기 자체가 달라졌다.
같은 내용이어도 어떤 근거를 대략적으로나마 들 수 있었고 이런 노력들을 하면서 겪은것들을 얘기하면서 훨씬 신뢰감을 줬을 것이다.</p>
<p><em><strong>조금만 꾸며내고하면 더 간단하지 않나요? 라고 묻는다면 내 대답은 &quot;맞다&quot; 지만
길게 보고 나를 진짜 그렇게 가꾸는 &quot;이게 맞다&quot;.</strong></em></p>
<br>

<h2 id="🎁-마지막-말">🎁 마지막 말</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/447bfb10-9247-4a29-ba3e-1086f3ddfd1c/image.png" alt=""><img src="https://velog.velcdn.com/images/coding_egg/post/2b31e7ce-42ad-4339-a6b9-b0d9bdb3eb5b/image.png" alt=""><strong>공부하며 알게된 멘토, 동료</strong></p>
</blockquote>
<p>부스트캠프 끝난 직후 지원한 곳까지 모두 떨어지고 나서 아주 잠깐 좌절했었다.
제대로 준비한 면접 이었기 때문인데</p>
<p>그걸 성공의 양분으로 삼아 좋은 결과를 만들어냈던 것 같다.</p>
<p><strong>휴먼스케이프</strong>, <strong>가비아</strong>, <strong>스트리미</strong>, <strong>라인</strong>, <strong>토스뱅크</strong> 에 합격을 했고 준비하면서 <strong>토스뱅크</strong>에 매료되어 토스뱅크로 입사를 결정했다.</p>
<p>얼마나 도움이 될지 모르겠지만 미래의 나라도 이 글을 보고 열정 끝까지 잃지 않고 목표를 이뤄냈으면한다.
<strong>나도 그렇고 다들 화이팅!!</strong></p>
<ul>
<li>입사 일주일전 토스에서 온 입사 선물
<img src="https://velog.velcdn.com/images/coding_egg/post/b4795efd-a652-4118-b686-5ba890b9b0ab/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.05.16 ~ 05.22]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.05.16-05.22</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.05.16-05.22</guid>
            <pubDate>Sun, 22 May 2022 14:17:57 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>오라클 공부</li>
</ul>
</blockquote>
<ul>
<li>Do it! 오라클로 배우는 데이터베이스 입문 45p ~ 240P<ul>
<li>오라클 설치 및 설정</li>
<li>SELECT 기본 문법 및 사용</li>
<li>데이터 처리 및 가공을 위함 함수 사용</li>
<li>다중행 함수 및 그룹화</li>
<li>조인 실습<br>
>- Java 공부</li>
</ul>
</li>
<li>이것이 자바다1 34p ~ 160P<ul>
<li>변수, 조건/반복문, 연산자, 참조 타입 등<br>
>- Rev:it 프로젝트</li>
</ul>
</li>
<li>팀장 주간 회의</li>
<li>App 개발<ul>
<li>판매 1단계 페이지 구현 완료</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.05.09 ~ 05.15]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.05.09-05.15</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.05.09-05.15</guid>
            <pubDate>Sun, 15 May 2022 14:58:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Rev:it 프로젝트</li>
</ul>
</blockquote>
<ul>
<li>APP 개발<ul>
<li>내 정보 페이지 구현<ul>
<li>이미지 업로드 및 미리보기 구현</li>
<li>서버 이미지 업로드, 정보 변경 API 적용 및 테스트</li>
<li>검색 페이지 구현<ul>
<li>복잡도 감소를 위한 최근검색목록 위젯 추출</li>
<li>태그 검색 기능 구현</li>
<li>태그 검색 색상 강조 기능 구현<br></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Pull request 코드 리뷰<ul>
<li>판매 내역 페이지 레이아웃 구현
특이사항 X<br></li>
<li>Java 공부</li>
</ul>
</li>
<li>이것이 자바다1 2p ~ 34p<br>
- 오라클 공부</li>
<li>Do it! 오라클로 배우는 데이터베이스 입문 1p ~ 43p
이번에 새롭게 오라클을 사용하게 될거 같아 기초 입문서를 구입해 읽고 있다.</li>
</ul>
<br>

<blockquote>
<h2 id="👉-주간-한-일">👉 주간 한 일</h2>
<p>입사 전 친구들과의 약속을 조금씩 나가고 있다 ㅎㅎㅎ</p>
</blockquote>
<br>

<blockquote>
<h2 id="👉-기타">👉 기타</h2>
<p>입사 후 Java, 오라클을 활용하여 개발을 하게될것으로 예상되어 기본 부터 공부하기 시작</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.05.02 ~ 05.08]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.05.02-05.08</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.05.02-05.08</guid>
            <pubDate>Mon, 09 May 2022 12:57:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Rev:it 프로젝트</li>
</ul>
</blockquote>
<ul>
<li>APP 개발<ul>
<li>메인페이지 관심리스트 데이터 페칭
fetch 데이터에 따른 분기 처리 포함</li>
<li>기존 AttentionList를 PreviewList로 변경 (추상화)</li>
<li>잘못 적용된 컨벤션 수정</li>
</ul>
</li>
</ul>
<br>

<blockquote>
<h2 id="👉-주간-한-일">👉 주간 한 일</h2>
<p>이번에 모든 최종 프로세스를 마무리하고 지원한 회사에 모두 합격하였다.
그중에 면접프로세스 과정을 겪으면서 더욱더 매료된 회사에 입사를 결정하였다.</p>
</blockquote>
<br>

<blockquote>
<h2 id="👉-기타">👉 기타</h2>
<p>이번주는 친구를 거의 보지 못한 반년을 보상하기위해 노는데 집중했다 ㅎㅎ</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.04.25 ~ 05.01]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.04.25-05.01</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.04.25-05.01</guid>
            <pubDate>Sun, 01 May 2022 13:52:45 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>도커 공부</li>
</ul>
</blockquote>
<ul>
<li>시작하세요! 도커/쿠버네티스<ul>
<li>31p ~ 38p
각종 컨테이너 명령어 등 사용<br></li>
<li>Rev:it 프로젝트</li>
</ul>
</li>
<li>APP(Flutter) 개발<ul>
<li><code>requestApiWithToken</code> 수정 전 임시 처리 FIX<br></li>
<li>채팅 페이지 구현<br></li>
<li>model 자동 직렬화 구현
반복적인 패턴의 코드를 계속 추가하는 코스트를 아끼고, 실수를 방지하기 위해서 json_serializable를 적용해서 자동 직렬화 구현함<br></li>
<li>네트워크 문제 발견
<code>.gitignore</code>의 최신화 문제였음<br></li>
</ul>
</li>
<li>Pull request 코드 리뷰<ul>
<li>token store 리팩토링 및 request api with token 함수 세분화
특이사항 X<br></li>
<li>로그인 에러 핸들링
특이사항 X<br></li>
<li>차단 유저 관리 페이지 구현<ul>
<li>특정 코드 작성후 실수로 주석한 부분 체크</li>
<li>위젯의 세분화는 좋으나 주석을 통해 가독성 및 유지보수 유리하게 짜도록 요청</li>
<li><code>docstring</code> 활용 요청</li>
<li><code>todo</code> 활용해서 나중에 처리하기 쉽게 표기하도록 요청<br></li>
</ul>
</li>
</ul>
</li>
<li>지속가능한 SW 개발을 위한 코드리뷰 :: 4월 우아한테크세미나 참여
코드리뷰를 활용해오고 있긴했지만 코드리뷰가 어떤건지에 대해 고민해본적은 없었는데
고민해보고 코드리뷰의 의미부터 팁까지 많이 얻었던 세미나</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.04.18 ~ 04.24]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.04.18-04.24</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.04.18-04.24</guid>
            <pubDate>Sun, 24 Apr 2022 17:41:49 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Rev:it 프로젝트</li>
</ul>
</blockquote>
<ul>
<li>APP 개발팀 회의<ul>
<li>API URL 추상화 어떻게 할지 정함</li>
<li>requestApiWithToken 추상화 세분화하기</li>
<li>주석, 위젯 세분화
Main 페이지 참고해서 세분화 및 주석하기로 결정<br></li>
</ul>
</li>
<li>APP 개발<ul>
<li>메인페이지 디테일 리팩토링<ul>
<li>관심 리스트 존재 유무에 따른 위젯 그리기</li>
<li>관심 리스트 API 연동<br>
>- CS 공부</li>
</ul>
</li>
</ul>
</li>
<li>지금까지 정리해온 내용 리마인딩 및 추가, 보완, 수정 등</li>
<li>면접들 복기<br>

</li>
</ul>
<blockquote>
<h2 id="👉-기타">👉 기타</h2>
<p>다음주 부터는 도커 공부와 APP개발에 집중할 예정</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Flutter] Dart Unhandled Exception: SocketException: OS Error: Connection timed out, errno = 110 / Future 에러 해결]]></title>
            <link>https://velog.io/@coding_egg/Flutter-Dart-Unhandled-Exception-SocketException-OS-Error-Connection-timed-out-errno-110-Future-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@coding_egg/Flutter-Dart-Unhandled-Exception-SocketException-OS-Error-Connection-timed-out-errno-110-Future-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Fri, 22 Apr 2022 11:51:53 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-dart">// 에러코드 전체
E/flutter (28386): [ERROR:flutter/shell/common/shell.cc(94)] Dart Unhandled Exception: SocketException: OS Error: Connection timed out, errno = 110, address = api.rev-it.com, port = 40198, stack trace: #0      _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:681:35)</code></pre>
<br>

<pre><code class="language-dart">Future&lt;List&gt; _fetchData() async {
    내용
}</code></pre>
<p>해당 코드에서 발생한 에러인데 SocketException이 발생하여 네트워크 관련 에러로 추측하여 바로 찾지 못 하였다.
<code>&lt;Map&lt;String, dynamic&gt;&gt;</code> 형식으로 return 하기에 발생한 에러로 errno = 110 내용에 대해서는 관련 레퍼런스가 적어 글을 작성한다.</p>
<br>

<pre><code class="language-dart">Future&lt;Map&lt;String, dynamic&gt;&gt; _fetchData() async {
    내용
}</code></pre>
<p>return 형식에 제대로 맞추면 에러는 해결된다.</p>
<br>]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.04.11 ~ 04.17]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.04.11-04.17</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.04.11-04.17</guid>
            <pubDate>Mon, 18 Apr 2022 14:20:46 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Rev:it 프로젝트</li>
</ul>
</blockquote>
<ul>
<li>전체 회의<ul>
<li>리뷰 사항 선택을 위해 오프라인으로 모임</li>
<li>2지선다와 태그방식을 optional로 제공하여 3지선다와 같은 효과를 볼수있다고 판단<br></li>
</ul>
</li>
<li><a href="https://docs.google.com/spreadsheets/d/1QN1N2pMRrI3rMAaSedA_hZ4_T0i7rYjDtSTaUjsWoxs/edit#gid=0">APP 개발 백로그 작성</a>
APP 개발의 진행도 파악이 힘들고 어떤 태스크들이 남아있는지 파악이 힘들다는 점을 커버를 위해 작성<br></li>
<li>APP 개발
API 토큰 적용<br>
>- 면접 준비</li>
<li>면접 스터디 모임
모의 면접을 통해 부족한 부분을 파악하고 보완<br></li>
<li>CS 공부
지금까지 정리해온 내용 리마인딩 및 추가, 보완, 수정 등</li>
</ul>
<br>

<blockquote>
<h2 id="👉-기타">👉 기타</h2>
<p>이번주까지는 프로젝트랑 하고싶은 공부에 잠깐 손 떼고 면접 준비에 좀 더 신경을 쓸 예정</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS] Nosql이 수평확장(Scale Out)에 유리한 이유]]></title>
            <link>https://velog.io/@coding_egg/CS-Nosql%EC%9D%B4-%EC%88%98%ED%8F%89%ED%99%95%EC%9E%A5Scale-Out%EC%97%90-%EC%9C%A0%EB%A6%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@coding_egg/CS-Nosql%EC%9D%B4-%EC%88%98%ED%8F%89%ED%99%95%EC%9E%A5Scale-Out%EC%97%90-%EC%9C%A0%EB%A6%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Wed, 13 Apr 2022 05:55:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>NoSQL은 SQL과 다르게 수평확장에 유리하다고 알고 있고 그렇게 공부했다.
이유를 알고싶지만 생각보다 이유에 대한 레퍼런스가 적었기에 이유를 알아보려한다.</p>
</blockquote>
<h1 id="📌-rdb의-수평확장">📌 RDB의 수평확장</h1>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/fc51643d-3aa4-4671-b192-fbb1abd70007/image.png" alt="">예를 들어 위의 경우 서버를 2개를 사용하여 수평확장을 한다면
A서버: 1, 2
B서버: 3, 4
이렇게 데이터를 나눌수 있을것이다.</p>
<p>아직은 큰문제가 없어보이는데 여기서 테이블과 서버를 추가해보자</p>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/3acd7e39-c3f3-4107-aa83-c8e6729f83bc/image.png" alt="">이런 테이블 2개와 C서버를 추가한다고 가정하자
게시글
A서버: 1, 2
B서버: 3
C서버: 4</p>
<p>댓글
A서버: 1
B서버: 2, 3
C서버: 4</p>
<p>이렇게 되면 이제 더 복잡해지는데
데이터를 어떤 기준으로 나누어 저장할지 부터
만약 데이터를 나눴는데 A서버에 있는 게시글1에 댓글 3, 4가 속해 있다면 모든 서버를 뒤져야 원하는 결과를 가져올 수 있을것이다.</p>
<p>이렇게 <strong>관계가 생길수록 데이터가 늘어날수록 RDB에서는 수평확장에 대한 관리가 복잡</strong>해진다.</p>
<p>그렇다고 데이터를 NoSQL처럼 중복해서 저장하면 일관성(Consistency)이 떨어져 정상적인 Join관 ACID트랜잭션 기능을 사용할 수가 없다.</p>
<br>

<h1 id="📌-nosql의-수평확장">📌 NoSQL의 수평확장</h1>
<p><img src="https://velog.velcdn.com/images/coding_egg/post/ad90b75b-5a75-4842-b140-9651697ad295/image.png" alt=""> 이렇게 돼있는 NoSQL 컬렉션이라면 
A서버: 1
B서버: 2
C서버: 3
이렇게 단순히 구간만 잘라서 데이터를 나누어 줄 수 있다.
이런 특징은 NoSQL의 임베드 방식에 따라서 나타나는 특징이라 생각한다.</p>
<br>

<h1 id="📌-정리">📌 정리</h1>
<p>SQL에서는 일관성을 보장해야하기 때문에 수평확장이 불가능하고 일관성을 보장하자니 수평확장을 통해 데이터를 관리하기 굉장히 복잡해진다.
NoSQL은 임베드 방식으로 인해 단순히 구간만 나누어 주어도 적절히 분산이 가능하고 사용함에 이상이 없다.</p>
<br>

<h1 id="참고">참고</h1>
<ul>
<li><a href="https://broccoli45.tistory.com/46">수평확장(Scale Out)은 RDB보단 NoSQL</a></li>
<li><a href="https://chankim.tistory.com/5">쉽게 설명한 NoSQL</a></li>
<li><a href="https://shoark7.github.io/programming/knowledge/what-is-NoSQL">NoSQL에 대해 알아보자</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.04.04 ~ 04.10]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.04.04-04.10</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.04.04-04.10</guid>
            <pubDate>Sun, 10 Apr 2022 17:51:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Rev:it 프로젝트</li>
</ul>
</blockquote>
<ul>
<li>팀장 회의<ul>
<li>각 파트 브리핑</li>
<li>리뷰 평가 방식 계속 논의중
오프라인 회의를 통해 결정하기로함</li>
<li>태그 관련 리뷰 진행</li>
<li>서버 더미 데이터 요청</li>
</ul>
</li>
<li>APP 개발
APP 서비스 앞딴 API 연동 중<br>
- 알고리즘 공부</li>
<li>백준
DP가 조금 약하다 생각해서 DP 위주로 문제 풀이<ul>
<li>3568_iSharp, 15989_1, 2, 3 더하기 4, 1495_기타리스트, 11058_크리보드, 12026_BOJ 거리, 5557_1학년, 13549_숨바꼭질 3, 16930_달리기<br></li>
<li>CS 공부 및 면접 복기</li>
</ul>
</li>
<li>네트워크, 운영체제, 데이터베이스 등 계속하여 모자른 부분 노션에 정리하고 공부중</li>
<li>과거 면접 질문을 통해 모자란 부분 파악하고 복습</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.03.28 ~ 04.03]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.03.28-04.03</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.03.28-04.03</guid>
            <pubDate>Mon, 04 Apr 2022 05:52:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Rev:it 프로젝트</li>
</ul>
</blockquote>
<ul>
<li>전체 회의<ul>
<li>리뷰 평가 방식 논의
평가를 좋다/보통이다/싫다, 좋다/싫다, 별점 이 세가지에서 주장하고 장단점을 비교해봄.
세분화는 있어야한다 생각.<br></li>
<li>앱 이용시 로그인 필수로 할지 논의
일단은 웹으로 확장을 배제하고 필수로 하는게 흐름이 괜찮다고 정함<br></li>
<li>각 파트 진행 프로세스 브리핑<br></li>
</ul>
</li>
<li>APP 개발<ul>
<li>판매 페이지 2단계 옵션 스타일 및 기능 구현</li>
<li>메인페이지 API 연동 고려하여 예외처리</li>
<li>메인페이지 디테일 추가 및 수정 (간격, 데이터 fetch 결과에 따른 UI 생성 등)<br></li>
<li>알고리즘 공부</li>
</ul>
</li>
<li>코딜리티
3문제<br></li>
<li>백준
14226_이모티콘, 17086_아기 상어 2, 15486_퇴사 2, 1890_점프, 3085_사탕 게임, 17070_파이프 옮기기 1, 12851_숨바꼭질 2<br>
- CS 공부 및 복기
노션에 정리한 내용을 리마인딩하고 전에 봤던 시험 및 면접들에 대해 복기

</li>
</ul>
<br>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.03.21 ~ 03.27]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.03.21-03.27</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.03.21-03.27</guid>
            <pubDate>Mon, 28 Mar 2022 10:25:57 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>Message Application
koa를 통해 만든 api server
디테일이나 깔끔히 코딩하기 위해 신경을 씀 (컨벤션, fit flow, 디자인 패턴 등)</li>
</ul>
</blockquote>
<ul>
<li>프론트 페이지 구현 및 API와 연동</li>
<li>댓글 모델 추가 및 Table간 관계 설정</li>
<li>댓글 API 추가</li>
<li>추후에 테스트 코드를 달고 docker를 통해 배포를 해보고싶은데 현재 할게 너무많아 조금 미루어본다..ㅠ<br>
- 알고리즘 공부</li>
<li>백준
  2501_약수 구하기, 14888_연산자 끼워넣기, 1292_쉽게 푸는 문제, 2504_괄호의 값, 1062_가르침, 1700_멀티탭 스케줄링, 1197_최소 스패닝 트리, 16916_부분 문자열, 2293_동전 1, 3085_사탕 게임, 1798_수들의 합, 1038_감소하는 수, 2294_동전 2, 1743_음식물 피하기<br></li>
<li>정리 코드 추가
  set 사용법, 유니온 파인드, 약수 빠르게 구하기, 이진탐색, 힙큐 사용법 등 추가<br></li>
<li>알고리즘 개념 공부
  kmp알고리즘<br>
- CS 공부
전에 받았던 면접 질문 복기 및 정리해놓은 내용을 보완하고 약한 부분을 이해하는 방식으로 공부함
<br>
- Rev:it 프로젝트</li>
<li>APP팀 회의<ul>
<li>git flow 전략 토의
원래 사용하던 유사 git flow를 그대로 사용하기로함
스쿼시 커밋보다 신경쓸거는 많지만 그만큼 이점이 있다고 판단 및 APP개발시 유독 더 많이 활용 등의 이유<br></li>
</ul>
</li>
<li>APP 개발
  판매 페이지 2단계 스타일 및 기능 구현</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[python] 알고리즘 및 개발시 유용한 코드 모음]]></title>
            <link>https://velog.io/@coding_egg/python-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%8F-%EA%B0%9C%EB%B0%9C%EC%8B%9C-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EC%BD%94%EB%93%9C-%EB%AA%A8%EC%9D%8C</link>
            <guid>https://velog.io/@coding_egg/python-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%8F-%EA%B0%9C%EB%B0%9C%EC%8B%9C-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EC%BD%94%EB%93%9C-%EB%AA%A8%EC%9D%8C</guid>
            <pubDate>Mon, 21 Mar 2022 08:50:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>2022.04.13 추가된 내용 최신화 했습니다.</p>
</blockquote>
<blockquote>
<p>지금까지 python을 통해 개발하고 알고리즘을 풀면서 가독성이나 효율 혹은 짧은 코드를 만드는데 유용했던 코드들 모음입니다.
저도 알고리즘을 풀다 가끔 찾게 되는 내용으로 다른 분들께도 유용하리라 생각합니다.
파이썬의 내부 모듈만을 사용했습니다.</p>
</blockquote>
<pre><code class="language-python">&quot;&quot;&quot;
파이썬 알고리즘 코드
&quot;&quot;&quot;

### 2개의 변수에 입력을 빠르게 받아야 하는 경우
import sys

n, m = map(int, sys.stdin.readline().strip().split())
# ------------------------------------------------------------------------------------------------------------


### int형 숫자들을 빠른 속도로 입력받아 list로 만들때
from sys import stdin

read = stdin.readline
li = list(map(int, read().split()))
# ------------------------------------------------------------------------------------------------------------


### 조합 이용
from itertools import combinations

li = [1, 2, 3]
combi = list(combinations(li, 2))  # li 원소들의 2개를 선택한 조합의 경우가 list 안에 tuple 형식으로 저장된다.
# ------------------------------------------------------------------------------------------------------------


### (int or float) max값 사용
import sys

int_max = sys.maxsize
int_max2 = float(&quot;inf&quot;)
# ------------------------------------------------------------------------------------------------------------


### 절대값 ###
abs_num = abs(-10)
# ------------------------------------------------------------------------------------------------------------


### 리스트 뒤집기
li = [1, 2, 3, 4, 5]
print(li[::-1])
# ------------------------------------------------------------------------------------------------------------


### 딕셔너리를 key, value를 기준으로 내림차순 정렬하기
## _dict = dict(sorted(~~~)) 을 하면 다시 딕셔너리가 된다
# key 기준
_dict = {&quot;a&quot;: 1, &quot;n&quot;: 12, &quot;b&quot;: 5, &quot;c&quot;: 3, &quot;z&quot;: 2}
print(
    sorted(_dict.items(), key=lambda x: x[0], reverse=True)
)  # [(&#39;z&#39;, 2), (&#39;n&#39;, 12), (&#39;c&#39;, 3), (&#39;b&#39;, 5), (&#39;a&#39;, 1)]

# value 기준
print(
    sorted(_dict.items(), key=lambda x: x[1], reverse=True)
)  # [(&#39;a&#39;, 1), (&#39;z&#39;, 2), (&#39;c&#39;, 3), (&#39;b&#39;, 5), (&#39;n&#39;, 12)]
# ------------------------------------------------------------------------------------------------------------


### 딕셔너리의 key, value 값 서로 바꾸기
di = {&quot;a&quot;: 0, &quot;b&quot;: 1, &quot;c&quot;: 2}
di = {v: k for k, v in di.items()}
# ------------------------------------------------------------------------------------------------------------


### 두가지 기준으로 정렬
list = [[3, 4], [1, 1], [1, -1], [2, 2], [3, 3]]
list.sort(key=lambda x: (x[0], x[1]))
# 1 -1
# 1 1
# 2 2
# 3 3
# 3 4
# ------------------------------------------------------------------------------------------------------------

### 리스트안 여러 문자열 한줄 출력
words = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
print(&quot;\n&quot;.join(words))
# ------------------------------------------------------------------------------------------------------------

### 입력 문자의 &#39;\n&#39; 줄바꿈 제외하고 입력받기
import sys

sys.stdin.readline().rsplit()[0]
# or
sys.stdin.readline().strip()  # 양쪽 공백 제거
# ------------------------------------------------------------------------------------------------------------

### 해당 문자열의 숫자, 알파벳 확인
num = &quot;1&quot;
alpha = &quot;abc&quot;
print(num.isdigit())  # True
print(alpha.isalpha())  # True
# ------------------------------------------------------------------------------------------------------------


### 2차원 리스트 1차원으로 합치기
my_list = [[1, 2], [3, 4], [5, 6]]

answer = sum(my_list, [])  # [1, 2, 3, 4, 5, 6]
# ------------------------------------------------------------------------------------------------------------

### 리스트 스프레드
my_list = [[1, 2], [3, 4], [5, 6]]

print(*my_list)  # [1, 2] [3, 4] [5, 6]
# ------------------------------------------------------------------------------------------------------------


### 문자열 내용 코드화하기
string = &quot;print(&#39;abcd&#39;)&quot;
eval(string)
# ------------------------------------------------------------------------------------------------------------


### 정규표현식 사용법
import re

string = &quot;-10+1-20&quot;
num = list(map(int, re.compile(r&quot;[0-9]+&quot;).findall(string)))  # [10,1,20]
sym = re.compile(r&quot;\+|-&quot;).findall(string)  # [&quot;-&quot;,&quot;+&quot;,&quot;-&quot;]
# ------------------------------------------------------------------------------------------------------------


### 2차원 리스트 90도 돌리기
# 1번 방법
def rotated(array_2d):
    list_of_tuples = zip(*array_2d[::-1])
    return [list(elem) for elem in list_of_tuples]
    # return map(list, list_of_tuples)


# 2번 방법
def rotated(a):
    n = len(a)
    m = len(a[0])

    result = [[0] * n for _ in range(m)]

    for i in range(n):
        for j in range(m):
            result[j][n - i - 1] = a[i][j]
    return result


# ------------------------------------------------------------------------------------------------------------


### 몫, 나머지 동시 구하기
a, b = divmod(3, 15)
print(a, b)  # (0, 3)
# ------------------------------------------------------------------------------------------------------------


### 조합의 수 구하기 (좌표와 좌표의 최단거리 2가지 방향일때)
# nCr : n개중 r개 고르기
# 조합 공식: nCk = n! / (n-k)! x k!
from math import factorial

n, r = 9, 5  # 14개의 움직임중 오른쪽 이동 5개 고르기 (위로 4번)
print(factorial(n + r) // (factorial(n) * factorial(r)))
# ------------------------------------------------------------------------------------------------------------


### 순열의 수 구하기
# nPr : n개중 r개 나열하기
# 순열 공식: nPr =  n! / (n-r)!
from math import factorial

n, r = 9, 5  # 14개에서 5개 골라 나열하는 경우의 수
print(factorial(n + r) // factorial((n + r) - r))
# ------------------------------------------------------------------------------------------------------------


### 2차원 배열에서 일부분만 가져오기
li = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
print([i[:2] for i in li])  # [[1, 2], [1, 2], [1, 2]]
# ------------------------------------------------------------------------------------------------------------


### 최소 공배수
import math

math.lcm(A, B)
# lcm = Least Common Multiple
# ------------------------------------------------------------------------------------------------------------


### Counter (카운터) 사용법
from collections import Counter

Counter(&quot;hello world&quot;)  # Counter({&#39;l&#39;: 3, &#39;o&#39;: 2, &#39;h&#39;: 1, &#39;e&#39;: 1, &#39; &#39;: 1, &#39;w&#39;: 1, &#39;r&#39;: 1, &#39;d&#39;: 1})
Counter([&quot;h&quot;, &quot;e&quot;, &quot;l&quot;, &quot;l&quot;, &quot;o&quot;])  # Counter({&#39;l&#39;: 2, &#39;h&#39;: 1, &#39;e&#39;: 1, &#39;o&#39;: 1})

# 개수 많은 순으로 정렬 된 배열 리턴
Counter([&quot;h&quot;, &quot;e&quot;, &quot;l&quot;, &quot;l&quot;, &quot;o&quot;]).most_common()  # [(&#39;l&#39;, 2), (&#39;h&#39;, 1), (&#39;e&#39;, 1), (&#39;o&#39;, 1)] /

# 개수 많은 순으로 정렬 된 배열에서 n개만 리턴
Counter([&quot;h&quot;, &quot;e&quot;, &quot;l&quot;, &quot;l&quot;, &quot;o&quot;]).most_common(1)  # [(&#39;l&#39;, 2)]

a = Counter([&quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;])  # Counter({&#39;a&#39;: 5, &#39;b&#39;: 3})
b = Counter([&quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;, &quot;c&quot;])  # Counter({&#39;b&#39;: 5, &#39;c&#39;: 2})
print(a, b)
# 교집합 (b는 2개다 있어서 작은값을 가져옴)
print(a &amp; b)  # Counter({&#39;b&#39;: 3})
# 합집합 (b는 2개다 있어서 큰값을 가져옴)
print(a | b)  # Counter({&#39;a&#39;: 5, &#39;b&#39;: 5, &#39;c&#39;: 2})

# 덧셈 뺄셈 가능
print(a - b)  # Counter({&#39;a&#39;: 5})
print(a + b)  # Counter({&#39;b&#39;: 8, &#39;a&#39;: 5, &#39;c&#39;: 2})
# ------------------------------------------------------------------------------------------------------------


### 특정 기준으로 문자열 나누기
print(&quot;1 2 3&quot;.split(&quot; &quot;))  # [&#39;1&#39;, &#39;2&#39;, &#39;3&#39;]
print(&quot;1 2 3&quot;.split(&quot; &quot;, maxsplit=1))  # [&#39;1&#39;, &#39;2 3&#39;]
# ------------------------------------------------------------------------------------------------------------


### bisect(이진탐색) 사용법
from bisect import bisect_left, bisect_right

# bisect_left(literable, value) : 왼쪽 인덱스를 구하기
# bisect_right(literable, value) : 오른쪽 인덱스를 구하기
nums1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
nums2 = [4, 5, 5, 5, 5, 5, 5, 5, 5, 6]

print(bisect_left(nums1, 5))  # 5
print(bisect_right(nums1, 5))  # 6

print(bisect_left(nums2, 5))  # 1
print(bisect_right(nums2, 5))  # 9
# ------------------------------------------------------------------------------------------------------------

### 약수 빠르게 구하기
# 시간 복잡도 : O(N^(1/2))
def getDivisor(n):
    result_list = []
    for i in range(1, n ** (1 / 2) + 1):
        result_list.append(i)
        if i ** 2 == n:
            result_list.append(n // i)
    result_list.sort()
    return result_list


# ------------------------------------------------------------------------------------------------------------

### set 사용법
a = {1, 2, 3}

# 원소 추가
a.add(4)  # {1, 2, 3, 4}

# 원소 여러개 추가
a.update({5, 6})  # {1, 2, 3, 4, 5, 6}
a.update([5, 6])  # {1, 2, 3, 4, 5, 6}

# 원소 삭제 (remove는 원소 존재 안하면 에러 / discard는 에러 안남)
a.remove(6)  # {1, 2, 3, 4, 5}
a.discard(5)  # {1, 2, 3, 4}

a = {1, 2, 3}
b = {3, 4, 5}

print(a | b)  # 합집합 {1, 2, 3, 4, 5}
print(a &amp; b)  # 교집합 {3}
print(a - b)  # 차집합 {1, 2}
# ------------------------------------------------------------------------------------------------------------

### 유니온 파인드
parent = list(range(vertex + 1))


def union(a, b):
    a = find(a)
    b = find(b)

    if b &lt; a:
        parent[a] = b
    else:
        parent[b] = a


def find(a):
    if a == parent[a]:
        return a
    parent[a] = find(parent[a])  # 경로 압축
    return parent[a]


# ------------------------------------------------------------------------------------------------------------


### 힙큐 사용법
import heapq as hq

heap = [6, 2, 5, 4, 1, 3]
hq.heapify(heap)  # 기존의 리스트 힙으로 만드는 함수
hq.heappush(heap, num)
n = hq.heappop(heap)

hq.heappush(heap, (-num, num))  # 최대힙처럼 사용 가능(우선 순위, 값)
# ------------------------------------------------------------------------------------------------------------


### 대문자, 소문자
str1 = &quot;WORLD&quot;
str2 = &quot;WORLD!&quot;
str3 = &quot;hello&quot;

print(&quot;WORLD&quot;.isupper())  # True
print(&quot;WORLD!ㄷ&quot;.isupper())  # True (특수문자, 한글 등은 무시하고 따지니 조심하자)
print(&quot;hello&quot;.islower())  # True

print(&quot;World&quot;.upper())  # WORLD
print(&quot;HELLO&quot;.lower())  # hello
# ------------------------------------------------------------------------------------------------------------


### 반올림, 올림, 내림
print(round(1234.233))  # 1234
print(round(1234.233, 2))  # 1234.23
# 주의: round는 짝수에 가까운쪽으로 반올림한다
print(round(1.5))  # 2
print(round(2.5))  # 2

import math

print(math.ceil(1.5))  # 2 / 올림: 양의 무한대 가까운 정수
print(math.floor(1.5))  # 1 / 내림: 음의 무한대에 가까운 정수
print(math.trunc(1.5))  # 1 / 버림: 0에 가까운 정수
# ------------------------------------------------------------------------------------------------------------
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.03.14 ~ 03.20]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.03.14-03.20</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.03.14-03.20</guid>
            <pubDate>Mon, 21 Mar 2022 08:43:27 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
<ul>
<li>알고리즘 공부
최근 DP 파트에 대해서 취약하다 생각하여 DP 관련 문제 위주로 공부</li>
</ul>
</blockquote>
<ul>
<li>백준
  17202_핸드폰 번호 궁합, 1010_다리 놓기, 9655_돌게임, 8394_악수</li>
<li>파이썬 정리 코드 추가
  이진탐색, 순열/조합 경우의수, 특정 기준 문자열 나누기, 카운터 사용법 및 예제 등 추가함<br>
- CS 공부</li>
<li>네트워크 및 운영체제 위주로 정리해논 노션 페이지 리마인딩</li>
<li>보충할 내용들 추가<br>
- git 공부
git 서버 잠깐 터진걸 내 실수로 알고 공부함...ㅎ</li>
<li>git reset soft, mix, hard 상황별 사용법</li>
<li>git 커밋 찾아서 복구하기</li>
<li>rebase, merge 차이<br>
- Message Application
koa를 통해 만든 api server
디테일이나 깔끔히 코딩하기 위해 신경을 씀 (컨벤션, fit flow, 디자인 패턴 등)</li>
<li>koa, postgreSQL 공부
  koa는 express, postgreSQL은 Mysql과 유사하여 크게 지장은 없었다.</li>
<li>koa-passport(local) 사용하기</li>
<li>crypto 사용하여 비밀번호 암호화 처리<br>
- Rev:it 프로젝트</li>
<li>팀장 회의<ul>
<li>상황 브리핑<ul>
<li>git flow 전략 회의
sqush commit을 활용하자는 의견이 나와 commit 기록을 활용해서 APP 개발에 많이 활용하는 나는 feature branch의 커밋 기록이 남는 merge commit 이나 rebase를 활용하자고 함<br></li>
<li>도커 공부
시작하세요!도커/쿠버네티스 38p~55p</li>
</ul>
</li>
</ul>
</li>
<li>도커 볼륨과 네트워크 공부
  알바하면서 읽은 부분이라 다음 도커 공부할시 리마인딩하면서 직접 적용해보고 넘어갈 예정</li>
</ul>
<blockquote>
<h2 id="👉-주간-한-일">👉 주간 한 일</h2>
<ul>
<li>이력서 새로 제작
기존의 이력서에 내용을 추가하고 불필요한 내용을 뺌
가독성이 더 좋게 만들고 기술적인 부분에 초점을 맞추어 새로 만듬</li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[WIL] 2022.03.07 ~ 03.13]]></title>
            <link>https://velog.io/@coding_egg/WIL-2022.03.07-03.13</link>
            <guid>https://velog.io/@coding_egg/WIL-2022.03.07-03.13</guid>
            <pubDate>Mon, 14 Mar 2022 07:05:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="👉-주간-한-공부">👉 주간 한 공부</h2>
</blockquote>
<ul>
<li>도커 공부
시작하세요!도커/쿠버네티스 20p~38p<ul>
<li>도커 컨테이너 다루기
  도커 각종 컨테이너 명령어 및 사용<ul>
<li>컨테이너 관리, link 사용 등등<br></li>
</ul>
</li>
</ul>
</li>
<li>Spring 공부<ul>
<li>JPA, 스프링 데이터 JPA 사용해보기</li>
<li>AOP 사용 이유와 간단한 구현<br></li>
</ul>
</li>
<li>Rev:it 프로젝트<ul>
<li>App 개발<ul>
<li>갤러리 단일 사진 업로드 기능</li>
<li>판매 페이지 디테일 구현 (애니메이션, 버튼 상태 관리 등)</li>
</ul>
</li>
<li>팀장 회의
  현재 각 파트별 상황 브리핑
천천히해도 괜찮으니 디테일을 챙겨달라 부탁받음<br></li>
</ul>
</li>
<li>CS 공부<ul>
<li>네트워크, 운영체제 등 정리한 부분을 리마인딩함<br></li>
</ul>
</li>
<li>알고리즘 공부<ul>
<li>프로그래머스 문제
  2 x n 타일링, 아이템 줍기, 퍼즐 조각 채우기, 길 찾기 게임, 최솟값 만들기, 땅따먹기</li>
<li>코딩 테스트 및 복기</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Flutter] Unhandled Exception: MissingPluginException 해결]]></title>
            <link>https://velog.io/@coding_egg/Flutter-Unhandled-Exception-MissingPluginException-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@coding_egg/Flutter-Unhandled-Exception-MissingPluginException-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Tue, 08 Mar 2022 03:43:16 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-dart">Unhandled Exception: MissingPluginException</code></pre>
<p>플러터로 개발시 자주 만나는 에러인데 대부분은 패키지를 정상적으로 못 읽어올때 발생하는 에러로
핫리로드, 다시 시작 등의 기능을 사용하지말고 아예 종료후 재실행하면 대부분 해결된다.</p>
]]></description>
        </item>
    </channel>
</rss>