<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>morenice's blog</title>
    <link>https://morenice.tistory.com/</link>
    <description>Information about software engineering</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 09:17:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>morenice</managingEditor>
    <image>
      <title>morenice's blog</title>
      <url>https://tistory1.daumcdn.net/tistory/296044/attach/375516dba18a4462963a701d8cf61e2f</url>
      <link>https://morenice.tistory.com</link>
    </image>
    <item>
      <title>Docker Desktop Malware Blocked - com.docker.vmnetd</title>
      <link>https://morenice.tistory.com/304</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFLuEb/btsMaBUUFAD/tDN7XZAMKMBk3qYnYaHqW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFLuEb/btsMaBUUFAD/tDN7XZAMKMBk3qYnYaHqW0/img.png&quot; data-alt=&quot;출처: https://github.com/docker/for-mac/issues/7520&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFLuEb/btsMaBUUFAD/tDN7XZAMKMBk3qYnYaHqW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFLuEb%2FbtsMaBUUFAD%2FtDN7XZAMKMBk3qYnYaHqW0%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;762&quot; height=&quot;566&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://github.com/docker/for-mac/issues/7520&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전부터 Docker desktop을 사용해왔는데, 오랫만에 이미지 빌드 및 테스트할게 있어 터미널을 열어 &quot;docker&quot; 명령어를 실행하니 아예 동작을 하지 않았다. 라이브러리 의존성 문제가 있나 싶어 맥OS를 최신 버전(Sequoia 15.0 -&amp;gt; 15.2)으로 업그레이드 하였고, Docker Desktop 또한 최신 버전을 다운로드 받아서 재설치를 시도하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 설치 후 사진과 같이 Malware Blocked(com.docker.vmnetd) 메시지와 더불어 실행이 되지 않았다. 문제 원인을 가정해보기로는 (1) Docker에 malware가 포함되었다, 또는 (2) 맥OS의 malware 감지 시스템이 신규로 추가되거나 있었더라도 예민하게 동작할 가능성이 있다 정도로 생각되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 몰라 구글링을 좀 해봤는데 다행히 2025년 1월에 docker for-mac 레파지토리쪽에 이슈가 등록된 사항을 확인하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/docker/for-mac/issues/7520&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/docker/for-mac/issues/7520&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738937090470&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;[Workaround in description] Mac is detecting Docker as a malware and keeping it from starting &amp;middot; Issue #7520 &amp;middot; docker/for-mac&quot; data-og-description=&quot;Description Whenever Docker is started, this error is shown: Malware Blocked. &amp;ldquo;com.docker.socket&amp;rdquo; was not opened because it contains malware. this action did not harm your Mac. Reproduce Start Dock...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/docker/for-mac/issues/7520&quot; data-og-url=&quot;https://github.com/docker/for-mac/issues/7520&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b8Nl9y/hyYccAQlU0/JkSOtlknN3wnkeMHfVZzKK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/P97bV/hyYcgca7ql/ufIN0k0PL6BRHk1hhN7LS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/docker/for-mac/issues/7520&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/docker/for-mac/issues/7520&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b8Nl9y/hyYccAQlU0/JkSOtlknN3wnkeMHfVZzKK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/P97bV/hyYcgca7ql/ufIN0k0PL6BRHk1hhN7LS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Workaround in description] Mac is detecting Docker as a malware and keeping it from starting &amp;middot; Issue #7520 &amp;middot; docker/for-mac&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Description Whenever Docker is started, this error is shown: Malware Blocked. &amp;ldquo;com.docker.socket&amp;rdquo; was not opened because it contains malware. this action did not harm your Mac. Reproduce Start Dock...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 공식적으로 수정되진 않았지만, 임시 해결 방법이 공유되어 있어 이를 따라해보았다. 내용을 살펴보면 설치된 vmnetd 관련 설정들을 삭제하고 수동 설치 또는 vmnetd 주요 파일들을 복사해주는 명령어들이다.&lt;/p&gt;
&lt;pre id=&quot;code_1738937127649&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Quit Docker Desktop and check that no remaining docker processes are running using the Activity Monitor
#Run the following commands:

# Stop the docker services
echo &quot;Stopping Docker...&quot;
sudo pkill '[dD]ocker'

# Stop the vmnetd service
echo &quot;Stopping com.docker.vmnetd service...&quot;
sudo launchctl bootout system /Library/LaunchDaemons/com.docker.vmnetd.plist

# Stop the socket service
echo &quot;Stopping com.docker.socket service...&quot;
sudo launchctl bootout system /Library/LaunchDaemons/com.docker.socket.plist

# Remove vmnetd binary
echo &quot;Removing com.docker.vmnetd binary...&quot;
sudo rm -f /Library/PrivilegedHelperTools/com.docker.vmnetd

# Remove socket binary
echo &quot;Removing com.docker.socket binary...&quot;
sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket

