<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>paul2021_r.log</title>
        <link>https://velog.io/</link>
        <description>무한 도전. 무한 실패. 무한 성공.</description>
        <lastBuildDate>Tue, 01 Feb 2022 11:12:38 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>paul2021_r.log</title>
            <url>https://images.velog.io/images/paul2021_r/profile/b482193f-e8bd-4c32-9d5e-2dc5cec4817e/IMG_0010.PNG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. paul2021_r.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/paul2021_r" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[키보드에서 손을 떼지 않는 방법을 알아보자...  Vimari]]></title>
            <link>https://velog.io/@paul2021_r/%ED%82%A4%EB%B3%B4%EB%93%9C%EC%97%90%EC%84%9C-%EC%86%90%EC%9D%84-%EB%96%BC%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90...-1-vimari</link>
            <guid>https://velog.io/@paul2021_r/%ED%82%A4%EB%B3%B4%EB%93%9C%EC%97%90%EC%84%9C-%EC%86%90%EC%9D%84-%EB%96%BC%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90...-1-vimari</guid>
            <pubDate>Tue, 01 Feb 2022 11:12:38 GMT</pubDate>
            <description><![CDATA[<p>개발을 하다보면 웹 서핑은, 그리고 vim 사용, 그걸 위한 키보드.. 점점 더 하드웨어에 빠르고 명쾌한, 그리고 직관적인 사용성을 추구하게 된다. </p>
<p>그러다보니 제일 먼저 알아보는 것은 키보드 일 것이며, 이후에는 단축키들에 대한 검색일 것이다.</p>
<p>그러던 도중에 이번에 놀라운 것을 알게 되었다. 이름도 특이한 <code>vimari</code>. 엥, 이게 뭘까 하고 스윽 둘러보다가, 이거야 말로 개발자를 위한, 정확히는 키보드를 많이 쓰는 이들을 위한 도구라는 생각 했다...! </p>
<p><img src="https://images.velog.io/images/paul2021_r/post/892ea6ab-4cf9-46ce-a692-e7d5e4db5f51/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.02.05.png" alt=""></p>
<p>사파리의 확장기능은 생각보다 강력하고, 꽤나 좋은 것들이 많다. 그 중에서도 특히나 이 친구는 정말 놀라운데, 두괄식으로 먼저 결론을 말하자면, <code>vim</code>의 조작 방식을 그대로 웹브라우저에 구현하고 마우스 없이 키보드 만으로 웹 서핑을 가능하게 만들어주는 도구이다.</p>
<p>물론, 기본적으로 웹브라우져 자체가 지원하는 단축키들은 있다. 하지만 이 확장프로그램을 사용하면 이런 느낌으로 사용이 가능하다. </p>
<p><img src="https://images.velog.io/images/paul2021_r/post/17173c8c-daa4-4f92-9cdc-19c5a4e80045/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.05.20.png" alt="">
<code>f</code> 를 살포시 눌러주면 접근 가능한 모든 객체를 선택 가능하도록 단축키가 생성되고, 두개의 키 조합을 순서대로 누른다. 그러면 마우스 클릭 없이 이동이 가능하다. 예를 들어 <code>F</code> 를 누른뒤 <code>S</code>를 누르게 되면, <code>내 위치 찾기</code> 항목을 선택하고, 해당 기능이 눌렸을 때 작동되어야 할 것이 작동된다. (심지어 검색창 접근 후 검색어 입력도 마우스 없이 가능하다. 지금까지 사용하면서 조금 올드하게 빌드된 웹페이지들을 제외하곤 호환성 이슈는 없었다.) </p>
<p>이 외에도 스크롤, 탭 이동을 훨씬 편하게 만들어주는데 해당 키 조합은 아래 스샷을 참고하면 좋다. 
<img src="https://images.velog.io/images/paul2021_r/post/9a3783ec-3d1b-4d16-9c1d-c1c8a19739ab/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.09.51.png" alt=""></p>
<p>더불어 이런 기능은 크롬에도 유사하게 존재하나, 크롬 쪽에서 사파리의 해당 기능, <code>vimari</code> 수준으로 되는 확장 기능은 아직 보지 못했다. 이럴 때 보면 애플이 뭔 곳이길래 다른 곳에 없는데, 여기엔 있는가.. 하고 생각하게 된다 ㅋㅋ. 참고로 아이패드에서도 사파리 확장기능은 이제 지원하나, 아쉽게도 해당 기능이 포팅 되어 있지는 않은 상황이다. </p>
<p>빔을 자주 쓰고, 키보드로 모든 것을 하는게 편한 당신, 특히나 지속적인 마우스 사용으로 손목이 아프셨던 분들은 쓰면 괜찮은 확장프로그램이라고 본다. </p>
<p>앞으로 종종 이런 식으로 괜찮은 유틸이 있다면 기록하고 공유해보려고 한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[42서울 2달 생존 회고록]]></title>
            <link>https://velog.io/@paul2021_r/%EC%9E%84%EC%8B%9C-42%EC%84%9C%EC%9A%B8-2%EB%8B%AC-%EC%83%9D%EC%A1%B4-%ED%9A%8C%EA%B3%A0%EB%A1%9D</link>
            <guid>https://velog.io/@paul2021_r/%EC%9E%84%EC%8B%9C-42%EC%84%9C%EC%9A%B8-2%EB%8B%AC-%EC%83%9D%EC%A1%B4-%ED%9A%8C%EA%B3%A0%EB%A1%9D</guid>
            <pubDate>Sun, 09 Jan 2022 11:53:02 GMT</pubDate>
            <description><![CDATA[<p>으어 </p>
<p>벨로그에 그래도 글은 올려놓자 생각은 했다만… </p>
<p>역시 세상은 그렇게 녹녹하지 않다. 
거의 한 달은 넘은 것 같다.
비전공자로 해야할 수 많은 일들과 욕심부린다고 시작한 다른 활동(Humans of 42 라던가…. 스터디라던가..)들이 겹치고 겹치니 어느새 새벽 3시는 기본이고 6시 일어난 다는 내 멋진 계획은 쓰레기통에서 버섯을 피우는 느낌이다.. 허허. </p>
<p><img src="https://images.velog.io/images/paul2021_r/post/679cbda1-9337-4a3e-88ce-f72d0e175aaa/image.gif" alt=""></p>
<p>하지만 그렇다고 좌절할만한 수준이냐?는 아니다. 
시작하는 입장이고, 이제 Lv 0에서 1이나 2정도 올라왔는데, 그걸 만랩 기준으로 생각하면 안된다. 옛날에 가졌던 그 못된 습관은 버려야 하리라 생각된다. 내 위치에 맞게, 내 상황에서 최적의 고민과 결단을 하는 것이, 나를 바꾸는 기회가 되리라 생각한다. </p>
<p>잡소리가 길었다. 그렇다면 42Seoul에서 생활하면서 겪었던 일들을 좀 정리해보고자 한다. </p>
<p>이유는 간단하다. 초심을 잊지 말자. 꾸준함을 갖추자는 의미에서다. 
원래라면 2021년 말에 했어야 겠지만… 이 부분은 셀프로 너그러이 이해해보려고 한다. <em>(너무 봐주기만 하나?)</em></p>
<h3 id="인상-깊었던-몇가지를-꼽아보면">인상 깊었던 몇가지를 꼽아보면..</h3>
<ol>
<li>42서울 본 과정에서의 과제는 접근을 위한 <font color=red><strong>입구</strong></font> 역할 이었다.</li>
<li>스터디는 무엇인가? <font color=red><strong>자율</strong></font>과 <font color=red><strong>책임</strong></font>의 경계</li>
<li>기록과 함께 시작하여 기록과 함께 끝내는게 답이다..</li>
</ol>
<h4 id="42서울-본-과정-과제를-하면서-느끼는-바란">42서울 본 과정 과제를 하면서 느끼는 바란…</h4>
<p>처음 본 과정의 과제로 C 언어 과제를 마주하고, 나에게 <strong>시작</strong> 이란 점에서 나름 각별했다. 처음으로 컴퓨터에게 명령을 내려 본다는 점에서 그만큼 각별한게 어디있을까. 내 인생이 새로운 전환점을 마주한다는 감각은 매우 기분 좋은, 설레는 일이었다.</p>
<p>허나 본과정에 들어서면서 과제들을 해나가면서 그 의미와 무게에 의구심이 들었다.</p>
<p>실용적인 면에서 C라는 언어는 취업에 효과적이라고 볼 수 없다. 정말 디테일하게 깊이있고 하드웨어적 상황과 최적화를 위한 디테일한 연구와 개발이 필요한 곳이라면 모를까. 현실적으로 기업에서 이것을 필요로 하지 않는 다는 점은 명백한 팩트로 보였다. 이렇게 생각한 근거에는 멘토와의 대화, 인터뷰를 통해 만나고 이야기 했던 사람들을 통해 알게된 공통적인 의견이었다. 블랙홀 기간을 늘리고, 경험적으로 필요하지만, 목표가 ‘취업’인 이상 애매하단 것이다.(물론, PBL같은 내부 기업에서 주는 과제 성취형 프로젝트들이라면 확실히 효과적이란 이야기가 나오더라. 다만, 이 역시 하려면 블랙홀이 길어야 한다. 즉 실력이 기본이란 거고 비전공이 이에 접근하기엔 정말 피를 통하는 학습이 필요하다.)</p>
<p>그러다보니 born2beroot get next line을 마무리 짓고 나니 드는 생각은, 확실히 이걸 위해 고민하는 시간이 ‘합당한 학습의 시간이냐’ 라는 의구심이었다. </p>
<p>그래서 결론을 툭 잘라서 이야기 해보면, 전공자이거나 비전공자이지만 C를 이미 어느정도 안다면? 사실 여기에 목매일 필요는 없어 보였다. <code>블랙홀이 필요해</code> 불가피 진행해야 한다면 별개지만 말이다. </p>
<p>단, 알고보니 C는 사실 2-3 서클까지 진행하면 끝이나고, 이후 부터는 완전히 새로운 것을 배우는 것이었다. 즉, 그때는 또 다른 새로운 것을 배운다는 것이다. 거기다 42라는 시스템이 왜 이런 과제를 내었느냐? 에서 알게 된 것이, 결국 모든 과제들은 현업에서 하는 것들의 열화버전이며 어떠한 일이 필요한가와 해당 <strong>‘분야를 맛본다’</strong> 는 관점에선 매우 유용하다는 생각을 했다. </p>
<p><strong>뭐부터 해야 하는가?</strong> </p>
<p>에 대한 막연함이 있고, 어느 분야로 가야할지 정해지지 못한 나같은 사람에게 해당 과제들은 대단히 좋은 그리고 ‘협업’을 배울 기회를 제공한다는 점은 확실히 큰 메리트다… 라고 나는 결론 내렸다.</p>
<p>얼른 printf 만들고 다음 과제 넘어가야지…. </p>
<p>Ps. C 강의는 들어야 될 것 같더라(포인터와 할당은 나의 적…).</p>
<p><img src="https://c.tenor.com/OVUDwIM8mBkAAAAM/cat-cat-stare.gif" alt=""></p>
<h4 id="스터디는-지옥이다">스터디는 지옥이다</h4>
<p><img src="https://c.tenor.com/wWQ7lPmFQt8AAAAM/welcome-to.gif" alt="">
42를 들어가고 보니 스터디를 하자고 하는 이들은 많았다. 의욕이 넘치기 때문이다. 같이 라피신을 뛰어넘어서 그런가 묘한 동질감을 느끼거나 전우애 비슷하게 느끼는 사람이 많았다. 그리고 그 의욕으로 &#39;선의&#39;를 모으고, 끌어모은 선의로 서로 서로 친한 이들끼리 함께 스터디를 진행하고자 했다. 나도 그런 곳에 참여 하면서 우려했던 일들이 몇몇 일어나는 것을 보게 되면서, 꽤 고민이 되는 지점들을 발견 할 수 있었다. 마치 타인은 지옥이다 처럼, 종잡을 수 없는 공동체, 혹은 조직에 대한 부분들은 참 여러 생각을 하게 만들었다. </p>
<p>우선 스터디를 완전히 책임이 아니라 자연스러운 분위기에서 해야 한다는 멘토의 의견을 듣고, 여러군데에서 커뮤니티를 만들어보려는 모습은 보였다. 초대를 받고, 그러면서 이것저것 교류하는 것은 42서울의 매우 큰 장점이라고 생각한다. </p>
<p>그러던 와중에 두 곳을 참여 하면서 한 곳에서는 운영을 하는 모습을 보면서 &#39;참견&#39;이란 이름으로 &#39;우려&#39;를 표했고, 한 군데는 정말 눈팅만 했다. 할수 있는 약간의 활동 그 이상은 하지 않았고, 그리고 두 곳 모두 결과적으로 열심히 하는 사람들만 모인다거나(전체 규모 대비 매우 소규모로), 아예 공중분해 되는 모습을 보게 되었다. 사회학의 피가 끓어서 그럴까 처음에는 이러한 현상 자체에 의구심이 가졌고 나중에는 나름대로 교훈이 되겠구나, 1년 뒤에 쌓은 실력으로 무언가 실질적으로 이끌거나 참여하는 내 모습이 되었을 때 필요하겠구나 생각이 들었다. </p>
<p>와해 된 이유는 좀 과하게 잘라내고 핵심만 정리하면 아래와 같다. </p>
<p><strong>1. 공동의 목표가 보이지 않았다.</strong>
<strong>2. &#39;자유&#39;란 이름으로 룰과 기준이 없자 혼란스러움만 가중될 뿐이었으며, 거기서 &#39;책임&#39; 지는 사람이 없다면 일정 시간이 지나고 모일 이유를 찾지 못하고 모이지 않게 되었다.</strong></p>
<p>처음엔 서로 좋다는 감정적인 이유로 모이는 것이 보였다. 사람의 매력, 친함으로 사람들은 꽤나 모일 수 있다. 하지만 그것도 10명 남짓이며 늘지는 않았다.(물론 늘고 안늘고는 중요하지 않다.) 문제는 그 이후였다. </p>
<p>사람이란 건 결국 시간을 쏟는데는 합당한 이유가 필요하다.</p>
<p>스터디라는 이름이나, 프로젝트라는 이름을 갖고 무언가 같이 행동하게 되면 사람들은 자연스레 정치적 행동들을 하게 된다. 원하는 것이 관철되었으면 하고, 상대방의 이런 생각이 마음에 들지 않는다고 생각하거나, 이 방향은 안된다 라는 - 그런데 이런 행동의 핵심은 결국 &#39;본인의 이익&#39; 이 우선시 된다. (여기서 상대방과 같이 좋은 공간이 되었으면 한다거나, 상대방이 기분좋게 되면 좋겠다- 라는 이야기들은 자기중심적이지 않냐! 라고 생각할지 모르겠지만, 이 조차도 자신이 그런 분위기나 상황에서 마음이 &#39;편하다&#39; 거나 &#39;옳다&#39;는 가치로 인한 행위이므로 심리학적으로 자기 중심적 행위에 속한다고 볼 수 있다.) 그런데 그 이익이 결과적으로 42서울에선 &#39;취업&#39;과 &#39;기회&#39;에 대한 열망이 핵심인 커뮤니티다. 그렇다면? 단순 친목이나 정말 얕은 목표 의식으로는 어떤 특정 구심점이 되어 지속적으로 사람을 모을 수 없다.</p>
<p>뿐만 아니라 내가 가장 어이가 없었던 것은, 주도자 분들의 태도 였다. <strong>&#39;좋은 게 좋은 것이다&#39;</strong> 라는 태도로, 나는 리더가 아니다- 를 주장하셨다. 이는 좋은 의도임을 알기에 분명 비난할 부분은 전혀 아니지만, 조직을 끌고 가는 것은 언제나 결국 사람이란 사실을 잊은 듯 보이는 발언이기도 했다. 하물며, 본인이 꺼낸 이야기에 남들이 그를 동조했다는 것은 이미 <strong>그 길을 제시한 순간부터 끌고가야 할 책임과 상황이 조성되었다는 것이다.</strong> *<em>다른 사람들은 그 상황에선 아직 &#39;공감&#39;한 것이지 &#39;주도&#39; 하겠다는 말을 아무도 안했기 때문이다. *</em> 결론적으로 외부에서 압박으로 해당 모임이나 해야할 일들이 방해를 받게 되고, 공감한 사람들 사이에 우선순위가 바뀌는 상황이 펼쳐지면 결코 커뮤니티는 그 의도와 목적으로 가지 못한다. </p>
<p>책임은 리더십이다. 책임이 빠진 조직은 책임이 없으므로 자유가 아니라 방종에 가깝다는 것을 새삼 더 눈으로 보는 경험을 했다. 조직에서 내가 활동을 할 때 이러한 점을 기억하지 않는다면 내가 프로젝트를 진행하는 상황에서 결국 혼자서 진행하는 꼴만 경험하게 되지 않을까? 내 부족을 채우기는 커녕 그저 회피성 조직을 만들기만 할 것이다. 마치, 고시 공부를 통해서 자기에게 면피를 주며 정작 현실을 쳐다보지 않는 느낌이라고 할까. 정말 간절해서 열심히 공부하거나 하는 이들과는 또 다른 이면을... 그런 것을 느끼게 된다. </p>
<p>이런 이야기를 하면 사람이 어쩜 이리 냉랭해? 라고 할 것 같기도 하고, 내 스스로도 그렇게 느낀다. 하지만 무언가를 함께 완성시킨다는 건 그만큼 어렵다는걸 요 두달 간 많이 느낄 수 있었다. 공통의 목표를 명확하게 해야하고, 누군가 책임을 질 존재는 분명해야하며, 자유를 최소한의 룰로 묶어 두어야 한다. 하물며 회사를 가더라도 내가 인정받을, 그리고 회사에서 무언가 나름대로 이뤄낼 방향성이리라 생각된다. 사람 아래에서 일을 할 때든, 내가 리더가 되어 있을 때든 말이다. </p>
<p>더불어 다소 아쉬운 점은 내가 참여하면서 도와드릴 수 있을 부분이 있나 고민을 했었지만... 이런 방식에 익숙하지 않으시단 느낌이었고, 결국 본인 하고 싶은 쪽으로 가버리신 지라(...) 더 뭘 하기 어렵다고 판단, 나도 결국 내려놓게 되었다. 참 아쉬운 부분이긴 했지만... 그럼에도 좋은 경험이었단 생각이 든다. </p>
<h4 id="기록의-생활화는-무조건이다">기록의 생활화는 무조건이다..</h4>
<p>이번에 born2beroot 과제를 하면서 느꼈지만, 점점 시간이 갈수록 과제들은 짜증을 유도하는 정밀함?을 필요로하게 되는게 보였다. 이것저것 설정해주는 것이 어렵지는 않으나 막상 실수를 하거나 지정되어 있는 것과 다른 방향성이 조금만 보여도 바로 틀리는 등... 이런 문제들이 발생하는 것을 느낄 수 있었다. </p>
<p>거기다 맥에서 이러한 일들을 진행하겠다는 나의 원대한 계획에 비해, 나의 m1 맥북 프로는 매우 매우 짜증나는 일들을 일으켰다. 우선 호환성 문제가 생기는 경우가 가끔 있었으며, 도커나, 가상 머신을 사용하기 위해 UTM같은 에뮬레이터 설치시 그렇다고 해도 결국 ARM 버전만 사용이 가능하다는 등의... 다소 난해한 일들이 벌어졌다.(가상 머신은 확실치는 않긴 하다..) </p>
<p>더불어 그 대안으로 우분투 데스크탑을 활용하지만, 리눅스사 시스템을 직접 가지고 놀 수 있는 만큼 의존성 문제등으로 사용시 여간 꼬이는게 아니었기에, 세팅 한 번 실수 하는 순간 개발 환경이 다 꼬여 버리는 놀라운(...) 일을 경험했고, 재부팅하면 세팅이 꼬여 작동이 안되는 등(..)으로 인해 포맷만 한 열댓번은 한 것 같다.(덕분에 클린 설치의 장인이 되어버린 느낌이다...) </p>
<p>그런데 그러면서 기록을 하긴 했는데... 제대로 안되어 있던 부분에서 막히는 걸 보고 새삼 깨달았다. 42생활의 절반은 코딩이지만 절반은 기록이 답이란 생각을 하게 되었다. 블로그도 그런 면에서 중요한데, 정작 작성은 노션에만 하는 것 같다... 이러면 안, 되려나.? 블로그에 얼른 본투비루트랑 정리해서 올려야 할텐데 ㅋㅋㅋ;;;;</p>
<p><img src="https://c.tenor.com/B-TP3rs3l7IAAAAC/memory-cant-remember.gif" alt=""></p>
<h3 id="결론은-아니지만-여하튼-결론">결론은 아니지만, 여하튼 결론...</h3>
<p>보고 들은 것, 그리고 공부하면서 적은 것들을 보면서 곰곰히 생각해 보았다. 어찌 보면 참 오만하고, 또 어찌보면 아쉽기도 하고, 지금의 부족이 참 많이 느껴지는 2021년과 새롭게 시작하는 2022년... 기대보다 아쉬움이 컸지만 그래도 여기까지 왔다. 처음에 회사를 때려칠 때, 때려치고 어머니를 설득하던 그 때, 밀고 나가는거에 비해 초라한 결과에 움츠려 들 때를 생각하면 참 묘하다. 잘 되어 가는 듯, 또는 안되는 듯 보이지만... 어쨌든 제대로 하고 싶다. 내 앞에 놓인 일들과 책임, 그리고 &#39;의미&#39;를 찾아 다니는 내 인생에서 이번 한 해는 더 성장하는, 더 성장하여 기술적으로도 능숙해지는 내 모습을 마주할 수 있길 기대한다.</p>
<p>무엇보다 말보다 기술, 실력으로 성장하는 한 해가 되었으면 한다. 끗
<img src="https://c.tenor.com/BsX3oH1lpT4AAAAM/next-time-terrence-howard.gif" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[libft 완성기(2) : mem 시리즈 부터 malloc 이 필요한 함수들]]></title>
            <link>https://velog.io/@paul2021_r/libft-%EC%99%84%EC%84%B1%EA%B8%B02-mem-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EB%B6%80%ED%84%B0-malloc-%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%9C-%ED%95%A8%EC%88%98%EB%93%A4</link>
            <guid>https://velog.io/@paul2021_r/libft-%EC%99%84%EC%84%B1%EA%B8%B02-mem-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EB%B6%80%ED%84%B0-malloc-%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%9C-%ED%95%A8%EC%88%98%EB%93%A4</guid>
            <pubDate>Sat, 18 Dec 2021 14:27:17 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/paul2021_r/post/4c27fd35-8a8f-4d2f-a4c5-c22f30d20e61/otinww0jdkhz7ninctnu.png" alt=""></p>
<h3 id="시작하면서">시작하면서</h3>
<p>libft 정리를 한다고 했지만 하면 할 수록 복잡해지는 기분이다;;
디펜스 준비한 것들, 이런걸 다 정리해서 넣는 다는게 보통일이 아닌듯 하다.
그나마 위안을 삼을 수 있는건, 내 스스로 이해된 순간 다른 사람들과 어떤식을 대화하면서 해당 내용을 이해해야 하는지는 기존의 이해한 것들을 통해 혹은 내 언변스킬? 을 통해 나름대로 잘 정리해 나갈 수 있다는 점 정도일 것이다. </p>
<p>앞서 언급 했듯이 해당 내용은 libft를 어느 정도 구성한 분들에게 도움이 되도록 하고 있다. 디펜스 준비 등, 개념적으로 디테일한 부분들 위주로만 정리하고 코드는 딱히 안 적을 것이다. 어차피 깃허브에 넘쳐나고 베끼는건 어떻게든 하니까. </p>
<h3 id="part-1---libc함수들-2">Part 1 - Libc함수들 (2)</h3>
<p>이번 파트는 필수 중에서도 메모리를 다루는 함수들, 그리고 할당(malloc)이 필요한 녀석들이다. 
<strong>&lt; mem 시리즈&gt;</strong>
메모리 시리즈의 핵심은 메모리 상의 데이터에 &#39;직접&#39; 접근한다는 점에 있다. 바이트단위로 쪼개진 메모리 구조 속에서 들어오는 값은 void형 열로 들어오게 되는데, 이는 곧 해당 함수들이 int형 배열이나, char 형 배열, 그 어떤 것이라도 들어와 <code>메모리 단위</code>로 연산이 된다는 점이 해당 함수를 작성하면서 알아야 하는 가장 중요한 포인트 이다. </p>
<ul>
<li>memset : int c 형으로 들어오는 매개변수를 void * 형의 포인트 배열에 삽입시키는데, 이때 size_t 형의 len 바이트 만큼 입력시킨다. </li>
<li>bzero : memset을 진행할 때 int c가 아닌 0을 입력한다. </li>
<li>memcpy : void 형 배열 dst에 src를 size_t 만큼 입력 시킨다. 이때 <font> <font style color="red"><strong>오버랩</strong></font>이 발생할 수 있다!</li>
<li>memmove : memcpy 의 <code>오버랩</code> 문제를 해결한 함수이다.</li>
<li>memchr : int c 를 받아서, void *s 배열에서 c가 발견되면 해당 위치의 포인터를 반환한다. 이때, n 바이트까지만 진행한다. </li>
<li>memcmp : n 바이트까지만 배열 두개를 비교한다. 이때 다른 값이 발견 되면, 해당 값 부분에서 차이를 int 값으로 반환한다. </li>
</ul>
<blockquote>
<h4 id="메모리계열의-특징-size_t">메모리계열의 특징 size_t</h4>
<p>  해당 함수들은 기본적으로 &#39;직접&#39; 접근 한다. 이는 형과 관계 없이 아주 다이렉트하게 편리하게 값을 건드릴 수 있다는 메리트가 있다.
  하지만, 문제는 문자열은 마지막을 표시하는 <code>&#39;\0&#39;</code> 구분이 필요하고, 다른 형태의 배열은 그러한게 존재하지 않는다. 이때 메모리로 다이렉트로 접근한다는 점에서 그러한 구분이 유의미 하지 않다고 보는 것 같다. 애초에 함수가 형과 상관없이 작동해야 하도록 만드니 당연한 것이리라. 따라서 해당 함수의 구현과 이해에선 size_t 라는 <strong>어디까지?</strong> 를 잘 생각해야 한다.
  예를 들어 아무리 문자열이 들어왔다고 치자. 하지만 제공되는 바이트 수가 제공되는 문자열의 길이보다 크다면? memchr은 당당하게 문자열을 넘어서(!), 메모리 안의 엄한 값도 찾아서 해당하는 int c값을 찾아 출력해야한다. </p>
</blockquote>
<blockquote>
<h4 id="unsigned-char-vs-char">&#39;unsigned char&#39; vs &#39;char&#39;</h4>
<p> 어떤 형이든 건드려야 하고, 이때 최소 단위는 당연히 1 바이트이다. 이때 바이트 해당 매개변수를 어떤 형으로 다루어야 하는가? 는 기본적으로 <code>unsigned char</code> 즉 부호가 없는 양수 값으로 진행하게 되어 있다. 
  왜 굳이 1 바이트로 가능하 char를 쓰지 않을까? 결국 사이즈가 같은게 아닌가? 라고 생각해볼 수 있을 것이다. 더불어 음수 값의 표현이 가능한게 낫다고 볼 수도 있다. 그러나 문제는 1 바이트가 갖고 있는 의미를 잘 생각해보아야 한다. 
  char 형의 경우 부호를 담당하는 맨 좌측의 1비트를 갖고 있으며, 음과 양을 위한 계산이 자동으로 들어가 음양을 표현하게 된다. 이러한 점에서 메모리에 들어간 값이 음수와 양수로 되어 있는 자료형은 불가피하게 메모리 안에서 변환 과정을 거치게 되는데, 이때 *<em>1바이트씩 잘라서 편집이 들어가는 함수들의 경우 원하는 값과 다른 값을 도출하거나 작동할 수 가 있다. *</em>
  따라서 해당 문제를 해결하기 위해선 애초에 음수와 양수가 아닌 순수한 값 상태에서의 바이트 단위 접근이 필요하고 이렇기에 붙여 넣는 memcpy 나 memmove 는 unsigned char 형으로 특히나 해놓고 진행하는 것이다. 
 <a href="https://rcode.tistory.com/14">관련 자료 : char와 unsigned char의 차이로 인한 구분의 필요성에 대해</a></p>
</blockquote>
<blockquote>
<h4 id="오버랩">오버랩</h4>
<p>  memcpy의 경우 임의로 메모리 안에 할당된 변수에 접근 과정에서, 제공되는 바이트 만큼 dest에 src를 붙여 넣는다. 이때 src의 주소 값이 dst의 주소값 보다 작은 경우, 바이트 수에 따라 src가 다시 src를 참조하는 경우가 발생할 수 있다.
  즉 아래 그림과 같은 경우가 생길 수 있단 것이다. 
<img src="https://images.velog.io/images/paul2021_r/post/5395e531-b040-4165-98df-4f88e1151ab9/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-12-18%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2022.16.31.png" alt="">
  이렇게 된 경우를 보자. src에서 dst까지 바이트에 맞춰 인덱스에 맞춰 바뀔 것이다. 그런데 dst를 바꾼다고 생각했는데, 정작 src의 값도 바뀌게 된다. 즉, 원하는 값으로 바꾸길 예상했지만, <font><font style color="red"><strong>dst가 바뀌면서 src도 바뀌게 되고 그 바뀐 값이 다시 dst 배열의 값을 예상과 다른 값으로 바뀌게 만드는 것이다.</strong></font> 
  이를 개선한 것이 바로 <code>memmove</code>이다. <code>memmove</code>의 경우 이러한 경우를 인지하고 &#39;거꾸로&#39; 접근하여 입력을 하기 때문에 src가 수정되더라도, dst의 입력 값은 예상되는 값으로 지정되게 된다. </p>
</blockquote>
<p><strong>&lt; 번외편 &gt;</strong></p>
<ul>
<li>atoi : 입력 받은 문자열에서 isspace에 해당하는 케이스들을 스킵하고, 음수나 양수 기호를 받은 뒤 숫자를 인식하여 정수 값으로 환산한다. 중간에 다른 문자가 있는 경우 아무 값도 나와서는 안된다. </li>
</ul>
<blockquote>
<h4 id="atoi-에-대한-이야기">atoi 에 대한 이야기</h4>
<p>  atoi 구현 시 신기하게도 atoi는 int형으로 바꾼다는 이야기와는 다르게 <code>long</code>, <code>long long</code>까지도 대응 가능하도록 구현이 되어 있다. 이는 내부에서 동작할 때는 <code>strtol</code>를 이용하며, 해당 숫자가 각 형 이상의 값일 때 다음 자료형으로 이동하여 값을 반환한다. 
  다행이도 libft 과제에서는 이를 요구하지는 않으나, atoi가 <code>LONG_MAX</code>, <code>LONG_min</code> 값에서는 각각 -1, 0이 나오는 것은 처리해놓는 것이 좋다. (사실 정식 atoi는 <code>LLONG_MAX</code> 와 <code>LLONG_min</code> 값에 대응한다. 해당 매크로 사용은 norminette에는 걸리지 않으니 &lt;limits.h&gt; 를 활용해 예외처리를 해주면 좋다.</p>
</blockquote>
<p><strong>&lt; 할당 &gt;</strong>
  <code>malloc</code> 함수는 데이터를 <code>heap</code> 영역에 저장하는 것으로 기존의 <code>stack</code> 영역에 저장하는 것보다 더 많은 데이터를 저장할 수 있다. 단점은 해당 방식을 남발하는 경우, 계속 heap영역에서 데이터가 잔류하므로 <strong><code>메모리 누수</code></strong>를 야기하게 되고 따라서 해당 기능을 사용 후에는 반드시 <code>free</code>를 해줘야 하며, 이를 지목하는 포인터의 경우 <code>free</code> 후 Null로 저장 주소값을 없에 다른 곳에서 접근하지 않도록 만드는 것이 좋다. </p>
<ul>
<li>calloc : malloc을 진행하며, 특징적으로 0값을 넣어주기 때문에 나중에 쓰는 경우 매우 편리하다. 활용 잘하면 코드를 줄이는 데 큰 역할을 한다(...)</li>
<li>strdup : 들어오는 문자열 s1을 새롭게 할당하여 사본을 만들어 낸다. 해당 함수의 경우 데이터를 조작 및 기존 할당을 해제하고 다시 전달해야 할 때 종종 사용하게 된다. 단, 이후 <code>strndup</code>을 더 많이 쓰게 되는 것 같다...</li>
</ul>
<h3 id="후기">후기...</h3>
<p>이제 필수 파트 1 을 마무리 지었다. 해당 파트의 경우 확실히 기본이 되는 함수들인 만큼, 얼마나 명확하게 이해 했냐에 따라 다음 파트에서 더 효과적이고 효율적인 함수를 작성할 수 있었다. 더불어 개정된 것이기에 생략된 부분들이 존재하나, 향후 사용을 해야 하는 경우 추가로 더 조작하는데 유용한 함수들을 만들어 두면 좋다. 이는 보다 앞 기수의 깃허브들을 탐방하다 보면 심심찬게(ㅋㅋ) 발견할 수 있고, 해당 함수 구현도 심심풀이로 해보면 좋을 것 같다.(는 해야 한다)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[libft 완성기(1) : is 시리즈 부터 str 시리즈까지]]></title>
            <link>https://velog.io/@paul2021_r/libft-%EC%99%84%EC%84%B1%EA%B8%B01-is-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EB%B6%80%ED%84%B0-str-%EC%8B%9C%EB%A6%AC%EC%A6%88%EA%B9%8C%EC%A7%80</link>
            <guid>https://velog.io/@paul2021_r/libft-%EC%99%84%EC%84%B1%EA%B8%B01-is-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EB%B6%80%ED%84%B0-str-%EC%8B%9C%EB%A6%AC%EC%A6%88%EA%B9%8C%EC%A7%80</guid>
            <pubDate>Fri, 17 Dec 2021 04:56:41 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/paul2021_r/post/4c27fd35-8a8f-4d2f-a4c5-c22f30d20e61/otinww0jdkhz7ninctnu.png" alt=""></p>
<h3 id="시작하면서">시작하면서..</h3>
<p>사실 이제 born2beroot 와 printf 과제를 시작하기 위해 준비하는 시점이다.. 꾸준히 한다고 했던 나 자신은 과연 어디 있는가...
우선, 과제 2개 정도를 돌파하고 나서 느끼는 바는 한 마디로 정리하면 이거다. </p>
<blockquote>
<p>아 겁나게 어렵다..!</p>
</blockquote>
<p>이유는 명확했다. 근본은 어디 가지 않는다. 힘이란 내공에서 튀어나오는 것이고, 순간 순간 재치로 넘어가는 것으로 창조의 영역에 가까운 코드를 복제 해낸다는 것은 결코 쉬운 일이 아닌 것이다. </p>
<blockquote>
<p>포인터 ㅂㄷㅂㄷ...
구조체 ㅂㄷㅂㄷ....
연결리스트 ?????</p>
</blockquote>
<p>그런 점에서 이번 달 더 많이 나간다고 나에게 엄청난 이득이 되는 상황은 아니기에, 짬을 내어 기본기였던 libft.h 작성을 복기해 보려고 한다. libft로 배울 수 있었던 핵심들 위주, 메모리 파트, 문자열 다루는 함수, 연결리스트 라던지, fd 함수 들. 되도록 디테일하게 정리해봐야지 싶다. 
이 글을 통해 많은 C잼민이(?) 들에게 도움이 되었으면한다. 단, 개인적으로 내용 전체를 공유하는 건 좋지 않다고 생각된다. 역시 실력을 위해선 클론 코딩으론 한계가 명확하기 때문이다(애초에, 전체 공유는 안된다고 알고 있기도 하다...) </p>
<h3 id="과제-목표와-개요">과제 목표와 개요</h3>
<p>서브젝트를 통으로 공유하는 경우도 많던데, 이렇게는 안하려고 한다. 우선 해당 위치에 오면 번역 동아리도 있고 이것저것 자료는 널려 있으니 말이다. 그냥 핵심들만 어느정도 정리해보면..</p>
<ul>
<li>라이브러리를 만들어야 한다. 즉, recode 한 함수들, libft.h, 이를 컴파일 할 Makefile을 완성 시켜야 한다. </li>
<li>Norminette 은 필수 오브 필수</li>
<li>컴파일 과정에서 relink는 되면 안되며, restrict 한정자는 프로토타입에 입력시키지 말 것. </li>
<li>이해하고, 배워야 할 것은 대략 아래와 같다. <blockquote>
<ul>
<li>문자열의 저장과 조작</li>
<li>각 데이터 타입에 따른 오버플로우, 언더플로우 발생에 대한 개념</li>
<li>메모리 구조에 대한 이해와 메모리 접근 원리 이해하기 </li>
<li>동적할당과 동적할당 취소에 대한 이해 </li>
<li>헤더 파일 작성에 대한 이해 </li>
<li>fd 에 대한 이해 </li>
<li>iteri의 개념과 mapi의 개념 </li>
<li>구조체 - 연결리스트 개념</li>
<li>Makefile (컴파일)의 개념 및 응용</li>
</ul>
</blockquote>
</li>
</ul>
<p>내용을 보면서 곰곰히 고민해봤지만 생각보다 많다. 역시 라피신 이후에 여유있을거라 생각하지 말라던 학장님의 이야기는 괜한게 아니다 라고 생각이 든다(...) </p>
<h3 id="part-1---libc-함수들">Part 1 - Libc 함수들</h3>
<p>C 표준 라이브러리라고 보면 된다. 가장 기본적인 데이터의 조작을 가능케 하거나, 찾는 것을 가능케 한다. 따라서 가장 근본이 되는 것이라고 보면 되고 아주 간단하고 직관적인 리턴값을 요구한다. 제일 쉽게 접근 하는 방법은 역시 <code>man</code> 을 활용하여서 내용을 읽고, 간단한 main함수를 통해 원본의 작동방식을 보는 것이다.</p>
<h4 id="is-시리즈">&lt; is 시리즈 &gt;</h4>
<p>기본적으로 들어오는 int 값을 ascii 값으로 고려하여 해당하는 범위에 포함되는가? 를 확인한다. </p>
<ul>
<li>isalpha : 알파벳이면 int 값을, 아닌 경우는 0을 반환한다. </li>
<li>isdigit : 숫자(0~9) 이면 int 값을, 아닌 경우는 0을 반환한다. </li>
<li>isalnum : 알파벳 혹은 숫자(0~9) 이면 int 값을, 아닌 경우 0을 반환한다. </li>
<li>isascii : ascii 코드로 지정된 값이면 int 값을, 아닌 경우 0을 반환한다. </li>
<li>isprint : 출력 가능한 문자의 경우 int 값을, 아닌 경우 0을 반환한다.</li>
<li>toupper : 들어온 값 중 알파벳 소문자는 대문자로 변경하여 반환한다.</li>
<li>tolower : 들어온 값 중 알파벳 대문자는 소문자로 변경하여 반환한다. </li>
</ul>
<p>핵심은, 왜 int 값으로 패러미터를 받으며, 
원하는 범위에 들어갈 때 어떤 값을 리턴하냐? 이다.  </p>
<blockquote>
<h4 id="int-값을-받는-이유는">int 값을 받는 이유는?</h4>
<p>C99 공식 문서 언급한 내용을 정리하면 아래와 같다. 파일을 읽거나 하여, 데이터를 함수로 보냈들 때 <code>eof(end of file)</code>의 시그널을 함께 보낸다. 그런데 이를 보통 <code>-1</code> 내지는 음수 값으로 지정한다. 따라서 이를 인지하는데 있어 다른 자료형보단 int로 하는 것이 명확하기 때문이다. 
더 나아가서, 최초에 C 언어를 고려해볼 필요가 있다. prototype이란 기능 조차 없던 시절, 인수 검사를 진행할 때는 char 형도 존재 하지 않았고 데이터 입출력시 자동적으로 int형으로 형변환이 되어 전달되었었다. 그리고 하위호환을 계속 이어가는 상황이다 보니, 이제는 충분히 바꿀 수도 있겠지만, 현재의 상태로 굳어진 것이다. (물론 더 디테일한 내용은 있지만... 시간이 있다면 직접 찾아보길 바란다.) <a href="https://www.notion.so/ryu93notion/Libft-125-e11cb4062cc44db78b46b08a670b7887#c52f9ffc785e49aaa4dda7a5b5825a98">참고원문링크</a></p>
</blockquote>
<p>자잘 자잘하게 주요 포인트가 있다면 아래와 같다. </p>
<ol>
<li>print 라는 것은 출력 가능하다는 뜻. 그렇다면 int형으로 받을 때, 출력 가능한 값과 출력 불가능한 값중 어느 걸 기준으로 잡아야 할까? </li>
<li>int 값을 반환하는 이유는 boolean 형으로 상세하게 지정된 것이 아닌 C에선 0을 제외한 모든 양수 값은 <strong><code>True</code></strong> 처리가 되기 때문이다.</li>
<li><code>man</code> 을 생각하지 않고 그냥 구글링을 하는 경우가 많이 보였다. 개인적으로 우선 <code>man</code>을 꼭 정독하길 바란다. 작동 원리 뿐만 아니라 연관된 함수들도 보여준다. 하물며 ascii 코드 같은 것들도 확인할 수 있다. </li>
<li>ascii 를 이해한다면, int 값의 연산을 통해 문자열 확인이 될 것이다. tolower 과 toupper 는 충분히 처리할 수 있을 것이다. </li>
</ol>
<h4 id="str-시리즈">&lt; str 시리즈 &gt;</h4>
<ul>
<li>strlen : 문자열의 문자 길이를 세고, 그 값을 반환한다.(size_t)</li>
<li>strlcpy : size_t의 dstize를 받아, 길이 만큼 src를 dst 에 붙여 넣고, 마지막에 <code>0</code>을 입력한다. 이때, dst 길이와 입력받은 dstsize에 따라 붙여 넣은 src의 길이를 리턴한다. </li>
<li>strlcat : size_t의 dstsize를 받아, 그 길이가 dst 문자열 길이보다 길다면 긴 만큼만 src를 dst에 붙여 넣고 리턴값을 반환한다. 
  ⭐️ <em>단, 리턴값은 <strong>두 가지</strong> 경우로 쪼개진다.</em>
  ⭐️ <em>dstsize 가 실제 dst 길이보다 짧을 때 : *</em>src 길이 + dstsize<strong>를 리턴하고, 붙여넣기를 진행하지 않는다. *
  ⭐️ <em>dstsize 가 실제 dst 길이보다 길 때 : *</em>dst의 길이 + src 길이</strong>를 리턴하고, 붙여넣기를 진행한다. *</li>
<li>strchr : 제공되는 문자(int c) 를 제공되는 문자열에서 발견하면, 그 위치부터 문자열 끝까지를 반환하는 포인터 주소를 반환한다. </li>
<li>strrchr : 제공되는 문자(int c) 를 제공되는 문자열에서 <strong>&#39;뒤에서부터&#39;</strong> 발견하며, 발견되면 해당 위치부터 문자열 끝까지를 반환하는포인터 주소를 반환한다.  </li>
<li>strncmp : 제공되는 두 문자열을 <code>n byte</code> 만큼 만 비교하고, 다른 부분이 있을 때 해당 부분의 차이를 출력한다.</li>
<li>strnstr : 제공되는 문자열 두 개(<code>haystack</code>, <code>needle</code>)에서 needle에 저장된 문자열이 haystack에 정확하게 있는 부분부터 문장 끝까지를 출력하는 포인터를 반환한다. 이때, <strong><code>len byte</code></strong> 까지만 진행합니다. </li>
</ul>
<p>해당 함수들의 포인트는? </p>
<ol>
<li>strlen에서 길이를 잴 때는 사람이 생각하는 기준에서 시작한다. 즉, 컴퓨터의 인덱스는 항상 <code>0</code>에서 시작하지만, 사용자는 <code>1</code>부터 시작한다는 차이가 있다. 놓치기 쉬운, 사소한 부분이다. </li>
<li>strlcpy는 dst에 src 값을 넣는데, 이때 <strong>size_t</strong>를 정확하게 이해해야 하며, 복사 시에도 &#39;\0&#39; 값을 만나기 전까지나, 제공되는 size의 -1 한 값 만큼만 복사를 붙여넣게 된다.</li>
<li>strlcat은 특히나 머리가 아픈 부분이 <strong>return</strong> 값 부분이다. 왜 그렇게 되는가를 반드시 찾고, 고민해보아야 한다. </li>
<li>strchr, strrchr부터 본격적으로 <strong>포인터</strong> 를 이해해야 하는 부분이다. 그러나 동시에 프로토타입에서 찾을 수 있는 특징이 바로 <strong><code>const</code></strong> 라는 한정자가 붙어 있다는 점이다. const는 상수를 의미하며, 이 말은 해당 매개변수를 조작해서 바꾸어 버리는 행위(예를 들어, 시작 포인터를 바꾸는 등)를 하지 말아야 한다는 점이다.</li>
<li>strnstr 은 needle이란 문자열을 <code>전부</code> 찾는 다는 점, 이때 <code>size_t len</code> 만큼만 해야 한다는 점만 고려하면 쉽게 구현이 가능하다. </li>
</ol>
<blockquote>
<h4 id="size_t-란">size_t 란?</h4>
<p>여러 해더에서 정의 내려져 있는 어떤 기기에서든 <strong><code>(이론상)사용 가능한 정수 최대 값</code></strong> 을 표현 가능한 자료형이다. <a href="https://namu.wiki/w/size_t">우리의 나무위키</a>
이러한 자료형을 사용하는 이유는 우리가 사용하는 시스템마다 표현 가능한 데이터 크기가 다르다는 점 때문이다. 보통 int는 4바이트라고 이야기 하지만, 디바이스마다 이는 변경될 수 있고, 실제 다른 자료형도 마찬가지로 변동이 생긴다. 따라서 이를 맊기위해서 나왔으며, 보통 바이트 표시를 하는 경우, 거의 무조건적으로 사용된다. 자매품으로 <code>ssize_t</code>도 존재한다. 
단, 사용시 주의할 점은, unsigned 형이라는 점이다. 즉, 음수가 존재하지 않는 만큼, <code>음수가 나오는 경우</code>를 항상 고려하여야 한다.(if 조건에서 연산이 들어가 음수가 나올 경우를 항상 고려해여 한다.) </p>
</blockquote>
<blockquote>
<h4 id="strlcat의-리턴-값이-의미하는-바는">strlcat의 리턴 값이 의미하는 바는?</h4>
<p>strlcat은 기존의 strncat과 유사한 기능이지만, 안정성을 중시하여 만들어진 함수이다. 그런데 독특하게도 return값은 <code>size_t</code> 값이 라는 점이며, 이것이 2가지 경우로 쪼개진다는 점을 들 수 있다. 
<strong>1) size 가 strlen(dst) 보다 작다면, src + size를 반환한다. **
**2) 반대의 경우에는 dst + src 길이를 반환한다.</strong> 
이렇게 되는 이유는 간단히 말하면, 붙여 넣는 과정에서 &#39;얼마나 메모리 공간이 필요한가?&#39; 를 보여주기 위함이다. 성공적으로 붙여넣기가 진행된다고 하더라도, 지정된 size가 부족하여 다 붙여넣지 못할 때는 2를 출력하여 필요한 양을 보여준다. 따라서 붙여넣기 성공 이후에라도 다 입력되지 않았을 때 어느정도 buffer사이즈를 줄지를 알려주는 것이다. 
그러나 성공되지 않을 경우에는 어떨까?  현재 내가 넣으려는 대상(src), 넣으려는 글자수(len)는 이용자 중심으로 생각하면 그 <code>크기</code>를 고려할 수 있을 것이다.</p>
</blockquote>
<p>정리 해보니 정말 길다. </p>
<p>앞으로 정리할 게 더 많다는 것은 생각보다 끔찍한(..) 일이긴 한 것 같다. 
코드만 정리하면 참 편하겠지만, 결국 코드는 널려있고, 문제는 깊이를 이해해야 코드를 설명하고 이용을 극대화시킨다. </p>
<p>앞으로 Linux 서버 구축이나 기타 등등... 읽고 이해해야할 게 산더미라는 생각이 든다. </p>
<p>😮‍💨</p>
<p>재미는 있지만 ㅋㅋ... </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[이노콘(INNOCON) 2021 특강 후기]]></title>
            <link>https://velog.io/@paul2021_r/INNOCON2021speciallecture3</link>
            <guid>https://velog.io/@paul2021_r/INNOCON2021speciallecture3</guid>
            <pubDate>Fri, 03 Dec 2021 13:46:44 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/paul2021_r/post/95200024-1e03-45e9-9be7-43e0c83332fc/Untitled.png" alt="">
