<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>행복한 개발자</title>
    <link>https://dextto.tistory.com/</link>
    <description>대한민국의 모든 개발자들이 행복해 지길 바라며..</description>
    <language>ko</language>
    <pubDate>Sat, 8 Aug 2026 12:23:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dextto&amp;trade;</managingEditor>
    <image>
      <title>행복한 개발자</title>
      <url>https://t1.daumcdn.net/cfile/tistory/1353AC4B4E2EBFD62F</url>
      <link>https://dextto.tistory.com</link>
    </image>
    <item>
      <title>번역 후기 - 이펙티브 소프트웨어 테스팅</title>
      <link>https://dextto.tistory.com/249</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이펙티브 시리즈 중 테스트와 관련한 책, 'Effective Software Testing'을 번역하게 되었습니다. 소프트웨어 테스트 코드를 체계적으로 작성하는 방법을 알려주는 좋은 책이라고 생각합니다. 현재 온라인 서점에서 예약 판매 중입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책을 번역하게 된 계기와 과정을 공유하고자 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J1vYf/btr06XI1I9V/5lnequLJ990q9aK19RJz30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J1vYf/btr06XI1I9V/5lnequLJ990q9aK19RJz30/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J1vYf/btr06XI1I9V/5lnequLJ990q9aK19RJz30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ1vYf%2Fbtr06XI1I9V%2F5lnequLJ990q9aK19RJz30%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몸담은 분야인 IT 서적을 번역하는 일은 이전부터 관심이 있었습니다. 개발자는 항상 새로운 지식을 습득해야 하는 직업입니다. 여러분도 현재 관심을 두고 있는 기술에 대한 최신 자료, 특히 책 번역을 한 번씩은 생각해 보셨을 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IT 서적은 다른 분야의 원서보다 쉽게 읽을 수 있습니다. 기술서이기 때문에 함축된 표현이나 어려운 문장이 적습니다. 엔지니어인 우리는 당연히 바탕 지식이 있기 때문에 이해도 쉽게 할 수 있고, 이미 알고 있는 내용이 있다면 더 쉽게 이해할 수 있습니다. 더구나 코드가 많습니다! (번역 안 해도 됨.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;s&gt;개꿀&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난번에 공유한 적 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.clien.net/service/board/cm_app/17759247&quot;&gt;NestJS 관련 책&lt;/a&gt;의 편집 기간이 길어지면서 번역에 눈을 돌리게 됩니다. '어차피 공부는 계속 해야할 것 같은데, 책을 꾸준히 쓰고, 번역만 하면서 살 수도 있지 않을까'하는 생각이 듭니다. 싱가폴에서 이미 그 생활을 하고 계시는 분의 블로그 글을 보고 과연 가능한지 직접 테스트를 해 보고 싶어집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 아마존에서 최근 발간 예정인 책을 쭉 둘러보면서 내가 번역 가능한 책이 있나 살펴봅니다. 몇 권을 후보로 골라 출판사에 메일을 보냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;혹시 번역가는 필요하지 않으세요?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉽게도 'Effective Software Testing' 외 다수가 다른 출판사에서 계약이 진행 중이고, 가장 해보고 싶었던 책은 저작권자가 출판권을 수출하지 않는다고 합니다. 그러던 와중에 운 좋게 다시 일이 성사되어 제이펍과 번역 계약을 하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 과정은 자신의 책을 만드는 과정과 비슷합니다. 일정 기간(번역은 보통 2~3달) 동안 출판사가 원하는 양식대로 초고를 준비합니다. 제이펍은 MS 워드를 이용해서 정한 서식대로 작성합니다. 그리고 n차 편집을 거치면서 메일로 의견을 나눕니다. 오탈자를 잡고, 어색한 문장을 가다듬습니다. 제가 이해하지 못해 대충 얼버무린 문장은 당연히 편집자나 독자도 이해하지 못합니다. 이런 부분을 몇 번씩 다시 읽고 이해하고 자연스러운 문장으로 바꿉니다. 그러면 어느새 출간 양식을 갖춘 pdf 파일 형식의 책이 만들어집니다. pdf의 메모 기능으로 질문과 답을 교환합니다. 간단한 내용은 바로 메일 본문에 적기도 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술 서적을 번역한다고 하면 얻을 수 있는 이득은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 새로운 지식을 습득할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 부업으로 돈을 벌 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 몰랐던 영어 표현을 배울 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 글쓰기 실력을 함께 향상할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중, 2번은 제외하고 번역가에게 가장 득이 되는 부분은 어디일까요? 바로 4번입니다. 번역하는 데 드는 에너지의 90%는 문장을 해석하고 가다듬는데 사용합니다. 아이러니하게 독자로써 책을 읽으며 새로운 지식을 얻는 것만큼 새로운 지식이 머리에 들어오지 않습니다. 읽고, 이해하고, 이해한 바를 쉽게 풀어쓰는 데 온통 정신이 팔립니다. 물론 번역기의 도움을 많이 받습니다. AI로 자동화해서 번역 업무를 하겠다는 분도 계시던데, 아직은 멀었다고 봅니다. 그리고 생각보다 초고를 쓰는 데에 시간이 많이 걸립니다. 책 한 권을 만드는 데 투입한 총시간을 계산하면 최저임금보다 조금 더 받는 정도랄까요. 저작과 번역만으로 먹고 살 수는 있겠지만 만족하지는 못하겠다, 기회가 여유가 될 때 다시 하자라고 결론 내렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부정적으로 썼지만 이 부분을 모두 상쇄해 주는 점이 있습니다. 바로 '옮긴이'에 이름을 올릴 수 있다는 거죠!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출간 후 출판사에서 무료로 보내주시는 10권의 책도 있네요. 주위에 나눠주는 기쁨이 있거든요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 독자의 입장에서 다시 한번 찬찬히 읽어봐야겠습니다. :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발자 Life</category>
      <category>글쓰기</category>
      <category>번역</category>
      <category>이펙티브 소프트웨어 테스팅</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/249</guid>
      <comments>https://dextto.tistory.com/249#entry249comment</comments>
      <pubDate>Tue, 28 Feb 2023 19:46:03 +0900</pubDate>
    </item>
    <item>
      <title>NestJS로 배우는 백엔드 프로그래밍 출간 후기 2 - 출간 과정</title>
      <link>https://dextto.tistory.com/248</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1편: &lt;a href=&quot;https://dextto.tistory.com/247&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NestJS로 배우는 백엔드 프로그래밍 출간 후기 1 - 계기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퇴근후&amp;nbsp;거의&amp;nbsp;매일&amp;nbsp;2~3시간,&amp;nbsp;주말에는&amp;nbsp;5~6시간&amp;nbsp;정도&amp;nbsp;투자하니&amp;nbsp;2달&amp;nbsp;정도가&amp;nbsp;지나&amp;nbsp;초고를&amp;nbsp;완성했습니다.&amp;nbsp;책을&amp;nbsp;쓰면서&amp;nbsp;오랜만에&amp;nbsp;몰입을&amp;nbsp;경험했습니다.&amp;nbsp;잘&amp;nbsp;몰랐던&amp;nbsp;주제가&amp;nbsp;있으면&amp;nbsp;리서치해&amp;nbsp;가면서&amp;nbsp;내용을&amp;nbsp;가다듬고,&amp;nbsp;코드를&amp;nbsp;다시&amp;nbsp;재작성했습니다.&amp;nbsp;기왕이면&amp;nbsp;돈도&amp;nbsp;벌면&amp;nbsp;좋으니까&amp;nbsp;구글&amp;nbsp;애드센스&amp;nbsp;광고도&amp;nbsp;달았습니다.&amp;nbsp;생각보다&amp;nbsp;반응이&amp;nbsp;괜찮습니다.&amp;nbsp;많은&amp;nbsp;분이&amp;nbsp;위키독스&amp;nbsp;또는&amp;nbsp;메일로&amp;nbsp;피드백을&amp;nbsp;주셨습니다.&amp;nbsp;그래서&amp;nbsp;초고를&amp;nbsp;들고&amp;nbsp;인사이트에&amp;nbsp;투고합니다.&amp;nbsp;이때가&amp;nbsp;작년&amp;nbsp;11월&amp;nbsp;말이었습니다.&lt;br /&gt;&lt;br /&gt;사실&amp;nbsp;인사이트가&amp;nbsp;워낙&amp;nbsp;유명하고&amp;nbsp;수준&amp;nbsp;있는&amp;nbsp;책들을&amp;nbsp;많이&amp;nbsp;출판한&amp;nbsp;곳이어서&amp;nbsp;그냥&amp;nbsp;한&amp;nbsp;번&amp;nbsp;시도해&amp;nbsp;본다는&amp;nbsp;느낌으로&amp;nbsp;보냈습니다.&amp;nbsp;그런데&amp;nbsp;의외로&amp;nbsp;미팅이&amp;nbsp;잡혀서&amp;nbsp;대표님과&amp;nbsp;편집자님을&amp;nbsp;만나&amp;nbsp;뵈었습니다.&amp;nbsp;이때&amp;nbsp;여러&amp;nbsp;가지&amp;nbsp;이야기를&amp;nbsp;나누었는데&amp;nbsp;무언가&amp;nbsp;책이&amp;nbsp;100%&amp;nbsp;마음에&amp;nbsp;들지는&amp;nbsp;않아&amp;nbsp;하십니다.&amp;nbsp;명확히&amp;nbsp;수정&amp;nbsp;방향을&amp;nbsp;알려&amp;nbsp;주시면&amp;nbsp;좋았을&amp;nbsp;텐데&amp;nbsp;목차와&amp;nbsp;방향을&amp;nbsp;가다듬어&amp;nbsp;보자고만&amp;nbsp;하셨습니다.&amp;nbsp;이미&amp;nbsp;초고를&amp;nbsp;쓰느라&amp;nbsp;에너지를&amp;nbsp;쏟아버린&amp;nbsp;저는&amp;nbsp;약&amp;nbsp;1주일&amp;nbsp;후&amp;nbsp;초고에서&amp;nbsp;별로&amp;nbsp;발전하지&amp;nbsp;못한&amp;nbsp;내용을&amp;nbsp;드렸더니&amp;nbsp;역시나&amp;nbsp;퇴짜를&amp;nbsp;맞았습니다.&lt;br /&gt;&lt;br /&gt;띵!&amp;nbsp;정신이&amp;nbsp;번쩍&amp;nbsp;들고&amp;nbsp;나서&amp;nbsp;제&amp;nbsp;책을&amp;nbsp;독자의&amp;nbsp;입장에서&amp;nbsp;다시&amp;nbsp;바라보았습니다.&amp;nbsp;부족한&amp;nbsp;부분이&amp;nbsp;눈에&amp;nbsp;보이더군요.&amp;nbsp;아무리&amp;nbsp;예제&amp;nbsp;위주의&amp;nbsp;프로그래밍&amp;nbsp;서적이고&amp;nbsp;프레임워크&amp;nbsp;설명이&amp;nbsp;주가&amp;nbsp;된다고&amp;nbsp;해도&amp;nbsp;기본이&amp;nbsp;되는&amp;nbsp;이론이&amp;nbsp;부족했습니다.&amp;nbsp;그래서&amp;nbsp;앞부분에&amp;nbsp;내용을&amp;nbsp;보강하고&amp;nbsp;중간중간&amp;nbsp;NestJS와는&amp;nbsp;별개로&amp;nbsp;주니어&amp;nbsp;백엔드&amp;nbsp;엔지니어에게&amp;nbsp;하고&amp;nbsp;싶은&amp;nbsp;말을&amp;nbsp;추가했습니다.&amp;nbsp;이&amp;nbsp;과정이&amp;nbsp;다시&amp;nbsp;2달&amp;nbsp;정도&amp;nbsp;소요됩니다.&amp;nbsp;초고&amp;nbsp;만들때&amp;nbsp;처럼&amp;nbsp;에너지를&amp;nbsp;투입하지는&amp;nbsp;않았지만요.&lt;br /&gt;&lt;br /&gt;그리고&amp;nbsp;올해&amp;nbsp;2월&amp;nbsp;제이펍과&amp;nbsp;계약하게&amp;nbsp;됩니다.&amp;nbsp;얼떨떨하면서도&amp;nbsp;기뻤습니다.&amp;nbsp;마치&amp;nbsp;벌써&amp;nbsp;저자가&amp;nbsp;된&amp;nbsp;것&amp;nbsp;같습니다.&amp;nbsp;계약은&amp;nbsp;모두싸인으로&amp;nbsp;진행했습니다.&amp;nbsp;평소&amp;nbsp;잘&amp;nbsp;먹지&amp;nbsp;못하는&amp;nbsp;개밥을&amp;nbsp;먹으니&amp;nbsp;기분이&amp;nbsp;너무&amp;nbsp;좋았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-17 22.37.15.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W63rY/btrTQv7TWCa/TdSjpTYfxOEKXkkzUPcC4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W63rY/btrTQv7TWCa/TdSjpTYfxOEKXkkzUPcC4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W63rY/btrTQv7TWCa/TdSjpTYfxOEKXkkzUPcC4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW63rY%2FbtrTQv7TWCa%2FTdSjpTYfxOEKXkkzUPcC4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2272&quot; height=&quot;1230&quot; data-filename=&quot;스크린샷 2022-12-17 22.37.15.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이후&amp;nbsp;과정은&amp;nbsp;편집자분의&amp;nbsp;일이&amp;nbsp;많았습니다.&amp;nbsp;내용도&amp;nbsp;초고에서&amp;nbsp;거의&amp;nbsp;바뀌지&amp;nbsp;않았습니다. 하나 힘든 점이 있었다면 위키독스의 내용을 구글 독스로 옮기고 출판사에서 사용하는 서식에 맞게 바꾸는 노가다 작업이 있었네요. 일부 문단의 순서가 바꾸고, 책에는 담을 수 없는 내용을 덜어 내고, 내용이 쉽게 이해되도록 다시 쓰는 일도 몇 번 반복했습니다. 책의 수명을 최대한 길게 가져가고 싶었는데 중간에 NestJS의 메이저 버전이 올라가고, typeorm이 breaking change가 포함된 버전이 업데이트됩니다. 할 수 없이 관련 예제를 다시 쓰고 하나씩 실행해 보면서 확인했습니다. 그리고 오타.. 오타는 잡아도 잡아도 끝이 없습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;이후&amp;nbsp;리뷰어&amp;nbsp;검토를&amp;nbsp;마치고&amp;nbsp;12월에&amp;nbsp;출간을&amp;nbsp;하게&amp;nbsp;됩니다!&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;아쉬운&amp;nbsp;점이&amp;nbsp;있다면&amp;nbsp;출판사&amp;nbsp;사정에&amp;nbsp;의해&amp;nbsp;원래&amp;nbsp;출판일보다&amp;nbsp;5개월이&amp;nbsp;미뤄졌다는&amp;nbsp;것이죠.&amp;nbsp;저도&amp;nbsp;그사이에&amp;nbsp;큰&amp;nbsp;프로젝트로&amp;nbsp;정신이&amp;nbsp;없었던&amp;nbsp;터라&amp;nbsp;크게&amp;nbsp;개의치&amp;nbsp;않았습니다.&lt;br /&gt;&lt;br /&gt;처음&amp;nbsp;이야기했듯이&amp;nbsp;이&amp;nbsp;책은&amp;nbsp;초보자를&amp;nbsp;위한&amp;nbsp;책입니다.&amp;nbsp;저희&amp;nbsp;회사와&amp;nbsp;NestJS&amp;nbsp;커뮤니티에는&amp;nbsp;뛰어난&amp;nbsp;고수들이&amp;nbsp;많이&amp;nbsp;있습니다.&amp;nbsp;내가&amp;nbsp;이런&amp;nbsp;책을&amp;nbsp;내도&amp;nbsp;될까?&amp;nbsp;부끄럽지는&amp;nbsp;않을까&amp;nbsp;하는&amp;nbsp;생각이&amp;nbsp;안&amp;nbsp;들었다면&amp;nbsp;거짓말이지요.&amp;nbsp;그래도&amp;nbsp;다시&amp;nbsp;책을&amp;nbsp;쓸&amp;nbsp;기회가&amp;nbsp;된다면&amp;nbsp;마다하지&amp;nbsp;않을&amp;nbsp;것&amp;nbsp;같아요.&amp;nbsp;글을&amp;nbsp;쓰는&amp;nbsp;과정은&amp;nbsp;평소의&amp;nbsp;생각과&amp;nbsp;내가&amp;nbsp;아는&amp;nbsp;바를&amp;nbsp;정리하기에&amp;nbsp;좋습니다.&amp;nbsp;또&amp;nbsp;무언가에&amp;nbsp;몰입할&amp;nbsp;때의&amp;nbsp;쾌감을&amp;nbsp;느낍니다.&amp;nbsp;코드를&amp;nbsp;작성할&amp;nbsp;때와는&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;느낌이더라구요.&lt;br /&gt;&lt;br /&gt;책을&amp;nbsp;쓰고&amp;nbsp;응원해&amp;nbsp;주시는&amp;nbsp;분들이&amp;nbsp;많습니다.&amp;nbsp;그분들께&amp;nbsp;드리고&amp;nbsp;싶은&amp;nbsp;말씀이&amp;nbsp;있습니다.&amp;nbsp;여러분도&amp;nbsp;충분히&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다!&amp;nbsp;평소에&amp;nbsp;자료를&amp;nbsp;잘&amp;nbsp;정리해&amp;nbsp;두는&amp;nbsp;습관과,&amp;nbsp;매일&amp;nbsp;조금씩&amp;nbsp;써&amp;nbsp;가는&amp;nbsp;부지런함.&amp;nbsp;이것이면&amp;nbsp;충분합니다.&amp;nbsp;우리는&amp;nbsp;기술&amp;nbsp;서적을&amp;nbsp;만드는&amp;nbsp;것이지&amp;nbsp;문학&amp;nbsp;작품을&amp;nbsp;만드는&amp;nbsp;게&amp;nbsp;아니니까요.&amp;nbsp;:)&lt;/p&gt;</description>
      <category>개발자 Life</category>
      <category>nestjs</category>
      <category>백엔드</category>
      <category>책쓰기</category>
      <category>프로그래밍</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/248</guid>
      <comments>https://dextto.tistory.com/248#entry248comment</comments>
      <pubDate>Sat, 17 Dec 2022 22:40:03 +0900</pubDate>
    </item>
    <item>
      <title>[NestJS로 배우는 백엔드 프로그래밍] 출간 후기 1 - 계기</title>
      <link>https://dextto.tistory.com/247</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;책을 출간한 지 2주가 지났습니다. 정확히는 2022/12/2일에 각종 도서 사이트에서 예약 구매를 시작했지요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;NestJS 책 표지.jpg&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDAn8b/btrTRFO3O63/DV4ZU2pAuXtPgW5MfOzmt0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDAn8b/btrTRFO3O63/DV4ZU2pAuXtPgW5MfOzmt0/img.jpg&quot; data-alt=&quot;https://jpub.tistory.com/1352&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDAn8b/btrTRFO3O63/DV4ZU2pAuXtPgW5MfOzmt0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDAn8b%2FbtrTRFO3O63%2FDV4ZU2pAuXtPgW5MfOzmt0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;320&quot; data-filename=&quot;NestJS 책 표지.jpg&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://jpub.tistory.com/1352&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책을 쓰면서 겪었던 과정을 공유하려고 합니다. 쓰다 보니 내용이 길어져서 두 편으로 나누었습니다.&lt;br /&gt;1편은&amp;nbsp;책을&amp;nbsp;쓰게된&amp;nbsp;계기,&amp;nbsp;2편은&amp;nbsp;출간&amp;nbsp;과정을&amp;nbsp;다룹니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 LG전자에서 13년을 넘게 휴대폰에 기본 탑재되는 애플리케이션을 만들었습니다. 피처폰 시절에는 네트워크와는 상관없이 휴대폰 내에 있는 데이터만 처리하면 되었고, 안드로이드 환경으로 넘어와서는 소위 프런트 앱 개발자가 되었습니다. 이후 스타트업계에 몸담게 되면서 백엔드 직군으로 바꾸었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두싸인에 입사하게 되면서 NestJS를 처음 접했습니다. 정확하게는 입사 과제를 해야 해서 공부가 필요했죠. Node.js는 이전에 가지고 놀던 정도였지요. 그 전 직장에서는 파이썬 장고 기반의 서버를 운용했는데 입사를 위해 새로운 언어(타입스크립트)와 웹 프레임워크를 공부해야 했습니다. 다행히 과제에 시간을 충분히 주셔서 2주 정도 학습하고 1~2일 걸쳐 과제를 푼 다음 제출했던 것으로 기억합니다. 입사 후 코드를 들여다보니 공식 문서에서 가이드하는 방법을 많이 발전시켜 사용하고 있습니다. 공식 문서를 다시 정독하며 NestJS가 기본으로 제공하는 기능만 쓰면 어떻게 구현이 가능할지, 그 방식에 어떤 단점이 있는지 궁금해졌습니다. 모두싸인에서 제공하는 서비스의 기본이 되는 유저 서비스를 짧은 코드 스니핏이 아닌 실제 동작하는 코드들로 만들면서 조금씩 깃허브에 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입사 후에도 NestJS 문서를 자주 보게 됩니다. 당시에는 커뮤니티에서 공식 문서를 한국어로 번역한 사이트가 있었습니다. 하지만 NestJS 문서는 설명이 잘 되어 있는 것 같다가도 예제를 통해서 학습할 수 있는 자료가 별로 없습니다. 문서를 죽 읽고 예제를 따라서 구현하다 보면 길을 잃기가 일쑤입니다. 구글이 만든 풍부한 안드로이드 문서와 동영상 강의에 익숙해져서 더욱 그런 것 같았습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당시 '왜 아직 국내에 책이 한 권도 없지? 나 같은 사람이 분명 많이 있을텐데? 아직 NestJS가 인기가 없나?' 이런 생각을 하긴 했죠. 그러다 책을 써야겠다고 결심한 계기가 생깁니다. 제게는 가끔 온라인에서 만나 이런저런 이야기도 하고 짝코딩도 하는 조카가 있습니다. 소프트웨어 관련 학과 1학년인 이 녀석이 방랑기를 지나서 백엔드로 진로를 정했다고 합니다. 군대에 복무하면서요. 그래서 공식 문서를 기반으로 내가 만든 예제와 함께 책을 써보기로 합니다. 잘 하면 버킷 리스트였던 책 쓰기가 가능할 것도 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위키독스&lt;span&gt;(&lt;a href=&quot;https://wikidocs.net/book/7059)&quot;&gt;https://wikidocs.net/book/7059)&lt;/a&gt;&lt;/span&gt;에&lt;span&gt; &lt;/span&gt;매일&lt;span&gt; &lt;/span&gt;조금씩&lt;span&gt; &lt;/span&gt;내용을&lt;span&gt; &lt;/span&gt;정리했습니다&lt;span&gt;. &lt;/span&gt;명확한&lt;span&gt; &lt;/span&gt;독자와&lt;span&gt; &lt;/span&gt;콘텐츠&lt;span&gt;(&lt;/span&gt;공식&lt;span&gt; &lt;/span&gt;문서와&lt;span&gt; &lt;/span&gt;그동안&lt;span&gt; &lt;/span&gt;만들어둔&lt;span&gt; &lt;/span&gt;코드&lt;span&gt;)&lt;/span&gt;가&lt;span&gt; &lt;/span&gt;있기&lt;span&gt; &lt;/span&gt;때문에&lt;span&gt; &lt;/span&gt;충분했습니다&lt;span&gt;. &lt;/span&gt;다만&lt;span&gt; &lt;/span&gt;문서를&lt;span&gt; &lt;/span&gt;그대로&lt;span&gt; &lt;/span&gt;옮기는&lt;span&gt; &lt;/span&gt;백과사전식&lt;span&gt; &lt;/span&gt;책은&lt;span&gt; &lt;/span&gt;쓰고&lt;span&gt; &lt;/span&gt;싶지&lt;span&gt; &lt;/span&gt;않았습니다&lt;span&gt;. &lt;/span&gt;이제&lt;span&gt; &lt;/span&gt;막&lt;span&gt; &lt;/span&gt;경력을&lt;span&gt; &lt;/span&gt;시작하는&lt;span&gt; &lt;/span&gt;개발자나&lt;span&gt; &lt;/span&gt;학생들이&lt;span&gt; &lt;/span&gt;쉽게&lt;span&gt; &lt;/span&gt;이해하고&lt;span&gt; &lt;/span&gt;기본&lt;span&gt; &lt;/span&gt;기능을&lt;span&gt; &lt;/span&gt;구현해&lt;span&gt; &lt;/span&gt;가는&lt;span&gt; &lt;/span&gt;방법을&lt;span&gt; &lt;/span&gt;알려주고&lt;span&gt; &lt;/span&gt;싶었습니다&lt;span&gt;. &lt;/span&gt;더불어&lt;span&gt; &lt;/span&gt;제가&lt;span&gt; &lt;/span&gt;백엔드&lt;span&gt; &lt;/span&gt;개발자로&lt;span&gt; &lt;/span&gt;전향한&lt;span&gt; &lt;/span&gt;후에&lt;span&gt; &lt;/span&gt;배워야&lt;span&gt; &lt;/span&gt;했던&lt;span&gt; &lt;/span&gt;기본&lt;span&gt; &lt;/span&gt;지식을&lt;span&gt; &lt;/span&gt;깊이는&lt;span&gt; &lt;/span&gt;얕지만&lt;span&gt; &lt;/span&gt;가볍게&lt;span&gt; &lt;/span&gt;길&lt;span&gt; &lt;/span&gt;안내를&lt;span&gt; &lt;/span&gt;해&lt;span&gt; &lt;/span&gt;주고&lt;span&gt; &lt;/span&gt;싶었습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2편에서 계속...&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발자 Life</category>
      <category>nestjs</category>
      <category>백엔드</category>
      <category>책쓰기</category>
      <category>프로그래밍</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/247</guid>
      <comments>https://dextto.tistory.com/247#entry247comment</comments>
      <pubDate>Sat, 17 Dec 2022 22:39:12 +0900</pubDate>
    </item>
    <item>
      <title>5. 개발자 테크트리와 TIL</title>
      <link>https://dextto.tistory.com/246</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;공부할 게 너무 많아요. 무엇을 먼저 해야할지 모르겠어요. 그리고 공부하다 보면 모르는 용어가 계속 나와서 내가 지금 무엇을 공부하고 있는지도 모르겠어요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개발자로 일하다 보면 이런 이야기를 많이 듣습니다. 저 또한 그랬습니다. 사수가 옆에 딱 붙어서 헤매지 않고 지름길을 알려줬으면 좋겠다는 생각을 하곤 했지요. 여러분이 지금 어두운 터널을 헤매고 있다는 느낌이 든다면 주위를 둘러보세요. 여러분이 멘토로 삼고 싶은 회사 선배나 동료가 있을 것입니다. 학생이라면 이미 자신의 길을 걸어간 누군가를 찾을 수 있을 겁니다. 만약 여러분이 현재 몸담고 있는 곳에서 혼자 일하고 있다면 어쩔 수 없이 혼자 길을 찾아야 합니다. 인터넷에는 자료가 넘쳐나지만 오히려 정보가 너무 많아서 문제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A도 같은 과정을 겪고 있습니다. 이는 비단 개발직군만의 현상은 아니라고 생각합니다. 이 업계의 기술이 워낙 빨리 변하기 때문에 그 정도가 심할 것이라는 생각은 들긴 하지만 말이죠. 다행히 A를 위한 서비스가 이미 존재합니다! 정말 없는 서비스가 없다는 생각이 듭니다. 그 중 오늘 두 개의 서비스를 소개하고자 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Developer roadmaps&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://roadmap.sh/&quot;&gt;https://roadmap.sh/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개발자의 각 직군별 학습경로를 정리하고 있던 &lt;a href=&quot;https://github.com/kamranahmedse/developer-roadmap&quot;&gt;깃허브&lt;/a&gt; 리포지터리에 수많은 사람들이 참가하여 가다듬은 내용이 현재와 같은 웹페이지로 발전했습니다. 프론트 엔드, 백엔드 뿐 아니라 데브옵스 카테고리도 있고, 프레임워크나 언어에 대한 내용도 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1028&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OXrIQ/btrIyYSpqZL/pJ8k5xP4bzHNSxgYSm6WJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OXrIQ/btrIyYSpqZL/pJ8k5xP4bzHNSxgYSm6WJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OXrIQ/btrIyYSpqZL/pJ8k5xP4bzHNSxgYSm6WJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOXrIQ%2FbtrIyYSpqZL%2FpJ8k5xP4bzHNSxgYSm6WJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1234&quot; height=&quot;1028&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1028&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A는 백엔드를 하길 원하니까 백엔드를 살펴볼까요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;✔:&lt;/span&gt;&amp;nbsp;관리자 추천하는(하지만 많은 사람들의 의견이 반영된) 기술&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;✔&lt;/span&gt;: 보라색 대신 배워두면 좋은 기술&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;✔&lt;/span&gt;: 당장은 필요하지는 않지만 배워두면 좋은 기술&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;⬤&lt;/span&gt;&lt;/span&gt;: 추천하지 않는 기술&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-5.png&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;3053&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJNp3/btrItvdxsB6/YFDPrwOyBKBc4HGGWReSL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJNp3/btrItvdxsB6/YFDPrwOyBKBc4HGGWReSL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJNp3/btrItvdxsB6/YFDPrwOyBKBc4HGGWReSL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJNp3%2FbtrItvdxsB6%2FYFDPrwOyBKBc4HGGWReSL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1196&quot; height=&quot;3053&quot; data-filename=&quot;2-5.png&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;3053&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인터넷 기초 지식부터 시작해서 OS와 일반 웹 기반 지식을 배우고 나서, 언어, 형상관리 등 기초 지식을 쌓은 다음, 데이터베이스와 인프라, 보안 등 지식을 배우라고 추천하고 있습니다. 이미 현업에 몸담고 있는 개발자들도 가끔 자신을 스스로 평가해 볼 때 참고할 만합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개앞맵시&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.mindmeister.com&quot;&gt;https://www.mindmeister.com&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;현업 개발자에서 IT 서적 기획 및 편집자로 활동중이신 이복연님이 만든 온라인 마인드맵 소프트웨어입니다. 마인드 맵을 자유롭게 작성하고 공개하거나 공유할 수 있습니다. 공개된 마인드 맵에 개발자 학습 내용도 많이 존재합니다. 그중 백엔드 개발과 관련한 내용이 있어 소개합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.mindmeister.com/ko/530652609/_?fullscreen=1&quot;&gt;https://www.mindmeister.com/ko/530652609/_?fullscreen=1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/36tJt/btrIt5r9k1h/ECyLSzQ5UzRHqTxcF8KVD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/36tJt/btrIt5r9k1h/ECyLSzQ5UzRHqTxcF8KVD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/36tJt/btrIt5r9k1h/ECyLSzQ5UzRHqTxcF8KVD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F36tJt%2FbtrIt5r9k1h%2FECyLSzQ5UzRHqTxcF8KVD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1426&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;역시 카테고리가 나눠져 있고 각 분야별 학습에 도움이 되는 책을 추천하고 있습니다. 책 자체는 워낙 새로운 책들이 많이 나와서 모두 반영할 수는 없겠지만 무슨 책부터 시작해야 할 지 모르겠다면 참고하면 좋습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Knowre&amp;nbsp;신입&amp;nbsp;웹개발&amp;nbsp;커리큘럼&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Knowre-Dev/WebDevCurriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Knowre-Dev/WebDevCurriculum&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스타트업 노리에서 내부 교육용으로 만든 과정입니다. &lt;a href=&quot;https://news.hada.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;긱뉴스&lt;/a&gt;에 지난 1년간 가장 많이 즐겨찾기 된 글로 선정되기도 했습니다. 신입 개발자로써 쌓아야 하는 역량을 미션 달성하듯이 하나씩 살펴볼 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TIL&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;TIL(Today I Learned)은 많은 사람들이 사용하는 메모 기법입니다. 기법이라고 했지만 딱히 정해진 방법은 없고, 자신이 그날 배운 내용을 자신이 알아볼 수 있을 정도로 기록하면 됩니다. 여기서 중요한 것은 &quot;매일&quot; 해야 한다는 거죠. 제가 좋아하는 사자성어인 일신우일신(日新又日新)과 일맥상통합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;요즘은 블로그를 많이들 작성하지 않지만, 블로그를 배운 내용을 짤막하게 기록하는 용도로 많이들 썼습니다. 그 때는 온라인에 기록하는 메모 서비스가 많지 않아서 그랬던거 같기도 하고, 내가 기록한 내용을 누가 보고 기뻐해 주었으면 하는 마음도 있었던 것 같군요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A에게 TIL을 써보라고 권했습니다. 메모 도구는 많이들 쓰는 노션을 알려줬더니 아주 만족해 하는 군요. TIL은 공개해도 좋고 하지 않아도 좋습니다. 나중에 어떤 키워드를 다시 접했을 때 내 메모 DB로 활용할 수 있고, 다시 읽어서 쉽게 이해할 수 있어서 좋습니다.&lt;/p&gt;</description>
      <category>조카녀석 개발자 만들기 프로젝트</category>
      <category>til</category>
      <category>개발자 학습 과정</category>
      <category>조카녀석 개발자 만들기</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/246</guid>
      <comments>https://dextto.tistory.com/246#entry246comment</comments>
      <pubDate>Fri, 29 Jul 2022 22:42:14 +0900</pubDate>
    </item>
    <item>
      <title>[도커] 윈도우 유저가 리눅스를 필요로 할 때</title>
      <link>https://dextto.tistory.com/245</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우 유저는 자연스럽게 개발 환경을 윈도우 기반으로 구축한다. 하지만 만약 여러분이 백엔드 개발자가 되고자 한다면, 아니 꼭 백엔드가 아니라고 해도 리눅스를 어느 정도 다룰 줄 알아야 한다. 개발 서적을 보다 보면 예제가 리눅스 기반으로 작성되어 있는 경우도 많다. 물론 윈도우 서버 제품군도 성능이 우수하며 계속 발전하고 있다. 하지만 현업에서는 여러 가지의 이유로 대부분 리눅스 기반의 OS를 서버의 운영 체제로 선택한다. 심지에 최근에는 윈도우를 만든 마이크로소프트조차 리눅스 생태계로 들어왔다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://cloudblogs.microsoft.com/windowsserver/2015/05/06/microsoft-loves-linux/&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Microsoft Loves Linux&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;당장 리눅스가 필요할 때 어떻게 해야 할까?&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터를 새로 하나 장만해서 리눅스를 설치한다.&lt;/li&gt;