# Install new binaries
echo &quot;Install new binaries...&quot;
sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/PrivilegedHelperTools/
sudo cp /Applications/Docker.app/Contents/MacOS/com.docker.socket /Library/PrivilegedHelperTools/&lt;/code&gt;&lt;/pre&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS 업그레이드부터 Docker 재설치까지 그리고 이래저래 삽질하는 시간이 꽤 걸렸지만, 위 방법으로 간단히 해결할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비슷한 문제가 발생하면, 위 링크를 참고하여 임시조치를 적용하는 것을 추천한다.&lt;/p&gt;</description>
      <category>Daily</category>
      <category>Container</category>
      <category>docker</category>
      <category>docker for mac</category>
      <category>malware blocked</category>
      <category>vmnetd</category>
      <category>임시조치</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/304</guid>
      <comments>https://morenice.tistory.com/304#entry304comment</comments>
      <pubDate>Fri, 7 Feb 2025 23:14:11 +0900</pubDate>
    </item>
    <item>
      <title>N잡러를 위한 전자책 만들기</title>
      <link>https://morenice.tistory.com/303</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuOD3L/btsLAct7UAP/YJZ8Xy9ZLEDNKtDk7boK0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuOD3L/btsLAct7UAP/YJZ8Xy9ZLEDNKtDk7boK0K/img.jpg&quot; data-alt=&quot;흑상어쌤 지음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuOD3L/btsLAct7UAP/YJZ8Xy9ZLEDNKtDk7boK0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuOD3L%2FbtsLAct7UAP%2FYJZ8Xy9ZLEDNKtDk7boK0K%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;500&quot; height=&quot;662&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;흑상어쌤 지음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약 10여 년 전부터 갖고 있던 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨퍼런스 발표, 원격 근무 등 &lt;/span&gt;여러가지 목표 중 하나는 전자책 만들기였다. 소프트웨어 개발과 관련된 막연한 글을 쓰고 싶었고 고민만 몇 번 하다가 진행이 멈춘 프로젝트 중 하나이다. 글을 어떻게 하면 잘 적을 수 있을까? 내가 적은 글들이 정말 도움은 될까? 같은 고민들이 있었는데 이는 책을 기획하고 집필하는 과정 중 하나이고 그 뒤로 판매 및 마케팅 디자인등 여러 가지로 고민거리가 필요하다는 걸 깨닫게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N잡러를 위한 전자책 만들기는 저자 흑상어쌤이 전자책 작성에 대한 노하우가 집적된 일종의 프레임워크라고 할 수 있다. 전자책이란 무엇인지 그리고 기획단계에서 어떤 고민들이 필요한지를 하나하나 서술하고 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;전자책의 목적은 독자의 문제, 고민, 욕망을 해결해 주기 위한 것입니다. 그러므로 독자가 누구인지, 어떤 문제를 해결하고 싶어 하는지를 관찰해야 합니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;전자책은 독자를 대상으로 하며, 자신의 작품이 얼마나 수준 높은지를 판단하기 위해 제작하는 것이 아님을 기억해야 합니다. 부족해 보일지라도 일단 시장에 작품을 내놓고 독자들의 평가를 토대로 개선해 나가는 것이 중요합니다. 아무리 오랜 시간 고민을 해도 독자들은 작가가 얼마나 노력하고 준비를 했는지 알 수 없고, 관심도 없습니다. 독자들은 자신들의 문제를 해결하는데 관심이 있지요.&lt;/blockquote&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;Part 01 전자책 이해하고 기획하기&quot;에서 아는 것과 모르는 것에 대한 이야기가 나온다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;아는 것: 직접할 수 있고 다른 사람에게 설명하거나 가르칠 수 있는 것&lt;br /&gt;모르는 것: 읽거나 보기만 한것. 안다고 생각하는 것. 실제로 해본 적 없거나 다른 사람을 가르치거나 설명할 수 없는 것&lt;/blockquote&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;b&gt;실제로 자신이 아는 것과 필요한 사람을 정리해보세요&lt;/b&gt;와 같이 액션 메시지로 이어지는데 &quot;내가 경험해 본 것과 할 수 있는 것은 무엇인가?&quot; 그리고 &quot;그것이 누구에게 어떤 도움이 될 수 있는가&quot;등 질문으로 생각을 구체화할 수 있게 도와준다.&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-filename=&quot;thumbnail_IMG_3520.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQrDyI/btsLBWKopuI/S4hlJ42sUmAylk9NeKKdP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQrDyI/btsLBWKopuI/S4hlJ42sUmAylk9NeKKdP0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQrDyI/btsLBWKopuI/S4hlJ42sUmAylk9NeKKdP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQrDyI%2FbtsLBWKopuI%2FS4hlJ42sUmAylk9NeKKdP0%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_3520.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_3522.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFaksZ/btsLAaQFWWj/nPYbClqK1QYkKFfigPKwHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFaksZ/btsLAaQFWWj/nPYbClqK1QYkKFfigPKwHk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFaksZ/btsLAaQFWWj/nPYbClqK1QYkKFfigPKwHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFaksZ%2FbtsLAaQFWWj%2FnPYbClqK1QYkKFfigPKwHk%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_3522.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;1404&quot; data-origin-height=&quot;1101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8SGnd/btsLCnVksNF/nZMLPlrTqXyNgtvEdz4zk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8SGnd/btsLCnVksNF/nZMLPlrTqXyNgtvEdz4zk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8SGnd/btsLCnVksNF/nZMLPlrTqXyNgtvEdz4zk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8SGnd%2FbtsLCnVksNF%2FnZMLPlrTqXyNgtvEdz4zk1%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;1404&quot; height=&quot;1101&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;1101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 베껴쓰고 바꿔쓰며 연습하고 최종적으로 자신 스타일로 새로운 글을 써보는 연습법인 '베바새 글쓰기' 또한 인상적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글쓰는 방법부터 다소 어렵게 느껴지는 디자인 그리고 마케팅 관련 내용들이 있기 때문에 용기를 갖고 책 집필을 시작한다면 퀄리티 있는 전자책이 나오지 않을까 싶다. 잊고 있었던 책 집필에 대해 용기를 주었고 실용적이면서 충분한 가이드를 줄 수 있는 책이라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #123456;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;한빛미디어 서평단&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;나는리뷰어다&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;활동을 위해서 책을 제공받아 작성된 서평입니다&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>n잡러</category>
      <category>전자책</category>
      <category>흑상어쌤</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/303</guid>
      <comments>https://morenice.tistory.com/303#entry303comment</comments>
      <pubDate>Mon, 30 Dec 2024 01:17:53 +0900</pubDate>
    </item>
    <item>
      <title>실무로 통하는 클린 코드</title>
      <link>https://morenice.tistory.com/302</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BZDuL/btsJfltaaQd/RKYSJjvjecdUOWxTd38Az1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BZDuL/btsJfltaaQd/RKYSJjvjecdUOWxTd38Az1/img.jpg&quot; data-alt=&quot;막시밀리아노 콘티에리 지음, 이태영 옮김&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BZDuL/btsJfltaaQd/RKYSJjvjecdUOWxTd38Az1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBZDuL%2FbtsJfltaaQd%2FRKYSJjvjecdUOWxTd38Az1%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;359&quot; height=&quot;461&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;막시밀리아노 콘티에리 지음, 이태영 옮김&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 기술을 학습해 가는 방법은 여러 가지가 있다. 최근 가장 관심 있는 방법 중 하나로써 기본적인 개념을 익힌 뒤 실용적인 관점에서의 예시들을 포함, 어떻게 활용하는지 익혀나가고 점진적으로 왜 이렇게 했는지 등 사고의 폭을 넓혀가는 방법이 와닿는다. 그런 관점에서 한빛미디어에 나온 &quot;실무로 통하는...&quot; 시리즈의 책들은 인과추론, 타입스크립트, 엑셀, 데이터 시각화등 책이 나와있는데 &quot;실무로 통하는 클린코드&quot; 또한 이러한 시리즈 책 중 하나이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;클린코드는 읽고, 이해하고, 유지보수하기 쉬운 코드를 의미합니다. 이를 위해 잘 구조화되고 간결하며 변수, 함수, 클래스에 의미 있는 이름을 사용합니다. 또한 모범 사례와 디자인 패턴을 따르며 성능과 구현 세부 사항보다 코드의 가독성과 동작을 우선시합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;p31 왜 클린 코드인가요?&lt;/blockquote&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;b&gt;클린 코드란 읽고, 이해하고, 유지보수하기 쉬운 코드를 위한 모든 활동&lt;/b&gt;들을 의미한다. BigData와 같이 여러가지 의미를 함축하는 용어로써 &quot;클린 코드&quot;란 말은 로버트 C 마틴에 의해 널리 알려졌다. 클린 코드 책이 나온 지 꽤 오래되었지만 여전히 개발자들의 바이블이다.&amp;nbsp; 하지만 Java 언어를 바탕으로 예시들이 설명되고 있어 요즘과 같이 다양한 언어를 다루는 사람들에게는 예시에 대한 갈증이 있었을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 관점에서 실무로 통하는 클린 코드(Clean code Coookbook)는 꽤 유용한 책이다. Java뿐 아니라 Javascript, Python, PHP를 사용한 예시들이 제공되고 있고 짧은 예시들이 가득가득하여 읽어나가는데 부담이 없다. 사실 예시가 너무 많아서 머릿속으로 기억하는 게 어려울 지경이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지은이 막시밀리아노 콘티에리는 약 25년동안 소프트웨어 업계에 종사하였는데 그 중 14년째는 대학 강의를 하고 있는 사람이다. 이름이 익숙하지 않은 발음이라 어느 국가 사람일까 궁금했는데 아르헨티나 국적을 가진 사람이었고 &lt;a href=&quot;https://www.linkedin.com/in/mcsee/?originalSubdomain=ar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크드인 프로필을&lt;/a&gt; 보면 책과 관련된 언급을 찾아볼 수 있다. 대략 1년이 안된 책이 &lt;b&gt;한국어로&lt;/b&gt; 번역까지 되어 출판된 것을 보면 얼마나 따끈따끈한 책인지를 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cedzPM/btsJfNvWpy4/l28O4cKZZU7d43lW5kO3r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cedzPM/btsJfNvWpy4/l28O4cKZZU7d43lW5kO3r0/img.png&quot; data-alt=&quot;저자의 링크드인 글 일부를 발췌&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cedzPM/btsJfNvWpy4/l28O4cKZZU7d43lW5kO3r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcedzPM%2FbtsJfNvWpy4%2Fl28O4cKZZU7d43lW5kO3r0%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;602&quot; height=&quot;492&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저자의 링크드인 글 일부를 발췌&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Chapter 1,2에서 클린코드에 대한 설명 그리고 공리(수학에서 가장 근본이 되는 기초 명제)를 시작으로, Chapter 3부터 다양한 예시들을 설명해 나가는데 &lt;b&gt;&quot;문제&quot;, &quot;해결&quot;, &quot;설명&quot; 순으로&lt;/b&gt; 진행이 된다. 문자열 남용 제거하기처럼 선언적으로 변환하는 간단한 예시들부터 시작하여 디자인 패턴에 대한 인용 그리고 놓치기 쉬운 과도한 일반화에 대한 내용을 첨부한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2993&quot; data-origin-height=&quot;3461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xPykc/btsJfbj5jT4/J5iHtiKTluS2OmwvEatdAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xPykc/btsJfbj5jT4/J5iHtiKTluS2OmwvEatdAK/img.jpg&quot; data-alt=&quot;4.4 문자열 남용 제거하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xPykc/btsJfbj5jT4/J5iHtiKTluS2OmwvEatdAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxPykc%2FbtsJfbj5jT4%2FJ5iHtiKTluS2OmwvEatdAK%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;552&quot; height=&quot;638&quot; data-origin-width=&quot;2993&quot; data-origin-height=&quot;3461&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4.4 문자열 남용 제거하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3445&quot; data-origin-height=&quot;2717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blrxlU/btsJfi4rPE8/JhkDuLb2NlW8HGSQ8hwFsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blrxlU/btsJfi4rPE8/JhkDuLb2NlW8HGSQ8hwFsk/img.jpg&quot; data-alt=&quot;(노트) 퍼사드 패턴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blrxlU/btsJfi4rPE8/JhkDuLb2NlW8HGSQ8hwFsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblrxlU%2FbtsJfi4rPE8%2FJhkDuLb2NlW8HGSQ8hwFsk%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;560&quot; height=&quot;442&quot; data-origin-width=&quot;3445&quot; data-origin-height=&quot;2717&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(노트) 퍼사드 패턴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wtNrf/btsJfUIFQ6F/sAjkvSlKm2tCnOIDxWmKu0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wtNrf/btsJfUIFQ6F/sAjkvSlKm2tCnOIDxWmKu0/img.jpg&quot; data-alt=&quot;과도한 일반화 줄이기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wtNrf/btsJfUIFQ6F/sAjkvSlKm2tCnOIDxWmKu0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwtNrf%2FbtsJfUIFQ6F%2FsAjkvSlKm2tCnOIDxWmKu0%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;608&quot; height=&quot;811&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;과도한 일반화 줄이기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책을 관통하는 하나의 단어가 있다면 MAPPER(Model: Abstract Partial and Programmable Explaining Realiity) 일 것이다. 저자가 말하는 MAPPER에 대해서는 매우 동의한다. 프로그래밍을 처음 배울 때 추상화 그리고 모델링에 대한 부분을 배우게 되는데 실제 내용이 와닿지 않다가 경험이 쌓일 수록 이러한 개념이 와닿는 순간들이 점차 많아지게 된다. 시점을 생각해보면 유지보수를 하게 됨에 따라 기존 코드를 변경하고 문제 없이 동작하게 해내가는 과정들을 겪으면서가 아닐까 싶다. 버그가 나와서 고쳤는데 다른 버그가 나타난다던가, 기능 요구사항이 있어 수정을 하려는데 강결합된 코드들로 인하여 거의 다 뜯어고쳐나가는 일들 그리고 배포시 겪는 장애들의 연속등 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;실제로 주변에서 많이들 겪고 보게 되는 일들이다.&lt;/span&gt; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나에게 클린 코드란 관리/담당하는 코드들이 내 손을 떠나서도 정해진 요구사항과 목표에 맞게 잘 동작시키는 기본 바탕을 의미한다. 좀 더 말하자면 유닛테스트 및 회귀테스트 그리고 적정 수준의 설계 문서들이 함께 있어야 하겠지만 말이다. 개인적으로는 &quot;Chapter 4 기본형 집착&quot;, &quot;Chapter 16 섣부른 최적화&quot;, &quot;Chatper 17 결합도&quot;, &quot;Chatper 19장 계층&quot;을 재미있게 읽었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루 한 Chapter 이렇게 읽으면 딱 좋을듯 한데 부담이 된다면 하루에 2,3페이지씩 정해서 읽어도 좋다. 첫번째 읽을 때에는 이해하기 위해 그리고 두 번째 읽을 때 비판적 사고로 읽어보면 본인의 코딩 스타일에 충분히 도움이 되지 않을까 생각한다. 팀 또는 함께하는 사람들이 있다면 같이 읽어도 좋다고 생각한다.&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;b&gt;&lt;span style=&quot;color: #123456;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;한빛미디어 서평단&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;나는리뷰어다&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;활동을 위해서 책을 제공받아 작성된 서평입니다&lt;/span&gt;&lt;span style=&quot;color: #123456;&quot;&gt;.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>디자인패턴</category>
      <category>실무로 통하는 클린코드</category>
      <category>클린코드</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/302</guid>
      <comments>https://morenice.tistory.com/302#entry302comment</comments>
      <pubDate>Mon, 26 Aug 2024 14:19:09 +0900</pubDate>
    </item>
    <item>
      <title>처음 시작하는 FastAPI</title>
      <link>https://morenice.tistory.com/301</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfDEz2/btsIQI9ijJE/uy6hCXMrVCQfQxkoAUMkwk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfDEz2/btsIQI9ijJE/uy6hCXMrVCQfQxkoAUMkwk/img.jpg&quot; data-alt=&quot;빌 루바노빅 지음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfDEz2/btsIQI9ijJE/uy6hCXMrVCQfQxkoAUMkwk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfDEz2%2FbtsIQI9ijJE%2Fuy6hCXMrVCQfQxkoAUMkwk%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;369&quot; height=&quot;474&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;빌 루바노빅 지음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에는 프로덕션 레벨로 Java을 활용하여 작업을 이어오면서 개인프로젝트 몇몇을 제외하고는 Python 기반의 웹 서비스 개발을 거의 못하고 있었다. 종종 FastAPI에 대한 이야기를 듣곤 했었다. 작년말 해커톤에 참여할 일이 있었는데 그 때 함께 작업하시는 분이 FastAPI 이야기를 하셔서 1시간 정도 레퍼런스 문서를 보고 백엔드 API 서버를 만들기는 했었는데 이번에 이렇게 관련 서적을 읽을 기회가 있어서 한번 각을 잡고 읽어보게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python을 개발언어의 강력함은 배우기 쉽고 이를 지탱하는 프레임워크가 굉장히 많다는 점이다. 그 중 웹 프레임워크는 과거부터 2가지 종류가 굉장히 인기가 많았다. 일종의 거대한 프레임워크라고 할 수 있는 Django와 대조적으로 경량화된 Flask이다. 어드민부터 시작하여 CLI 도구등 (Ruby on rails의 영향을 받은듯한) 다양한 기능들을 직접적으로 지원하여 간단한 웹 어플리케이션은 굉장히 빠르게 개발할 수 있는 Django는 그 유명한 인스타그램에서 초기에 활용한 프레임워크이기도 하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8Oq5Z/btsIQpoF0pJ/INqgOIw6SAiEJcCGPcPwSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8Oq5Z/btsIQpoF0pJ/INqgOIw6SAiEJcCGPcPwSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8Oq5Z/btsIQpoF0pJ/INqgOIw6SAiEJcCGPcPwSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Oq5Z%2FbtsIQpoF0pJ%2FINqgOIw6SAiEJcCGPcPwSk%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;350&quot; height=&quot;159&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금도 그렇지만 개인적으로 웹사이트를 만들 일이 있다면 거리낌없이 Django를 활용했었고, 마이크로서비스가 주류가 된 이후로는 자유도가 높고 경량화된 백엔드API 서버를 만들 수 있는 Flask를 활용하여 백엔드 API 서버를 개발하였다. 한가지 아쉬웠던 점은 Python의 GIL(Global Interpeter Lock) 때문에 멀티 프로세스보다 경량화된 멀티 쓰레딩을 활용하기 어렵다는 점이고 일반적으로 I/O가 많은 백엔드서버에서 비동기를 지원하지 않아 성능적으로 이점을 많이 가져가지 못한 점이 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 필요한 기술은 비동기이다. Django와 Flask 모두 결국 비동기를 지원하게 되었지만 결국 FastAPI가 비동기 API 서버의 흐름을 잡고 있지 않을까 생각을 한다. Flask와 비슷한 간결함과 자유도 그리고 비동기 지원. 자동화된 문서화와 ORM까지 어느정도 갖춰서 사용할 수 있는 레퍼런스가 제공되는 점까지 프로덕션 레벨에서 사용하지 않을 이유가 없다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsjBch/btsIOBD7h6T/SByvtyJ4506lZ40QZkXidK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsjBch/btsIOBD7h6T/SByvtyJ4506lZ40QZkXidK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsjBch/btsIOBD7h6T/SByvtyJ4506lZ40QZkXidK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsjBch%2FbtsIOBD7h6T%2FSByvtyJ4506lZ40QZkXidK%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;632&quot; height=&quot;228&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실용적인 목적으로 빠르게 활용하기 위해서만 학습했었는데 내부 동작이나 기능의 지원여부 그리고 &lt;b&gt;Django, Flask와의 차이점에 대해 정리된 글을 보고 싶다는 생각을 했었는데 이 책에서는 궁금한 점들을 잘 표현하고 있다.&lt;/b&gt; 주니어 개발자들을 위한 서비스, API, HTTP, Restful, 동시성등 개념적인 설명과 더불어 어느정도 웹개발에 대한 경험이 있는 독자들을 대상으로 글을 쓴 것 같은 인상또한 받았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책의 장점이자 단점인데, &quot;단순히 API 서버는 이렇게 만들면 됩니다&quot;가 아니라 API 서버를 개발하는데 필요한 개념들부터, 테스트를 위한 도구(pytest), 코드 포맷팅, ORM, 의존성 주입, 로깅, 인증/인가등 다양한 범위로 설명을 한다. Cython, pypy등의 언급까지 정말 많은 영역을 다루다 보니 특정 부분은 설명이 적거나 개론적인 부분만 적혀있는 것도 있어 단점이라고도 볼 수 있다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;하지만 API에 대한 큰 틀을 한번 정리해준다는 점은 장점으로 생각된다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 계층에 대한 설명은 로우레벨인 쿼리부터 시작한다는 점은 인상적이지만 최근 ORM을 거의 다 사용하는 추세인데 너무 적게 내용을 할당해 아쉬움이 좀 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python을 시작해서 FastAPI로 처음 개발을 시작한다면 추천하기 좀 어렵다. 하나하나 집어주는 부분은 참 좋았지만 기술적 단어나 배경에 대한 이해가 부족할 수 있어 맥락을 이해하기 어려울 것으로 본다. 하지만 Django/Flask 개발 경험이 있는 사람이 FastAPI를 도입하거나 사용하기 위해 이 책을 읽어본다면 빠르게 어느정도 퀄리티가 보장된 서버를 만들 수 있는 가이드가 될 것이라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-ogsb=&quot;&quot; data-ogsc=&quot;&quot; data-ogab=&quot;&quot; data-ogac=&quot;&quot; data-markjs=&quot;true&quot;&gt;한빛미디어&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나는리뷰어다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;활동을 위해서 책을 제공받아 작성된 서평입니다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>async</category>
      <category>FastAPI</category>
      <category>Framework</category>
      <category>Python</category>
      <category>한빛미디어</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/301</guid>
      <comments>https://morenice.tistory.com/301#entry301comment</comments>
      <pubDate>Sun, 28 Jul 2024 00:21:17 +0900</pubDate>
    </item>
    <item>
      <title>한 권으로 끝내는 이미지 생성 AI with 미드저니</title>
      <link>https://morenice.tistory.com/300</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdLenq/btsF1dyObMs/nLIje1JuyRvvOMk6LcGhHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdLenq/btsF1dyObMs/nLIje1JuyRvvOMk6LcGhHk/img.jpg&quot; data-alt=&quot;헤더림(임혜린) , 백승호 &amp;amp;amp;nbsp;(지은이)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdLenq/btsF1dyObMs/nLIje1JuyRvvOMk6LcGhHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdLenq%2FbtsF1dyObMs%2FnLIje1JuyRvvOMk6LcGhHk%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;500&quot; height=&quot;680&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;헤더림(임혜린) , 백승호 &amp;amp;nbsp;(지은이)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10년 전만 하더라도 AI 기술을 활용하는 사람들은 기계학습, 딥러닝을 포함하여 알고리즘과 수학적 지식을 필요로 했다. 이미지(또는 데이터)에서 사물을 식별하거나 이상패턴을 판별하는 등 특정 분야에서만 활용하고 있었고 전문적인 지식뿐 아니라 다양한 경험이 뒷받침되어야 사용할 수 있는 수준이었다. 학습 모델을 어떤 데이터로 만들것인지 그리고 최종 결과가 잘 동작하는지등 가늠하는 것도 어려운 주제이고 전문적인 최신 트렌드를 계속해서 학습해야하는 고충이 있다.&amp;nbsp;하지만 생성형 AI가 태동하기 시작하면서 분위기가&amp;nbsp; 바뀌었다. &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;생성형 AI(generative AI)는 &lt;b&gt;프롬프트에 대응하여 텍스트, 이미지, 기타 미디어를 생성할 수 있는 일종의 인공지능(AI) 시스템&lt;/b&gt;을 말한다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;프롬프트만 잘 만들수 있다면&lt;/b&gt; 전문적인 AI 지식을 알지 못해도 필요한 정보를 얻거나 이미지를 만들어낼 수 있다. 최근에는 이미지뿐 아니라 영상까지 만들어내는 수준까지 이끌었다. 그렇다보니 과거 전문분야 또는 특정분야에서만 활용할 수 있었던 AI를 일반인이 일상에서 손쉽게 사용할 수 있는 수준으로 만들어주었다. 문학, 시, 이미지, 영상 등의 분야를 소비하는 것뿐만 아니라 AI를 통해 생산자가 될 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;AI의 대중화라 부를 수 있는 생성형 AI를 어떻게 시작하면 좋을지 그리고 어떻게 프롬프트를 작성해야 원하는 수준의 결과물을 얻을 수 있는지 2가지 관점에서 지식과 경험이 필요하다. 한 권으로 끝내는 이미지 생성 AI는 &lt;/span&gt;2가지 관점을 만족시켜주는 책으로써 생성형 AI에 관심이 있는 일반인이나 직장인, 디자이너, 아티스트, 기획자를 위한 실용적인 예시를 보여주어&amp;nbsp; 실제로&amp;nbsp; 삶에 AI를 활용할 수 있게 도와주는 책이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책 초반부분에 텍스트를 기반으로 이미지가 어떻게 제공되는지 간략하게 소개가 나온다. 위 사진은 화성에서 테니스를 치고 있는 사자를 만들어달라고 한 결과물이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2833.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl5u3x/btsF000G1tG/eZznt6LjsuhSUk4IfOeLbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl5u3x/btsF000G1tG/eZznt6LjsuhSUk4IfOeLbK/img.jpg&quot; data-alt=&quot;화성에 있는 사자 이미지 생성 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl5u3x/btsF000G1tG/eZznt6LjsuhSUk4IfOeLbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl5u3x%2FbtsF000G1tG%2FeZznt6LjsuhSUk4IfOeLbK%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2833.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화성에 있는 사자 이미지 생성 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 서비스들이 소개되며&lt;b&gt; 달리, 미드저니&lt;/b&gt;의 가입방법 그리고 &lt;b&gt;스테이블 디퓨전&lt;/b&gt; 설치 방법에 대해서도 서술한다. 책에서는 주로 미드저니를 통해 이미지를 생성하는 방법과 예시들이 작성되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2826.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WMKCy/btsF03QEeCg/2mDQLDNlz44oPtGgK4uce0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WMKCy/btsF03QEeCg/2mDQLDNlz44oPtGgK4uce0/img.jpg&quot; data-alt=&quot;대표 생성형 서비스 Dall-E,&amp;amp;amp;nbsp; Midjourney, Stable Diffussion&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WMKCy/btsF03QEeCg/2mDQLDNlz44oPtGgK4uce0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWMKCy%2FbtsF03QEeCg%2F2mDQLDNlz44oPtGgK4uce0%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;640&quot; height=&quot;404&quot; data-filename=&quot;IMG_2826.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대표 생성형 서비스 Dall-E,&amp;amp;nbsp; Midjourney, Stable Diffussion&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 중 PART02 이미지 생성 AI 실무 활용하기에서 &quot;일상에서 이미지 생성 AI 활용하기&quot;, &quot;회사 업무에 이미지 생성 AI 활용하기&quot;, &quot;디자인 실무에 이미지 생성 AI로 어이디어 얻기&quot;를 주제로 각각 3~4개의 이미지 생성 예시들을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2828.jpg&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cup2eS/btsF2OR3FhB/BhF1iYr296CvPy9etitgkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cup2eS/btsF2OR3FhB/BhF1iYr296CvPy9etitgkk/img.jpg&quot; data-alt=&quot;AI를 통해&amp;amp;amp;nbsp; 필요한 두 장의 이미지를 생성하고 포스터를 만든 사례&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cup2eS/btsF2OR3FhB/BhF1iYr296CvPy9etitgkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcup2eS%2FbtsF2OR3FhB%2FBhF1iYr296CvPy9etitgkk%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;528&quot; height=&quot;640&quot; data-filename=&quot;IMG_2828.jpg&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI를 통해&amp;amp;nbsp; 필요한 두 장의 이미지를 생성하고 포스터를 만든 사례&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2829.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7YHyM/btsF2FnrXeN/CyaeOgbLYM2InQJXKftRd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7YHyM/btsF2FnrXeN/CyaeOgbLYM2InQJXKftRd1/img.jpg&quot; data-alt=&quot;특정 작가나 아티스트 느낌을 반영한 이미지 또한 만들어낼 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7YHyM/btsF2FnrXeN/CyaeOgbLYM2InQJXKftRd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7YHyM%2FbtsF2FnrXeN%2FCyaeOgbLYM2InQJXKftRd1%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2829.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;특정 작가나 아티스트 느낌을 반영한 이미지 또한 만들어낼 수 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2830.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwxVjG/btsF0lD7jhI/HG7GaYkCo4MM4k8kyKFZg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwxVjG/btsF0lD7jhI/HG7GaYkCo4MM4k8kyKFZg1/img.jpg&quot; data-alt=&quot;포스터 만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwxVjG/btsF0lD7jhI/HG7GaYkCo4MM4k8kyKFZg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwxVjG%2FbtsF0lD7jhI%2FHG7GaYkCo4MM4k8kyKFZg1%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2830.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포스터 만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2832.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQylgl/btsF0u8QuGn/l6lKzZRJ4ntLxyBbImAeVk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQylgl/btsF0u8QuGn/l6lKzZRJ4ntLxyBbImAeVk/img.jpg&quot; data-alt=&quot;페르소나 인물 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQylgl/btsF0u8QuGn/l6lKzZRJ4ntLxyBbImAeVk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQylgl%2FbtsF0u8QuGn%2Fl6lKzZRJ4ntLxyBbImAeVk%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2832.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;페르소나 인물 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책을 읽어나가면 굉장히 쉽다!라고 느낄 수 있고 읽는데 1~2시간이면 충분하다. 쉽게 느끼는 이유는 저자가 알고 있는 그리고 경험한 지식들이 잘 녹여져 있기 때문이라고 생각한다. 막상 만들고 싶은 이미지에 대한 프롬프트를 작성해보려고 하면 생각보다 어떤 키워드를 프롬프트에 포함시켜야 할지 생각이 잘 안난다. 그럴 때 마다 책에 작성된 내용을 다시 확인하여 프롬프트를 작성하는등 꾸준히 연습하는게 필요해 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 AI 시장은 매년마다 빠르게 변화하고 있지만 나중에 한 번에 이해하기보다는 일상에 적용할 수 있는 부분들을 확인하고 꾸준히 관찰하는 게 더 중요하다고 생각한다.&amp;nbsp;작년말 회사에서 AI 해커톤을 진행하여 참석하였고 그 이후로 ChatGPT를 종종 활용하고 있는데 올해는 다양한 이미지 생성을 해보고 삶에 반영해볼 계획이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;한빛미디어&amp;nbsp;&amp;lt;나는&amp;nbsp;리뷰어다&amp;gt;&amp;nbsp;활동을&amp;nbsp;위해서&amp;nbsp;책을&amp;nbsp;제공받아&amp;nbsp;작성된&amp;nbsp;서평입니다.&quot;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>Ai 프롬프트</category>
      <category>Dall-E</category>
      <category>Generative AI</category>
      <category>Stable Defussion</category>
      <category>기획자</category>
      <category>디자이너</category>
      <category>미드저니</category>
      <category>생성형AI</category>
      <category>아티스트</category>
      <category>직장인</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/300</guid>
      <comments>https://morenice.tistory.com/300#entry300comment</comments>
      <pubDate>Sat, 23 Mar 2024 18:18:15 +0900</pubDate>
    </item>
    <item>
      <title>You Don't  Know JS Yet - 자바스크립트 개념, 스코프와 클로저</title>
      <link>https://morenice.tistory.com/299</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;k292937321_1.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyLRWG/btsFimu153s/KZBk7dfHYq2SpKFlfQjd41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyLRWG/btsFimu153s/KZBk7dfHYq2SpKFlfQjd41/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyLRWG/btsFimu153s/KZBk7dfHYq2SpKFlfQjd41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyLRWG%2FbtsFimu153s%2FKZBk7dfHYq2SpKFlfQjd41%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;500&quot; height=&quot;642&quot; data-filename=&quot;k292937321_1.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 함께 일하는 동료와 가볍게 JavaScript 주제로 이야기를 했었다. 기억나는 내용 중 하나는 JavaScript 개발자 면접관으로써 생각보다 숙력자를 찾기 어렵다는 것이다. JavaScript는 과거 웹 브라우저에서 동작시키기 위한 스크립트 언어였지만 이제는 서버뿐 아니라 앱 또는 GUI 개발까지 다양하게 활용되고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;1030&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rO0mj/btsFjIxQ23S/FtwSc9HowL7y6RSR94KmGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rO0mj/btsFjIxQ23S/FtwSc9HowL7y6RSR94KmGK/img.png&quot; data-alt=&quot;https://innovationgraph.github.com/global-metrics/programming-languages#programming-languages-rankings&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rO0mj/btsFjIxQ23S/FtwSc9HowL7y6RSR94KmGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrO0mj%2FbtsFjIxQ23S%2FFtwSc9HowL7y6RSR94KmGK%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;1317&quot; height=&quot;1030&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;1030&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://innovationgraph.github.com/global-metrics/programming-languages#programming-languages-rankings&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;github 플랫폼에 가장 많이 등록되어 활용되는 개발언어이기도 하고 각종 리포트의 항상 상위권 인기에 머무르는게 이 언어이다. 같이 일하던 동료가 말하는 숙련자란 Javascipt를 잘 이해하고 서버 개발에 활용할 수 있는 사람을 말한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러한 관점에서 나 또한 비슷한 사람에 속한다. 오랫동안 다뤄왔지만 JavaScript 내부 동작에 대해 고민해보거나 개발 언어 특성에 맞게 코드를 작성하려는 노력을 굳이 하지 않았다. 누군가 좋은 패턴이라고 하면 수용적인 태도로 고개를 끄덕거리며 비슷하게 코드를 작성하기 위해 시간을 들였던 기억만 남는다. 쉬우면서도 어려운 언어 그리고 오래동안 사용했지만 자신있게 잘 사용할줄 안다고 하기 어려운 개발 언어가 JavaScript이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You Dont' Know JS는 JavaScript을 알지만/잘 알지 못하는 개발자들을 위한 필독서라고 할 수 있다. 이 책의 강점이라고 할수 있는데, 내부 동작방식에 대해 정말 짧은 예시 코드들을 가지고 설명을 풀어나간다는 점이다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20240224_235522592.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eUuZP8/btsFipSRzKo/26EurIKMGE6KVtsuggGkqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eUuZP8/btsFipSRzKo/26EurIKMGE6KVtsuggGkqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eUuZP8/btsFipSRzKo/26EurIKMGE6KVtsuggGkqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeUuZP8%2FbtsFipSRzKo%2F26EurIKMGE6KVtsuggGkqK%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;1080&quot; height=&quot;1440&quot; data-filename=&quot;KakaoTalk_20240224_235522592.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20240224_235522592_01.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMAMNg/btsFffRJSzS/VrjKMzjkJ3tAHYqDJxpcLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMAMNg/btsFffRJSzS/VrjKMzjkJ3tAHYqDJxpcLk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMAMNg/btsFffRJSzS/VrjKMzjkJ3tAHYqDJxpcLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMAMNg%2FbtsFffRJSzS%2FVrjKMzjkJ3tAHYqDJxpcLk%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;1080&quot; height=&quot;1440&quot; data-filename=&quot;KakaoTalk_20240224_235522592_01.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;짧은 예시 코드들은 복잡하지 않기 때문에 독자의 이해를 돕기도 하지만, 한번에 이해되지 않는 상황에도 부담을 줄여주어 여러번 반복해서 읽어볼 수 있게 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 YDKJSY(You Don't Know JS Yet)시리즈는 6개의 챕터로 이루어져 있는데, 이번 책은 첫번째 자바스크립트 개념과 두번째 스코프와 클로저를 엮어서 만든 것이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;시작하기 (자바스크립트 개념)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;스코프와 클로저&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;객체와 클래스&lt;/li&gt;