<a href="https://www.youtube.com/watch?v=zNynKuK6wUE&amp;t=430s">다시보기 영상(유튜브)</a></p>
<h3 id="들어가면서">들어가면서</h3>
<p>이노콘 3일차, 해당 내용은 생각보다 엄청 획기적인 내용이다! 라고 할 것은 아니었다. 왜냐면 어느 시장이나 비슷하다는 공통적 부분이 보였고, 거기서 파생되는 구체적인 특징들은 이미 회사 경험 속에서 나름대로 느껴본 부분에 대한 언급이 많았기 때문이다. </p>
<p>하지만 그럼에도 IT 라는 특성을 가지고 프로그래밍이란 부분이 도구로서의 특성이기에 그런 부분에서의 다른 회사, 다른 분야와의 다른 특징들을 배울 수 있었다.</p>
<h3 id="회사가-좋아하는-개발자">회사가 좋아하는 개발자</h3>
<ul>
<li>전공자</li>
<li><code>자체 서비스</code>를 만든 분</li>
<li><code>대용량 서비스</code>를 만들어 보신 분</li>
<li>개인적으로 불편해서 무엇인가 만들어 보신 분</li>
<li>깃허브 <code>잔디밭</code>을 잘 가꾸신 분</li>
<li><code>커뮤니케이션</code>을 잘 하시는 분</li>
<li>AWS 활용 개발 운영을 해보신 분</li>
<li><code>빌드</code>, <code>테스트</code>, <code>배포</code>, <code>자동화</code> 경험이 있으신 분</li>
</ul>
<h3 id="피해야-할-회사-→-정말-중요한-부분-같았다">피해야 할 회사 → 정말 중요한 부분 같았다!</h3>
<ul>
<li><code>채용공고</code>에 성의, 정성이 보이지 않는 회사</li>
<li>인터뷰 상에서 성의가 부족하고, 불친절, 압박 인터뷰를 진행하는 회사 → 약간 고민은 된다.</li>
<li>채용 담당자가 불친절</li>
<li>잡 플래닛의 평점이 낮은 회사? → 악평이 많다면 고려해볼 필요가 있다.</li>
<li>Skill이 오래되었거나, 자신만의 기술을 활용하는 회사 → 커리어 부분에서 꼬일 수 있음.</li>
<li>야근이 많은 회사</li>
<li>근로 계약서 작성 등 신뢰와 연관되는 부분에 대해 정상적으로 대응하지 않는 경우</li>
<li>자격증이나 스펙으로 사람을 평가하는 회사</li>
</ul>
<h3 id="좋은-회사란">좋은 회사란?</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/95200024-1e03-45e9-9be7-43e0c83332fc/Untitled.png" alt=""></p>
<h3 id="실력을-키우지-좋은-곳은">실력을 키우지 좋은 곳은?</h3>
<ul>
<li><code>기술검증</code>을 까다롭게 진행하는 곳</li>
<li><code>개인프로젝트</code>를 중요시 하는 곳</li>
<li>(당연히) <code>사수</code>의 역량은 중요</li>
<li><code>오픈소스</code>의 활용이 많은 곳</li>
<li>외부에 알려진 개발자가 존재하는 곳</li>
</ul>
<h3 id="그래서-구체적으로-회사-종류를-어떻게-보면-좋을까">그래서 구체적으로 회사 종류를 어떻게 보면 좋을까?</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/35473e17-fc20-4cc0-89b1-16c0e592c7ea/%E1%84%8B%E1%85%B5%E1%84%86%E1%85%B5%E1%84%8C%E1%85%B5.jpeg" alt=""></p>
<ul>
<li>대형 인터넷 서비스 회사</li>
<li>좋은 개발자가 있는 스타트업</li>
<li>사내 개발자가 개발하는 대기업</li>
<li>개발 대행회사 : 단, 전문 파견 회사(하청에 하청...)가 아니라 내부 직접 소수 개발자들이 모여서 외주 용역 하면서 잘 먹고 잘 사는 회사.</li>
</ul>
<h3 id="그-외의-추가적인-팁">그 외의 추가적인 팁</h3>
<ol>
<li>국내 소재지 외국계 회사는 좋은 선택지가 아닐 수 있다. 왜냐하면 해당 기업들이 개발을 역할로 하는 회사가 아닐 수 있기 때문이다. </li>
<li>사람들의 욕심을 내는  사람들이 있는 곳에 가고 그럴 만한 매력이 있는 것 </li>
<li>자격증은 필요하지만 필요 없다. 나에게 <code>필요한 순간</code>에 따면 된다. </li>
<li>개발자의 과정을 지나서 <code>개발자가 아닌 길</code>도 가볼 수 있다. </li>
</ol>
<p><img src="https://images.velog.io/images/paul2021_r/post/5a5bb494-38d0-474f-b586-0a6640eb7239/Tech%20Writer.jpeg" alt=""></p>
<ol start="5">
<li><code>시장 상황</code>과 <code>트랜드</code>에 민감해야 한다. ⇒ 매주 시장 채용 공고나 뉴스를 참고해야 한다. </li>
<li><code>JD(채용공고)</code>는 늘 관심있게 보면서, 내가 가야할 지향점에 대해 이해해봐라. </li>
<li><code>이력서</code>는 연 2~3회 씩, 변동 사항이 있다면 추가하고 변화시키며 <code>업데이트</code>를 진행시켜라 </li>
<li><code>네트워크</code> 및 <code>개인 브랜드</code> 만들기는 필수다. </li>
<li>실제 회사에 들어가서는 3년차가 넘어가면 헤드헌터들을 어느정도 알아두면 도움이 될 것이다. </li>
<li>인터뷰는 의연하고 <code>당당</code>하게 대응하라..! </li>
</ol>
<h3 id="결론">결론</h3>
<p>해야할 일을 알아냈다. 현재 내가 애매하다고 느끼는 것. 그것은 역시 트랜드를 모르고, 그 트랜드가 뭘 바라는지 몰라서 라는 사실을 명백히 이해할 수 있었다. 어떤 분야가 있고, 직책이 있어서 그런 직책에선 어떤 기술 스택을 요구한다- 라는 사실을 이해할 수 있어야 한다는 것을 느낄 수 있었다. 그런데 그걸 어디서 찾겠는가? 그 답은 뻔했다. 잦은 뉴스의 탐독, 그리고 회사의 채용공고에서 나오는 각종 그들의 &#39;원하는 포인트&#39; 에 대한 이해도 아니겠는가?</p>
<h3 id="실천포인트">실천포인트</h3>
<ol>
<li>매일  IT  커뮤니티의 업계 소식을 읽을 수 있는 뉴스 탐독의 시간을 가질 것 </li>
<li>채용공고를 스크랩 하고, 어떤 조건과 무얼 원하는지, 직책에 대한 빈도수 정리를 통계화 시키면 좋을 듯..! </li>
<li>내 실력은 이런 모든 것들보다 선행되는 사실을 잊지 말 것 !</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[# 1차 멘토링 결과 정리]]></title>
            <link>https://velog.io/@paul2021_r/firstconsultant</link>
            <guid>https://velog.io/@paul2021_r/firstconsultant</guid>
            <pubDate>Fri, 03 Dec 2021 13:37:44 GMT</pubDate>
            <description><![CDATA[<h1 id="1차-멘토링-결과-정리">1차 멘토링 결과 정리</h1>
<p>멘토링 일시: 2021년 12월 1일
작성일: 2021년 12월 3일 오후 7:15
태그: 취업</p>
<h3 id="들어가면서">들어가면서...</h3>
<p>이번주 나는 길에 대한 힌트를 얻고 싶었다. 이유는 간단하다. 아직 길을 모르겠다. 프로그래밍을 배우는 과정은 재미가 있다. 흥미 진진하다. 거기다 시간을 쏟는데 부담이 없다. 머리가 아플 때도 있지만, 이야기하고 개발하는 과정에서 설계의 재미를 느꼈다. </p>
<p>하지만 문제는 현실이다. 현실적 상황을 고려할 줄 모르는 바보가 되있다면, 나는 그것 만으로도 내가 꿈을 꿀 자격이 없다고 생각한다. 그래서 3명의 멘토님들에게 연락을 드렸고, 나름대로 기대감을 갖고 무언가 나름의 가이드를 신청했다.</p>
<h3 id="우선-실수를-저질렀다">우선 실수를 저질렀다.</h3>
<p>우선 실수를 저질렀다. 욕심과 열정을 다한다는 행위로 시작한 것이었지만, 3명을 동시에 상담을 신청하는 행위는 그들에게 있어서 딱히 좋은 것으로 보이지 않는 모양이다. 기회라는 것은 잡는 것이라고 생각했지만, 그 모든 상황에서 동등하고 공평하게 상담을 해야 하는 멘토들에게 나의 행위는 좋은 시선으로 보여지지 않는 다는 점은 생각치도 못한 애매한 부분이었다. 독점하려는 행위는 제일 큰 문제였으며, 후술할 부분은 역시나 나의 아직까지의 한계를 분명하게 보여주는 부분이리라. </p>
<h3 id="고민의-수준은-사람의-수준을-나타낸다">고민의 수준은 사람의 수준을 나타낸다.</h3>
<p>어차피 나는 여기서 살아남아야 한다. 그런데 문제는 누군가가 이야기 하는데로 내 인생을 살수 있는가? 아닐 것이다. 살라고 한다면 거절하고 나는 내 인생을 살고 싶다고 이야기 하겠지. 그것이 나라는 주체성을 나타내서 지금까지 삶을 살아온 내 의지이자 믿음이다. </p>
<p>그런데 생각해보면 위에서 이야기 한 나의 고민, 무언가 길을 제시해주 것같다는 막연한 생각은? 그것은 결코 고민이 아니었다고, 멘토님은 지적하셨다. 왜냐면 방금 내 설명과도 같다. 멘토님은 내 인생을 책임질 수 없다. 책임질수 없다는 사실 하나만 가지고도 그들의 이야기는, 어디까지나 실무에 머무를 것임을 느끼게 만든다. 왜냐하면 이쪽 산업의 구조는 누구보다 잘 알지 않는가? 구조적으로 누군가에게 무엇이 낫다고 이야기하는 행위는 리스크를 동반한다. 이미 지나간 뒤에 그것이 좋다고, 낫다고 이야기 한 들 무슨 일이 생기겠는가? </p>
<p>그런데 나는 그런 사실을 알기에 내 인생을 내 인생 답게 살려고 했으면서도, 다른 사람에게 편한 길 안전한 길이란 말도 안되는 환상을 갖고 있었던 것이다. 그러니 이걸 받은 멘토들 입장에선 어떨까? 그리고 그런 상황에서 기분좋게 웃어 넘기거나 그럴 수 있다고 인정해주는 행위로 상황은 바뀌는가? 나는 헤머로 한 대 맞은 감각을 느꼈다. 결국 내가 바라는 삶에서 이런 식의 &#39;가이드&#39;를 듣고 진행하는 행위는 편함에 기대어 살아가고 싶다는... 내 부족함 그자체 아니겠는가? </p>
<h3 id="물론-그렇다고-해도-아쉬움은-있었다">물론, 그렇다고 해도 아쉬움은 있었다.</h3>
<p>그럼에도 가는 길의 무게라는 것은 정말 쉽지 않다. 현실에서 걸어 가는 그 길은 누구는 좀더 빠르고 편리하게 가고 있고, 그때 여러 지원을 통해 탄탄히 다져가는 이들이 있다. 그들이 잘못했다는 말이라거나 비겁하다는게 아니다. 삶은 원래 그런 것이다. 설령 어리더라도, 설령 깨닫지 못해도 좀더 빠른 길을 통해 좀더 빠른 방향성을 가지는 사람이 없겠는가? </p>
<p>그런 점에서 분명 아무것도 모르는 이들에게 줄 수 있는 분명한 가이드는 있었을 것이다. 그럼에도 그것을 지적하지 않았다는 점. 정말 존재하지 않는 것일까? 그럴리는 없겠지. 그리고 그런 서비스를 제공해주지 않는 것이 결코 참된 선생이나, 선배로의 역할은 아니지 않을까? 이 길은 맞으면서 배워야 한다고 맞으라고 강요한다면 과연 그게 정말 진짜 길인가? 진짜라면, 진짜 도움을 고민한다면 어쩌면 할 수 있는 일, 도울 수 있는 일이 있었을 텐데. </p>
<p>물론, 정규적으로 상담의 방법을 배운 분이 있는 것도 아니고, 그리고 그들이 배우던 시기의 상황을 지금에 대입할 수는 없다는 것은 이해하지만, 다소 무례한 말투와 상대방의 감정적 상처를 야기하는 이야기 방식은 과연 그게 진짜 현실을 직시하는 현명한 방법일까? 다소 아쉬운 부분임은 확실하다. 무엇보다 기분이 나빴다는 점은 변함이 없으니 말이다. </p>
<h3 id="그래서-이제-느끼는-행동의-포인트는">그래서 이제 느끼는 행동의 포인트는...</h3>
<p>내 감정과는 별개로, 진심으로 지금 깨닫고 느끼는 것. 그것은 부딪힘이라는 것만이 유일한 진실이자, 핵심이라고 지금 느끼게 되었다. 가르쳐 줄 사람은 존재하지 않는 다면 결국 똥과 된장을 구분하는 당사자가 맛을 안볼 수 없는 것이다. 물론, 그 행위가, 그 과정이 너무나 너무나 내 삶을 괴롭게 할 때가 오겠지만... 그럼에도 불구하고 결국 삶의 핵심이 내가 결정하는 것이라고 한다면, 지금 해야할 일이 명확하게 정리되는 것 같다고 느낀다. </p>
<p>주어지는 과제에 충실히 할 것이다. 이너서클을 돌파에 아웃서클로 갈 것이고, 그 과정에서 그 외에 필요한 것들을 느낀다면, 그 느끼는 것들을 위하여 조금씩 계획하고 남는 시간들을 활용하여 무언가 진행해볼 것이다. 협업을 할 수 있는 것이 있다면 더더욱 좋을 것이고, 그러면서 얻게 된 지식, 능력, 네트워크로 도전의 값을 만들어 내리라 생각한다.  </p>
<p> 그리고 이 과정을 넘어 멘토님은 분명 고민을 하고 그 고민에 무언가 들어야 할 필요성을 느낄 때가 있다고 말씀하셨다. 그 시기가 언제일진 모르겠다. 지금 따지고 보면 겉만 그럴싸한 강정이니까 말이다. 하지만 해낼 수 있으리라 확신한다. 누가 뭐라해도 노력과 근성 하나만큼은 내가 천재니까 말이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Python_if문]]></title>
            <link>https://velog.io/@paul2021_r/Pythonif%EB%AC%B8</link>
            <guid>https://velog.io/@paul2021_r/Pythonif%EB%AC%B8</guid>
            <pubDate>Sun, 28 Nov 2021 02:08:05 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/paul2021_r/post/82a00fd2-8ff9-4053-850d-63ab5e6dbc56/VyvcKdbWHbTaN3QzRCQQS7pXASq1-9x7p315b.jpeg" alt=""></p>
<h3 id="주말마다-하는-파이썬-학습2">주말마다 하는 파이썬 학습...2</h3>
<p>바쁘다.
몸도 바쁜데, 마음도 좀 바쁘다. 
42서울을 진행하면서 C 함수 구현도 구현이지만, 해야 하는 일에 비해 몸뚱이가 하나 뿐인게 흠이다... </p>
<p>오늘은 점프 투 파이썬 이라는 교재의 덕을 많이 봤다. 
막상 파이썬을 시작하면서, 파이썬 공부를 하는 이들마다 말하는 &#39;파이썬스러움&#39;을 가진 코드를 만들기가 쉽지 않다. </p>
<p>C와의 차이점이 처음엔 그닥 크지 않다고 생각했다. 하지만 생각해보면 엄청난 차이가 있었다. 문장에서 필요한 성분이 달랐고, 형식적으로 명확해야만 하던 C와는 다른 &#39;자연스러움&#39;이 파이썬에 있다는 걸 느낄 수 있었다. </p>
<p>두개다 배우다 머리 터지는거 아니겠지...? </p>
<hr>
<h2 id="if문">if문</h2>
<ul>
<li>조건문 중에서 가장 직관적인 조건문들에 대한 내용을 담았다. </li>
<li>~하면 이라는 의미를 담고 있는 분기를 나타내고, 이에 따라 조건절이 후행한다. </li>
<li>이때 C와는 다르게 <code>{</code> <code>}</code>이 두가지 요소를 쓰지 않고, <code>들여쓰기</code>가 문장을 구분하는 핵심이 된다. 들여쓰기에 따라 해당 명령에 따라 연속적으로 오는 명령은 들여쓰기 안으로 들어가서 있어야 한다. <pre><code class="language-python">money = True
if money :
  # 주석을 이렇게 적어야 아래의 print문장이 작동함. 
  print(&quot;택시 타셈&quot;)
else : 
# 이렇게 적으면 위의 else문은 이미 명령이 끝난 것이고, print는 연속되지 않는다. 
  print(&quot;걸어가셈&quot;)
</code></pre>
</li>
</ul>
<p>...</p>
<blockquote>
<p>택시 타셈</p>
</blockquote>
<pre><code>* 더 자세한 내용은 위키독스의 &#39;점프 투 파이썬&#39; 항목을 참고하면 좋다. 한 동안 학습의 교재로 이걸 쓸 것이다. [점프투파이썬](https://wikidocs.net/20)
* 더불어 해당 학습의 모든 항목은 백준 온라인 코딩 테스트 시험 문제들을 기반으로 한다. 

### 두 수 비교하기
```python
a, b = map(int, input().split())
if (a &gt; b):
    print(&quot;&gt;&quot;)
elif (a &lt; b):
    print(&quot;&lt;&quot;)
else:
    print(&quot;==&quot;)

# 개선버전 
a, b = map(int, input().split())
if a == b:
    print(&quot;==&quot;)
else :
    print(&quot;&gt;&quot; if a &gt; b else &quot;&lt;&quot;)</code></pre><p>if 문을 이용하는 가장 쉬운 문제. 조건에 따라 넣어주면 된다. 이때, 여러 조건을 통해 분기로 나눌 시에 사용 가능한 것이 &quot;elif&quot;다.(c의 else if 와 똑같다.) <p> c와의 차이점은, 해당 명령이 실행될 시 해야할 명령의 구분을 : 로 한다는 점. </p> <p> 또한, 개선버전의 경우 다른 사람들의 것을 보고 깨달은 부분이다. print 함수 자체에다가 명령문 자체를 넣을 수가 있고, 분기를 줄인 만큼 실행속도가 빨라진다... 이게 바로 &quot;파이썬스러움&quot; 인건가 싶다. </p></p>
<h3 id="시험-성적">시험 성적</h3>
<pre><code class="language-python">import sys
a = int(sys.stdin.readline())
if 90 &lt;= a:
    print(&quot;A&quot;)
elif 80 &lt;= a &lt;= 89:
    print(&quot;B&quot;)
elif 70 &lt;= a &lt;= 79:
    print(&quot;C&quot;)
elif 60 &lt;= a &lt;= 69:
    print(&quot;D&quot;)
else:
    print(&quot;F&quot;)</code></pre>
<font>
  <font color="grey"><small>
    해당 내용은 성적에 따라 구분되는 여러 조건을 입력하는 방법에 대한 문제다. <p>이때 포인트는 elif의 활용이다. </P><p>이번에 추가적으로 알게된 입력 방법은 sys.stdin.readline()이라는 명령어다. 해당 명령어 사용시 백준 코딩 등에서 생기는 타임아웃을 해결할 수 있다. 이유는 결론적으로 말하면, 기존의 input 내장함수에 비해, prompt message 출력과 개행문자 삭제를 안하고 바로 인식해버리기 때문이다. 자세한 내용은 하단 블로그 링크를 참고하면 좋다.  </P>
    </small>
      </font>

<p><a href="https://buyandpray.tistory.com/7">sys.stdin.readline()이 왜 더 빠를까?</a>
<a href="https://wordrow.kr/%EC%9D%98%EB%AF%B8/%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%20%EB%A9%94%EC%8B%9C%EC%A7%80/">prompt message란?</a></p>
<h3 id="윤년">윤년</h3>
<pre><code class="language-python"># 윤년 구하기
# 조건 1. 4의 배수이지만 100의 배수는 아닐 때 
# 조건 2. 400의 배수일 때
import sys
a = int(sys.stdin.readline())
if (((a % 4) == 0 &amp; (a % 100) != 0) | (a % 400 == 0)):
    print(&quot;1&quot;)
else:
    print(&quot;0&quot;)</code></pre>
<font>
  <font color="grey"><small>
   해당 문제는 생각보다 시간이 걸렸다. 이유는 간단한데, () 사용에 있어 어떤 조건과 어떤 조건이 함께 묶여야 하는지 대충 읽었을 때 잘못 해석(...) 해버렸기 때문이다. 
    </small>
  </font>

<h3 id="사분면-고르기">사분면 고르기</h3>
<pre><code class="language-python"># 사분면 고르기
import sys
print(&quot;x값을 입력하시오.&quot;)
x = int(sys.stdin.readline())
print(&quot;y값을 입력하시오.&quot;)
y = int(sys.stdin.readline())

if (x &gt; 0):
    if (y &gt; 0):
        print(&quot;1&quot;)
    elif (y &lt; 0):
        print(&quot;4&quot;)
elif (x &lt; 0):
    if (y &gt; 0):
        print(&quot;2&quot;)
    elif (y &lt; 0):
        print(&quot;3&quot;)

# 사분면 고르기(short coding)
x = int(input(&quot;x 값을 입력하시오.\n&quot;))
y = int(input(&quot;y 값을 입력하시오.\n&quot;))
if x &gt; 0:
    print(1 if y &gt; 0 else 4)
elif x &lt; 0:
    print(2 if y &gt; 0 else 3)
</code></pre>
<font>
  <font color="grey"><small>이 문제에서는 특히나, 파이썬 스러움을 잘 할 줄 아는 사람들에 대해 볼 수 있던 부분이다. 사분면 중 입력된 좌표에 따라 어디로 가는지를 정리한 내용이다. <p>상단 작성이 내가 한 부분이고, C 냄새(?)가 물씬 난다. </p><P>이에 반해 아래는 다른 사람이 작성한 내용이고, 이를 살짝 바꿨다.</p> <p> 한가지 특이 사항으로 print문 내부에 조건절 작성시 print (값1 if문 else 값2)를 사용한다는 점이다. </p>
    </small>
  </font>

<h3 id="알람-시계">알람 시계</h3>
<pre><code class="language-python"># 알람시계
hh, mm = map(int,input().split())
mm_r = 0
if mm - 45 &lt; 0:
    hh -= 1
    if hh &lt; 0:
        hh = 24 + hh
    mm = (mm - 45)
    mm_r = 60 + mm
    print (&quot;{0} {1}&quot;.format(hh, mm_r))
else :
    print(&quot;{0} {1}&quot;.format(hh, mm - 45))

# 알람시계(short coding)
# 방법1
a,b=map(int,input().split());x=a*60+b-45;print(x//60%24,x%60)
# 방법2
a, b = map(int, input().split())
print((a-(b&lt;45))%24, (b-45)%60)</code></pre>
<font>
  <font color="grey"><small> 
    숏 코딩에서 내공이 느껴진다.<p>방법 1과 2는 유사하지만, 접근 방법이 다르다. 1번은 아예 a, b로 받는 시간과 분을 하나의 숫자 덩어리로 만든 뒤 처리를 했다. 하지만 2번은 (b < 45) 라는 부분으로 "조건절"을 만드는 방식을 활용했다. 참이되면 1이 나와 a에서 1시간을 뺄 것이고 거짓이면 0이 되니 빠지는 시간 없이 작동하게 되는 것이다. </P>
    </small>
  </font>

<hr>
<h3 id="마무리-정리">마무리 정리</h3>
<p> 새로운 것들을 꽤 많이 배웠다. </p>
<ul>
<li>import sys .. sys.stdin.readline() : 앞으로 input과 함께 유용하게 쓸 것 같다. </li>
<li>print(값1 if문 else 값2) : 숏코딩을 하기위해 써먹기 좋은 방식이다. </li>
<li>(a &lt; b) : 해당 방식으로 작성만 해도 <code>boolean</code>으로 사용이 가능하다는 점은, 생각이상으로 신박하다고 느낀다.</li>
</ul>
<p>이제 if문 하나 진득하게 바라보면서 문제를 풀어봤다. 앞으로 바뻐지는데 계속 할 수 있을지 다소 애매함(?) 을 느끼긴 하고 있다. 그래도 42서울에서 원하는 것이 점점더 완벽하고 스스로 디테일해지는 것이니까, libft 자체에도 시간을 디테일하게 쏟는 방식으로 계속 이어가야겠지. (물론, 다음주 초에는 끝내야 한다ㅋㅋ...)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[라피신 후기_라 피신(La Piscine) 이란 이름의 지옥에서..]]></title>
            <link>https://velog.io/@paul2021_r/%EB%9D%BC%ED%94%BC%EC%8B%A0-%ED%9B%84%EA%B8%B0%EB%9D%BC-%ED%94%BC%EC%8B%A0La-Piscine-%EC%9D%B4%EB%9E%80-%EC%9D%B4%EB%A6%84%EC%9D%98-%EC%A7%80%EC%98%A5%EC%97%90%EC%84%9C</link>
            <guid>https://velog.io/@paul2021_r/%EB%9D%BC%ED%94%BC%EC%8B%A0-%ED%9B%84%EA%B8%B0%EB%9D%BC-%ED%94%BC%EC%8B%A0La-Piscine-%EC%9D%B4%EB%9E%80-%EC%9D%B4%EB%A6%84%EC%9D%98-%EC%A7%80%EC%98%A5%EC%97%90%EC%84%9C</guid>
            <pubDate>Sat, 20 Nov 2021 16:43:55 GMT</pubDate>
            <description><![CDATA[<p><font color=#ff9185><big>라 피신에 대한 구체적 정보는 비밀서약유지를 위해 배제되었고, 알려드릴 수 없다. 이해 부탁드린다(...)</big></font></p>
<h3 id="쥐가-나면-안된다">쥐가 나면 안된다.</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/9fe4219c-fb2b-4f75-a222-cba5e9f9f0d4/%E1%84%8C%E1%85%B1.jpeg" alt="">
어릴 적에 바다에 갔던 때 쥐가 났던 경험이 있다. 너무 재밌었다. 바다의 냄새, 친척들과 함께 왔었고, 마음씨 좋은 친척분에게 수영도 배웠었던 그 때, 쥐라는 놈이 갑자기 찾아왔었다. 하필이면 바다에서도 조금 깊은 곳에 갔었을 때말이다. </p>
<p>쥐가 나면 어떤가? 우선 근육이 경련을 일으키다 보통 한쪽 방향으로 과하게 오그라들거나 펴진다. 나의 경우 발 앞부분이 발 뒷꿈치 쪽으로 계속 밀어져서 정강이가 찢어질 것 같은 감각이 들었고 당황했었다. 생애 처음으로 쥐가 났다는 사실은 매우 무서운 일이었다.</p>
<p>물은 턱밑까지 올라와 있었고, 발이 말을 안 듣고, 격통으로 본능적으로 몸이 숚여지는데 심지어 조금만 허리를 굽혀도 몸이 바다 쪽으로 빨려 들어가는... 그때 당시 정말 무서웠던 기억이 난다.</p>
<p>점점 심각성을 인지하지만, 당황하면서도 해결이 되기는 커녕 더 허우적 거리고, 허우적 거릴 수록 짠 바닷물이 콧속으로 들어오고, 들어오니? 더욱 허우적거린다.</p>
<p>이게 바로 라피신, 2차 테스트 그 자체가 아닐까 한다. </p>
<p>참고로 그때 어떻게 했냐고 묻는 다면 나는 &#39;강제로&#39; 힘을 주어 발목의 힘으로 근육의 경련을 막았다. 그리곤 자리에 서서 물을 마셔도 근육이 풀릴 때가지 그대로 기다렸다. 도움을 부를 수 없었던 그때 내가 할 수 있는 유일한 방법이었다. 시간이 조금 흘러, 물좀 먹고 나서 근육이 움직여도 다시 경련을 안 일으킬 때 즈음, 그때 비로소 나는 물 밖으로 나올 수 있었다. </p>
<hr>
<h3 id="당황스러울-정도의-">당황스러울 정도의 ....</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/20b83c0d-e33e-4cf6-88a0-3ef9ca1b96b1/assignement.jpg.jpeg" alt="">
라피신을 처음 들어가면 정말 당황 그 자체다. 평가도 그렇지만, 과제 자체도 그렇다. 이공계를 다닌 사람들 조차도 그렇다. 당황 그 자체. 과제의 양에서 놀라고 수준에서 놀라며, 점(.) 하나 잘못 적었을 때 오는 충격적인 결과들을 눈 앞에서 보게 되는 순간, 나는 누구? 내가 지금 어디에 있는가? 라는 질문이 바로 튀어나오게 된다. </p>
<p>편하게 쓰던 모든 것들을 버리고, 내가 손으로 모든 것을 직접 만드는 과정을 경험하게 될 것이다. 흡사 원시인이 집을 짓는 것과 같은 모양새다. 필요한 것은 망치부터 만든다고 보면 될 것이다. 그렇게 이리저리 치이는데 정신을 못차리고 있으면 어느새 클러스터 라고 불리는 학습 공간의 꽉 차던 사람들이 빠져나가기 시작하게 되고, 어느덧 한산한 공간이 되어버린 모습을 볼 수 있을 것이다. </p>
<p>하지만 그렇다고 살 방법이 없을까? 문과생들은 무조건 지옥행일까? </p>
<p><big><strong>개인적인 견해를 이야기 하면...? 그건, 아니다. 단언컨데 1도 몰라도 할 수 있다.</strong></big> </p>
<p>그건 아니라고 단언할 수 있다. 이걸 단언하고 확신할 수 있는 이유는, 이곳은 결코 &#39;성적 순&#39; 입학이 아니기 때문이다. </p>
<p>한번 곰곰히 생각해보자. </p>
<p>42서울이 성적 순의 입학이라면 굳이 1달이란 기간을 두고 학습을 시킬 이유가 있을까? 저어기 옆집 SSAFY 같은 경우, 우수한 인재의 기준을 &#39;실력&#39;으로 보기 때문에 적성검사를 통해 빠르고 효과적이게 &#39;잘하는&#39;, &#39;어울리는&#39; 인재를 판단하여 교육을 진행하지 않는가? 하물며 1달을 진행시켜서 <big><strong>떨어질 수도 있는</strong></big> 600명 중 절반에게 진행 후 지원금까지 제공한다. 이건 너무 비효율적인 행동이 아닐까? </p>
<p>라피신을 진행할 사람들, 42서울을 관심을 가지고 있는 사람들이 있다면, 이 글 말고 다른 글을 봐도 비슷할 것이다. 성적에 연연하지 말길 바란다. 물론, 이 말은 &#39;따라가지 않아도 된다&#39;는 말은 아니다. </p>
<p>힘을 빼고, 지금 당장 눈 앞에 쌓여서 답도 없어 보이는 수준에는 당황하지 말되, 그렇게 힘을 빼고 질리지 않은 모습으로 끊임없이 부딪히고 고민하고, 손가락을 움직이길 바란다. 생각해보면 2년이란 긴 시간을 지원해주지 않는가? 하루에 수 시간을 투자하고, 결과적으로 2년간 그런 노력이 쌓인다면, 우리는 충분히 잘할 수 있는 실력까지 도달하지 않을까? </p>
<p> 이러한 생각과 논리는 42서울도 그렇게 생각하고 있다고 보인다. 즉, 라피신의 과정에서 성적은 결코 절대적인 기준치가 되지 못한다. </p>
<p>그렇다면 무엇이 중요한가? 이 부분은 좀 간결하게 정리해보겠다. 보고 참고가 된다면 다행이고, 아니라면... 뭐 열심히 해보길 바란다.  </p>
<blockquote>
<p><strong>1. 모르는 것은 결코 끌어않고 있지 마라</strong>
라피신 과정에서 우린 &#39;집단 지성&#39;의 힘을 경험하게 될 것이다. 혼자 고민하면 1시간이 걸리지만, 적절한 구글링, 동료들과의 의견교류는 10분 안에 해당 문제를 해결 시켜준다. 반드시 난이도 있는 과제를 진행 중이라면, 반드시 리미터 시간을 지정하여, 일정 시간이 지나면 네임드 피시너에게 질문을 해보자. </p>
<p><strong>2. 비교나 스스로 좌절하지 말아라. 다들 비슷하다.</strong>
진행하면서 아마 엄청난 괴수들을 많이 보게 될 것이다. 명심해라. 나 같은 놈도 그 곳엔 많다. 그저 내가 못 찾을 뿐임을 명심해라. 비교할 시간에 차라리 손을 움직이면 된다. 
<font color="grey"> (이것 때문에 떨어진 사람도 있었다. 오히려 실력은 나보다 좋았는데 말이다...진심으로 당부한다. 남들보다 쳐진다는 것으로 겁먹고 힘들어하지 말라. 그럴 시간도 없다 솔직히.)</font></p>
<p><strong>3. 원래 알던 친구들이 독일 수 있다.</strong>
정말 많이 봤다. 함께 신청하고 함께 공부하는 경우가 있는데, 이 경우 오히려 진도가 겁나 밀리고, 지옥을 맛볼 수 있다. 왜냐? 둘이서, 셋이서만 지내다보니 남들 다 아는 팁도 제대로 못 듣는 경우가 허다한 것을 보았다.
<font color="grey"> (이부분은 물론 개인차는 존재한다. 핵심은 자기들끼리 뭉쳐서 다른 사람들과 소통하지 않는게 문제이다. 최소 10명이상 새로운 사람을 만나길 바란다.)</font></p>
<p><strong>4. 고집은 내려 놓아라.</strong>
당연히 프로그래밍은 협업이 중요한건 알 것이다. 협업을 하는 경우가 생길 수도 있고, 없을 수도 있지만 중요한 것은 협업을 해야하는 순간에 내 생각에만 집중하면 함께 나락으로 갈 수 있다. 내가 잘 한다고 해도 여기서 제공하는 것들은 어지간한 레벨로 혼자 해결할 양이 결코 아닌데, 그걸 붙잡고 있다간 물리적 양에 압박 당할 것이다. </p>
<p><strong>5. 남의 것에 집중할 때는 내 것을 볼 때보다 더 철저해져라</strong>
라피신에서 배울 수 있는 정말 중요한 장소는 타인의 코드를 볼 때이다. 상대의 생각이나, 어떤 목적으로 무엇을 짰는지 반드시 보고, 물어보며, 의구심이 드는 부분이 있으면 질문해라. 개인적으로 가장 효과적이면서도 합격할 수 있었던 가장 큰 이유라 생각한다. </p>
<p><strong>6. 도전은 편리함을 제공한다.</strong>
구글링을 해보면 42서울과 관련된 다양한 git repository를 보게 될 것이다. 42 header, norminette, CPT, 그 외에 어떨 때는 과거의 과제 자료(!, 참고로 개정되니 100% 같진 않다.)가 올라오는 경우도 있다. 이러한 검색된 정보에서 조금씩 읽고 내 개발환경에 적용하다보면 내가 프로그래밍을 하는데 필요한 것들을 더 편리하게 만들 수 있다. 그러나 문제는 귀찮음이다. 귀찮음을 넘기면 더 편한, 더 빠른 코딩 환경을 만들 수 있을 것이다. </p>
<p><strong>7. 편리한 도구에 적응하지 마라.</strong>
조금이나마 코딩 공부를 하고 오면 vsc라는 엄청난 프로그램을 한 번쯤은 써보고 올 것이다. 조금 인강을 듣거나, 개발을 경험한 사람이라면 익히 해당 프로그램으로 하는 것 말고 생각해본적이 없을 수도 있다. 
하지만 단언컨데 라피신 과정에서 우리는 숱한 시련을 넘을 것이고, 그 과정에서 편리함은 제공되지 않는다. 오로지 내 힘으로 코드를 짜고 실행 가능케 만드는 경우가 많아서, 이는 결코 도움이 되지 않는다. 따라서 반드시 편리함에 몸을 맡기지 마라. 들어와서 제공되는 툴을 내가 직접 개조해서 업그레이드를 하려고 하면 모를까, 그렇지 않다면 편리함에 몸을 맡기지 않기를 추천한다. </p>
<p><strong>8. 이기심, 내 것을 지키려고 하지 마라.</strong> 
본인의 과제에 대해, 아까워하지 마라. 내가 만든 자료로 나만 공부하면 될거라 생각하지 마라. 더 나누고, 더 공유하다보면 200% 장담컨데 좋은 일이 생길 것이다. 내가 배려하고, 도와준 만큼 나의 막힘을 누군가가 도와줄 것이고, 그 선순환은 내 학습적인 면에서도, 내가 42서울의 라피신을 해쳐나가는데도 힘이 될 것이다. </p>
</blockquote>
<hr>
<h3 id="마무리를-지으면서">마무리를 지으면서...</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/296a8cad-e8f2-4627-8d8c-64c17abc8bf8/image.png" alt="">
막 적다보니 제대로 적은게 맞는지 아리까리하긴 하다. 그래도 이정도면 꽤 도움이 되지 않을까? 생각해본다. </p>
<p>나는 프로그래밍은 42서울을 오면서 처음 해보았다. 정처기를 배우면서 c 기초를 배우긴 했지만 사실상 연산자라던가, 2-3줄의 간단한 예제를 본 정도일 뿐이므로 제대로된 프로그램 작성이라고 하는 것은 여기가 처음이었다. </p>
<p>그러나 시작이 반이라고 했던가. 다른 사람들의 글들을 보며 스스로를 다잡고, 자신의 마음으로 인해 흔들리는 일들을 최소화 하니 어느새 지금에 다다르게 되었다. </p>
<p>놀라운 점은 그때 나는 실력이 부족하여 자기의 과제를 해내기 급급했다는 점이다. 다른 이들이 자기 과제에 더 추가로 보너스가 될만한 것들도 다할 때 나는 홀로 묵묵히, 그러나 더 끈덕지게 다른이들과 머리를 맞대고 내 공부를 이어나갔다. </p>
<p>오히려 마지막에는 화가 너무 났다. 내 부족한 능력에, 내가 더 경험할 수 있던 것들이 남았단 아쉬움이 컸던 것이다. 그리고 마지막 순간 부족한 내 실력에 탄식했다. 심지어 그때는 떨어질 것이라는 내심의 확신 같은 것이 있었다....만, 그럼에도 합격이 되었단 사실에 지금은 확신한다.</p>
<p>문과생이기에 고민하는 사람이 있을 것이다. 이공계 중에도 내게 맞나 아닌가? 하고 애매한 사람도 있을 것이다. 혹은 이번 기회를 잡아보겠다고 생각하나 경험이 부족하여 선뜻 나서기 힘들 수도 있다. 그러나, 내가 하려는 의지가 분명하고, 그저 내가 좀더 좋은 환경과 기회를 잡고 싶어한다면, 실력을 막론하고 42서울의 문턱을 두들겼으면한다. 분명한 것은 지금 이 사회가 원하는 수준의 IT 상식과 의지, 결정적으로 타인과 함께 고지를 올라가겠다 마음만 잘 먹는다면 100프로 확신컨데 노력의 정도에 따라 합격 여부를 알 수 있게 될 것이다.</p>
<p>성적, 실력을 쌓는 것은 올라와서 해도 늦지 않는다. </p>
<p>부디, 이 글을 읽고 스스로의 마음에 져버리는 일이 없도록 하면 좋을 것 같다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[42서울 본과정 합격후기....]]></title>
            <link>https://velog.io/@paul2021_r/42%EC%84%9C%EC%9A%B8-%EB%B3%B8%EA%B3%BC%EC%A0%95-%ED%95%A9%EA%B2%A9%ED%9B%84%EA%B8%B0..5%EA%B8%B0-1%EC%B0%A8</link>
            <guid>https://velog.io/@paul2021_r/42%EC%84%9C%EC%9A%B8-%EB%B3%B8%EA%B3%BC%EC%A0%95-%ED%95%A9%EA%B2%A9%ED%9B%84%EA%B8%B0..5%EA%B8%B0-1%EC%B0%A8</guid>
            <pubDate>Sat, 20 Nov 2021 15:16:36 GMT</pubDate>
            <description><![CDATA[<h4 id="이제야-쓰는-5기-카뎃cadet입성-후기">이제야 쓰는 5기 카뎃(Cadet)입성 후기..</h4>
<p>중소 IT 기업에서 일을 하고, 학생들 입시 컨설팅 일도 해보고... 생각해보면 졸업을 하고 많은 일들이 있었다. 어떤 길이 나에게 맞는지 아직 준비되지 않은 모습과 현실 속에서 이리저리 고민을 했었다. 정말 치열하기도 했고, 정말 끔찍하기도 했다. 인생이란게 이런건가 라는 말이 절로 나왔다. </p>
<p>오늘은 그러던 와중에 도착한, 지금 내가 생각하는 가장 현실적 길 중 대안으로 생각했던 &#39;42서울&#39;을 합격한 과정을 복기해보려고 한다. 그리고 앞으로를 더 열심히 살기 위해 곱씹어보려고 한다.</p>
<p>해당 글이 프로그래밍을 준비하는 많은 문돌이들에게 1g의 도움이, 조언이 될 수 있다면 나름 의미가 있으리라 생각한다. </p>
<hr>
<h4 id="intro_42">Intro_42</h4>
<figure>
    <img src="https://images.velog.io/images/paul2021_r/post/44148775-0e72-4f24-803b-12d43c46645b/image.png">
  <figcaption> <font color="grey">42 서울 하면 이 사진이 가장 먼저 떠오른다.</font></fong></figcaption>
 </figure>
대학시절 42 서울이란 프로그램에 대해 입소문을 타고 희미하게나마 알고 있었다. 그러나 당시엔 프로그래밍 자체를 내 진로로 생각하고 있지 않았다. 그럴만도 하다. 사회학자를 바랬고, 진지하게 사회학을 나의 길이라 바라보았다.

<p>하지만 삶을 살아가면서, 직장 생활 속에서 많은 경험들 안에서 &quot;정말 나에게 맞는 것이란?&quot; 질문에 답을 하려고 하면 할 수록 나는 컴퓨터라는 존재를 내 삶에서 뺄 수 없다는 사실을 생각해 낼 수 있었다. 거기다 더더욱 핵심은 10원짜리 한장을 벌 수 있는 능력이 있는 사람이 되어야 내 꿈도, 내 가치도 전달할 힘이 생긴다. 그러나 그것이 없이는? 사실상 내가 뭘 해도 불가능하단 잔혹하지만 동시에 명확한 현실을 알수 잇었다.</p>
<p>현실에서 현실적인 경제적 대안이자, 삶을 영유할 방법이자, 나중을 생각하는 대안으로 프로그래밍, 컴퓨터란 중요한 의미라고 생각하게 된 것이었다. 그것이 일반적인 제조업 및 기술개발 중소기업이나 교육계열, 상담도 해보는 등 여러 경험에서 얻은 내 &#39;정답&#39;이었다.</p>
<p>그때 나는 42서울이란 제도가 다시 보이기 시작했다. 사실 이거 말고도 이거저것 둘러보긴 했었다. SSAFY 도 있었고, 그밖에도 갑자기 폭발적으로 육성 사업이나 투자가 이루어지는 사실들을 알수 있었다. 즉, 당시 SW 인재의 필요성이 더 커지면서 나는 이거야 말로 기회겠구나 싶었다. 그리고 작년 8월 드디어 나는 하던 일들을 완전히 종료하고, 본격적인 준비를 시작하게되었었다.  </p>
<hr>
<h3 id="첫-시작은-가볍게-우울하게">첫 시작은 가볍게 우울하게</h3>
<p>지금 떠올리면 참 별것도 아닌데, 42서울의 첫 시작은 컴퓨팅 사고 능력을 위한 반복문의 구조를 활용한 게임 형식의 테스트를 진행했다. <font color = "grey"> <em>(그 앞 부분은 기억력테스트지만 딱히 어렵진 않다. 그냥 열심히 보고, 열심히 클릭하자. 이 단계에서 막힌다면 그 이후는 더더욱 쉽지 않을 것이다.)</em> </font></p>
<p>방법은 간단하다. 비행기가 존재하고, 사각 칸으로 이루어진 맵에서 명령을 지정하여 별표를 먹는 그런데 명령을 지정하는 갯수는 정해져 있다. 따라서 아래 사진과 같다면? 단 2개의 명령으로 별표를 가야한다. 더불어 명령어에 색깔을 입력시키면? 색이 변하거나 혹은 해당 색깔에만 작동하게 만들 수 있던 것으로 기억한다. </p>
<p><img src="https://images.velog.io/images/paul2021_r/post/bd12c121-b053-43fa-985a-c3efa9a5881f/42_1st_test.jpg.jpeg" alt=""></p>
<p>구글링을 조금만 하면 알지만 해당 게임은 2시간이 주어지며, 그 시간 동안 어떻게 해결할지 알아서 하면 된다. 보통 10단계 즘이면 합격통지 메일이 날라온다고 한다. 참고로 8 정도부터 문과생들이라면 굉장히 생소할 뿐만 아니라 난해해 지기 시작한다. 부족한 명령어 칸수와 꺽여있는 길... 늘어나는 상황 조건들에 마음이 조급해져만 갔다. 
<font color="grey"><small><em>(그러고보니 지금 본과정에서 핵심 중 하나인 norminette과 맥락이 비슷한건가...쥐어 짜내기...?)</em></small></font></p>
<p>아마 이공계열인 사람들에겐 쉬운 영역일 것이다. 하지만 자만심에 찌든 나는 첫 시작에선 10단계가 아니라 거의 8단계? 정도에서 더 이상 갈 수 없었다. 회사에서 나름 열심히, 그리고 잘 살았던 내가 이정도도 못한다니... 준비를 굳이 할 필요가 없다는 말에 너무 쉽게 생각했던 것이었다.(그 양반은 이공계가 분명하다...) 멘탈이 바스락거리게 되는 걸 경험하고 나서야 &#39;아 이게 아니구나&#39; 라는 생각을 했었다. 역시 즐기는 수준이나 흥미를 가지는 수준 갖고는 여전히 문턱이 높단 것이었다. </p>
<p>그때 만났던 것이 바로 이 앱이다. </p>
<figure>
<img src = "https://images.velog.io/images/paul2021_r/post/c088988e-ecae-411b-9bc0-4d02b5de8f53/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-11-20%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2023.48.46.png">

<p>  <a href="https://play.google.com/store/apps/details?id=com.NicolasBruckert.name43&amp;hl=en_US">43_Nicolas Bruckert(링크)</a>
 </figure></p>
<p>해당 어플은 내가 부족한 반복과정을 어떻게 짜면 좋을지를 고민할 수있게 해주었다. 심지어 유사한 문제도 많았다. 그 덕에 2트에선 17라운드까지 감을 잡을 수 있었고, 결과적으로 2차를 지원할 기회를 얻게 되었다. </p>
<p>이것 외에도 동일한 테스트를 진행하는 다른 웹 사이트들도 있다. 시간은 없지만 만약 감을 잡는데 어렵다면, 그쪽을 찾아 난이도 낮은 문제들부터 반복하길 추천한다. </p>
<hr>
<h3 id="2차-라피신-신청44대-1">2차 라피신 신청...44대 1?</h3>
<p>1차 온라인 테스트를 통과하고 나면서, 인간은 같은 실수를 반복한다는 점을 느꼈다. 자존감을 한껏 고조된 상태에서 올 초 드디어 42서울이란 문 넘어의 세계가 코앞이라는 생각을 했다. 그리하여 2차 라피신 신청을 하는 기간이 왔었다. 그게 올 초인데... 두근 거리는 마음으로 4시 42분을 기다리고 있었다. <font color="grey">(참고로 말하면 42서울은 42에 ㄹㅇ 진심이다. 오픈 시간, 신청 시간 등등.. 보통 시간은 다를수 있어도 42를 꼭 집어넣는것 같았다.)</font></p>
<p>두근, 두근, 머릿속이 하얘지고, 자존감이 한껏 고조 되는 순간... 드디어 네이버 시계가 42분을 가리키자마자 접속된 상태에서 새로고침...! 모두가 알다시피 대학생 때 한 번쯤 겪어본, 수강신청과 흡사한 감각으로 신청을 하려고 했다.....만 결과적으로 실패하고 만다. 그리고 이를 대변하듯 이런 기사가 존재한다. </p>
<p><a href="https://www.joongang.co.kr/article/23682346#home">경잴률 44대 1 &#39;42서울&#39;, 4차산업혁명....</a></p>
<p>정말 진심을 다해 당부한다. 해당 신청을 할 때는 꼭 컴퓨터, 폰, 태블릿 본인이 가지고 있는 <big><strong>모든 기기</strong></big>를 동원해 로그인하고 새로고침을 누르길 기원한다. 필자가 올 초 해당 내용을 우습게 여긴 결과, 밀려났고 신청을 못했다. 순전히 운빨 승부이므로 내가 신경쓰지 않고는 많은 신청자들에 의해 서버가 터지는 것을 경험하게 될 것이다. 결국 들어 올 수 있었던 것은 11월달. 정말 긴 시간을 다음 기수가 오길, 기회가 오길 기다렸다.... </p>
<hr>
<h3 id="라피신lapiscine-이란-이름의-지옥">라피신(Lapiscine) 이란 이름의 지옥</h3>
<p>여러 후기를 보면 악명 높기로 유명하다. 42서울 홍보 영상에서도 조금씩은 나오지만 2차 테스트는 정말 쉽지 않았다. 만약 이 단계 목전에 오신 분들이 있다면, 각오는 제대로 하고 이시길 바란다. </p>
<p>라피신이란 이름은 수영장이란 의미를 가진다. 그리고 42서울은 그런 수영장에다가 우리를 그냥 집어 던져 넣는다. 언어적 유희라고 생각이 들 것 이다. 하지만 언어적 유희가 아니다. 진짜 기분만 보면 &#39;집어 던져진&#39; 것과 같은 충격을 맡보게 될 것이다. </p>
<p>우선 아주 기본적 OT 를 제외하고 아무것도 가르쳐 주지 않는다. 들어가서 지정된 과제들도 그냥 던진다. 그냥 하라 이거다. 어떤 룰이, 어떻게 적용되는지? 알려주지도 않는다. 순전히 본인이 결과를 받아 보면서 깨지면서 방법을 이해하게 되는게 결국 답이다. 그저 단 한 가지 확실한 점은 무엇인가, 라고 하면 평가의 방식이 매우 독특하다는 점 하나 뿐이다. </p>
<p>뿐만 아니라 해당 과정만 진행해도 지원금이 나오게 되어 있는데, 이 역시 시간적으로 지켜야 할 기준치가 있다. 나는 처음에 어떻게 그 기준 시간을 지킬 수 있나? 힘들것 같다... 라고 생각했다. 하지만 착각이다. 과제를 쳐내고 진행하려면 하지 않을 수 없을 거다. 하루 8시간, 10시간 코딩이 뭔지 그 때 나는 처음 깨닫게 되었다... </p>
<p>결과적으로 그 기간, 문돌이들은 생각할 것이다. 아니 생각이 나지 않을 것이다. 머리는 하얘질 것이고, 주변을 둘러보면 나보다 잘하는 괴물 천지라는 사실을 알게 되고 두려움이나 자존감 하락에 떨어지게 된다. 수영장이란 이름이지만, 사실 밑바닥은 호수 같을 것이다. 깊고 깊은데 빠지는 순간 늪이 되어 버리는, 그리고 자신이 바라보단 하늘은 더할 나위 없이 파란 색에서 암색깔로 바뀌어 가는 감각을 느낄 수 있을 것이다. </p>
<p>어우.. 글이 길다. 라피신 스토리는 다음 편에서 계속 적어나가겠다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Python_입출력과 사칙연산]]></title>
            <link>https://velog.io/@paul2021_r/inoutplusarithmetics</link>
            <guid>https://velog.io/@paul2021_r/inoutplusarithmetics</guid>
            <pubDate>Sat, 20 Nov 2021 04:12:13 GMT</pubDate>
            <description><![CDATA[<h4 id="주말마다-하는-파이썬-학습">주말마다 하는 파이썬 학습</h4>
<p>주말마다 파이썬 학습을 하기로 마음을 먹었다. 
바로 다음 포스팅에 그 이유? 정도를 적을 생각이지만, 결론만 먼저 언급하자면 당분간 평일엔 42서울에서 제공하는 본과정의 학습에 집중할 것이고 주말에는 파이썬 학습을 진행해보려고 한다. </p>
<p>해당 학습은, 우선적으로 <code>백준의 코딩 테스트</code> 단계별 학습을 기초로 하고 있으며, 해당 내용 속에서 필요한 부분들 만을 추가로 정리해둘 것이다.</p>
<hr>
<h3 id="입출력과-사칙연산">입출력과 사칙연산</h3>
<ul>
<li>본 단계는 입문용 단계로, 입출력과 관련한 기초적인 내장함수를 사용한다. </li>
<li>딱히 어렵진 않으나, 가장 기초가 되는 부분이면서도, 활용해야할 추가적인 옵션들이 주요한 포인트 였다. </li>
<li>더불어 코테를 처음하기에 그런 것인지는 몰라도, 지문을 제대로 읽지 않아(....) 문제를 틀리는 경우는 인간적으로 내가 덜렁거린다는 것을 여실없이 보여주었다. <p></li>
</ul>
<p>*<em>1. Hello World! *</em></p>
<pre><code class="language-python"> print(&#39;Hello World!&#39;)</code></pre>
<p><font color=gray><small>
  너무나 다들 잘 아는 내용일 것이다. 자꾸 printf라 적는다...</small></font></p>
<p><strong>2. two times print</strong></p>
<pre><code class="language-python"> for we_love_kriii in range(0, 2)
 print(&quot;강한친구 대한육군&quot;)</code></pre>
<p>  <font color=gray><small>사실 해당 for 문은 좀더 뒤에 써야 맞겠지만... 전에 학습한 걸 써보았다. </small></font></p>
<p><strong>3. 고양이 / 개</strong></p>
<pre><code class="language-python"> print (&quot;\\    /\\\n )  ( &#39;)\n(  /  )\n \\(__)|&quot;)
 #고양이 모습이 나온다. 

 print(&quot;|\\_/|&quot;)
 print(&quot;|q p|   /}&quot;)
 print(&quot;( 0 )\&quot;\&quot;\&quot;\\&quot;)
 print(&quot;|\&quot;^\&quot;`    |&quot;)
 print(&quot;||_/=\\\\__|&quot;)
 #개의 모습이 나온다. </code></pre>