&lt;li&gt;윈도우가 설치된 컴퓨터에 멀티 부팅이 가능하도록 리눅스를 설치한다.&lt;/li&gt;
&lt;li&gt;버추얼박스(VirtualBox) 같은 가상화 앱을 이용해서 윈도우 내에서 리눅스를 창(window)으로 구동시킨다.&lt;/li&gt;
&lt;li&gt;도커로 리눅스 컨테이너를 구동시킨다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 글은 4번 방법에 대해 설명하고자 한다. 나머지 방법은 모두 많은 자원(돈, 메모리, 디스크)을 필요로 한다.&lt;/p&gt;
&lt;h1&gt;가상화에 대한 간략한 이해&lt;/h1&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가상화 기술은 크게 2가지로 분류할 수 있다. 그림의 왼쪽에 있는 방법이 위에서 3번 방식에 해당한다. 호스트 운영체제 위에 가상화를 가능하게 해 주는 엔진(하이퍼바이저)를 설치하고 그 위에 또 다른 운영체제를 설치하는 방식이다. 이 방식은 설치된 게스트 OS는 완전히 독립된 환경을 가지기 때문에 별도의 메모리, 디스크 등의 자원을 할당해 주어야 한다. 그리고 그 위에서 실행되는 App은 게스트 OS에 할당된 자원을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;두번째 방식은 오른쪽 그림과 같이 여러 컨테이너(그림에서 App)가 가상화 엔진(그림에서 도커 엔진)위에서 구동하는 방식이다. 이렇게만 보면 첫 번째 방식과 차이가 없어 보이지만, 컨테이너는 마치 하나의 프로세스와 같이 동작하게 된다. 즉, 별도의 OS를 다시 설치할 필요가 없고 필요한 자원은 호스트 OS의 자원을 직접 사용한다. 물론 도커 엔진에 할당되는 자원의 크기는 정해져 있고 변경할 수 있다. 컨테이너는 그 크기가 매우 가볍고 구동 시간이 훨씬 빠르다. OS를 설치해서 실행하지 않아도 되기 때문에 당연한 일이다. 단점이라고 하면 뒤에서 보겠지만, 만약 리눅스를 컨테이너로 실행한다고 했을 때, 리눅스 전체를 설치하지 않기 때문에 개발에 필요한 툴이 기본으로 설치되어 있지 않다는 것인데 필요한 툴만 설치해서 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 외 도커와 관련하여 자세한 설명은 다른 자료를 참고하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkqShC/btrIcGL7xS6/iaEClpcQYd9K7ctQfpCrc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkqShC/btrIcGL7xS6/iaEClpcQYd9K7ctQfpCrc0/img.png&quot; data-alt=&quot;출처:&amp;amp;amp;nbsp; https://medium.com/@darkrasid/docker와-vm-d95d60e56fdd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkqShC/btrIcGL7xS6/iaEClpcQYd9K7ctQfpCrc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkqShC%2FbtrIcGL7xS6%2FiaEClpcQYd9K7ctQfpCrc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;862&quot; height=&quot;472&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;amp;nbsp; https://medium.com/@darkrasid/docker와-vm-d95d60e56fdd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 윈도우에서 리눅스를 실행해 보도록 하자. 먼저 도커를 설치해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;도커 다운로드 페이지에서 윈도우 엔진을 내려받아 설치하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;https://www.docker.com/products/docker-desktop/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;커맨드 창에서 도커가 잘 설치되었는지 버전을 확인하는 cli 명령을 수행해 보자.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;d:\&amp;gt; docker --version
Docker version 20.10.17, build 100c701&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 리눅스 배포판 중 인기있는 우분투를 실행해 보자. docker run 명령어를 처음 실행하면 로컬 컴퓨터에 우분투 이미지가 없기 때문에 도커 허브에서 이미지를 다운로드 받는다. 버전을 지정하지 않았기 때문에 latest 버전이 다운로드된다. &lt;code&gt;-it&lt;/code&gt; 옵션은 키보드 입력을 컨테이너의 표준 입력(STDIN)에 연결해서 터미널로 조작이 가능하도록 하는 옵션이고, &lt;code&gt;-d&lt;/code&gt; 는 백그라운드로 수행하게 하는 옵션이다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;d:\&amp;gt; docker run -it -d ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
405f018f9d1d: Downloading [===================&amp;gt;                               ]  11.58MB/30.42MB&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우에서 우분투 리눅스가 실행되었다!! docker ps 명령어로 실행중인 도커 컨테이너를 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;d:\&amp;gt; docker run -it -d ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
405f018f9d1d: Pull complete
Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
Status: Downloaded newer image for ubuntu:latest
394d5ad1d14654cebfdc9d38148c4e8db631c667b84e493d0608ba8ad27f5635
d:\&amp;gt; docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
2ebd0199ed5e   ubuntu    &quot;bash&quot;    17 minutes ago   Up 17 minutes             frosty_robinson&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 docker images 명령어로 도커 허브에서 내려받은 이미지도 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;d:\&amp;gt; docker images
REPOSITORY       TAG      IMAGE ID       CREATED         SIZE
ubuntu           latest   2ebd0199ed5e   6 weeks ago     77.8MB&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;docker exec 명령어로  구동중인 도커 컨테이너로 접속을 해 보자. 참고로 위에서 도커를 실행할때 &lt;code&gt;docker run -it ubuntu bash&lt;/code&gt;로 실행하면, 바로 컨테이너에 접속된 상태가 된다.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;d:\&amp;gt; docker exec -it 2ebd0199ed5e bash
root@2ebd0199ed5e:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 상태에서 리눅스에서 사용하는 유틸리티 명령어를 넣어보면 동작하는게 별로 없다. 정말 거의 깡통 수준인 우분투 배포판이 구동되고 있다.&lt;/p&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;root@2ebd0199ed5e:/# vim
bash: vim: command not found
root@2ebd0199ed5e:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;필요한 프로그램을 설치하자. 지금은 vim을 설치해 본다. 우분투의 패키지 매니저인 apt-get을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;root@2ebd0199ed5e:/# apt-get update &amp;amp;&amp;amp; apt-get install vim
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
....
After this operation, 61.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 vim 명령어를 수행해 보면 잘 동작한다. 이 상태에서 실행중인 컨테이너를 백그라운드 까지 모두 중지시키고, 다시 컨테이너를 실행해서 vim 명령어를 수행해 보면 또 에러가 난다.&lt;/p&gt;
&lt;pre class=&quot;livescript&quot;&gt;&lt;code&gt;root@d4143dd5078c:/# exit
exit
d:\&amp;gt; docker stop 2ebd0199ed5e
2ebd0199ed5e
d:\&amp;gt; docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
d:\&amp;gt; docker run -it ubuntu bash
root@b9f6090ce821:/# vim
bash: vim: command not found
root@b9f6090ce821:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이건 왜 이럴까? 도커 컨테이너를 수행할 때 다운로드 받은 이미지를 기준으로 실행하기 때문이다. 즉, 컨테이너는 이미지를 프로세스로 만든 인스턴스이다! 그렇다면 우리는 매번 리눅스를 실행할 때 마다 필요한 패키지를 다운로드 해서 써야 하는 것일까? 물론 그렇지 않다. 내가 현재 사용하고 있는 컨테이너를 이미지로 만드는 방법이 있다. 다시 vim을 설치하고 나서 다음 명령어를 수행해 보자.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;d:\&amp;gt; docker commit b9f6090ce821 my-ubuntu:v0.1-add-vim
sha256:968c3b879d8fffbafc21937b0c621cc20a45df63f8ede144dce75d7ec8ba2af4
d:\&amp;gt; docker images
REPOSITORY     TAG             IMAGE ID       CREATED         SIZE
my-ubuntu      v0.1-add-vim    968c3b879d8f   5 seconds ago   77.8MB&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;code&gt;docker commit&lt;/code&gt; 명령어로 실행중인 컨테이너에 TAG를 부여하여 새로운 이미지로 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 기존 도커 컨테이너는 다시 중지시키고, 이 이미지를 바탕으로 다시 도커를 실행해 보자.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;d:\&amp;gt; docker run -it my-ubuntu:v0.1-add-vim bash
root@960bc0d4a860:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 vim을 실행해 보면 vim이 잘 설치되어 있는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 주의할 점은 당연히 새로 만든 이미지를 삭제하면 이전에 작업한 내용은 사라진다는 것이다. 하지만 태그를 잘 지정해 두면 더 편리하게 사용할 수도 있을 것이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우에 번거로운 리눅스 설치 과정없이 리눅스를 도커로 띄워서 실행할 수 있는 방법을 살펴 보았다. 필요한 패키지를 받고, 이미지를 새로 만드는 작업이 번거롭다고 느껴질 수도 있겠지만 익숙해진다면 그렇게 시간이 오래 걸리는 작업이 아니기 때문에 훨씬 편하게 사용할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips</category>
      <category>Linux</category>
      <category>Windows</category>
      <category>가상화</category>
      <category>도커</category>
      <category>리눅스</category>
      <category>윈도우</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/245</guid>
      <comments>https://dextto.tistory.com/245#entry245comment</comments>
      <pubDate>Mon, 25 Jul 2022 20:56:58 +0900</pubDate>
    </item>
    <item>
      <title>4. 3개월 동안 공부해 볼것</title>
      <link>https://dextto.tistory.com/244</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;지난 번에 A에게 중/장기 목표를 세워보라고 했는데, A가 스스로 학습 계획을 세워 보기를 기대했기 때문입니다. 대학생활은 누가 옆에서 알려주지 않습니다. 교수님의 강의로 부족한 부분을 스스로 찾아서 보충해야 하지요. 말하자면 스스로 학습법을 깨우쳐야 한다는 말이지요. 사실 이 부분은 사회에서도 매우 중요한 능력입니다. 업무의 대부분은 정답이 있는 경우가 드물기 때문에 상황에 따라 정답을 찾아나가는 요령(?)을 익혀야 합니다. 메타인지 학습법이라도 하는, 자신이 모르는 것과 아는 것을 깨우치고 모르는 것을 스스로 학습하도록 하는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만! A의 멘토로서 스르로 깨우치는 것도 중요하지만 넌지시 중요한 걸 짚어 주는게 제 역할입니다. 그래서 앞으로 3개월 동안 뭘 할지를 추천해 주고 싶었습니다. 여기서 3개월이라고 못박은 이유는 A의 과 동기(3학년)가 제대할 시점이기 때문입니다. A와 몇몇 친구들과 함께 토이 프로젝트를 진행할 계획이라고 하네요. 앞서 이야기했듯이 A는 이제 파이썬 언어 하나 (C는 군대가기전 수업을 들었는데 다 까먹었답니다;;) 알고 있는 수준입니다. 그래서 협업할 수준이 되려면 백엔드 프레임워크를 공부하기 전에 데이터베이스부터 다룰 줄 알아야겠다고 생각했습니다. 데이터베이스는 백엔드 개발자의 기본 소양이니까요. 데이터베이스를 학부 과정에서 배우는 이론과 함께 공부하면 좋겠지만 실무 내용부터 먼저 배워도 상관없다고 생각합니다. SQL로 직접 데이터를 다뤄보는 경험을 한 후 이론을 공부하면 더 잘 이해할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터베이스 종류는 특정 벤더의 제품을 사용하는 것보다 무난하게 많이 쓰이는 MySQL을 공부하기로 정했습니다. 추천할 만한 책이 있나 잠깐 검색해 보니 &quot;&lt;b&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/90118480&quot;&gt;이것이 MySQL이다&lt;/a&gt;&lt;/b&gt;&quot;라는 괜찮아 보입니다. 목차에는 트랜잭션 내용이 없기는 한데, 기본서라서 그런가 봅니다. 트랜잭션은 다른 자료로 공부하기로 합니다. 저자의 무료 동영상 강의가 있는 것도 매력이군요. &lt;a href=&quot;https://www.mindmeister.com/ko/530652609/_?fullscreen=1&quot;&gt;개앞맵시&lt;/a&gt;에도 추천되어 있군요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jan-antonin-kolar-lRoX0shwjUQ-unsplash.jpg&quot; data-origin-width=&quot;3859&quot; data-origin-height=&quot;2679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BoRxy/btrFFCTSFMW/jlH32x8aPu6196FSncEAwk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BoRxy/btrFFCTSFMW/jlH32x8aPu6196FSncEAwk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BoRxy/btrFFCTSFMW/jlH32x8aPu6196FSncEAwk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBoRxy%2FbtrFFCTSFMW%2FjlH32x8aPu6196FSncEAwk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;299&quot; data-filename=&quot;jan-antonin-kolar-lRoX0shwjUQ-unsplash.jpg&quot; data-origin-width=&quot;3859&quot; data-origin-height=&quot;2679&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일단 SQL 문법은 길게 공부할 만한 것은 아닌것 같아, 1개월 반만에 끝내기로 합니다. 그리고 하나만 공부하면 지겹우니까 기존에 하고 있던 알고리즘 공부는 꾸준히 하기로 했습니다. 물론 투자하던 시간을 줄여야 겠지요.&lt;/p&gt;</description>
      <category>조카녀석 개발자 만들기 프로젝트</category>
      <category>조카녀석 개발자 만들기</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/244</guid>
      <comments>https://dextto.tistory.com/244#entry244comment</comments>
      <pubDate>Sat, 25 Jun 2022 21:25:49 +0900</pubDate>
    </item>
    <item>
      <title>3. 학점관리</title>
      <link>https://dextto.tistory.com/243</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;IT 업계는 다른 분야와 달리 학점을 그렇게 중요하게 여기지 않습니다. 자신의 실력을 증명할 수 있는 방법이 많이 있기 때문입니다. 프로그램 대회에서 수상 경력을 쌓을 수도 있고, 직접 프로젝트를 만들어서 시연하는 방법도 있습니다. 프로젝트가 정말 성공한다면 굳이 취직을 하지 않고 더 서비스를 키울 수도 있겠지요?   하지만 학점은 자신의 성실함을 증명하는 가장 쉬운 방법입니다. 공부 요령만 조금 있으면 나쁘지 않은 학점을 딸 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;학부 수업은 체계적인 이론을 배울 수 있는 소중한 기회입니다. 저는 비전공자이고 CS를 독학으로 배웠습니다. 프로그래밍 학원을 잠깐 다니면서 프로그래밍을 제대로 배웠고, 대학원을 진학해서야 몇몇 CS 관련 수업을 들었습니다. 피상적으로 알고 있는 지식에 항상 갈증이 있습니다. 현업에 치이고 현재 기술을 따라가기에도 벅차다는 핑계로 제대로된 이론을 공부하는 일은 언제나 뒷전이 되었습니다. 그래서 컴퓨터 학과를 전공한 사람들이 늘 부럽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정말 뛰어난 천재들은 대학을 중퇴하고 직접 회사를 차렸습니다. 빌 게이츠, 스티브 잡스, 마크 저커버그 등의 일화를 모르는 사람은 없겠죠? 하지만 빌 게이츠는 이렇게 이야기했습니다. &amp;ldquo;나처럼 대학 중퇴하지 마라&amp;rdquo;. 망할 확률이 높다는 이야기입니다. 학교 공부와 병행해서 스펙을 쌓는 방법이 낫다는 말이죠. 이 주제는 다음에 다뤄보기로 하고 오늘의 주제인 학점 관리 방법에 대해 A와 이야기를 나눴습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A는 코로나가 창궐하던 시기에 입학한 세대입니다. 이 세대의 학생들은 서로 친분을 쌓을 기회가 부족했습니다. 코로나가 미래를 땡겨왔다고 이야기하는데 좋은 점만 있는 건 아닙니다. 이 세대의 학생들은 복학생들이 공부하는 모습을 지켜본 적이 없습니다. 저는 같은 하숙방에서 있는 복학생 형이 공부하는 모습을 보면서 감탄한 적이 한두번이 아닙니다. 자연스럽게 그 모습을 따라하게 되고 힘든 전공 공부를 하는 요령을 배우게 됩니다. 오늘은 이에 대한 팁을 A에게 이야기 해 주었습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;수업시간에 항상 가장 앞자리에 앉는다&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;앞자리에 앉아야 강의에 집중할 수 있습니다. 경험상 뒤에 앉으면 마음이 콩밭에 가는 건 어쩔 수 없더군요. 선천적으로 목소리가 작은 교수님도 계시지요. 요즘은 마이크를 쓰기도 하고 온라인 수업이 많아서 이 제약사항은 덜한 것 같습니다. 교수님 말씀을 가능한 모두 받아적으면 좋습니다. 아니면 알아볼 수 있게 재빨리 요약합니다. 교수님들은 준비해온 강의자료만 설명하지 않습니다. 최근 읽었던 논문이나 책에 나와 있지 않은 관련 자료도 이야기 해 주고, 책에서 중요한 것 같지 않은 내용을 강조하기도 합니다. 문제는 교수님이 이렇게 이야기했던 것들에서 나오는 경우가 종종 있다는 거죠.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;예습과 복습&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;학생 시절에 예습과 복습이 중요하다는 말은 귀가 따갑도록 듣습니다. 다만 체감을 못할 뿐이죠. 에빙 하우스의 망각 곡선을 보면 기억한 내용은 빠른 속도로 머리에서 잊혀집니다. 이를 유지하는 가장 좋은 방법은 빠른 시간 안에 반복 학습하는 것입니다. 예습과 복습이 중요한 이유입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-06-19 20.30.26.png&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buAObz/btrE75vg591/ZflZcDE6FpurK9UFiOdRH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buAObz/btrE75vg591/ZflZcDE6FpurK9UFiOdRH1/img.png&quot; data-alt=&quot;이미지 출처: 제우스에듀, 이충권&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buAObz/btrE75vg591/ZflZcDE6FpurK9UFiOdRH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuAObz%2FbtrE75vg591%2FZflZcDE6FpurK9UFiOdRH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1144&quot; height=&quot;628&quot; data-filename=&quot;스크린샷 2022-06-19 20.30.26.png&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처: 제우스에듀, 이충권&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예습은 그냥 교양서적 읽듯이 쓱 훑어 읽습니다. 어차피 모르는 내용이기 때문에 아는 만큼만 이해합니다. 복습은 강의내용을 떠올리며 꼼꼼히 읽습니다. 개발괴발 메모해 뒀던 내용도 까먹기 전에 풀어서 다시 적어둡니다. 예습/강의/복습 중에 가장 중요한 것을 꼽으라면 그래도 강의 시간에 집중하는 게 가장 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;과제는 당일에 끝낸다&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전공 과제는 빡셉니다. 공부할 양이나 과제가 많습니다. 전공 과목이 많은 학기는 지옥이지요. 이 와중에 시간을 내서 다른 무언가를 해야 합니다. 영어 공부도 해야 하고, 개인 프로젝트도 해야 하고, 게임도 하고, &lt;s&gt;연예도 해야 합니다(이 부분은 오징어라 패스).&lt;/s&gt; 이렇게 개인 시간을 만들려면 과제를 일찍 끝내야 겠죠? 뒤로 미룰수록 머리에 걱정만 쌓일 뿐입니다. 과제는 당일에 해결하기가 가장 쉽습니다. 네, 저도 현실을 압니다. 하루만에 못 끝내는 과제가 있죠. 하지만 결국 해야하는 거, 빨리 시작하라는 뜻입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;세 가지 팁을 주었는데, 하고 보니 모두 많이 들어본 이야기입니다. 공자님 말씀도 스스로 깨치지 못하면 소음이 될 뿐이지요. A가 진심으로 받아 드렸길 바랍니다.&lt;/p&gt;</description>
      <category>조카녀석 개발자 만들기 프로젝트</category>
      <category>개발자</category>
      <category>조카녀석 개발자 만들기</category>
      <category>학점관리방법</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/243</guid>
      <comments>https://dextto.tistory.com/243#entry243comment</comments>
      <pubDate>Sun, 19 Jun 2022 20:31:28 +0900</pubDate>
    </item>
    <item>
      <title>2. 학부 커리큘럼</title>
      <link>https://dextto.tistory.com/242</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;드디어 A가 제대했습니다. 군대에 있을 때 나름 군대가기 전 배운 지식(파이썬 언어)을 활용해서 알고리즘과 자료구조를 독학했다고 합니다. 요즘 장병들은 일과 후에 휴대폰을 사용할 수 있기 때문에 나와 가끔 대화도 나누긴 했지요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A는 1학년 1학기를 마치고 입대했습니다. 이제 학부생활이 3년 반이 남았네요. 오히려 잘 됐다고 생각합니다. 군대를 다녀오면 아무래도 사람이 조금 차분해지고 학부 공부에 집중하는 경향이 있기 때문에 방황하지는 않을 것 같아서입니다.&lt;/p&gt;