&lt;li&gt;타입과 문법&lt;/li&gt;
&lt;li&gt;동기와 비동기&lt;/li&gt;
&lt;li&gt;ES.Next와 그 너머&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&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;JavaScript는 ECMAScript의 스펙을 지원하는 개발언어이며, 하위호환을 존중하는 언어이다.&lt;/li&gt;
&lt;li&gt;렉시컬 스코프 스펙을 지원하기 위해 구문 분석과 같은 컴파일이 필요하고 실제 동작은 인터프린터 방식을 취한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;function에 대한 일급 객체를 지원한다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(class 문법을 추후 지원했지만) 클로저, 프로토타입을 활용하여 function을 추상화 및 캡슐화하였고 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;상속 개념처럼 활용할 수 있도록 발전해왔다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;간략한 코드 예시를 통한 스코프와 클로저의 수많은 개념 설명들&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저자는 초반에 중급자를 위한 책이라고 밝히는데 사실 JavaScript를 막 시작한 개발자가 아니라면 크게 무리가 없다고 생각한다. 중요한 점은 다른 개발 언어를 다뤄봄으로써 JavaScript의 철학을 이해하고 비교할 수 있는지가 중요한데 Java, Python, C/C++, Golang등 어떤 것이든 상관이 없다고 생각한다. Java에서는 클로저를 지원하진 않지만 함수형 인터페이스를 통해 함수를 전달받고 응답할 수 있는 수준까지 제공하고 있으며 Python에서는 클로저를 지원하며 이를 활용하여 decorator 기능을 언어차원에서 제공하기도 하였다. 또한 golang에서도 클로저를 직접 지원한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스코프는 여전히 헷갈리지만 클로저 부분은 꽤 재미있게 읽었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러 사람들과 같이 읽으면 더 좋은 책이라고 생각한다. 각자 갖고 있는 지식이나 경험을 기반으로 비교하며 장단점에 대해서 토론할수 있기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;span style=&quot;color: #000000;&quot; data-ogsb=&quot;&quot; data-ogsc=&quot;&quot; data-ogab=&quot;&quot; data-ogac=&quot;&quot; data-markjs=&quot;true&quot;&gt;한빛미디어&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;나는 리뷰어다&amp;gt; 활동을 위해서 책을 제공받아 작성된 서평입니다.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>javasciprt</category>
      <category>You Don't Know JS Yet</category>
      <category>스코프와 클로저</category>
      <category>카일심슨</category>
      <category>한빛미디어</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/299</guid>
      <comments>https://morenice.tistory.com/299#entry299comment</comments>
      <pubDate>Sun, 25 Feb 2024 00:28:24 +0900</pubDate>
    </item>
    <item>
      <title>[2023년 결산] 한빛냥 독자의 소리</title>
      <link>https://morenice.tistory.com/298</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lz7Z9/btsFgKqaPxT/U7oe7Ane4aBEskj2KuFbTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lz7Z9/btsFgKqaPxT/U7oe7Ane4aBEskj2KuFbTK/img.png&quot; data-alt=&quot;이메일 데브잇 내용 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lz7Z9/btsFgKqaPxT/U7oe7Ane4aBEskj2KuFbTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flz7Z9%2FbtsFgKqaPxT%2FU7oe7Ane4aBEskj2KuFbTK%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;779&quot; height=&quot;411&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이메일 데브잇 내용 중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2023년 가을쯤 내가 작성한 리뷰 글이 하나 소개되었다. &quot;파이썬 크래시코스&quot;는 쉽게 잘 풀어쓰고 구성이 꽤 좋은 책이라 즐겁게 읽었는데 이렇게 소개까지 해주셔서 기분이 참 좋았었던 기억이 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.morenice.kr/295&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Review] - 파이썬 크래시 코스&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;해당 리뷰는 &quot;나는 리뷰어다&quot; 활동으로 작성한 글이다. &quot;나는 리뷰어다&quot;는 한빛미디어의 도서 서평단을 말한다. 특별한 위치 또는 권위가 있지 않아도 컨텐츠를 작성할 준비가 된 사람이라면 신청할 수 있다. 예를 들어 블로그를 운용하거나 인스타 또는 트위터등을 통해서 어느정도는 활동을 하는 경우인데 선정이 될 수도 있고 안될수도 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IT 개발자의 덕목 중, 기술에 대한 꾸준한 관심을 갖는 것 그리고 어떤 활동이든 자신의 시간을 관심분야에 할당하는 것이 중요하다고 생각한다. 이러한 관점에서 나는 리뷰어다가 꽤 좋은 영향력을 주고 있고 블로그를 통해 컨텐츠 생산자가 되어 내가 알게된 사실들을 재 가공하고 공유하는 것이 꽤 즐거운 일이기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024년에는 부족한 글 솜씨가 조금이라도 더 좋아지는 한해가 되길.&lt;/p&gt;</description>
      <category>Daily</category>
      <category>2023년</category>
      <category>결산</category>
      <category>독자의소리</category>
      <category>파이썬</category>
      <category>한빛냥</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/298</guid>
      <comments>https://morenice.tistory.com/298#entry298comment</comments>
      <pubDate>Sat, 24 Feb 2024 23:14:51 +0900</pubDate>
    </item>
    <item>
      <title>[2023년 결산] WakaTime와 함께하는 개발 회고</title>
      <link>https://morenice.tistory.com/297</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.morenice.kr/291&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Daily] - [2022년 결산] WakaTime와 함께한 개발 기록&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년에 이어 올해도 WakaTime에서 일년간의 기록을 잘 정리해서 이메일로 보내주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HlX3D/btsFef5Gtms/ehpvzdID1SG1tuMaoneNTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HlX3D/btsFef5Gtms/ehpvzdID1SG1tuMaoneNTK/img.png&quot; data-alt=&quot;Code stats report for 2023&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HlX3D/btsFef5Gtms/ehpvzdID1SG1tuMaoneNTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHlX3D%2FbtsFef5Gtms%2FehpvzdID1SG1tuMaoneNTK%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;701&quot; height=&quot;623&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Code stats report for 2023&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간략한 회고를 해보자면, 평균 2시간의 개발을 했으며 올해도 열심히 정말 열심히 Java를 활용하여 서비스 개발을 했다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XPEi5/btsFhgIS5ld/IvTU1IJOKcMlTIHqgD7sR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XPEi5/btsFhgIS5ld/IvTU1IJOKcMlTIHqgD7sR0/img.png&quot; data-alt=&quot;Langugaes for 2023&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XPEi5/btsFhgIS5ld/IvTU1IJOKcMlTIHqgD7sR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXPEi5%2FbtsFhgIS5ld%2FIvTU1IJOKcMlTIHqgD7sR0%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;1189&quot; height=&quot;404&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Langugaes for 2023&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 Java, Scala을 활용하여 개발을 했는데, 올해는 Go를 다시 한번 학습하고 서비스 개발에 활용하는 시간을 갖기도 하였다. 간결한 문법과 매우 빠른 성능 그리고 goroutine을 활용한 virtual thread 전략은 참 훌륭하다. 아쉽게도 마지막에 해당 프로젝트가 다시 Kotlin 기반으로 변경되긴 했지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편, 2023년 9월 Java LTS 21 버전이 릴리즈되었고 공식적으로 virtual thread를 지원하게 되었다. Spring에서는 비동기를 위한 Webflux(Reactive Programming)를 오래전부터 지원하고 있었으며 적은 리소스로도 대량의 I/O 요청에 대응할 수 있었다. 이제 virtual thread까지 지원을 하게 되었으니, Spring을 발판삼아 Java는 앞으로도 여전히 서비스 개발에 사랑받는 언어 및 서버 환경이 되지 않을까 하는 생각이 들었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 시도로 reactive programming에 대해 강의를 만들기도 하였다. 시간을 꽤 많이 들였지만 결과물을 생각하면 아쉬움이 남기도 하고 충분히 많은 실험들을 했기에 뿌듯하기도 한 기억에 남는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024년에는...&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Java virutal thread에 대해서 알아보고 reactive programming과 비교하여 각각 어떤 상황에 활용하면 좋을지 고민을 해볼 생각이다.&lt;/li&gt;
