Jekyll2023-12-31T13:46:35+00:00https://www.saturnsoft.net/feed.xmlsaturnsoft.netJunho Choi's personal websiteJunho ChoiQUIC & HTTP 3 이제는 현실 (rev. 2)2023-12-31T00:00:00+00:002023-12-31T00:00:00+00:00https://www.saturnsoft.net/network/2023/12/31/talk-quic-http3-intro<p><a href="https://youtu.be/6DqwPOx8E5Q?si=frnUeofcOIkf8rHm">QUIC & HTTP 3 이제는 현실 (rev. 2)</a>은 2022년 11월 5일에 있었던 <a href="https://cafe.naver.com/neteg">네이버 카페 “IT인프라&네트워크 전문가 따라잡기”</a>의 <a href="https://cafe.naver.com/neteg?iframe_url=/ArticleList.nhn%3Fsearch.clubid=10344409%26search.menuid=35%26search.boardtype=L">제33회 네트워크 전문가 따라잡기 ‘N.EX.T’ 정기 기술 세미나</a>에서 발표하였던 내용입니다.</p>
<iframe width="720" height="405" src="https://www.youtube.com/embed/6DqwPOx8E5Q" title="QUIC & HTTP 3 이제는 현실 (rev. 2)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>
<p><a href="https://youtu.be/5bOLG9EwpZE">기존에 공개된 것</a>과 동일한 영상입니다만 rev.2 에서는 무음이나 불필요한 말 등이 수정이 되었고, 영상의 전체 길이가 39분에서 27분으로 줄었습니다.</p>
<p>일년이 조금 지난 자료라 지금은 약간 달라진 점은 있지만, 기본적인 사항은 변하지 않았으므로 QUIC과 HTTP/3의 기초에 대해 알고 싶은 사람을 위해 한국어로 된 좋은 자료가 될 거라 생각 합니다.</p>
<p><a href="https://docs.google.com/presentation/d/1vGQaaR7v5WCdpUUsz_KRXOVY1m6Qr3Ak-ap19sqw1OU/edit?usp=sharing">슬라이드</a>도 같이 공개되어 있습니다.</p>
<p>그리고 내 (현재) 첫번째 유튜브 공개 영상입니다!</p>
<p>p.s. 2023년에 아슬아슬하게 시간을 맞추긴 했는데 새해에는 영상을 더 많이 올렸으면 좋겠네요.</p>Junho ChoiQUIC & HTTP 3 이제는 현실 (rev. 2)은 2022년 11월 5일에 있었던 네이버 카페 “IT인프라&네트워크 전문가 따라잡기”의 제33회 네트워크 전문가 따라잡기 ‘N.EX.T’ 정기 기술 세미나에서 발표하였던 내용입니다.44bits 팟캐스트에 출연2023-03-06T00:00:00+00:002023-03-06T00:00:00+00:00https://www.saturnsoft.net/podcast/2023/03/06/44bits-talk<p>제가 애청하는 <a href="/misc/2019/02/09/my-favorite-podcasts/">팟캐스트</a>
중 하나인 44bits 에 출연하는 영광을 누리게 되었습니다. (사실 제가
부탁한 건 안 비밀…) 2월 3일이었으니 벌써 한달도 넘었네요.
한시간 넘게 이야기했던 것 같은데 무척 재미 있었습니다.</p>
<p>클라우드플레어 회사와 개발 문화, QUIC, HTTP/3 관련된 프로토콜 개발 등
최근에 저에게 관련 있던 주제들에 대해서 이야기를 하니 관심 있는 분들은
들어 주셔도 좋겠습니다.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/lSIEgej47hw?si=jPHIeXCR2RsmV_iT" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>
<p>(업데이트 - 편집본이 올라와서 다시 올립니다)</p>
<p>p.s. 일년 넘게 포스팅이 없었네요. 올해에는 좀 더 노력하도록 하겠습니다.</p>Junho Choi제가 애청하는 팟캐스트 중 하나인 44bits 에 출연하는 영광을 누리게 되었습니다. (사실 제가 부탁한 건 안 비밀…) 2월 3일이었으니 벌써 한달도 넘었네요. 한시간 넘게 이야기했던 것 같은데 무척 재미 있었습니다.GPL의 종말2021-07-22T00:00:00+00:002021-07-22T00:00:00+00:00https://www.saturnsoft.net/opensource/2021/07/22/end-of-gpl<p>리눅스가 개발되기 시작될 무렵인 90년대 초에는 오픈소스라는 말은 없었고 당시에 해커 사회에서 유명한 것이 GNU의 프리 소프트웨어와 그 소프트웨어 라이센스인 GPL이었다. 물론 당시에 무료로 배포되던 소프트웨어가 없었던 것도 아니고 BSD 유닉스에 사용되던 BSD라이센스는 이미 80년대부터 존재하던 것이었지만, 리눅스가 각광을 받자 90년대 후반에 여러가지 라이센스 형태를 묶어서 오픈소스라는 용어가 사용되기 시작하면서 GPL도 보다 더 일반에게 알려지도록 되었다. 당시에 리눅스 커널, GNU의 여러가지 프로그램들 (당시 리눅스 배포본 구성 요소에는 GNU 소프트웨어가 매우 많았다), GNOME, GiMP, Emacs등과 당시에 유명하던 프로그램에서 GPL이 사용된 것은 아마도 시대상을 반영한 것이라 볼 수 있을 것이다.</p>
<p>그런데 시계를 돌려서 2020년대를 보면 이제 GPL은 더 이상 새로 나오는 오픈 소스 어플리케이션의 주류 라이센스로 보이지는 않는다. 최근에 유명한 오픈소스인 k8s도 Apache 2.0 라이센스이고, 안드로이드 운영체제에서 리눅스 커널 이외에는 Apache 2.0 라이센스가 사용되고 있다. 대부분의 자바스크립트 프론트엔드 소프트웨어도 마찬가지고, 대부분 데이터과학 및 머신러닝 소프트웨어도 GPL이 아니다 (tensorflow는 Apache 2.0 라이센스, pandas는 BSD).</p>
<p>또한 과거에는 GNU/Linux라 할 정도로 리눅스 배포본의 핵심 요소였던 GNU 소프트웨어군도 예전같지 않고, GNU은 원래 커널을 포함하여 완결된 운영체제를 갖출 예정이었지만 아직도 갈 갈이 멀다. 또한 널리 사용되는 python, node, rust, ruby, perl 등등의 언어는 본체 포함 관련 라이브러리도 절대 다수가 BSD/MIT/Apache 라이센스이다.</p>
<p>즉 최근에 새로 개발되는 유명한 소프트웨어에서 GPL이 사용되는 걸 별로 본 적이 없다 (있다면 git, systemd 정도). GPL v2의 단점을 보완해서 GPL v3 이 나온지 꽤 오래 되었지만 그리 많이 사용되지 않는다. GPL v3의 대표적인 소프트웨어가 gcc인데, 이제는 clang/llvm이 거의 대체 가능할 만큼 따라왔다. clang/llvm은 BSD라이센스이고. 프로젝트 초기부터 gcc로 빌드하던 FreeBSD은 이제 clang으로 빌드/배포된다.</p>
<p>이에 대해서는 여러가지 이유를 생각해 볼 수 있겠지만, 과거에는 소프트웨어가 주로 설치형이었고, GPL의 기본 사상은 설치형 소프트웨어가 닫힌 소스로 재배포되는 것을 막기 위해 수정된 소스도 동일 라이센스로 배포하도록 하자는 것이라 생각된다. 그런데 90년대가 되고 인터넷 사용이 늘어나면서 서버를 통해 제공되는 서비스 (WWW 등)의 사용이 늘어 났는데, 이 경우 GPL소프트웨어는 서버에 설치 해서 내부적으로 고쳐서 써도 소스 재배포에 해당되지 않으므로 인터넷의 발전과 GPL은 크게 충돌하지 않았다.</p>
<p>설치형 소프트웨어도 아직 많이 존재 하지만 약간 그 형태가 달라졌다. 안드로이드와 같이 일반 사용자 디바이스에 설치된 것은 어느정도 이전의 설치형 소프트웨어에 해당되지만 브라우저에서 동작하는 자바스크립트로 작성된 소프트웨어들은 소스가 자동적으로 공개 되므로 굳이 GPL로 할 이유가 없다.</p>
<p>여기에 추가하여 최근 10여년 간의 큰 중요한 변화는 클라우드/SaaS 서비스인데, 설치된 소프트웨어를 사용자에게 직접 배포하지 않지만 네트워크를 통해서 이용하는 (데이터베이스, 가상머신 등) 방식이 주류가 되어 가면서 GPL은 또한 선호되지 않는다. 최근의 아마존 vs 엘라스틱과 같은 경우를 보면 아예 클라우드/SaaS용 (직접 설치가 아니라 서비스 제공용) 소프트웨어 라이센스를 별도로 지정할 정도로 클라우드/SaaS는 새로운 소프트웨어의 용도로 정착하고 있다 할 것이다. 다만 엘라스틱과 같은 경우는 SaaS이용을 막으려다 보니 아예 오픈 소스가 아니게 되었다.</p>
<p>그리고 이제 오픈소스 개발은 대부분 대형 IT회사가 주도하고 있다. 이런 회사들은 소프트웨어 자체에서 이익을 얻지 않으므로 (구글, 아마존, 페이스북 등) 역설적으로 소프트웨어 공개에 특별한 제약을 두려 하지 않고 따라서 그런곳에서 공개하는 소스는 Apache/BSD/MIT 라이센스가 주류를 이루고 있다.</p>
<p>반대로 회사에서 외부 오픈 소스를 가져다 쓰는 것도 보편화됨에 따라 외부 소스를 가져다 쓸 경우 라이센스를 체크하는 일정 크기 이상의 조직인 경우 GPL 소스는 자사 소프트웨어 개발에 아예 사용 못하게 하거나 변경 및 재배포 여부를 엄격히 체크 한다.</p>
<p>따라서 신규 소프트웨어의 GPL도입율 저하 및 GPL이용율의 저하 경향이 지속될 경우 GPL은 점점 도태될 가능성이 높다 할 것이다.</p>Junho Choi리눅스가 개발되기 시작될 무렵인 90년대 초에는 오픈소스라는 말은 없었고 당시에 해커 사회에서 유명한 것이 GNU의 프리 소프트웨어와 그 소프트웨어 라이센스인 GPL이었다. 물론 당시에 무료로 배포되던 소프트웨어가 없었던 것도 아니고 BSD 유닉스에 사용되던 BSD라이센스는 이미 80년대부터 존재하던 것이었지만, 리눅스가 각광을 받자 90년대 후반에 여러가지 라이센스 형태를 묶어서 오픈소스라는 용어가 사용되기 시작하면서 GPL도 보다 더 일반에게 알려지도록 되었다. 당시에 리눅스 커널, GNU의 여러가지 프로그램들 (당시 리눅스 배포본 구성 요소에는 GNU 소프트웨어가 매우 많았다), GNOME, GiMP, Emacs등과 당시에 유명하던 프로그램에서 GPL이 사용된 것은 아마도 시대상을 반영한 것이라 볼 수 있을 것이다.QUIC 버전 1의 RFC 승인2021-05-27T00:00:00+00:002021-05-27T00:00:00+00:00https://www.saturnsoft.net/network/2021/05/27/quic-rfc9000<p>IETF에서 지난 몇년간 진행하고 있던 UDP기반의 새
전송 프로토콜인 QUIC이 오랜 리뷰 기간을 거쳐서
정식으로 RFC가 되었습니다.</p>
<p><img src="/assets/images/2021-05-27/QUIC-768x671.png" alt="QUIC 로고" width="50%" /></p>
<p>4개의 RFC로 나누어져 있습니다. 각각은 다음과 같습니다.</p>
<ul>
<li><a href="https://rfc-editor.org/rfc/rfc8999.html">RFC 8999</a> Version-Independent Properties of QUIC - 통칭 Invariants. 버전에 관계 없이 공통적인 사항에 대한 것입니다.</li>
<li><a href="https://rfc-editor.org/rfc/rfc9000.html">RFC 9000</a> QUIC: A UDP-Based Multiplexed and Secure Transport - 통칭 Transport. 제일 중심이 되는 내용으로 패킷 포맷, 상태 머신, 기본적인 동작에 대해 다루고 있습니다. QUIC에 대해 알고 싶다면 여기부터 읽어 보세요.</li>
<li><a href="https://rfc-editor.org/rfc/rfc9001.html">RFC 9001</a> Using TLS to Secure QUIC - 통칭 QUIC-TLS. QUIC은 기본적으로 암호화를 해야 하는데 TLS 1.3 기반으로 약간의 확장을 더하고 있습니다. TLS 1.3에 대해서 기본적으로 이해가 있어야 합니다.</li>
<li><a href="https://rfc-editor.org/rfc/rfc9002.html">RFC 9002</a> QUIC Loss Detection and Congestion Control - 통칭 Recovery. Transport에 추가하여 손실 복구 및 혼잡 제어 알고리즘에 대해서 다룹니다.</li>
</ul>
<p>아마 출력하면 수백 페이지 분량일 것입니다. 8999는 짧은 편이지만
나머지 3개 RFC는 내용이 방대하고 전송 프로토콜에 대한 내용이라
TCP와 TLS에 대한 사전 지식이 있다면 보다 읽기 쉬울 것입니다.
지금부터 읽고자 한다면 사전 지식 없어도 먼저 한번 읽어 보고,
필요한 부분을 추가적으로 다른 RFC를 읽어 가면서 보충하는 방법을
권장합니다.</p>
<p>개인적으로는 UDP기반 전송 프로토콜을 작성하는 것을 이전
스타트업(Neumob)에서 시작했고 지금 회사(Cloudflare)에서 QUIC관련 업무를
(quiche 기반 HTTP/3 서비스) 하고 있어 2019년부터 관련 활동에 일부
참여하였습니다. RFC9002에 몇줄 공헌한 것도 있고 해서 정식으로
RFC가 되다니 감회가 새롭네요.</p>
<p>회사 블로그에 관련된 기사를 올린적이 있고요.</p>
<ul>
<li><a href="https://blog.cloudflare.com/ko-kr/cubic-and-hystart-support-in-quiche-ko-kr/">quiche의 CUBIC와 HyStart++ 지원</a></li>
<li><a href="https://blog.cloudflare.com/a-cost-effective-and-extensible-testbed-for-transport-protocol-development/">A cost-effective and extensible testbed for transport protocol development</a></li>
</ul>
<p>이 블로그에서도 기본적인 소개 글을 쓴적이 있습니다.</p>
<ul>
<li><a href="/network/2019/03/21/quic-http3-1/">QUIC과 HTTP/3 - 1. UDP기반 전송 프로토콜의 대두</a></li>
<li><a href="/network/2019/03/26/quic-http3-2/">QUIC과 HTTP/3 - 2. 기존의 성능 개선 기법 및 한계</a></li>
<li><a href="/network/2019/08/11/http3-curl-quiche/">QUIC과 HTTP/3 - 3. curl + quiche 로 HTTP3 요청해 보기</a></li>
</ul>
<p>이번 RFC는 QUIC관련이고, 상위 레이어인 HTTP/3 관련은 다른 워킹 그룹에서
별도로 리뷰하는 것으로 알고 있으니 관련 스펙 (HTTP/3, QPACK)은 추후
RFC가 될 것으로 알고 있습니다.</p>
<p>HTTP/2가 2015년에 발표된 이후 HTTP와 전송 프로토콜 관련해서 제일
큰 변화라고 생각 됩니다. 향후 많은 분야에서 활용되지 않을까 싶습니다.</p>Junho ChoiIETF에서 지난 몇년간 진행하고 있던 UDP기반의 새 전송 프로토콜인 QUIC이 오랜 리뷰 기간을 거쳐서 정식으로 RFC가 되었습니다.번역#14: Firefox Nightly에서 HTTP/3 과 QUIC을 시험해 보기2020-09-11T00:00:00+00:002020-09-11T00:00:00+00:00https://www.saturnsoft.net/translation/2020/09/11/firefox-http3<p>Cloudflare 블로그 14번째 번역글입니다.</p>
<ul>
<li>한글: <a href="https://blog.cloudflare.com/ko/how-to-test-http-3-and-quic-with-firefox-nightly-ko/">Firefox Nightly에서 HTTP/3 과 QUIC을 시험해 보기</a></li>
<li>영문: <a href="https://blog.cloudflare.com/how-to-test-http-3-and-quic-with-firefox-nightly/">How to test HTTP/3 and QUIC with Firefox Nightly</a></li>
</ul>
<p>저도 Firefox Nightly 쓰면서 기본으로 http3를 켜 두고 있습니다. 대부분 별 문제 없는데
버전에 따라서 일부 타임아웃 현상이 발생한 적이 있었습니다. 특히 구글 사이트 (gmail 이나 youtube 등)
이 안되는 경우라면 http3 를 사용중이면 한번 끄고 다시 해 보는 것도 도움이 됩니다.</p>
<p>p.s. Cloudflare 블로그에서 한글로 번역된 글은 다음 링크에서 모두 찾을 수 있습니다.
번역글은 원본 글과 같은 시간으로 포스팅 시간을 조정하기 때문에 블로그 홈페이지에서
바로 보이지 않을 수 있습니다.</p>
<ul>
<li><a href="https://blog.cloudflare.com/tag/korean">https://blog.cloudflare.com/tag/korean/</a></li>
</ul>Junho ChoiCloudflare 블로그 14번째 번역글입니다.RFC 8890: 인터넷은 사용자의 것2020-09-06T00:00:00+00:002020-09-06T00:00:00+00:00https://www.saturnsoft.net/tech/2020/09/06/rfc8890<p>최근에 Mark Nottingham 이 자신의 블로그에
<a href="https://www.mnot.net/blog/2020/08/28/for_the_users">RFC8890: The Internet is for End Users</a> 이라는 글을 올렸습니다. 본문과 더불어 RFC8890 도 읽어
보면 좋을것 같습니다.</p>
<ul>
<li><a href="https://www.rfc-editor.org/rfc/rfc8890.html">RFC 8890 The Internet is for End Users</a></li>
</ul>
<p>RFC8890이 나왔는데 인터넷은 엔드유저 (사용하는 사람)을 위한 것이라는 점을 강조하는 내용입니다. IETF는 RFC를 출간하는 조직인데 인터넷 프로토콜 표준을 만드는 것으로 알려져 있지만 사실 표준은 아니고 RFC를 작성할 뿐 실제 구현은 회사나 개발자에 의해 좌우됩니다. 가령 리눅스 커널의 TCP 코드를 보면 RFC에 없는 내용이 많이 포함되어 있지만 인터넷 대부분 트래픽을 차지하는 것이 현실이지요.</p>
<p>그리고 순수하게 기술적이지만도 않은게 은연중에 정치적 결정을 하는 경우도 존재하며 그리고 이는 국가간 또는 세력간에 손익을 발생시키기도 합니다. 한국의 예를 들자면 불법 사이트 차단을 위해 주요 ISP의 DNS에서 블랙리스트를 적용하는 것이나 <a href="https://namu.wiki/w/2019%EB%85%84%20%EC%9D%B8%ED%84%B0%EB%84%B7%20%EA%B2%80%EC%97%B4%20%EB%85%BC%EB%9E%80">SNI 정보를 이용</a>하는 것을 들 수 있습니다. DNS over HTTP (DOH)/DNS over TLS (DOT)가 만들어졌을 때 이슈 중 하나는 DNS에 의존하는 사이트 차단 기능을 본질적으로 우회할 수 있다는 것인데, 대형 ISP DNS에서 차단하는 사이트라도 DOH를 쓰고 공개된 리졸버를 쓰게 되면 국가의 DNS 차단을 우회하게 됩니다. 가령 아동성범죄나 마약거래와 같은 불법 사이트 차단을 DNS/SNI 차단에 의존하고 있는 국가는 DOH 나 <a href="https://tools.ietf.org/html/draft-ietf-tls-esni-07">ECH (Encrypted Clieht Hello)</a>와 같은 기법이 메이저 브라우저에서 기본 적용되는 것을 반기지 않을 것이고 따라서 실제로 <a href="https://www.theverge.com/2020/2/25/21152335/mozilla-firefox-dns-over-https-web-privacy-security-encryption">파이어폭스 브라우저의 DoH설정이 국가별로 다른 경우</a>가 일어나고 있습니다.</p>
<p>IETF는 검열에 관한 기술을 다루지 않으므로 DNS 관련 RFC에는 차단 방법에 대한 내용은 없지만 각 국가의 법령에 따라 실제 소프트웨어에는 구현되어 있는 경우가 다수 있습니다. 이러한 현실 위에서 검열을 피할 수 있는 DOH/DOT/ECS와 같은 새로운 기술은 기존 법령과 충돌을 일으킬 수 있지만, 또 그걸 뒷받침할 수 있도록 RFC를 작성하지도 않는다는 것입니다. 가령 한국이나 중국 정부에서 IETF에 인력을 파견해서 DOH/DOT나 ECH의 RFC작업을 하지 말라거나 검열이 가능하도록 백도어를 넣게 압력을 넣어 볼 수는 있겠지만 받아들여지지 않을 것이겠지요.</p>
<p>또 다른 예로 최근에 <a href="https://www.zdnet.com/article/china-is-now-blocking-all-encrypted-https-traffic-using-tls-1-3-and-esni/">중국에서 TLS 1.3패킷을 검사하여 ESNI가 사용 중이면 연결을 끊는 사례</a>가 보고되어 있는데, 그렇다고 IETF가 ECH개발을 중지하지도 않는다는 의미입니다. 이미 <a href="https://tools.ietf.org/html/draft-ietf-tls-esni-07">ESNI</a>를 지나서 ECH라는 보다 발전된 기술이 논의되고 있습니다. ECH를 통해서 부가적인 프라이버시를 얻는 사람도 있지만, 이를 통해서 놓치는 범죄자들도 있을 것입니다.</p>
<p>이런 기준은 국가마다 다르고 동일한 잣대로 판단하는 것이 어려운 경우가 많습니다. 하지만 RFC의 내용은 최대한 일반 사용자의 이익이 되는 방향으로 가야 한다는 것입니다.</p>Junho Choi최근에 Mark Nottingham 이 자신의 블로그에 RFC8890: The Internet is for End Users 이라는 글을 올렸습니다. 본문과 더불어 RFC8890 도 읽어 보면 좋을것 같습니다.(셀프)번역#13: HTTP/2 업로드 속도 향상기2020-08-28T00:00:00+00:002020-08-28T00:00:00+00:00https://www.saturnsoft.net/translation/2020/08/28/http2-autotune-upload<p>Cloudflare 블로그 13번째 번역글입니다. 이번에도 셀프 번역입니다.</p>
<ul>
<li>한글: <a href="https://blog.cloudflare.com/ko/delivering-http-2-upload-speed-improvements-ko/">HTTP/2 업로드 속도 향상기</a></li>
<li>영문: <a href="https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/">Delivering HTTP/2 upload speed improvements</a></li>
</ul>
<p>의외로 반응이 좋네요. 처음에 글 올린 이후에 패치를 오픈소스하기로
해서 글 가장 끝을 보시면 패치 올린 링크가 있습니다.</p>
<p>그리고 어떤 유튜버가 리뷰를 하였더군요… 테크 블로그 글 리뷰하는 유튜버가 있는줄은
처음 알았습니다.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/rMO35XQXuLA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
<p>p.s. Cloudflare 블로그에서 한글로 번역된 글은 다음 링크에서 모두 찾을 수 있습니다.
번역글은 원본 글과 같은 시간으로 포스팅 시간을 조정하기 때문에 블로그 홈페이지에서
바로 보이지 않을 수 있습니다.</p>
<ul>
<li><a href="https://blog.cloudflare.com/tag/korean">https://blog.cloudflare.com/tag/korean/</a></li>
</ul>Junho ChoiCloudflare 블로그 13번째 번역글입니다. 이번에도 셀프 번역입니다.Konami’s MSX Legacy: the unofficial story 간단 감상2020-06-27T00:00:00+00:002020-06-27T00:00:00+00:00https://www.saturnsoft.net/msx/2020/06/27/konamis-msx-legacy-the-unofficial-story<p><a href="https://smile.amazon.com/dp/1644673525/ref=cm_sw_r_tw_dp_x_VQc-EbT090Q0Y">Konami’s MSX Legacy: the unofficial story</a> 라는 책이 나왔다는 이야기를 어디서 들었는데 아마존에서 찾을 수 있어서 구매 했습니다. 자비 출판을 하는듯 주문량이 일정량에 도달해야 출력해서 배달해 주는것 같네요.</p>
<p>겉표지와 후면표지는 다음과 같습니다. 전면의 펭귄은 “몽대륙” 주인공이겠네요. (“결국 남국대탐험”인가??)
코나미가 펭귄, 모아이 등등을 이곳저곳에 마스코트처럼 출연시켰는데 책에도 그 이야기가 나옵니다.</p>
<p><img src="/assets/images/2020-06-27/konami_1.jpg" alt="표지" width="70%" /></p>
<p>후면은 스크린샷 모음집. 몇개나 알고 있나요?</p>
<p><img src="/assets/images/2020-06-27/konami_3.jpg" alt="뒷면" width="70%" /></p>
<p>받았을때 놀란 점은 책이 매우 두꺼웠다는 겁니다. 836페이지로 웬만한 사전 두께입니다. 이전 글에서 리뷰했던
<a href="/msx/2020/06/13/msx_perfect-catalogue/">MSX Perfect Catalogue</a>랑 같이 찍은 사진을 보면
이 책이 얼마나 두꺼운지 알 수 있습니다. 아 물론 종이도 좀 두껍긴 하네요.</p>
<p><img src="/assets/images/2020-06-27/konami_2.jpg" alt="두께" width="70%" /></p>
<p>책 내용은 후면에 적힌 대로 일본 코나미사가 MSX기종을 위해서 발매했던 하드웨어 및 소프트웨어 모음집입니다.
저자가 벨기에 사람이라 그런지 일본판 뿐 아니라 유럽판도 충실하게 소개하고 있습니다. 타이틀별로 충실하게 소개하고 있는데
놀라운 점은 전체 공략까지 포함되어 있어서 게임만 있으면 매뉴얼 및 공략집 역할까지 충실하게 하고 있습니다.</p>
<p>가장 먼저 소개하는 게임은 83년작인 <a href="http://egloos.zum.com/netyhobby/v/5692573">개구장이 애슬레틱(Atheletic Land)</a>
이군요. 표지 정보에 카트리지 번호 (RC700), 일본어 제목, MSX매거진 최고 순위, 가격, 시스템 요구사항, 발매일, 크기 등등 자세한 정보가 적혀 있습니다.</p>
<p><img src="/assets/images/2020-06-27/konami_8.jpg" alt="athletic_land" width="70%" /></p>
<p>아래는 “왕가의 계곡 2”의 맵 일부고요,</p>
<p><img src="/assets/images/2020-06-27/konami_4.jpg" alt="왕가의계곡2" width="70%" /></p>
<p>아래는 “몽대륙”인데 하트 설명 및 숨겨진 아이템, 그리고 치트키 설명을 볼 수도 있고,
메탈기어솔리드4의 등장인물 서니가 PSP같은 머신으로 몽대륙을 플레이하는 신까지
나와 있습니다. 저도 MGS4에서 서니가 이거 플레이하는거 보고 깜짝 놀랐던 기억이 있네요.</p>
<p><img src="/assets/images/2020-06-27/konami_5.jpg" alt="몽대륙" width="70%" /></p>
<p>제가 매우 좋아하는 “SD스내처”입니다. 게임 설명도 있고 당시 잡지에 실린 광고 페이지
그리고 팬들이 패치한 영문판 (SD스내처는 일본어판만 정식 발매 되었죠) 정보도 있습니다.
SD스내처는 MSX에만 발매된 것으로 아는데 메탈기어 (다들 아시겠지만 메탈기어 프랜차이즈는 MSX에서
시작되었습니다. 이 책에는 MSX로 발매된 MG1와 MG2의 완전 공략이 포함되어 있습니다)의
제작자인 코지마 히데오 감독의 작품입니다.</p>
<p>SD스내처는 전작인 스내처가 어드벤처 게임이었는데
스내처 시나리오 분량을 다시 RPG로 만들고 스내처 이후 챕터가 추가되어 있어서
매우 흥미진진하게 했던 기억입니다. 엔딩 컷신이 무려 30분 정도 진행되어서
아마 당시 8비트 RPG중에서는 가장 긴 쪽에 속하지 않나 싶네요. 코지마감독 작품에
컷신 긴 건 유명한 이야기인데 이미 이때부터 그랬던 거였습니다.</p>
<p><img src="/assets/images/2020-06-27/konami_6.jpg" alt="SD스내처" width="70%" /></p>
<p>스페이스맨보우도 후반부까지 충실하게 실려 있습니다.</p>
<p><img src="/assets/images/2020-06-27/konami_7.jpg" alt="스페이스맨보우" width="70%" /></p>
<p>제작자의 정열에 놀라지 않을 수 없는데 책을 보시면 80년대 초반 작품부터 마지막 작품까지 정말 기존에 알려져 있는 모든 정보를 담았다고 해도 과언이 아닙니다. 일본 쪽에서도 이렇게 자세한 책을 본적이 없는데 취미활동의 범주를 넘어서는 작품이 아닐까 싶네요.
저도 MSX의 코나미 작품은 오리지널도 많고 독특한 테이스트가 있어서 매우 좋아 하기 때문에 저같은 팬을 위헤서는 최고의 선물이 아닐까 합니다.</p>Junho ChoiKonami’s MSX Legacy: the unofficial story 라는 책이 나왔다는 이야기를 어디서 들었는데 아마존에서 찾을 수 있어서 구매 했습니다. 자비 출판을 하는듯 주문량이 일정량에 도달해야 출력해서 배달해 주는것 같네요.MSX Perfect Catalogue 간단 감상2020-06-13T00:00:00+00:002020-06-13T00:00:00+00:00https://www.saturnsoft.net/msx/2020/06/13/msx_perfect-catalogue<p>MSX소식 중에 <a href="https://www.amazon.co.jp/dp/4867170283/ref=cm_sw_r_tw_dp_U_x_U8B5EbK0K44V7">MSXパーフェクトカタログ (G-MOOK)</a> 이라는게 발매되었다는 소식을 듣고 아마존일본 통해 구매 했습니다. 생각보다 빨리 오네요…</p>
<p><img src="/assets/images/2020-06-13/msx_p_c_1.jpg" alt="표지" width="70%" /></p>
<p>저자인 마에다 씨는 90년대 컴퓨터 관련 잡지사나 개발사(코나미)에서도 근무한 분이라고 하네요.</p>
<p>책은 크게 두 파트인데 MSX, MSX2, MSX2+, MSX TurboR의 하드웨어 소개와 발매되었던 하드웨어 목록, 그리고 소프트웨어 목록입니다. 하드웨어에는 일본 뿐 아니라 다른 나라에서 발매된 하드웨어도 일부 소개하고 있는데 “아시아지역”에서 한국의 MSX를 소개하고 있네요.</p>
<p><img src="/assets/images/2020-06-13/msx_p_c_2.jpg" alt="아시아" width="70%" /></p>
<p>근데… 많이 부족 합니다. 소개된 것은 4가지인데</p>
<ul>
<li>대우전자 CPC-400S: X-II라고도 하는 기종인데 수퍼임포즈 기능 없는 CPC-400도 있었지요.</li>
<li>금성전자 FC-200: 금성의 MSX기종은 FC-80 과 GFC-1080 으로 기억하는데 난데없이 200 이라 찾아 봤더니 80의 외수용을 FC-200 이라고 한답니다.</li>
<li>대우전자 DPC-200: IQ-1000 이라고 하는 MSX1기종</li>
<li>대우전자 Zemmix V: 이건 MSX 사양</li>
</ul>
<p>인데 이외에도 삼성전자 SPC-800, 금성 GFC-1080, 대우 CPC-200 (IQ2000), 재믹스 수퍼V (MSX2+)등등 빼먹은 기종이 많네요. 아마존 평에 “디테일이 아쉽다”라는 식의 이야기가 있었는데 실제 누락된 부분이 눈에 띕니다. 일본 외의 국가에서 완전한 목록을 지향하는 건 아닌것 같습니다만.</p>
<p>소프트웨어 목록은 다음과 같이 연도별로 발매된 소프트웨어를 간략히 소개하고 있습니다.</p>
<p><img src="/assets/images/2020-06-13/msx_p_c_3.jpg" alt="소프트웨어" width="70%" /></p>
<p>좀 유명하거나 설명이 더 필요한 게임들은 두칸을 다 사용하고 있습니다. 주로 게임이고 유틸리티나 개발 도구들은 포함되어 있지 않고 일부 오류나 부족한 부분이 있습니다. 가령 왼쪽 위에서 두번째 “F-1 스피리트 3D 스페셜”은 MSX2+ 전용이고, 오른쪽 아래에는 ‘진 마왕 골베리아스’가 있는데 이건 MSX2+에서는 별도 오프닝이 나오는 등 변경점이 있는데 이점은 언급이 안되어 있네요.</p>
<p>그래도 오랜만에 MSX매거진 영구보존판 이후 10여년만에 ‘어 이것도 있었지…‘라든가 ‘어 이런것도 있었나’하는 여러가지 생각을 하면서 재미있게 볼 수 있었습니다. 특히 기존 발매된 소프트웨어 목록에 대부분 스크린샷도 포함되어 있고 간략한 설명도 추가되어 있어서 자료 모은 사람의 정성을 느낄 수 있었습니다.</p>
<p>생각해보니 대작 중에서도 못해본 것 들 많은데 (특히 후반에는 한자롬 필요한 것들이 많았는데 국산 MSX에는 없었지요) 이제는 <a href="/2017/02/04/msx-turbor-fs-a1gt/">하드웨어</a>는 있지만 플레이해 볼 날이 올지는 모르겠네요…</p>Junho ChoiMSX소식 중에 MSXパーフェクトカタログ (G-MOOK) 이라는게 발매되었다는 소식을 듣고 아마존일본 통해 구매 했습니다. 생각보다 빨리 오네요…macOS X Traffic Shaping with dummynet | dummynet을 이용한 macOS X 트래픽 제어2020-06-07T00:00:00+00:002020-06-07T00:00:00+00:00https://www.saturnsoft.net/tech/2020/06/07/macosx-dummynet<p>macOS X has many FreeBSD-based subsystems and packet filtering is not an exception. Currently macOS X has <code class="language-plaintext highlighter-rouge">pf</code> which is originally from OpenBSD and also in FreeBSD.</p>
<p>macOS X는 많은 부분이 FreeBSD 기반인데 패킷 필터링 시스템도 그렇습니다. 현재 macOS의 패킷 필터는 <code class="language-plaintext highlighter-rouge">pf</code> 라고 하는데 원래 OpenBSD 에서 개발되어 FreeBSD 로 포팅된 것입니다.</p>
<p>For traffic shaping, FreeBSD has <code class="language-plaintext highlighter-rouge">dummynet</code> and macOS X has <code class="language-plaintext highlighter-rouge">dummynet</code> as well with use of <code class="language-plaintext highlighter-rouge">pf</code>. You may use Network Link Conditioner UI but sometimes you want to control via a command line interface. Here is how to configure dummynet on macOS X for the command line use. I tested on Mojave but it seems to work in Catalina too.</p>
<p>트래픽 제어를 위해서 FreeBSD에는 <code class="language-plaintext highlighter-rouge">dummynet</code>이 있고 macOS X에도 <code class="language-plaintext highlighter-rouge">pf</code>와 사용할 수 있도록 <code class="language-plaintext highlighter-rouge">dummynet</code>이 있습니다. Network Link Conditioner의 UI를 사용해도 가능 합니다만 명령행 인터페이스로 제어하는 것이 더 나을 때도 있습니다. 다음은 macOS X 명령행에서 <code class="language-plaintext highlighter-rouge">dummynet</code>을 이용한 트래픽 제어를 설정하는 방법입니다. Mojave에서 주로 테스트 되었습니다만 Catalina 에서도 되는 것으로 보입니다.</p>
<h3 id="prerequisite">Prerequisite</h3>
<p>Nothing if you have a running macOS X. To enable <code class="language-plaintext highlighter-rouge">pf</code>, you need to run the following:</p>
<p>macOS X가 있다면 추가로 필요한 것은 없습니다. 다음 명령을 실행해서 <code class="language-plaintext highlighter-rouge">pf</code> 패킷 필터를 활성화해 줍니다:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>% <span class="nb">sudo </span>pfctl <span class="nt">-E</span>
No ALTQ support <span class="k">in </span>kernel
ALTQ related functions disabled
pf enabled
Token : 11635722348223850675
</code></pre></div></div>
<h3 id="dummynet">dummynet</h3>
<p>To demonstrate, let’s say I have a VMware guest VM (or container) running linux and want to set up a traffic shaping between your host macOS and a guest VM, and you want to limit the network as follows:</p>
<ul>
<li>20ms RTT, 20Mbit/sec download and upload</li>
<li>No packet loss</li>
</ul>
<p>예를 들어 리눅스가 돌고 있는 VMWare 게스트 VM (또는 컨테이너)이 있다고 하고 호스트 macOS와 이 VM 사이에서 트래픽 속도 제어를 하고 싶다고 해 봅시다. 다음 조건으로 생각해 봅니다:</p>
<ul>
<li>20ms RTT, 업로드/다운로드 모두 20Mbit/초</li>
<li>패킷 손실 없음</li>
</ul>
<p>At first you want to create a <code class="language-plaintext highlighter-rouge">dummynet</code> config, as follows. Note that this is a shell command, not a configuration file.</p>
<p>먼저 <code class="language-plaintext highlighter-rouge">dummynet</code> 설정을 만들어야 합니다. 아래는 쉘에서 실행하는 명령이라는 점에 유의 하세요.</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>% dnctl pipe delete 1
% dnctl pipe delete 2
% dnctl pipe 1 config bw 20Mbit/s delay 10
% dnctl pipe 2 config bw 20Mbit/s delay 10
</code></pre></div></div>
<p><code class="language-plaintext highlighter-rouge">dnctl</code> is a command line utility for <code class="language-plaintext highlighter-rouge">dummynet</code>. It doesn’t exist in FreeBSD because dummynet was integrated with ipfw directly, but macOS X has a separate command line utility.</p>
<p>Here I create 2 pipes, one for upstream and one for downstream. <code class="language-plaintext highlighter-rouge">bw 20Mbit/sec</code> is a bandwidth config and <code class="language-plaintext highlighter-rouge">delay 10</code> is one way latency which is 10ms. We have a 2 pipes in each direction so the round trip time is 20ms.</p>
<p><code class="language-plaintext highlighter-rouge">dnctl</code>은 dummynet 설정용 명령행 유틸리티입니다. FreeBSD는 ipfw 설정에서 바로 dummynet 설정이 가능한 관계로 이 유틸리티가 없습니다만 macOS X에서는 별도의 프로그램으로 존재합니다.</p>
<p>여기서는 두개의 파이프를 만드는데 업로드용과 다운로드용입니다. <code class="language-plaintext highlighter-rouge">bw 20Mbit/sec</code>은 대역폭을 지정하는 것이고 <code class="language-plaintext highlighter-rouge">delay 10</code>은 단방향 지연 시간을 10ms로 지정하는 것입니다. 파이프가 두 방향으로 하나씩 존재하므로 왕복 지연 시간 (RTT)는 20ms가 됩니다.</p>
<h3 id="pf-config">PF config</h3>
<p>Now we need to apply this config to a connection. Let’s say the VM network interface is <code class="language-plaintext highlighter-rouge">vmnet8</code> and you only want to apply to port 80/tcp, then you can add the following to <code class="language-plaintext highlighter-rouge">/etc/pf.conf</code>, or you can have a separate file.</p>
<p>이제 이 설정을 적용할 것입니다. VM의 네트워크 인터페이스 (호스트 측)이 <code class="language-plaintext highlighter-rouge">vmnet8</code>이고 TCP 80번 포트에만 적용하고 싶다면 다음과 같은 내용으로 설정 파일을 만듭니다. <code class="language-plaintext highlighter-rouge">/etc/pf.conf</code>에 추가해도 되고 별도의 파일을 만들어도 됩니다.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dummynet out proto tcp from any port 80 to any pipe 1
dummynet out proto tcp from any to any port 80 pipe 2
</code></pre></div></div>
<p>This will apply <code class="language-plaintext highlighter-rouge">dummynet</code> <code class="language-plaintext highlighter-rouge">pipe 1</code> config from 80/tcp to outgoing, and <code class="language-plaintext highlighter-rouge">pipe 2</code> to the traffic incoming to 80/tcp. You can make an asymmetric network (e.g. Cable network) by using a different <code class="language-plaintext highlighter-rouge">dummynet</code> config for each pipe.</p>
<p>이는 pipe 1을 80번 포트에서 나가는 트래픽에 적용하고 pipe 2를 80번 포트로 들어오는 트래픽에 적용 합니다. 네트워크가 비대칭인 경우 (e.g. 케이블 네트워크) 각 pipe 에 서로 다른 <code class="language-plaintext highlighter-rouge">dummynet</code> 설정을 적용할 수 있습니다.</p>
<h3 id="applying-the-change">Applying the change</h3>
<p>Now you have <code class="language-plaintext highlighter-rouge">dummynet</code> and <code class="language-plaintext highlighter-rouge">pf</code> config, update <code class="language-plaintext highlighter-rouge">pf</code> with the change:</p>
<p><code class="language-plaintext highlighter-rouge">dummynet</code>과 <code class="language-plaintext highlighter-rouge">pf</code>설정이 다 되었으므로 실제로 적용해 봅니다:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>% <span class="nb">sudo </span>pfctl <span class="nt">-F</span> dummynet
% <span class="nb">sudo </span>pfctl <span class="nt">-i</span> vmnet8 <span class="nt">-f</span> /etc/pf.conf
</code></pre></div></div>
<p><code class="language-plaintext highlighter-rouge">-F dummynet</code> will flush the current <code class="language-plaintext highlighter-rouge">dummynet</code> config.</p>
<p><code class="language-plaintext highlighter-rouge">-F dummynet</code> 은 기존의 <code class="language-plaintext highlighter-rouge">dummynet</code> 설정을 초기화합니다.</p>
<p><code class="language-plaintext highlighter-rouge">-i vmnet8</code> is for specifying a network interface to apply the config. If missing it will apply to every interface so better to specify which one to use. You can specify the IP block in <code class="language-plaintext highlighter-rouge">pf</code> config too.</p>
<p><code class="language-plaintext highlighter-rouge">-i vmnet8</code>은 설정을 적용할 네트워크 인터페이스 이름입니다. 만약 지정하지 않으면 전체 인터페이스에 적용 되므로 사용할 인터페이스명을 지정하는 것이 좋습니다. <code class="language-plaintext highlighter-rouge">pf</code> 설정시에는 IP 대역을 지정하는 것도 가능 합니다.</p>
<h3 id="verify-the-change">Verify the change</h3>
<p>Let’s use iperf (v2) to verify the change:</p>
<p>iperf (버전 2)를 사용해서 실제 적용 여부를 확인해 봅시다.</p>
<h4 id="linux-vm-guest">Linux VM Guest</h4>
<p>In a guest VM, run iperf as a server mode at 80/tcp.</p>
<p>게스트 VM 안에서 서버 모드로 TCP 포트 80에 iperf 를 실행 합니다.</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>% iperf <span class="nt">-s</span> <span class="nt">-p</span> 80
Hostname is vm <span class="o">(</span><span class="k">for </span>client connection below<span class="o">)</span><span class="nb">.</span>
</code></pre></div></div>
<h4 id="macos-x-host---before-dummynet">macOS X Host - Before dummynet</h4>
<p>This is a raw speed between macOS host and linux guest before <code class="language-plaintext highlighter-rouge">dummynet</code> change.</p>
<p><code class="language-plaintext highlighter-rouge">dummynet</code>설정을 적용하기 전에 호스트와 게스트 간의 최대 속도를 측정해 봅니다.</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>iperf <span class="nt">-c</span> vm <span class="nt">-p</span> 80
<span class="nt">------------------------------------------------------------</span>
Client connecting to nginx-ssl, TCP port 80
TCP window size: 185 KByte <span class="o">(</span>default<span class="o">)</span>
<span class="nt">------------------------------------------------------------</span>
<span class="o">[</span> 6] <span class="nb">local </span>172.16.127.1 port 61434 connected with 172.16.127.140 port 80
<span class="o">[</span> ID] Interval Transfer Bandwidth
<span class="o">[</span> 6] 0.0-10.1 sec 2.22 GBytes 1.89 Gbits/sec
</code></pre></div></div>
<h4 id="macos-x-host---after-dummynet">macOS X Host - After dummynet</h4>
<p>This is after we applied the <code class="language-plaintext highlighter-rouge">dummynet</code> config (20Mbit/sec) above:</p>
<p>이제 위에서 한 대로 <code class="language-plaintext highlighter-rouge">dummynet</code>설정 (20Mbit/sec) 을 적용해 보고 다시 측정해 봅니다.</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>iperf <span class="nt">-c</span> vm <span class="nt">-p</span> 8444
<span class="nt">------------------------------------------------------------</span>
Client connecting to nginx-ssl, TCP port 80
TCP window size: 129 KByte <span class="o">(</span>default<span class="o">)</span>
<span class="nt">------------------------------------------------------------</span>
<span class="o">[</span> 6] <span class="nb">local </span>172.16.127.1 port 61449 connected with 172.16.127.140 port 80
<span class="o">[</span> ID] Interval Transfer Bandwidth
<span class="o">[</span> 6] 0.0-10.1 sec 23.2 MBytes 19.4 Mbits/sec
</code></pre></div></div>
<p>It works!</p>
<p>잘 되는군요!</p>
<h3 id="reset-the-change">Reset the change</h3>
<p>You can simply clear the <code class="language-plaintext highlighter-rouge">dummynet</code> config by:</p>
<p><code class="language-plaintext highlighter-rouge">dummynet</code>설정은 다음 명령으로 삭제할 수 있습니다.</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>pfctl <span class="nt">-F</span> dummynet
No ALTQ support <span class="k">in </span>kernel
ALTQ related functions disabled
dummynet cleared
</code></pre></div></div>
<p>Or disable <code class="language-plaintext highlighter-rouge">pf</code> if you don’t use it at all:</p>
<p><code class="language-plaintext highlighter-rouge">pf</code>를 더 이상 사용하지 않겠다면 비활성화시키는 것이 좋습니다.</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>pfctl <span class="nt">-d</span>
No ALTQ support <span class="k">in </span>kernel
ALTQ related functions disabled
pf disabled
</code></pre></div></div>
<h3 id="conclusion">Conclusion</h3>
<p>You can use <code class="language-plaintext highlighter-rouge">dummynet</code> in macOS X for configuring a traffic shaper if you need to run some test locally but want to simulate some network. In this case you can also configure <code class="language-plaintext highlighter-rouge">tc</code> on the linux VM side, but if you don’t have a VM or don’t want to change VM (or a container) config, this way will work great.</p>
<p>테스트를 PC 안에서 할 때 네트워크 상황을 시뮬레이션하고 싶은 경우를 위해서 macOS X의 <code class="language-plaintext highlighter-rouge">dummynet</code>을 이용한 트래픽 속도 제어 기능을 사용할 수 있습니다. 물론 linux 쪽에서 <code class="language-plaintext highlighter-rouge">tc</code>를 사용하는 방법도 있습니다만 VM이 아니거나 VM/컨테이너 설정을 바꾸고 싶지 않을 때 이 방법이 유용합니다.</p>
<p>Note that <code class="language-plaintext highlighter-rouge">dummynet</code> has many parameters to config; you can add a packet loss by <code class="language-plaintext highlighter-rouge">plr</code> (e.g. <code class="language-plaintext highlighter-rouge">plr 0.01</code> will make a 1% packet loss) and tune <code class="language-plaintext highlighter-rouge">queue</code> value if you want to simulate a high BDP network.</p>
<p><code class="language-plaintext highlighter-rouge">dummynet</code>에는 설명하지 않은 많은 기능이 더 있습니다. 가령 <code class="language-plaintext highlighter-rouge">plr</code> 로 패킷 손실율을 지정할 수도 있고 (<code class="language-plaintext highlighter-rouge">plr 0.01</code> 이라고 지정하면 1% 의 패킷 손실을 발생합니다) <code class="language-plaintext highlighter-rouge">queue</code>값을 조정해서 BDP값이 큰 네트워크에 알맞은 큐 크기를 지정할 수도 있습니다.</p>
<p>For more information, please see <code class="language-plaintext highlighter-rouge">dnctl</code>, <code class="language-plaintext highlighter-rouge">dummynet</code> and <code class="language-plaintext highlighter-rouge">pfctl</code> man page in your macOS X.</p>
<p>자세한 내용은 macOS X의 <code class="language-plaintext highlighter-rouge">dnctl</code>, <code class="language-plaintext highlighter-rouge">dummynet</code>, <code class="language-plaintext highlighter-rouge">pfctl</code> 매뉴얼 페이지를 참조하세요.</p>
<p>Also, recently I have found an interesting tool named <a href="https://github.com/sitespeedio/throttle">throttle</a> working both on macOS and Linux, doing the steps in the blog automatically in one command. You may try this as well.</p>
<p>또한 최근에 <a href="https://github.com/sitespeedio/throttle">throttle</a> 이라는 도구를 알게 되었는데 이건 macOS 와 Linux 에서 모두 동작 하고 위에서 설명한 내용을 자동적으로 설정해 주는 것으로 보입니다. 대신 해 보셔도 좋을것 같네요.</p>Junho ChoimacOS X has many FreeBSD-based subsystems and packet filtering is not an exception. Currently macOS X has pf which is originally from OpenBSD and also in FreeBSD.