&lt;h1&gt;커리큘럼을 짜 보자&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HUB3v/btrDV4RVVOr/JwSeXhKZQNMpdKtdqXmQRK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HUB3v/btrDV4RVVOr/JwSeXhKZQNMpdKtdqXmQRK/img.jpg&quot; data-alt=&quot;사진출처: https://www.pexels.com&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HUB3v/btrDV4RVVOr/JwSeXhKZQNMpdKtdqXmQRK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHUB3v%2FbtrDV4RVVOr%2FJwSeXhKZQNMpdKtdqXmQRK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;612&quot; height=&quot;408&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진출처: https://www.pexels.com&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;제대 후 처음 같이 만나 처음 할 일로 학부 커리큘럼을 짜 보기로 했습니다. 한 학기동안 배운 과목은 대부분 교양 수업이었고 전공으로 C프로그래밍 과정이 한 과목 있었습니다. 요즘도 학교에서 C를 가르치다니... 임베디드 분야에서는 아직 C를 사용하기도 하고(사실 이부분도 최근 추세는 잘 모릅니다), 로우 레벨의 엔지니어가 되기 위해서는 필수 언어이기는 하지만, 내 견해는 학부에서 가르치기에는 너무 낡은 언어라는 생각입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;입학 당시의 학과 즉 현재 속해 있는 학과는 소프트웨어 분야에 초점을 맞춘 곳이 아닙니다. IT 업계에서 원하는 다양한 전공을 접할 수 있는 학과로서는 좋은 커리큘럼을 가지고 있지만, 백엔드 엔지니어를 목표로 하는 학생이 다니기에는 조금 적합하지 않다고 생각합니다. 본인도 이를 알고 있는지라 2학년 때 전과를 하겠다고 합니다. 이야기를 들어보니 이 학교는 다른 과로 전과하는 게 어렵지 않은 일이라고 하니 다행이네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 일단 곧 복학 후 현재 학과의 2학기 커리큘럼과 전과하고자 하는 다른 과의 커리큘럼을 살펴보고 백엔드 엔지니어라면 필수로 들어야 할 과목을 찍어주기로 합니다. 목록은 다음과 같습니다. (과목명을 정확하게 쓰면 어느 학교인지 유추할 수 있으니까 대충 씁니다.  &lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;객체지향 프로그래밍&lt;/b&gt;: 이미 파이썬을 알고 있지만 자바로 배운다고 해서 들어보기로 합니다. 자바는 국내 개발자라면 알아둬야 할 언어이니까요.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;자료구조&lt;/b&gt;: 이걸 빼먹을 수 있을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;컴퓨터구조&lt;/b&gt;: 알아두면 뼈가 되고 살이 됩니다. 저는 CS를 독학했는데 개인적으로 암기과목이라 별로 좋아하지는 않은 과목이었습니다. 집에 가서 시간 날때 아버지 랩탑을 분해해서 다시 조립해 보라고 했습니다. 요즘엔 정말 관심이 있지 않은 이상 직접 컴퓨터를 조립하는 경험을 해 볼 일이 없습니다. 조립과정에서 배울 점이 있다고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;컴퓨터네트워크&lt;/b&gt;: 이제는 네트워크로 연결되지 않은 환경을 찾아보기 힘듭니다. 역시 기본 지식을 알아두면 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;알고리즘: 개발자의 기본 소양이자, 신입사원의 실력을 확인하기 위한 1차 관문입니다. 물론 학점도 챙겨야 하는데 이는 다음에 이야기 하기로 합니다. 한 때 한창 알고리즘 평가가 업계에서 유행하다 최근에는 조금 사그라 들기는 했습니다. 알고리즘 보다는 현업에서 일어날 만한 문제를 제시하고 해결방법을 보는 문제를 제시하기도 합니다. 하지만 여전히 알고리즘은 사회 초년생이 어필하기에는 좋은 도구이고, 회사에서도 채용에 사용하기 편한 도구입니다. 더구나 네카라쿠베(당토)를 목표로 한다면 썩 잘해야 합니다. 1차는 통과해야 하니까요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;운영체제&lt;/b&gt;: 프로그램이 동작하는 원리를 정확하게 이해하려면 운영체제의 동작 방식을 알아야 합니다. 프로세스와 쓰레드, 메모리, 파일 및 인터페이스를 어떻게 관리하는지에 대해 이해해야 좋은 프로그래머가 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;데이터베이스&lt;/b&gt;: 말하자면 입 아픕니다. 데이터 관리는 백엔드 엔지니어의 전부라고 해도 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;컴퓨터통신&lt;/b&gt;: 백엔드 엔지니어는 종종 인프라를 다룹니다. 그리고 요즘은 데브옵스라는 새로운 직군도 있고 귀한 대우를 받습니다. MSA를 적용하는 회사라면 더욱 그렇습니다. 외부 망과의 연결도 중요하고 같은 회사 내에서 서버끼리의 통신도 중요합니다. 그에 대한 기초 지식을 배울 수 있습니다. 컴퓨터네트워크와 이 과목은 암기과목이라서 나 같으면 꺼려했겠지만 암기는 잘 한다고 하니 포함합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;소프트웨어공학&lt;/b&gt;: 좋은 아키텍처를 만들려면 무엇이 있는지부터 알아야 합니다. 그리고 소프트웨어 프로세스를 체계적으로 배울 수 있는 기회입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;실무교육&lt;/b&gt;: 희한한 교과 과목이 있네요. 주 4일을 매일 3시간 강의 + 5시간 실습으로 진행합니다. 실제 프로젝트를 기획하고 개발까지 진행하는 과정입니다. 마치 SW 마에스트로나 우아한 테크 캠프 같은 실무형 인재 양성 과정 같습니다. 요즘 학교가 현업에서 원하는 인재를 기르기 위해 노력한다는 생각이 듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;현장 실습 / 해외 인턴쉽&lt;/b&gt;: 역시 의외의 과정이 있습니다. 4학년 커리큘럼에 있는데 실무 경험을 미리 쌓게 해 주는 과정입니다. 취업 연계 과정인듯 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 외 여유가 될 때 들어볼 과목들&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;머신러닝&lt;/b&gt;: 오호, 학과과목에 이게 있네요! 이걸 과연 한 학기에 다 배울수 있을까요? 이 과목은 너무 핫하고 미래 먹거리이기 때문에 들어두면 언젠가는 도움이 됩니다. 하지만 당장은 필요없으므로 여유가 된다면 수강하기로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;소프트웨어설계&lt;/b&gt;: 이게 무슨 과목인지 과목 소개 페이지만 봐서는 이해가 잘 안되서 확인하고 결정하기로 합니다. 아마도 모바일 앱을 설계하고 만들어 보는 과정인듯 합니다. 백엔드 엔지니어에 초점을 맞춘다면 필요는 없겠지만 사람일은 또 어떻게 될지 모르니 맛을 봐두는 것도 좋다는 생각입니다. 혹시 또 창업을 하거나 하면 1인 다역을 해야 할테니..&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보안이론이나 임베디드 시스템 설계 같은 과목은 정말 여유가 될 때 듣는 것으로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 커리큘럼을 짜고 났더니 대부분의 과목이 이미 필수입니다! 그냥 자연스럽게 필수를 다 듣고 여력이 되면 관심 있는 과목을 들으면 되겠습니다. A가 140학점을 알차게 채워 나가길 바랍니다.&lt;/p&gt;
&lt;h1&gt;오늘의 팁&lt;/h1&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 &lt;span&gt;A와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;일주일마다 만나기로 했습니다. 온라인이면 일요일 저녁 9시부터 1시간 동안, 오프라인이면 일요일 오후에. 그리고 만날 때마다 팁이나 유용한 도구를 하나씩 알려주려고 합니다. 오늘은 메모 도구인 노션을 소개해 줬습니다. 블로그도 좋지만 개인적으로 그냥 노트로 정리하기에 노션만한 도구가 없습니다. 노션으로 이력서도 종종 받습니다. 요즘엔 제텔카스텐이라고 하는 메모법이 유행하면서 옵시디언 같은 도구도 있지만, 쉽고 보기 좋게 만들수 있는 노션을 쓰기로 합니다. 우선 오늘 같이 했던 일을 쓰라고 했습니다. 그리고 TIL(Today I learned, 매일 그날 배운 것)을 정리하라고 했습니다.&lt;/p&gt;
&lt;h1&gt;오늘의 과제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;매주 과제도 있습니다 ㅎㅎㅎㅎ. 부담스럽지 않은 범위에서 한 주 동안 남는 시간에 해결할 수 있는 것으로 던져 주려고 합니다. 첫 번째 과제는 두둥! 저도 전혀 하고 있지 못한 숏텀 롱텀 계획 세우기입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음 학기말에 무엇을 하게 될지 생각해 보자&lt;/li&gt;
&lt;li&gt;내년 이맘때쯤 무엇을 하고 있을지 생각해 보자&lt;/li&gt;
&lt;li&gt;(10년후는 너무 멀어서) 졸업 후에 어떤 모습으로 되어 있을지 상상해 보자.&lt;/li&gt;
&lt;li&gt;그리고 이 세 가지를 최대한 구체적으로 적고, 프린트해서 책상앞에 붙여 놓는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음 주제는 학점 관리하는 방법입니다.&lt;/p&gt;</description>
      <category>조카녀석 개발자 만들기 프로젝트</category>
      <category>개발자</category>
      <category>조카녀석 개발자 만들기</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/242</guid>
      <comments>https://dextto.tistory.com/242#entry242comment</comments>
      <pubDate>Sun, 5 Jun 2022 22:34:18 +0900</pubDate>
    </item>
    <item>
      <title>[Typescript] 튜플 리터럴을 유니언 타입으로 변환 (feat. 배열의 요소로 이루어진 타입 만들기)</title>
      <link>https://dextto.tistory.com/241</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;타입스크립의 장점이 강력한 타입시스템을 통해 컴파일 타임에 타입 검사를 통해 오류를 검출할 수 있다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 타입을 string, nubmer, Pesron 과 같은 평범한(?) 타입이 아닌 특정 값만을 취할 수 있는 타입을 선언해서 쓸 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 파일의 확장자를 이미지와 관련된 파일만 받을 수 있다고 해 보자. &lt;span&gt;ext 변수는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;'jpg'&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;'gif'&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;문자열만 받을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot;&gt;&lt;code&gt;let ext: 'jpg' | 'gif' = 'bmp'; // 구문 오류&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 별도의 타입으로 선언할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;rust&quot;&gt;&lt;code&gt;type Ext = 'jpg' | 'gif';