&lt;li&gt;같은 동네에서 가끔 만나는 친구 같은 Javascript에 대해서 진중하게 공부를 해볼 계획이다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Daily</category>
      <category>2023년</category>
      <category>wakatime</category>
      <category>결산</category>
      <category>회고</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/297</guid>
      <comments>https://morenice.tistory.com/297#entry297comment</comments>
      <pubDate>Sat, 24 Feb 2024 22:47:37 +0900</pubDate>
    </item>
    <item>
      <title>Release의 모든 것</title>
      <link>https://morenice.tistory.com/296</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;k022936849_1.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b77lCi/btsCCxMXSgq/FkzMOkjxbGQBWaDat6PEl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b77lCi/btsCCxMXSgq/FkzMOkjxbGQBWaDat6PEl0/img.jpg&quot; data-alt=&quot;마이클 나이가드 지음, 박성철 옮김&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b77lCi/btsCCxMXSgq/FkzMOkjxbGQBWaDat6PEl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb77lCi%2FbtsCCxMXSgq%2FFkzMOkjxbGQBWaDat6PEl0%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;362&quot; height=&quot;528&quot; data-filename=&quot;k022936849_1.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마이클 나이가드 지음, 박성철 옮김&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 개발을 처음 시작하는 사람들은 요구사항에 대한 정교한 설계 보다는 어떤 기술을 사용해서 어떻게 구현할 것인지에 대해 고민을 하게 되는데 운용을 포함한 입체적인 관점보다는 구현 자체에만 의미를 두는 경우가 많다. 여기서 정교한 설계는 어떤 시스템과 통합될 것인지 그리고 사용하게될 사용자수는 어떻게 되는지, 안정성을 위해 테스트 시나리오는 무엇일지 그리고 마지막으로 이 모든것을 포함하여 구현해야할 기능들에 대해 일정내 가능할지등 고민하는 것을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 실제 제품이나 서비스 운용 경험이 있어야 설계에 여러가지 고려사항들을 포함시킬 수 있다는 점이다. thread safe하지 않는 API를 사용해서 간헐적으로 프로세스가 죽는다던가 또는 책에서도 나오는 예시로 try-catch-finally에서 finally 구문에 close에서 다시 예외가 raise 될 수 있는 것을 고려하지 못해 socket 파일을 닫지 못하는 상황이 발생할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Release의 모든 것&quot;, 이 책은 제품 및 서비스(대부분 서비스 이야기이지만...) Release 이후의 일어날 수 있는 문제점 요소들에 대해 나열하고 서사 방식의 예시를 통해 몰입을 더한다. 책 표지만 봐서는 Release를 어떻게 해야하는지에 대한 좀 따분한 느낌이 들긴 했지만 말이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자 마이클 나이가드는 미국 정보, 은행, 금융, 농업, 상거래등 시스템을 설계 구축하고 운용한 사람으로써, &lt;b&gt;이미 2007년에 1판 &quot;Release it ! 성공적인 출시를 위한 소프트웨어 설계와 배치&quot; 책을 다시 가다듬어서 2판으로 낸 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 573px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 553px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 553px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20231225_112948093.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b61j8Z/btsCy4ZcDed/ugRkHsyvbmuP416IVujyJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b61j8Z/btsCy4ZcDed/ugRkHsyvbmuP416IVujyJ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b61j8Z/btsCy4ZcDed/ugRkHsyvbmuP416IVujyJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb61j8Z%2FbtsCy4ZcDed%2FugRkHsyvbmuP416IVujyJ0%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;1080&quot; height=&quot;1440&quot; data-filename=&quot;KakaoTalk_20231225_112948093.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;i&gt;2장 사례연구 내용 중, 흥미 진진한 현장의 느낌...&lt;/i&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 553px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20231225_112948093_01.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPU5no/btsCAhDI4y9/RKXNR2HUHtEjbXLxtnYjk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPU5no/btsCAhDI4y9/RKXNR2HUHtEjbXLxtnYjk1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPU5no/btsCAhDI4y9/RKXNR2HUHtEjbXLxtnYjk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPU5no%2FbtsCAhDI4y9%2FRKXNR2HUHtEjbXLxtnYjk1%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;1080&quot; height=&quot;1440&quot; data-filename=&quot;KakaoTalk_20231225_112948093_01.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;span&gt;5&lt;i&gt;장 안정성 패턴 중 ...&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20231225_112948093_02.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u5tZh/btsCBKyPl6T/z3RMduxT0W96x7UL9wK3Jk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u5tZh/btsCBKyPl6T/z3RMduxT0W96x7UL9wK3Jk/img.jpg&quot; data-alt=&quot;GLSB DNS 설계 관련&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u5tZh/btsCBKyPl6T/z3RMduxT0W96x7UL9wK3Jk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu5tZh%2FbtsCBKyPl6T%2Fz3RMduxT0W96x7UL9wK3Jk%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;481&quot; height=&quot;641&quot; data-filename=&quot;KakaoTalk_20231225_112948093_02.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GLSB DNS 설계 관련&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;안정성 패턴&lt;/b&gt; 또는 &lt;b&gt;안티패턴&lt;/b&gt;으로 시작하여 &lt;b&gt;프로세스, 상호 연결&lt;/b&gt; 그리고 &lt;b&gt;OWASP 보안&lt;/b&gt;까지 넓은 분야의 주제들을 읽고 정리할 수 있게 도와준다. 서비스 운용에 꼭 필요한 그리고 문제가 발생했을 때 기민하게 대응을 도와줄 레퍼런스가 되어줄 것이다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[1부 안정성 구축]&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;1장&amp;nbsp;운영&amp;nbsp;환경의&amp;nbsp;현실&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_1.1&amp;nbsp;올바른&amp;nbsp;목표&amp;nbsp;설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_1.2&amp;nbsp;도전의&amp;nbsp;범위&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_1.3&amp;nbsp;여기도&amp;nbsp;백만&amp;nbsp;달러,&amp;nbsp;저기도&amp;nbsp;백만&amp;nbsp;달러&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_1.4&amp;nbsp;&amp;lsquo;포스&amp;rsquo;를&amp;nbsp;사용하라&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_1.5&amp;nbsp;실용주의&amp;nbsp;아키텍처&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;2장&amp;nbsp;사례&amp;nbsp;연구:&amp;nbsp;항공사를&amp;nbsp;멈추게&amp;nbsp;한&amp;nbsp;예외&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.1&amp;nbsp;변경&amp;nbsp;시간대&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.2&amp;nbsp;작동&amp;nbsp;중단&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.3&amp;nbsp;장애의&amp;nbsp;영향&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.4&amp;nbsp;사후&amp;nbsp;분석&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.5&amp;nbsp;단서&amp;nbsp;수색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.6&amp;nbsp;결정적&amp;nbsp;단서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_2.7&amp;nbsp;외양간&amp;nbsp;고치기?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;3장&amp;nbsp;시스템&amp;nbsp;안정화&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_3.1&amp;nbsp;안정성&amp;nbsp;정의&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_3.2&amp;nbsp;수명&amp;nbsp;연장&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_3.3&amp;nbsp;장애&amp;nbsp;모드&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_3.4&amp;nbsp;균열&amp;nbsp;확산&amp;nbsp;차단&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_3.5&amp;nbsp;장애&amp;nbsp;사슬&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_마치며&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;4장&amp;nbsp;안정성&amp;nbsp;안티&amp;nbsp;패턴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.1&amp;nbsp;통합&amp;nbsp;지점&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.2&amp;nbsp;연쇄&amp;nbsp;반응&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.3&amp;nbsp;연계&amp;nbsp;장애&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.4&amp;nbsp;사용자&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.5&amp;nbsp;블록된&amp;nbsp;스레드&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.6&amp;nbsp;자기&amp;nbsp;부정&amp;nbsp;공격&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.7&amp;nbsp;척도&amp;nbsp;효과&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.8&amp;nbsp;처리&amp;nbsp;능력&amp;nbsp;불균형&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.9&amp;nbsp;도그파일&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.10&amp;nbsp;지렛대&amp;nbsp;원리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.11&amp;nbsp;응답&amp;nbsp;지연&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_4.12&amp;nbsp;제한&amp;nbsp;없는&amp;nbsp;결과&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;5장&amp;nbsp;안정성&amp;nbsp;패턴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.1&amp;nbsp;시간&amp;nbsp;제한&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.2&amp;nbsp;회로&amp;nbsp;차단기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.3&amp;nbsp;격벽&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.4&amp;nbsp;정상&amp;nbsp;상태&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.5&amp;nbsp;빠른&amp;nbsp;실패&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.6&amp;nbsp;파손&amp;nbsp;방치&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.7&amp;nbsp;핸드셰이킹&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.8&amp;nbsp;테스트&amp;nbsp;하네스&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.9&amp;nbsp;결합&amp;nbsp;분리&amp;nbsp;미들웨어&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.10&amp;nbsp;부하&amp;nbsp;제한&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.11&amp;nbsp;배압&amp;nbsp;생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_5.12&amp;nbsp;조속기&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[2부&amp;nbsp;운영&amp;nbsp;고려&amp;nbsp;설계]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;6장&amp;nbsp;사례&amp;nbsp;연구:&amp;nbsp;램프&amp;nbsp;속&amp;nbsp;우주의&amp;nbsp;힘&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.1&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;크리스마스&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.2&amp;nbsp;맥박&amp;nbsp;확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.3&amp;nbsp;추수감사절&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.4&amp;nbsp;블랙&amp;nbsp;프라이데이&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.5&amp;nbsp;생명&amp;nbsp;징후&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.6&amp;nbsp;진단&amp;nbsp;테스트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.7&amp;nbsp;전문가&amp;nbsp;호출&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.8&amp;nbsp;처치&amp;nbsp;방안&amp;nbsp;비교&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.9&amp;nbsp;처치&amp;nbsp;결과&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;_6.10 휴식 시간&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7장 기반 &lt;br /&gt;_7.1&amp;nbsp;데이터&amp;nbsp;센터와&amp;nbsp;클라우드의&amp;nbsp;네트워크 &lt;br /&gt;_7.2&amp;nbsp;물리&amp;nbsp;호스트,&amp;nbsp;가상&amp;nbsp;머신,&amp;nbsp;컨테이너 &lt;br /&gt;&lt;br /&gt;8장&amp;nbsp;프로세스 &lt;br /&gt;_8.1&amp;nbsp;코드 &lt;br /&gt;_8.2&amp;nbsp;구성 &lt;br /&gt;_8.3&amp;nbsp;투명성 &lt;br /&gt;&lt;br /&gt;9장&amp;nbsp;상호&amp;nbsp;연결 &lt;br /&gt;_9.1&amp;nbsp;규모에&amp;nbsp;맞는&amp;nbsp;해법 &lt;br /&gt;_9.2&amp;nbsp;DNS &lt;br /&gt;_9.3&amp;nbsp;부하&amp;nbsp;분산 &lt;br /&gt;_9.4&amp;nbsp;수요&amp;nbsp;제어 &lt;br /&gt;&lt;br /&gt;10장&amp;nbsp;제어&amp;nbsp;평면 &lt;br /&gt;_10.1&amp;nbsp;적합도&amp;nbsp;평가 &lt;br /&gt;_10.2&amp;nbsp;기계적&amp;nbsp;확대율 &lt;br /&gt;_10.3&amp;nbsp;플랫폼과&amp;nbsp;생태계 &lt;br /&gt;_10.4&amp;nbsp;운영&amp;nbsp;수준&amp;nbsp;개발&amp;nbsp;환경 &lt;br /&gt;_10.5&amp;nbsp;시스템&amp;nbsp;전반의&amp;nbsp;투명성 &lt;br /&gt;_10.6&amp;nbsp;구성&amp;nbsp;서비스 &lt;br /&gt;_10.7&amp;nbsp;프로비저닝과&amp;nbsp;배치&amp;nbsp;서비스 &lt;br /&gt;_10.8&amp;nbsp;명령과&amp;nbsp;제어 &lt;br /&gt;_10.9&amp;nbsp;플랫폼&amp;nbsp;제품 &lt;br /&gt;_10.10&amp;nbsp;점검&amp;nbsp;목록 &lt;br /&gt;&lt;br /&gt;11장&amp;nbsp;보안 &lt;br /&gt;_11.1&amp;nbsp;OWASP&amp;nbsp;상위&amp;nbsp;10개 &lt;br /&gt;_11.2&amp;nbsp;최소&amp;nbsp;권한의&amp;nbsp;원칙 &lt;br /&gt;_11.3&amp;nbsp;비밀번호&amp;nbsp;관리 &lt;br /&gt;_11.4&amp;nbsp;상시&amp;nbsp;업무&amp;nbsp;절차로서의&amp;nbsp;보안 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;[3부&amp;nbsp;시스템&amp;nbsp;전달] &lt;/b&gt;&lt;br /&gt;12장&amp;nbsp;사례&amp;nbsp;연구:&amp;nbsp;고도를&amp;nbsp;기다리며 &lt;br /&gt;13장&amp;nbsp;배치&amp;nbsp;고려&amp;nbsp;설계 &lt;br /&gt;_13.1&amp;nbsp;반려&amp;nbsp;동물과&amp;nbsp;가축 &lt;br /&gt;_13.2&amp;nbsp;시스템&amp;nbsp;점검&amp;nbsp;시간이라는&amp;nbsp;오류 &lt;br /&gt;_13.3&amp;nbsp;자동&amp;nbsp;배치 &lt;br /&gt;_13.4&amp;nbsp;지속적&amp;nbsp;배치 &lt;br /&gt;_13.5&amp;nbsp;배치의&amp;nbsp;여러&amp;nbsp;단계 &lt;br /&gt;_13.6&amp;nbsp;전문가의&amp;nbsp;배치 &lt;br /&gt;&lt;br /&gt;14장&amp;nbsp;버전&amp;nbsp;관리 &lt;br /&gt;_14.1&amp;nbsp;다른&amp;nbsp;서비스를&amp;nbsp;고려한&amp;nbsp;버전&amp;nbsp;관리 &lt;br /&gt;_14.2&amp;nbsp;다른&amp;nbsp;서비스의&amp;nbsp;버전&amp;nbsp;관리 &lt;br /&gt;_마치며 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;[4부 체계적 문제 해결]&lt;/b&gt;&lt;br /&gt;15장&amp;nbsp;사례&amp;nbsp;연구:&amp;nbsp;고객에게&amp;nbsp;짓밟히다 &lt;br /&gt;_15.1&amp;nbsp;최종&amp;nbsp;점검과&amp;nbsp;출시 &lt;br /&gt;_15.2&amp;nbsp;QA&amp;nbsp;지향 &lt;br /&gt;_15.3&amp;nbsp;부하&amp;nbsp;테스트 &lt;br /&gt;_15.4&amp;nbsp;대중에&amp;nbsp;의한&amp;nbsp;살인 &lt;br /&gt;_15.5&amp;nbsp;테스트&amp;nbsp;간극 &lt;br /&gt;_15.6&amp;nbsp;후유증 &lt;br /&gt;&lt;br /&gt;16장&amp;nbsp;적응 &lt;br /&gt;_16.1&amp;nbsp;볼록&amp;nbsp;곡선&amp;nbsp;수익률 &lt;br /&gt;_16.2&amp;nbsp;절차와&amp;nbsp;조직 &lt;br /&gt;_16.3&amp;nbsp;시스템&amp;nbsp;아키텍처 &lt;br /&gt;_16.4&amp;nbsp;정보&amp;nbsp;아키텍처 &lt;br /&gt;&lt;br /&gt;17장&amp;nbsp;카오스&amp;nbsp;공학 &lt;br /&gt;_17.1&amp;nbsp;개선을&amp;nbsp;위한&amp;nbsp;파괴 &lt;br /&gt;_17.2&amp;nbsp;카오스&amp;nbsp;공학의&amp;nbsp;선구자 &lt;br /&gt;_17.3&amp;nbsp;유인원&amp;nbsp;부대 &lt;br /&gt;_17.4&amp;nbsp;나만의&amp;nbsp;원숭이&amp;nbsp;입양 &lt;br /&gt;_17.5 재해 시뮬레이션&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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 style=&quot;color: #333333; text-align: start;&quot;&gt;이 책의 큰 장점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;물론 단점 또한 존재하는데 많은 주제를 이야기하다보니 최소 CS(Computer Science) 지식과 서비스 개발 및 출시 경험이 조금이라도 있어야 몰입할 수 있다는 점이다. TCP/IP가 무엇인지 3 hand shaking 과정은 어떻게 되고 TIME_WAIT을 줄일 수 있는 설정은 어떻게 하는지등 자세한 내용은 서술하지 않는다. 당장 구현해야할 기능들을 해결하기 급급하다면 책의 절반 이상은 공감하기 힘들고 다른 세상 이야기로만 느껴질 수 있다. 그럼에도 불구하고 옆에 두고 패턴 부분이나 실제 사례 내용들을 차근차근 읽어보면 1~2년 뒤 개인의 성장과 담당 서비스가 성숙하는데 충분히 도움이 될 것이라 생각한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;한빛미디어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;나는&lt;span&gt;&amp;nbsp;&lt;/span&gt;리뷰어다&amp;gt; 활동을&lt;span&gt;&amp;nbsp;&lt;/span&gt;위해서 책을 제공받아 작성된 서평입니다.&quot;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>it</category>
      <category>RELEASE</category>
      <category>Release의 모든것</category>
      <category>마이클 나이가드</category>
      <category>소프트웨어개발</category>
      <category>시니어 개발자</category>
      <category>시스템 운영</category>
      <category>한빛미디어</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/296</guid>
      <comments>https://morenice.tistory.com/296#entry296comment</comments>
      <pubDate>Mon, 25 Dec 2023 12:00:20 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 크래시 코스</title>
      <link>https://morenice.tistory.com/295</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFdVOM/btssaSIPKKV/a3B9zjEDFE8EcQD4dsPSj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFdVOM/btssaSIPKKV/a3B9zjEDFE8EcQD4dsPSj1/img.jpg&quot; data-alt=&quot;출처:&amp;amp;nbsp;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=321468224&amp;amp;amp;start=slayer&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFdVOM/btssaSIPKKV/a3B9zjEDFE8EcQD4dsPSj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFdVOM%2FbtssaSIPKKV%2Fa3B9zjEDFE8EcQD4dsPSj1%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;500&quot; height=&quot;642&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;nbsp;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=321468224&amp;amp;start=slayer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 Python이란 개발언어를 활용하게 된지는 꽤 오래되었다. 데이터베이스와 같은 라이브러리 종속적인 스크립트를 만들거나 CLI을 만드는 것으로 시작하여 웹 서비스 개발까지 경험하게 되었는데 현재의 Python의 위상은 그 이상으로 대단하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python은 윈도우, 리눅스, 맥과 같이 다양한 OS를 지원하고 쉬운 설치를 할 수 있다.&lt;/li&gt;