<p>  <font color=gray><small>고양이는 한 줄로 표현하였고, 강아지는 여러줄로 표현했다. 해당의 기능을 사용시 아래와 같은 모양이 출력된다. </small></font></p>
<pre><code>\   /\       |\_/|
 )  ( &#39;)      |q p|   /}
(  /  )      ( 0 )&quot;&quot;&quot;\
\ (__)|      |&quot;^&quot;`    |
               ||_/=\\__| 
</code></pre><p>해당 내용의 핵심은 코드의 연산자 또는 문법적 요소 사용되는 <code>&quot;</code> <code>\</code> 를 어떻게 단순 문자로 출력하는지를 아는가? 묻는 문제이다.
해결방법은 간단하다. 사용하려는 문자 앞에 <code>\</code>를 입력하면 되고, 그렇기에 출력하는 모양을 먼저 입력후 <code>\</code>가 필요한 곳에 다 때려 밖으면 된다. </p>
<p>  <strong>4. 사칙연산</strong>
  <font color=gray><small>긴 말없이 바로 코드부터 보여주면...  </small></font></p>
<pre><code class="language-python">  a, b = map(int, input().split())
  #설명할 부분
print(a+b)
  #덧셈

  a, b, c = input().split()
a = int(a) #설명할 부분
b = int(b)
c = int(c)
print(a + b + c)

  a, b = map(int, input().split())
print(a / b)

  a, b = map(int, input().split())
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

  #  multiplication
a = input()
b = input()
# 문제에서 자리수를 맞추지 않고 출력하는 걸 요구했으므로, 최종 연산시에만 자리수에 맞춰서 합을 구한다. 
ans3 = int(a) * int(b[2])
ans4 = int(a) * int(b[1])
ans5 = int(a) * int(b[0])
ans6 = ans3 + (ans4 * 10) + (ans5 * 100)</code></pre>
<p>  <strong>함수 설명</strong><p><small><strong>print()</strong>: 출력함수. python에선 c의 <code>printf</code>이상의 능력을 보여준다. 내부에서 계산이 되고, 계산도 단순히 정수나 실수 정도가 아니라 문자들도 <code>+</code> <code>-</code> 계산이 되는 등 여하튼 볼 수록 신기한 놈이다. <p><strong>map()</strong>: 해당 함수는 이해는 했지만, 아마 첫 python 입문시 이해가 쉽지 않을 만한 녀석이다. 
prototype: map(func, <em>iterables) --&gt; map object
용도: list, dict, set, str...과 같은 iterable type의 변수들에 순차적으로 함수를 적용시킨다.
해당 기능이 용의한 이유는 바로, <code>a, b = map(int, func...)</code> 의 형태로 할 경우, 변수에 들어가는 값이 *</em>int<strong>형으로 자동 형변환을 시켜준다는 데 있다.<p></strong>input()<strong>: C 의 <code>scanf</code>와 동일한 기능을 하는, 키보드 입력을 받는 함수다. 받은 데이터는 <font color="red"></strong>문자열<strong></font>로 입력받는다.
<code>( )</code>안에는 값을 입력시 함수 실행 시 디폴트로 뜰 문장을 보여준다. 
이러한 특성은 향후에 자기가 입력을 받고 연산하는 함수나 프로그램 작성 시 매우 주의를 해야하는 부분 중 하나이다. <p></strong>.split()<strong>: 함수 input의 옵션이다. 입력시 구분자(기본값은 공백)를 기준으로 값을 쭉 일렬로 입력 시 스스로 구분하여 값으로 변수에 입력시킨다. <code>( )</code>안에 넣는 값으로 입력값을 구분한다. <p></strong>int()<strong>: 형변환 방법. 정수 변환을 원할 때 <code>( )</code> 안에 원하는 변수를 넣으면 된다. <p></small></strong>정리하면...**<p><small>파이썬의 사칙연산이나 변수를 입력 받는 면에서 어려움은 없다. C의 그것과 유사하면서도 훨씬 많이 생략된 것들 덕에 오히려 너무 허전하단 생각이 들정도(...) 그래도 기본적으로 &#39;편의성&#39;의 대폭 강화가 되었다는 느낌이 들긴한다.<p> 한 가지 문제를 풀면서 알게 된 것인데, 실제 구동시 몇초가 걸리는지를 알려주는 백준 코테에서 <code>변수 지정</code> -&gt; <code>print</code>를 하는 경우와 <code>print</code> 함수 내에서 한 방에 계산하는 것 사이의 큰 차이는 없는 것으로 보여졌다.<p> 물론, 좀더 큰 함수들을 돌려봐야 아는거라지만, 조금이라도 차이가 날 거라 생각했었는데, 나지 않는 걸 보니 print함수 내부에서 동일한 절차가 걸리고 단순 지정 변수 출력시 그 과정이 생략되다보니 +- = 0이 된 것 같단 생각이 들었다.</small></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[이 곳의 목적]]></title>
            <link>https://velog.io/@paul2021_r/forwhat</link>
            <guid>https://velog.io/@paul2021_r/forwhat</guid>
            <pubDate>Tue, 09 Nov 2021 05:04:06 GMT</pubDate>
            <description><![CDATA[<h3 id="들어가면서">들어가면서...</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/dfeacdf6-8637-4247-9306-dd77b484f8d8/introduction.jpeg" alt="">
42서울에서 어찌어찌 본과정으로 들어갈 수 있었다. 
결과적으로 나의 이직 도전은 끝나지 않게 되었고, 기회를 얻었다는 것 하나만으로도 감사하는 일이다. </p>
<hr>
<h3 id="그런-점에서">그런 점에서...</h3>
<p>이런 상황이 되면서, 이젠 새로이 다음을 준비할 과정이 되었다. 
컴퓨터를 아무리 좋아하고, 새로운 기술에 흥미를 가지는 나지만, 그렇다고 전문가는 아니다. 이 업계에서 어찌 해야 할지. 또 여기서 나는 어떤 의미를 가질지 등... 내가 가진 강점을 극대화하기 위한 작업이 42서울의 본 코스 과정 동안 이어져야 하리라. 
그렇게 고민을 하던 도중 떠오른게 바로... 우선은 <strong>포트폴리오</strong>였다. </p>
<p>생각해보면 전문가라는 것은 결과, 곧 실력이 정답이다. </p>
<p>기존의 일들이 그것들의 장벽이 너무 낮았기에 연봉도 작았을 뿐만 아니라, 그곳을 벗어나면 할 수 있는 일이라는 것은 제한적이었다. </p>
<p>내가 가장 힘들어하던, 그리고 동시에 내 스스로 끓어오르던 이유였다. 사회과학이 우리 사회와 나를 살리는 정말 강력한 무기지만, 동시에 현재의 현실을 살아가기엔 부족함이 있는 것은 사실이지 아니한가?</p>
<p>그리하야 결론은 &#39;증거&#39; 와 &#39;결과&#39; 그리고 과정의 노력을 빛낼 것들이었다. 내 과거의 노력이 사라지진 않겠지만, 지금의 나는 더 큰 현실에서 싸워 이겨야 하니까 말이다. </p>
<hr>
<h3 id="그래서-결론은">그래서 결론은...</h3>
<p><img src="https://images.velog.io/images/paul2021_r/post/dc09265f-b068-4b6c-8a4a-2ac4484288a7/next_step.jpg.jpeg" alt="">
결론은 간단하다. </p>
<p>이리 된거, 컴퓨터 프로그래밍의 정보를 정리하고, 나만의 &#39;결과&#39; 포트폴리오가 있어야 한다. </p>
<p>그리하야 고민을 해보았다가... 결국 velog 를 찾았다. 정보 저장과 동시에 나를 보여줄 기회를 마련하고자 말이다. </p>
<figure>
      <img src = https://images.velog.io/images/paul2021_r/post/c6e12bf8-a7da-42d6-83de-8de1d5a0dfe0/github.jpg
    <figcaption>
  <p style="color:gray"><em>github.io 는 ㄹㅇ 너무 어렵더라... </em></p>
      </figcaption>
</figure>

<p>원래는 깃허브io를 활용하려고 했다. 하지만 애석하게도 아직 HTML과 CSS에 대한 기초가 부족하다보니, 내용을 해석하고 테마하나 넣고 사용하는데 엄청난 시간을 쏟고 있자니 효율성이 너무나 결여된 것 같았다. </p>
<p>그 자체만 보면, 부족한 내 눈에서 봐도 뭐든 만들 수 있는 마인크래프트 같은 공간임을 알 수 있었지만, 기본을 몰라서야 시간만 쏟는 괴물일 뿐. </p>
<p>말이 길었다. 결론은 ... 그러므로, 우선 여기에서 주요한 내용들을 정리하고, 그 내용들을 쉽게 보관할 곳을 찾았다. 그곳이 바로 여기 velog리라 생각된다.</p>
<p>여기다 저장하고, 기록해두면서 확장시키다가 어느정도 적당한 시기에 해당 내용들을 다시 github.io를 메인으로 쓰고 싶다고 생각한다. </p>
<p>여하튼, 잡소리가 길었다. 앞으로 잘 부탁한다 velog 🤔</p>
]]></description>
        </item>
    </channel>
</rss>