let ext: Ext = 'gif';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나아가 요청으로 받은 데이터의 유효성 검사를 하고 싶다고 하자. 예를 들어 인터페이스를 통해 받은 파일을 표현하는 데이터가 있고 이를 나타내는 FileDto 클래스가 있다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;class File {
  ext: Ext;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ext를 위해서 정의한 타입으로 선언했다. &lt;code&gt;'bmp'&lt;/code&gt;문자열을 받았을 때 400 에러를 내도록 처리하도록 하려면 어떻게 해야할까? class-validator를 활용해서 다음처럼 하면 좋겠다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;class File {
  @IsExt()
  ext: Ext;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 방법은 @IsExt 데커레이터를 따로 구현해야 하는 번거로움이 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;튜플 리터럴을 유니언 타입으로 변환한다&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 타입스크립트가 제공하는 &lt;b&gt;as const&lt;/b&gt; 키워드를 활용해서 허용하는 확장자를 정의한 튜플 리터럴을 선언한다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;const AllowedExt = ['jpg', 'gif'] as const;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AllowedExt의 타입은 &lt;code&gt;string[]&lt;/code&gt;이 아니라, &lt;code&gt;readonly [&quot;jpg&quot;, &quot;gif&quot;]&lt;/code&gt;다. as const가 요소를 추가할 수 없는 튜플로 변환시켜 주었다.&lt;br /&gt;이제 AllowedExt를 이용해서 리터럴 튜플이 가진 요소들만을 가지는 유니언 타입을 선언할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;rust&quot;&gt;&lt;code&gt;type Ext = typeof AllowedExt[number];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ext의 타입은 &lt;code&gt;&quot;jpg&quot; | &quot;gif&quot;&lt;/code&gt;가 된다. 처음에 선언한 것과 같이 원하는 타입이 만들어졌다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이제 유효성 검사를 @IsExt 대신 @IsIn(AllowedExt) 처럼 할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;const AllowedExt = ['jpg', 'gif'] as const;
type Ext = typeof AllowedExt[number];

import { IsIn, Validator } from 'class-validator';

class File {
  @IsIn(AllowedExt)
  ext: Ext;

  constructor(ext: Ext) {
    this.ext = ext;
  }
}

const validator = new Validator();
validator.validateSync(new File('gif')); // 유효성 검사 통과
validator.validateSync(new File('bmp' as Ext)); // 수행결과는 ValidationError&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Tips/Typescript</category>
      <category>TypeScript</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/241</guid>
      <comments>https://dextto.tistory.com/241#entry241comment</comments>
      <pubDate>Sun, 27 Mar 2022 20:03:28 +0900</pubDate>
    </item>
    <item>
      <title>[Node.js]  로컬에서 npm 패키지 테스트 하기 - npm link</title>
      <link>https://dextto.tistory.com/240</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;여러분이 만들고 있는 Node.js 모듈을 npm 패키지로 배포하려고 할 때 작성 중인 소스 코드를 어떻게 테스트 하시나요? 사용자를 위해 작성할 사용 예시처럼 이 패키지를 가져다 쓰는 모듈에서 동작하는 지를 직접 구현해 봐야 될 겁니다. 하지만 이 과정이 여간 귀찮은 게 아닙니다. &lt;code&gt;npm package&lt;/code&gt;로 패키징을 한 후, 사용하는 모듈의 node_module의 적당한 위치에 다시 압축을 직접 풀어 주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 더 쉬운 방법은 없을까요? 소스 코드를 빌드하고 컴파일 된 파일들을 node_module의 적당한 위치에 직접 복사하면 될까요? 이 때 경로는 제대로 인식이 될까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 경우 &lt;code&gt;npm link&lt;/code&gt;를 이용하면 쉽게 가능합니다. 이름에서 알 수 있듯이 npm link 명령은 특정 디렉토리에 대한 symblic link를 만들어 줍니다. npm과 관련 있는 것이니 node_modules와 관련이 있습니다. 패키지를 가져다 쓰는 프로젝트의 node_modules 하위 특정 디렉토리가 내가 작성하고 있는 패키지의 소스코드 경로를 가리키도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예들 들어 내가 작성하고 있는 &lt;code&gt;foo-package&lt;/code&gt; 패키지가 있습니다. 이 소스의 root에서,&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;npm link&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 수행합니다. 이 명령으로 다음과 같이 심볼릭 링크가 만들어 졌습니다.&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;/Users/dexter/.nvm/versions/node/v12.20.0/lib/node_modules/foo-package -&amp;gt; /Users/dexter/temp/foo-package&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞의 경로는 로컬 컴퓨터의 글로벌 환경의 디렉토리이고 뒤의 경로는 작성중인 소스코드의 경로입니다.&lt;br /&gt;참고로 글로벌 환경의 경로는 &lt;code&gt;npm root -g&lt;/code&gt; 명령어로 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 패키지를 가져다 쓰는 bar-project의 루트에서 다음과 같이 명령을 입력합니다. foo-package는 package.json의 name에 해당하는 값입니다.&lt;/p&gt;
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;npm link foo-package&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 결과를 보면 심볼릭 링크가 글로벌 환경을 거쳐 패키지 소스 경로를 가리키는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;/Users/dexter/node_modules/foo-package -&amp;gt; /Users/dexter/.nvm/versions/node/v12.20.0/lib/node_modules/foo-package -&amp;gt; /Users/dexter/temp/foo-package&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 foo-package에서 코드를 수정하고 bar-project에서 바로 가져다 쓸 수 있게 되었습니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고: &lt;a href=&quot;https://flaviocopes.com/npm-local-package/&quot;&gt;https://flaviocopes.com/npm-local-package/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Tips/Node.js</category>
      <category>node.js</category>
      <category>NPM</category>
      <category>로컬</category>
      <category>테스트</category>
      <category>패키지</category>
      <author>dextto&amp;trade;</author>
      <guid isPermaLink="true">https://dextto.tistory.com/240</guid>
      <comments>https://dextto.tistory.com/240#entry240comment</comments>
      <pubDate>Sun, 27 Mar 2022 19:17:53 +0900</pubDate>
    </item>
  </channel>
</rss>