&lt;li&gt;매우 쉬운 문법을 제공함으로써 아주 적은 코드로 개발을 할 수 있는데 프로그래밍을 시작하는 이들에게 공부를 시작하는 첫 관문이 되기도 하고 데이터분석을 위한 시작이 되기도 한다.&lt;/li&gt;
&lt;li&gt;대표적인 해외 웹 서비스로써 인스타그램이 있다. 과거 인스타그램은 Python을 활용하여 전세계 서비스를 운용하였을 정도이다. 최근에도 적극 활용하고 있는지는 별도 확인해보지 않았다&lt;/li&gt;
&lt;li&gt;데이터 시각화 또는 데이터 분석에 주로 활용되며 ML까지도 활용되고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 프로그래밍에 충분한 경험이 있는 사람들은 Python 레퍼런스 문서만 읽어도 시작이 가능하지만, 개발을 처음 시작하는 사람에게는 좀 더 친절하고 숙련된 가이드가 필요하다. 이 책은 Python을 시작하는 사람에게 중요한 입문서 역할을 하는 책이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5478.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNYmp5/btssbBmzWeB/vmcuqlrGk8iaGdOSsAtQu1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNYmp5/btssbBmzWeB/vmcuqlrGk8iaGdOSsAtQu1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNYmp5/btssbBmzWeB/vmcuqlrGk8iaGdOSsAtQu1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNYmp5%2FbtssbBmzWeB%2FvmcuqlrGk8iaGdOSsAtQu1%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;640&quot; height=&quot;469&quot; data-filename=&quot;thumbnail_IMG_5478.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책은 기본편과 실습편으로 분할되어 있고 기본편에서는 Python 언어 설치부터 문법에 대한 설명과 다양한 연습문제들이 제공된다. 실습편은 앞서 기본편에서 학습한 문법들에 대해 좀 더 실용적인 실습을 할 수 있도록 &lt;b&gt;재미있는 프로젝트 기반의 실습을 제공함으로써 학습자의 몰입을 돕고 좀 더 능숙하게 언어를 다룰 수 있도록 한다.&amp;nbsp;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자 에릭 마테스는 기술서적 저자이면서 개발자이다. 2000년쯤 Java를 사용하여 개발을 했지만 현재는 Python을 주로 활용하고 있고 비영리재단에서 활동하거나 여러 오픈 소스 프로젝트에 참여하고 있다. 만약 저자의 다양한 생각을 엿보고 싶다면 &lt;a href=&quot;https://www.blog.pythonlibrary.org/2019/08/05/pydev-of-the-week-eric-matthes/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이 인터뷰 내용을&lt;/a&gt;&amp;nbsp;읽어보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5479.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MEiID/btsscFChn6I/HKO2Zdi76l9cSUiH3XGsUK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MEiID/btsscFChn6I/HKO2Zdi76l9cSUiH3XGsUK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MEiID/btsscFChn6I/HKO2Zdi76l9cSUiH3XGsUK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMEiID%2FbtsscFChn6I%2FHKO2Zdi76l9cSUiH3XGsUK%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5479.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본편 제일 마지막에 코드 테스트 부분을 제공하고 있는데 사실 소프트웨어 개발에 있어 테스트 코드는 매우 중요하기 때문에 아무리 입문서라도 이런한 부분들을 언급하고 담백하게 내용을 담고 있는 점은 장점이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5480.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crzKiG/btssfvMUA5A/nU4UFjXddKHe1WvIT4Zli1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crzKiG/btssfvMUA5A/nU4UFjXddKHe1WvIT4Zli1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crzKiG/btssfvMUA5A/nU4UFjXddKHe1WvIT4Zli1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrzKiG%2FbtssfvMUA5A%2FnU4UFjXddKHe1WvIT4Zli1%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5480.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5481.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q5Pjj/btssk3g1T32/kZyaeAfXY3pP0DzNpg62O0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q5Pjj/btssk3g1T32/kZyaeAfXY3pP0DzNpg62O0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q5Pjj/btssk3g1T32/kZyaeAfXY3pP0DzNpg62O0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq5Pjj%2Fbtssk3g1T32%2FkZyaeAfXY3pP0DzNpg62O0%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;480&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5481.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5482.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDOtKd/btssgHZ7Y5T/GBUGNGTNRtD9hRqVVQifok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDOtKd/btssgHZ7Y5T/GBUGNGTNRtD9hRqVVQifok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDOtKd/btssgHZ7Y5T/GBUGNGTNRtD9hRqVVQifok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDOtKd%2FbtssgHZ7Y5T%2FGBUGNGTNRtD9hRqVVQifok%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5482.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5483.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UW7yR/btssdabco3T/F3NUbkQuAQXPNNPpDybmM1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UW7yR/btssdabco3T/F3NUbkQuAQXPNNPpDybmM1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UW7yR/btssdabco3T/F3NUbkQuAQXPNNPpDybmM1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUW7yR%2Fbtssdabco3T%2FF3NUbkQuAQXPNNPpDybmM1%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5483.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5485.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmJRY/btssk0EBecW/art5bBUx0YOD9C0z9mVvWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmJRY/btssk0EBecW/art5bBUx0YOD9C0z9mVvWk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmJRY/btssk0EBecW/art5bBUx0YOD9C0z9mVvWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmJRY%2Fbtssk0EBecW%2Fart5bBUx0YOD9C0z9mVvWk%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5485.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumbnail_IMG_5484.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bf4vV/btssfS8WvR1/QF1QoYzyKzk4QUm1wDr9Pk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bf4vV/btssfS8WvR1/QF1QoYzyKzk4QUm1wDr9Pk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bf4vV/btssfS8WvR1/QF1QoYzyKzk4QUm1wDr9Pk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBf4vV%2FbtssfS8WvR1%2FQF1QoYzyKzk4QUm1wDr9Pk%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;481&quot; height=&quot;640&quot; data-filename=&quot;thumbnail_IMG_5484.jpg&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습편은 3가지 프로젝트를 제공하는데 첫번째는 pygame을 통해 과거의 오락실에서 한번 해봤을 만한(또는 추억의 갤러그 같은) 슈팅 게임을 만들어보는 것이고 그 다음은 데이터를 기반으로하는 다양한 시각화, 마지막으로 Django 기반 웹서비스 개발이다. 이렇듯 단순 실습이 아니라 프로젝트 기반이고 충분히 사용자가 개발을 하면서 재미를 느낄 수 있도록 게임을 도입했다는 것이 인상적이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 책 서문에서도 꽤 친절한 가이드가 있는데 입문자의 난이도를 고려하여 실습 중 Django 부분은 제일 마지막에 하라고 나와있다. 실제로 Django 프레임워크는 2005년즘 첫 릴리즈를 시작했으니 올해를 기준으로 약 18년이나 된 굉장히 성숙한 프레임워크이고 Production을 위한 많은 기능들을 제공한다. 개인적으로 소규모의 프로젝트를 진행하게 될 때 특별한 이유가 없다면 바로 선택하여 활용하기도 하고 국내 스타트업에서도 활용하고 있어 학습을 해야할 이유가 충분한 프레임워크이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇보다 개발을 시작하고 실력이 늘어가는 과정을 경험하려면 실용적인 과정이 반드시 필요하다고 생각한다. 이 책은 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;기본 문법 뿐만 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;실용적인 관점에서 주요 프로젝트 실습까지 제공함으로써 입문자가 빠르게 성장하는 기반을 마련해줄 수 있는 입문서라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;한빛미디어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;나는&lt;span&gt;&amp;nbsp;&lt;/span&gt;리뷰어다&amp;gt; 활동을&lt;span&gt;&amp;nbsp;&lt;/span&gt;위해서 책을 제공받아 작성된 서평입니다.&quot;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>Python</category>
      <category>입문서</category>
      <category>파이썬 크래시 코스</category>
      <category>한빛미디어</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/295</guid>
      <comments>https://morenice.tistory.com/295#entry295comment</comments>
      <pubDate>Sat, 26 Aug 2023 22:22:39 +0900</pubDate>
    </item>
    <item>
      <title>소프트웨어 아키텍처 the hard parts</title>
      <link>https://morenice.tistory.com/294</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0eCoA/btr7ebhrblL/aNRA8nHUnekSL9cSyIkd9k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0eCoA/btr7ebhrblL/aNRA8nHUnekSL9cSyIkd9k/img.jpg&quot; data-alt=&quot;출처:&amp;amp;nbsp;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=302311495&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0eCoA/btr7ebhrblL/aNRA8nHUnekSL9cSyIkd9k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0eCoA%2Fbtr7ebhrblL%2FaNRA8nHUnekSL9cSyIkd9k%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;500&quot; height=&quot;643&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;nbsp;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=302311495&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 아키텍처 the hard parts는 2021년도에 출판된 &lt;a title=&quot;소프트웨어 아키텍처 101&quot; href=&quot;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=281760928&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;소프트웨어 아키텍처 101&lt;/a&gt; 책의 후속 편이다. 저자 닐포드, 마크 리처즈의 책으로써 이번 hard parts에서는 프라모드 세달라지, 세약 데그하니가 저자로 추가되어 총 4명의 저자가 쓴 현대적인 소프트웨어 아키텍처의 advanced 기술 서적이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;모든 문제가 하나하나 새로운 도전을 요하기에 어떻게든 문제를 해결하려는 중대한 의사 결정의 양편에 치우친 수많은 트레이드오프를 냉정하게 판단하고 평가할 때 아키텍트의 진가가 드러납니다.&lt;br /&gt;&lt;br /&gt;소프트웨어 아키텍처에서는 최고의 설계를 고집하지 마세요. 그 대신 나쁜 것 중에서 제일 나은(least worst) 트레이드 오프 조합을 찾으세요.&lt;br /&gt;26p&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책 시작부에 나오는 이야기로써, 사실 시스템 또는 서비스 아키텍처란 작은 범위의 문제를 해결하는 알고리즘 수준이 아닌 좀 더 큰 범위의 문제 또는 도메인을 다뤄야 하기 때문에 모든 문제를 같은 해법으로 해결할 수 없는 경우가 대부분이다. 전반적으로 트레이드오프를 어떻게 분석하고 활용하는지를 서술해 나간다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2714.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zPCj1/btr7hwdda81/w1su76OvekWEGZHr3ucUZk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zPCj1/btr7hwdda81/w1su76OvekWEGZHr3ucUZk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zPCj1/btr7hwdda81/w1su76OvekWEGZHr3ucUZk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzPCj1%2Fbtr7hwdda81%2Fw1su76OvekWEGZHr3ucUZk%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;435&quot; height=&quot;580&quot; data-filename=&quot;IMG_2714.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2719.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tR2Hg/btr7iMtj1tQ/6JlYc8qLE73RxQmkmWA0LK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tR2Hg/btr7iMtj1tQ/6JlYc8qLE73RxQmkmWA0LK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tR2Hg/btr7iMtj1tQ/6JlYc8qLE73RxQmkmWA0LK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtR2Hg%2Fbtr7iMtj1tQ%2F6JlYc8qLE73RxQmkmWA0LK%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2719.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Part1 따로 떼어놓기&lt;/li&gt;
&lt;li&gt;Part2 다시 합치기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 모놀리식 애플리케이션을 어떻게 분할하여 확장해나 가는지에 대한 Part1 그리고 운영하는 데 있어 분할이 끝이 아니라 적절한 크기의 서비스를 만들어가기 위한 다시 합치는 과정 그리고 마이크로서비스에서 피할 수 없는 분산 트랜잭션에 대한 이야기로 가득하다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2718.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4RNBy/btr7fsimbAe/tKFlwBtzgwCEKke7sIJgxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4RNBy/btr7fsimbAe/tKFlwBtzgwCEKke7sIJgxK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4RNBy/btr7fsimbAe/tKFlwBtzgwCEKke7sIJgxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4RNBy%2Fbtr7fsimbAe%2FtKFlwBtzgwCEKke7sIJgxK%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2718.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2720.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/upD5V/btr7ebuWden/oYESNz6ITKmeZtzel2KGG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/upD5V/btr7ebuWden/oYESNz6ITKmeZtzel2KGG0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/upD5V/btr7ebuWden/oYESNz6ITKmeZtzel2KGG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FupD5V%2Fbtr7ebuWden%2FoYESNz6ITKmeZtzel2KGG0%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;480&quot; height=&quot;640&quot; data-filename=&quot;IMG_2720.jpg&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;초기 스타트업에서 살아남아 조직이 확대되고 마이크로서비스를 준비하고 있는 개발조직에서 읽으면 꽤 유용할 것이라고 생각한다. 참고로 도메인 주도 설계에 대해서 미리 학습하고 본다면 이해하는데 더욱 도움이 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;한빛미디어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;나는&lt;span&gt;&amp;nbsp;&lt;/span&gt;리뷰어다&amp;gt; 활동을&lt;span&gt;&amp;nbsp;&lt;/span&gt;위해서 책을 제공받아 작성된 서평입니다.&quot;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>hard parts</category>
      <category>마이크로서비스</category>
      <category>분산 아키텍처</category>
      <category>소프트웨어 아키텍처</category>
      <category>아키텍처</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/294</guid>
      <comments>https://morenice.tistory.com/294#entry294comment</comments>
      <pubDate>Sat, 1 Apr 2023 00:44:59 +0900</pubDate>
    </item>
    <item>
      <title>State of Spring 2022</title>
      <link>https://morenice.tistory.com/293</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;얼마 전&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;youtube를 보면서 시간을 보내다가 토비님의 영상을 보게 되었다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=W9KyG2iGJV4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/noRF0/hyRQpGksgN/mUdhVQPrT6KzPakVGtipD1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=1076_628_1144_704&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/W9KyG2iGJV4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;State of Spring 2022 내용에 대해 리뷰하는 내용이었는데, 꽤 재미있게 보기도 하였고 Spring 생태계에 대해서 이해할 수 있는 참고 자료이기도 하여 간략하게 리뷰를 해보려고 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;State of series&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 State of Spring은 VMware 회사에서 설문조사를 진행하고 정리한 통계 발표 자료이다. 사실 VMware의 자료는 처음 접한 상태였는데 구글링을 해보니 State of Kubernetes, State of observability등 다양한 시리즈가 있었다. 이 글의 첨부된 이미지들은 모두 State of Spring 2022 pdf에 포함된 내용들이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bONiO6/btr2hJBDdKP/65VmtrRIseKMAajvALOyvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bONiO6/btr2hJBDdKP/65VmtrRIseKMAajvALOyvK/img.png&quot; data-alt=&quot;Demographics&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bONiO6/btr2hJBDdKP/65VmtrRIseKMAajvALOyvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbONiO6%2Fbtr2hJBDdKP%2F65VmtrRIseKMAajvALOyvK%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;626&quot; height=&quot;651&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Demographics&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설문조사의 49%가 유럽 그리고 26%가 미국이다. 인도, 아시아, 호주등 다양한 국적이 포함되어 있지만 상당히 많은 부분 미국과 유럽 사람들의 설문 결과가 포함되어 있다는 것을 감안해야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(사용하는 사람들에게는) Spring은 여전히 강력한 도구이다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgPAuX/btr2gj31DNd/OInVc8ivtSnsjg0XKYnlfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgPAuX/btr2gj31DNd/OInVc8ivtSnsjg0XKYnlfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgPAuX/btr2gj31DNd/OInVc8ivtSnsjg0XKYnlfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgPAuX%2Fbtr2gj31DNd%2FOInVc8ivtSnsjg0XKYnlfk%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;580&quot; height=&quot;357&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Almost half of stakeholders (47%) reported that they will be using more Spring modules in the coming years, an increase of 8 points. For 2022, the top three Spring Projects remain Spring Security, Spring Data, and Spring WebMVC&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마이크로서비스를 위한 프레임워크&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/75bzS/btr1UuUf6i8/9klkouyvc50wPYjoFs5xk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/75bzS/btr1UuUf6i8/9klkouyvc50wPYjoFs5xk1/img.png&quot; data-alt=&quot;The shift to modern architectural styles continues&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/75bzS/btr1UuUf6i8/9klkouyvc50wPYjoFs5xk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F75bzS%2Fbtr1UuUf6i8%2F9klkouyvc50wPYjoFs5xk1%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;614&quot; height=&quot;521&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;The shift to modern architectural styles continues&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어두운 녹색이 2021년 그리고 밝은 녹색 2022년을 의미한다. 작년 대비 크게 변화는 없지만 &lt;b&gt;마이크로서비스에 90% 이상&lt;/b&gt; 활용하고 있다. 한편 Serverless의 경우에는 약 5%정도 늘어나게 되었는데 Spring Boot 3 활용을 통해 &lt;span&gt;내년에는&lt;span&gt;&amp;nbsp;비율이&amp;nbsp;&lt;/span&gt;&lt;/span&gt;더 많이 늘어날 것이란 생각이 들었다. 이유는 Spring Native 때문인데 Serverless와 매우 밀접한 관계가 있기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;API&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btCCfi/btr16kJhUfi/bd7UffZ85BgdbWVxxR6WT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btCCfi/btr16kJhUfi/bd7UffZ85BgdbWVxxR6WT1/img.png&quot; data-alt=&quot;OpenAPI and GraphQL are gaining ground&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btCCfi/btr16kJhUfi/bd7UffZ85BgdbWVxxR6WT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtCCfi%2Fbtr16kJhUfi%2Fbd7UffZ85BgdbWVxxR6WT1%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;615&quot; height=&quot;623&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OpenAPI and GraphQL are gaining ground&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Spring Native&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCZAVu/btr1XyPdMEG/BY2BKZI4h65XDL82B35hIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCZAVu/btr1XyPdMEG/BY2BKZI4h65XDL82B35hIK/img.png&quot; data-alt=&quot;Adoption of Spring Native&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCZAVu/btr1XyPdMEG/BY2BKZI4h65XDL82B35hIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCZAVu%2Fbtr1XyPdMEG%2FBY2BKZI4h65XDL82B35hIK%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;630&quot; height=&quot;500&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Adoption of Spring Native&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot3부터 GraalVM을 사용한 Spring Native를 정식 지원한다. Java는 인터프리터 언어라서 실행 환경에서 VM(Virtual Machine을 통해 바이트 코드를 기계어로 번역하고 실행하는 흐름을 갖는다. VM에서는 번역 과정에서 기계어를 cache하는 JIT 컴파일러를 운용한다. 그러다보니 시작 단계에서는 여러모로 실행이 느릴 수 밖에 없는데 Serverless 환경에서 다소 치명적이다. Spring Native는 이러한 단점을 해소하기 위해 아예 실행 가능한 바이너리(최적화된)까지 만들어버린다. 이 방식이 코드 최적화까지 최선인가는 고민을 해봐야겠지만 실행 시간 단축에는 충분히 도움이 될 것으로 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사람들이 압도적으로 Spring native에 대해서 관심이 있었고 2년이내 배포할 계획이 있다고 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Project loom&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccmGz2/btr1UUdPJam/XhLtsnP9vd0zSDzyPl4U60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccmGz2/btr1UUdPJam/XhLtsnP9vd0zSDzyPl4U60/img.png&quot; data-alt=&quot;Excitement building for Project Loom&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccmGz2/btr1UUdPJam/XhLtsnP9vd0zSDzyPl4U60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccmGz2%2Fbtr1UUdPJam%2FXhLtsnP9vd0zSDzyPl4U60%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;621&quot; height=&quot;615&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Excitement building for Project Loom&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;많은 사람들은 Virtual thread 도입에 긍정적으로 바라보고 있다.&amp;nbsp; 또한&amp;nbsp;&lt;/span&gt;Spring에서도 Virtual thread에 대해 발빠르게 도입하려는 움직임이 있지만 아직 충분하지 않다는 의견이다. 현재로써는 대량의 I/O를 처리하기 위해서는 함수형 프로그래밍에 대한 기본 이해가 필요한 Webflux를 활용해야 하는데(물론 다른 대안도 있지만) 향후 Virtual thread가 안정적으로 확대되고 기술이 성숙해진다면 기존 코드 스타일(blocking I/o)을 유지하면서도 대량의 I/O를 처리할 수 있는 날이 다가올 것으로 생각된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reference&lt;/h3&gt;
&lt;figure id=&quot;og_1678028329416&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;State of Spring 2022&quot; data-og-description=&quot;Download the State of Spring 2022 report to learn what matters most to the Spring community and to get a peek at how Spring continues to evolve.&quot; data-og-host=&quot;tanzu.vmware.com&quot; data-og-source-url=&quot;https://tanzu.vmware.com/content/ebooks/the-state-of-spring-2022&quot; data-og-url=&quot;https://tanzu.vmware.com/content/ebooks/the-state-of-spring-2022&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cMNTRY/hyRQt9NsXC/ngFMMp9ih2E127CRymHFr1/img.jpg?width=320&amp;amp;height=226&amp;amp;face=0_0_320_226,https://scrap.kakaocdn.net/dn/bbsCQV/hyRQiAuao3/0T3lNM4RRIBN8QuOjXKz4k/img.jpg?width=320&amp;amp;height=226&amp;amp;face=0_0_320_226,https://scrap.kakaocdn.net/dn/eOCOsS/hyRQpzzh2H/aZq8wdO6X0Ce7Tx4zb5v4K/img.jpg?width=500&amp;amp;height=272&amp;amp;face=378_108_422_152&quot;&gt;&lt;a href=&quot;https://tanzu.vmware.com/content/ebooks/the-state-of-spring-2022&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tanzu.vmware.com/content/ebooks/the-state-of-spring-2022&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cMNTRY/hyRQt9NsXC/ngFMMp9ih2E127CRymHFr1/img.jpg?width=320&amp;amp;height=226&amp;amp;face=0_0_320_226,https://scrap.kakaocdn.net/dn/bbsCQV/hyRQiAuao3/0T3lNM4RRIBN8QuOjXKz4k/img.jpg?width=320&amp;amp;height=226&amp;amp;face=0_0_320_226,https://scrap.kakaocdn.net/dn/eOCOsS/hyRQpzzh2H/aZq8wdO6X0Ce7Tx4zb5v4K/img.jpg?width=500&amp;amp;height=272&amp;amp;face=378_108_422_152');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;State of Spring 2022&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download the State of Spring 2022 report to learn what matters most to the Spring community and to get a peek at how Spring continues to evolve.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tanzu.vmware.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>IT/Java Stack</category>
      <category>java</category>
      <category>Microservice</category>
      <category>project loom</category>
      <category>spring native</category>
      <category>State of Spring 2022</category>
      <category>virtual thread</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/293</guid>
      <comments>https://morenice.tistory.com/293#entry293comment</comments>
      <pubDate>Mon, 6 Mar 2023 00:10:33 +0900</pubDate>
    </item>
    <item>
      <title>소스코드 주석(comment)에 대한 짧은 글</title>
      <link>https://morenice.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;위키피디아에 의하면 주석이란 소스 코드를 더 쉽게 이해할 수 있게 만드는 것이 목적인 메모를 말한다.&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;_xKAEZOX_NdTs-AaglJzoDQ_49&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;kp-wp-tab-cont-overview&quot; data-hveid=&quot;CEYQAw&quot; data-ved=&quot;2ahUKEwjl8ZDx-cT9AhVUNt4KHSAKB90QydoBKAB6BAhGEAM&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;kp-wp-tab-overview&quot; data-hveid=&quot;CEcQAA&quot; data-ved=&quot;2ahUKEwjl8ZDx-cT9AhVUNt4KHSAKB90Qkt4BKAB6BAhHEAA&quot;&gt;
&lt;div data-hveid=&quot;CE0QAA&quot; data-ved=&quot;2ahUKEwjl8ZDx-cT9AhVUNt4KHSAKB90Q04gCKAB6BAhNEAA&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-hveid=&quot;CEwQAA&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-md=&quot;50&quot; data-hveid=&quot;CEoQAA&quot; data-ved=&quot;2ahUKEwjl8ZDx-cT9AhVUNt4KHSAKB90QkCl6BAhKEAA&quot;&gt;
&lt;div data-attrid=&quot;description&quot; data-hveid=&quot;CEoQAQ&quot; data-ved=&quot;2ahUKEwjl8ZDx-cT9AhVUNt4KHSAKB90QziAoAHoECEoQAQ&quot;&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;주석 또는 코멘트는 프로그래밍에 있어 내용을 메모하는 목적으로 쓰인다. 소스 코드를 더 쉽게 이해할 수 있게 만드는 것이 주 목적이며, 협업할 때 유용히 쓰인다. 컴파일러와 인터프리터에 의해 일반적으로 무시되어 프로그램에 영향을 주지 않는다.&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%A3%BC%EC%84%9D_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&quot; data-ved=&quot;2ahUKEwjl8ZDx-cT9AhVUNt4KHSAKB90QmhN6BAhKEAI&quot;&gt;위키백과&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;하지만 주석 때문에 소스코드를 더 이해하기 어려울 수 있다. 예를 들어,&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. 코드의 의도가 명백하여 오히려 주석이 중복 내용에 가깝다.&lt;/b&gt; &quot;XX를 출력합니다, XX를 가져옵니다. XX를 처리하고 응답합니다.&quot;등이 있다.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. 주석이 관리가 되지 않아 소스코드의 내용과 전혀 다른 설명을 하게 된 경우이다.&amp;nbsp;&lt;/b&gt; 너무나도 슬픈 사실인데 소스코드를 수정하는 사람이 주석은 고치지 않은 것이다. 주석 내용이 함정이 될수 있으니 오히려 이 상황을 직면한 개발자에게 위협적일 수 있다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. 코드의 동작을 설명하기 보다는 자신이 왜 이렇게 작성했는지 당위성이 적혀있다.&lt;/b&gt; 예를 들어 &quot;클린코드를 위해 A 오픈소스를 활용하여 전역 관리를 하여 어쩌구저쩌구... 그래서 이렇게 구현되어 있다&quot;가 함께 적혀있다고 생각해보자. 그나마 허용가능한 수준은 README 파일에 기술하는 것이고 아예 없는편이 좋다고 생각한다. 때때로 &quot;성능상의 이유로 XXX를 어쩌구저쩌구&quot;등과 같이 협업 개발자가 오해하지 않게끔 가이드를 주는 주석들은 꽤 괜찮은 방향이라 생각한다.&lt;/div&gt;
&lt;div&gt;번외편으로 아주 간혹 주석에 날짜와 자신의 계정 이름을 적는 경우를 만날 때가 있다. 버전 관리가 없는 세상에서는 도움이 되었을 수 있으나, git이란 버전 관리도구가 보편적이고 흔하게 사용되는 세상이다. 소스코드를 수정한 사용자와 날짜가 모든 커밋 로그에 기록이 되기 때문에 이제는 주석에 더 이상 기록하지 않아도 된다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;반대로 도움이 될만한 내용을 몇 가지 적으면, 수학 수식이 들어간 로직이나 최적화를 위해 가독성이 떨어진 경우 그리고 TODO, FIXME, 마지막으로 주의사항등이다.&lt;/div&gt;
&lt;div&gt;마지막으로 주석은 협업을 위해서도 중요하지만 본인을 위해서도 유용하다. 내가 작성했다고 해서 모든 코드가 기억이 나고 빠르게 이해할 수 있는 것은 아니기 때문이다.&lt;/div&gt;</description>
      <category>Think</category>
      <category>comment</category>
      <category>소스코드</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/196</guid>
      <comments>https://morenice.tistory.com/196#entry196comment</comments>
      <pubDate>Sun, 5 Mar 2023 23:22:28 +0900</pubDate>
    </item>
    <item>
      <title>마이크로서비스 아키텍처 구축 가이드</title>
      <link>https://morenice.tistory.com/292</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUIKLY/btr0RP4cAIC/1enyVkhIKMpf5uuqtCwgm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUIKLY/btr0RP4cAIC/1enyVkhIKMpf5uuqtCwgm0/img.jpg&quot; data-alt=&quot;김용욱 지음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUIKLY/btr0RP4cAIC/1enyVkhIKMpf5uuqtCwgm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUIKLY%2Fbtr0RP4cAIC%2F1enyVkhIKMpf5uuqtCwgm0%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;500&quot; height=&quot;643&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;김용욱 지음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마이크로서비스란?&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마이크로서비스는 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식입니다. 이러한 서비스는 독립적인 소규모 팀에서 보유합니다. 마이크로서비스 아키텍처는 애플리케이션의 확장을 용이하게 하고 개발 속도를 앞당겨 혁신을 실현하고 새로운 기능의 출시 시간을 단축할 수 있게 해 줍니다.&lt;br /&gt;- AWS -&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마이크로서비스란 소프트웨어를 구축하기 위한 아키텍처이자 하나의 접근 방식으로, 애플리케이션을 상호 독립적인 최소 구성 요소로 분할합니다&lt;br /&gt;- Redhat -&lt;/blockquote&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년정도 됬지만 널리 알려진지는 얼마 되지 않았다. 마이크로서비스가 없는 세상에서는 서비스/앱 개발에 대해서 백엔드를 위한 서버 인프라와 모바일 또는 웹 클라이언트로 크게 분류하고 백엔드는 layered architecture로 구현되고 있었다. 트래픽이 점차 늘어나게 되면 로드밸런서를 도입하여 어플리케이션 서버를 확장하거나 DB scale-up 전략이 일반적이었다고 생각한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이스북, 트위터, 넷플릭스등 폭발적인 성장을 하는 서비스의 등장으로 엔지니어들은 빠른 비지니스 변화에 대한 수용과 서비스 배포주기, 몇백 몇천명 수준의 개발자들이 서로 의존성을 최소화하면서 서비스를 개발하고 확장 가능한 구조가 필요했을 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마이크로 서비스 구축 가이드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;마이크로서비스는 명시적인 스펙이 아니다.&lt;/b&gt; 그래서 회사 마다 바라보고 적용하는 수준이 다를 수 있다. 그러다보니 자사의 서비스에 마이크로서비스를 도입하는게 맞는지 그리고 도입하게 된다면 맞는 구조란 무엇인지가 모호하게 느껴지는 것도 사실이다. 이 책은 마이크로서비스란 무엇인지로 시작하여 도입을 고민하고 싶다면 어떠한 기준이 필요한지 장단점에 대한 설명으로 시작하고, 이어서 온라인 강의 서비스를 구축한다는 가정으로 하나하나 섬세하게 마이크로서비스에 대한 적용 단계를 설명한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxz2g4/btr0RKu4LuN/hCXsKfbYSsT6g1yUDcPkjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxz2g4/btr0RKu4LuN/hCXsKfbYSsT6g1yUDcPkjK/img.png&quot; data-alt=&quot;점진적 마이크로서비스 전환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxz2g4/btr0RKu4LuN/hCXsKfbYSsT6g1yUDcPkjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxz2g4%2Fbtr0RKu4LuN%2FhCXsKfbYSsT6g1yUDcPkjK%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;400&quot; height=&quot;533&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;점진적 마이크로서비스 전환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rWYfv/btr0GbH12KJ/5oZPQ4EtLKQNqeP1jlefTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rWYfv/btr0GbH12KJ/5oZPQ4EtLKQNqeP1jlefTk/img.png&quot; data-alt=&quot;모놀로식 vs 마이크로서비스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rWYfv/btr0GbH12KJ/5oZPQ4EtLKQNqeP1jlefTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrWYfv%2Fbtr0GbH12KJ%2F5oZPQ4EtLKQNqeP1jlefTk%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;600&quot; height=&quot;450&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모놀로식 vs 마이크로서비스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;3장 데이터베이스를 분리한다고?&quot; 에서는, 모놀로식 대비 마이크로서비스로 서비스를 개발하게 될 때 경험하게 되는 문제점들을 나열하고 해결방안에 대해서 서술한다. 전반부에 이러한 내용들이 잘 정리되어 있는 점이 인상적이었고 설명을 매끄럽게 잘하는 점이 좋았다. 대략 3-4년전 마이크로서비스로의 전환 작업을 진행했을 때 직면했던 문제점들에 대해 잘 정리되어 있어 놀랐다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZoHSl/btr0GbOMiHF/FrNgEtQL6cxb0C6L259b1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZoHSl/btr0GbOMiHF/FrNgEtQL6cxb0C6L259b1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZoHSl/btr0GbOMiHF/FrNgEtQL6cxb0C6L259b1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZoHSl%2Fbtr0GbOMiHF%2FFrNgEtQL6cxb0C6L259b1K%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;/span&gt;자주 변하지 않는 데이터는 로컬 캐시를 도입함으로써 성능을 향상 시킬 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ncXdZ/btr0RPiPjv7/jWmGBqgGCRCtZobBLm8Y70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ncXdZ/btr0RPiPjv7/jWmGBqgGCRCtZobBLm8Y70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ncXdZ/btr0RPiPjv7/jWmGBqgGCRCtZobBLm8Y70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FncXdZ%2Fbtr0RPiPjv7%2FjWmGBqgGCRCtZobBLm8Y70%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;/span&gt;마이크로서비스에서 API 일괄 요청에 로컬 캐시를 도입하게 되면 모놀로식의 단일 SQL(1번)과 거의 동일한 처리 속도가 나오게 된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 목차로써 크게 1부, 2부로 나누게 되고 1부에서는 이론적인 개념들이 2부에서는 구축 예시들로 구성되어 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1부. 마이크로서비스 아키텍처 이해하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1장. 마이크로서비스 아키텍처란?&lt;/li&gt;
&lt;li&gt;2장. 어떻게 적용해야 할까?&lt;/li&gt;
&lt;li&gt;3장. 데이터베이스를 분리한다고?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2부. 마이크로서비스 아키텍처 적용하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;4장. 서비스 선정하기&lt;/li&gt;
&lt;li&gt;5장. 서비스 설계 원칙&lt;/li&gt;
&lt;li&gt;6장. 서비스 설계하기&lt;/li&gt;
&lt;li&gt;&amp;nbsp;장. 서비스 개발하기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 책에 비해 서비스 경계를 선정하는 방식에 대해 설명이 많다는 것 또한 꽤 인상적이다. 모놀리식에서 마이크로서비스로의 전환 과정에 대한 경험이 있다면 개별 서비스를 정의하는 것이 쉽지 않은 영역이란걸 알 것이다. 한편, 다른 책에서 흔하게 이야기하는 DDD(도메인 주도 설계) 기반 모델링에 대해서는 집중하여 다루진 않는다. 아니 오히려 DDD만이 마이크로서비스를 설계하는 방법이 아니라고 이야기 한다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GSNQm/btr0DiOcveg/ghO9EiCehSxWpOvwDwnx5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GSNQm/btr0DiOcveg/ghO9EiCehSxWpOvwDwnx5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GSNQm/btr0DiOcveg/ghO9EiCehSxWpOvwDwnx5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGSNQm%2Fbtr0DiOcveg%2FghO9EiCehSxWpOvwDwnx5K%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beZmhU/btr0RJ30eeJ/XJbig8HgskOBmJZCv6D3v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beZmhU/btr0RJ30eeJ/XJbig8HgskOBmJZCv6D3v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beZmhU/btr0RJ30eeJ/XJbig8HgskOBmJZCv6D3v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeZmhU%2Fbtr0RJ30eeJ%2FXJbig8HgskOBmJZCv6D3v1%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 요구사항, 기능 요구사항에 대한 예시를 기반으로 설계 구조를 그림으로 설명한다. 그 외 API 설계나 실제 코드 그리고 버전을 통한 유지보수 예시등 운용에 대한 다양한 설명을 엿볼 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JsO9J/btr0NIK6zTw/KqRHeuRo6RVEC8pHAFJtcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JsO9J/btr0NIK6zTw/KqRHeuRo6RVEC8pHAFJtcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JsO9J/btr0NIK6zTw/KqRHeuRo6RVEC8pHAFJtcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJsO9J%2Fbtr0NIK6zTw%2FKqRHeuRo6RVEC8pHAFJtcK%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UJpHp/btr0GbH192P/fofSuUXmxSGkfugpKY9s8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UJpHp/btr0GbH192P/fofSuUXmxSGkfugpKY9s8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UJpHp/btr0GbH192P/fofSuUXmxSGkfugpKY9s8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUJpHp%2Fbtr0GbH192P%2FfofSuUXmxSGkfugpKY9s8K%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KGQW4/btr0BBgas6E/TW7YbXhwHqnv6zAia7gTy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KGQW4/btr0BBgas6E/TW7YbXhwHqnv6zAia7gTy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KGQW4/btr0BBgas6E/TW7YbXhwHqnv6zAia7gTy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKGQW4%2Fbtr0BBgas6E%2FTW7YbXhwHqnv6zAia7gTy1%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfGXVi/btr0JOE5vMI/ZZk0QNE3MhgwktTNYaQJk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfGXVi/btr0JOE5vMI/ZZk0QNE3MhgwktTNYaQJk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfGXVi/btr0JOE5vMI/ZZk0QNE3MhgwktTNYaQJk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfGXVi%2Fbtr0JOE5vMI%2FZZk0QNE3MhgwktTNYaQJk1%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;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가벼운 마음으로 읽기 시작했는데 꽤 몰입해서 보게 된 책이었다. 마이크로서비스를 구축하려는 계획이 있는 사람이 이 책을 메인으로 시작하여 다른 책을 1-2권을 비교하고 설계 작업을 점진적으로 진행한다면 상당한 도움을 받을 수 있지 않을까하는 생각이 들었다. 안정적으로 서비스를 개발 및 보완할 수 있게 하는 길잡이 역할이 되어줄 것이다. 한편 &lt;span&gt;백엔드 개발 경험 또는 운용 경험이 없다면 한번에 와닿지 않거나 이해하기 어려울 부분이 있을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reference&lt;/h3&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://aws.amazon.com/ko/microservices/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://aws.amazon.com/ko/microservices/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.redhat.com/ko/topics/microservices&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.redhat.com/ko/topics/microservices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://microservices.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://microservices.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/architecture/microservices/model/domain-analysis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://learn.microsoft.com/ko-kr/azure/architecture/microservices/model/domain-analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/microservices.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://martinfowler.com/articles/microservices.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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;b&gt;&quot;한빛미디어 &amp;lt;나는&lt;span&gt;&amp;nbsp;&lt;/span&gt;리뷰어다&amp;gt; 활동을&lt;span&gt;&amp;nbsp;&lt;/span&gt;위해서 책을 제공받아 작성된 서평입니다.&quot;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Review</category>
      <category>마이크로서비스</category>
      <category>아키텍처</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/292</guid>
      <comments>https://morenice.tistory.com/292#entry292comment</comments>
      <pubDate>Sat, 25 Feb 2023 20:29:57 +0900</pubDate>
    </item>
    <item>
      <title>[윈도우10] 마이크로소프트가 직접 제공하는 PowerToys</title>
      <link>https://morenice.tistory.com/289</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 OS를 개발하는 마이크로소프트에서 &lt;b&gt;직접&lt;/b&gt; &lt;b&gt;PowerToys&lt;/b&gt; 프로그램을 제공한다. 이 프로그램은 아주 강력하고도 재미있는 기능들을 묶음으로 제공한다. 예를 들면 맥에서 편하게 활용하던 Spotlight(Powertoys Run), 간단한 클릭만으로 화면이 잠기지 않게 해주는 카페인(awake), 그 외 모니터 눈금 표시나 RGB 색 확인 그리고 마우스 위치 확인, 이미지 크기 일괄 변경, 프로그램 레이아웃 커스텀등 다양한 기능들을 제공한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치&lt;/h3&gt;
&lt;figure id=&quot;og_1673445637859&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; microsoft/PowerToys&quot; data-og-description=&quot;Windows system utilities to maximize productivity. Contribute to microsoft/PowerToys development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/PowerToys/releases&quot; data-og-url=&quot;https://github.com/microsoft/PowerToys/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GpKzA/hyRfCNcSgq/ahQ4sfx15Au4bTaTy3YyP1/img.png?width=1280&amp;amp;height=513&amp;amp;face=0_0_1280_513&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/PowerToys/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/PowerToys/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GpKzA/hyRfCNcSgq/ahQ4sfx15Au4bTaTy3YyP1/img.png?width=1280&amp;amp;height=513&amp;amp;face=0_0_1280_513');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Releases &amp;middot; microsoft/PowerToys&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Windows system utilities to maximize productivity. Contribute to microsoft/PowerToys development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PowerToys는 Github repository의 release note화면에서 설치 파일을 받을 수 있으며, 다운로드 후 실행을 하면 설치가 진행된다. 잠깐, Github 또한 마이크로소프트에서 몇년 전에 인수하여 운용하고 있다. 이 글은 온통 마이크로소프트 세상이다. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U4Cu0/btrVzFNQaIi/xHSg5okIWqmjeY0YadFiO0/img.png&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;787&quot; data-filename=&quot;2023-01-07 00 12 43.png&quot; data-is-animation=&quot;false&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2023-01-07 00 12 04.png&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTigeQ/btrVA1vH1hl/uXOumjjvtaKhHodapOAqD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTigeQ/btrVA1vH1hl/uXOumjjvtaKhHodapOAqD1/img.png&quot; data-alt=&quot;설치 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTigeQ/btrVA1vH1hl/uXOumjjvtaKhHodapOAqD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTigeQ%2FbtrVA1vH1hl%2FuXOumjjvtaKhHodapOAqD1%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;471&quot; height=&quot;293&quot; data-filename=&quot;2023-01-07 00 12 04.png&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설치 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&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-filename=&quot;2023-01-07 00 13 38.png&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rinrH/btrVzE2tPDr/QiJST3BrCwNOohbhI8NpEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rinrH/btrVzE2tPDr/QiJST3BrCwNOohbhI8NpEk/img.png&quot; data-alt=&quot;PowerToys 프로그램 찾기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rinrH/btrVzE2tPDr/QiJST3BrCwNOohbhI8NpEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrinrH%2FbtrVzE2tPDr%2FQiJST3BrCwNOohbhI8NpEk%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;784&quot; height=&quot;680&quot; data-filename=&quot;2023-01-07 00 13 38.png&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PowerToys 프로그램 찾기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2023-01-07 00 32 16.png&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c26TgY/btrVDjiehIA/QL5hEz2Yn7r9qDETgfSWwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c26TgY/btrVDjiehIA/QL5hEz2Yn7r9qDETgfSWwk/img.png&quot; data-alt=&quot;PowerToys 기능 설명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c26TgY/btrVDjiehIA/QL5hEz2Yn7r9qDETgfSWwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc26TgY%2FbtrVDjiehIA%2FQL5hEz2Yn7r9qDETgfSWwk%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;1086&quot; height=&quot;693&quot; data-filename=&quot;2023-01-07 00 32 16.png&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;693&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PowerToys 기능 설명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DSLR로 촬영한 사진들은 raw 파일들이 아니더라도 대부분 5~10M 또는 그 이상의 파일 크기를 갖게 되는데, 메신저로 큰 크기의 사진들을 대량으로 공유하기에는 좀 부담이 된다. 이럴 때 이미지 Resizer(크기 일괄 수정) 기능을 사용하면 매우 유용하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2023-01-07 00 14 06.png&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Az6ZS/btrVxNsb1NX/Iksy9NNgkmu9crqz3v5Pkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Az6ZS/btrVxNsb1NX/Iksy9NNgkmu9crqz3v5Pkk/img.png&quot; data-alt=&quot;Image Resizer 설명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Az6ZS/btrVxNsb1NX/Iksy9NNgkmu9crqz3v5Pkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAz6ZS%2FbtrVxNsb1NX%2FIksy9NNgkmu9crqz3v5Pkk%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;1086&quot; height=&quot;693&quot; data-filename=&quot;2023-01-07 00 14 06.png&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;693&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Image Resizer 설명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2023-01-07 00 16 19.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYjJhR/btrVzU42ESM/fSXLF8mvLJPkyfZMIjruY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYjJhR/btrVzU42ESM/fSXLF8mvLJPkyfZMIjruY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYjJhR/btrVzU42ESM/fSXLF8mvLJPkyfZMIjruY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYjJhR%2FbtrVzU42ESM%2FfSXLF8mvLJPkyfZMIjruY0%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;400&quot; height=&quot;328&quot; data-filename=&quot;2023-01-07 00 16 19.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 사진들을 선택하고 마우스 우측 버튼 &amp;gt; &quot;그림 크기 조정&quot;을 선택하면 메뉴가 노출되는데 &quot;이미지 크기&quot;만 설정하면 바로 크기가 조정된 사진들을 일괄로 만들어낼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꼭 설치해서 PowerToys Run이라도 활용해보길 추천한다. 프로그램 실행뿐 아니라 재부팅이나 파워오프까지 간단히 명령을 내릴 수 있다. 설치 이후 윈도우 사용성이 매우 좋아질 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGGWKf/btrV0p4lloj/Tli8a76vEFgD22NnjjJXvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGGWKf/btrV0p4lloj/Tli8a76vEFgD22NnjjJXvk/img.png&quot; data-alt=&quot;PowerToys Run&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGGWKf/btrV0p4lloj/Tli8a76vEFgD22NnjjJXvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGGWKf%2FbtrV0p4lloj%2FTli8a76vEFgD22NnjjJXvk%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;203&quot; height=&quot;135&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PowerToys Run&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;See also&lt;/h3&gt;
&lt;figure id=&quot;og_1673446634533&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Microsoft PowerToys&quot; data-og-description=&quot;Microsoft PowerToys is a set of utilities for customizing Windows. Utilities include ColorPicker, FancyZones, File Explorer Add-ons, Image Resizer, Keyboard Manager, PowerRename, PowerToys Run, a Shortcut Guide and more to come.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rklZK/hyRfFb6z7c/afN4q4rf4vKbYknHHJCV4K/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bG7e1T/hyRfyjLKE4/CkmKhWkwNQ1Ow7CH6IEFok/img.png?width=1087&amp;amp;height=712&amp;amp;face=0_0_1087_712,https://scrap.kakaocdn.net/dn/U2Dup/hyRfINwmEb/5VuFRi1ASz7eyNSHbCzfuK/img.png?width=400&amp;amp;height=266&amp;amp;face=0_0_400_266&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rklZK/hyRfFb6z7c/afN4q4rf4vKbYknHHJCV4K/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bG7e1T/hyRfyjLKE4/CkmKhWkwNQ1Ow7CH6IEFok/img.png?width=1087&amp;amp;height=712&amp;amp;face=0_0_1087_712,https://scrap.kakaocdn.net/dn/U2Dup/hyRfINwmEb/5VuFRi1ASz7eyNSHbCzfuK/img.png?width=400&amp;amp;height=266&amp;amp;face=0_0_400_266');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Microsoft PowerToys&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Microsoft PowerToys is a set of utilities for customizing Windows. Utilities include ColorPicker, FancyZones, File Explorer Add-ons, Image Resizer, Keyboard Manager, PowerRename, PowerToys Run, a Shortcut Guide and more to come.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/Tools</category>
      <category>MS</category>
      <category>PowerToys</category>
      <category>마이크로소프트</category>
      <category>유틸리티</category>
      <author>morenice</author>
      <guid isPermaLink="true">https://morenice.tistory.com/289</guid>
      <comments>https://morenice.tistory.com/289#entry289comment</comments>
      <pubDate>Wed, 11 Jan 2023 23:25:47 +0900</pubDate>
    </item>
  </channel>
</rss>