Jaeyeol Lee

@kodingwarrior@hackers.pub · 238 following · 158 followers

Neovim Super villain. 풀스택 엔지니어 내지는 프로덕트 엔지니어라고 스스로를 소개하지만 사실상 잡부를 담당하는 사람. CLI 도구를 만드는 것에 관심이 많습니다.

Hackers' Pub에서는 자발적으로 바이럴을 담당하고 있는 사람. Hackers' Pub의 무궁무진한 발전 가능성을 믿습니다.

그 외에도 개발자 커뮤니티 생태계에 다양한 시도들을 합니다. 지금은 https://vim.kr / https://fedidev.kr 디스코드 운영 중

Github
@malkoG
Blog
kodingwarrior.github.io
mastodon
@kodingwarrior@silicon.moe
0

Jaeyeol Lee shared the below article:

복잡한 코드를 단순하게 줄여나갈 수록 발생하는 버그의 빈도나 심각도가 점진적으로 올라가는 경향이 있다고 느낀다

@disjukr@hackers.pub

<metadata></metadata><style class="style-fonts"> @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAQsABEAAAAADHQAAAPRAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKggCBcAsGAAE2AiQDCAQgBYJeByAMFBsxC1GU7kmc7IuDeIxnknghkogrbGm/yUrQr2+4AWU2eJ7yqver0gMwA3Apn7YXEm9wGAyuCeZhwkEGwsU2dSmhL3X5FByVFyffuXywYwJeQMyQoTnpoLuJgfyOKhWW//9e/Zj7X6bY2GJ5Of9miUZkbxpzAa2CtITVcoaFqhurXC9g/6hepcHKv18JArgBAAIoBEEAF8KEkYqVazbECQPAsgAGzmt9XaZjA4UCpG8i309uOM0ocUCLC1gJ31RzqzSh7De81lD3tfpC92V6W0OWPbuHsqn/gMkGKEADfjQCDQ1MYAikca2hZbFc5pbVCzb8vB95kDr7cavbdIfI1Gb7xRoTVMwDuKHbtE7bj6SaZqVuFbdL27T9qNT9yBLkAJfWdVy700Qx06rdzWzlfbm7EZe4Wu96WLOhOJ9+xPkVXpYdZ+dBjnJAtiBG0prBnHwXk6+L3PLPAT0X1/Eb3arbSwffWdgBpPrxjfrx0gGZA3ZJV1L8fZrrAk8xJCo2CO2ZixRoEyvJBLhi1rEYWk+GQEVlM8HseR1XQ+yb9po9oYNuSUhgByw5kOd7rUXIwJD6XPsIkaA0GKItbxm0g3c5eOCzniQQlKUwZf9fvDcdIiIqhoTElk8ZdIbPORRQsgVfK0DXiIZqoSOt5XsGPeBHDhPM7MTXBdArYqN2OMhu+ZNBX/ibwwMv+/DV0UxgnPUqQOOEIohYFhoABYCRrTcD3dAEblOZSX0myohFy5YFhja87TLxrIwInBvMJuxrci9wXhMDa2+Zt6/KPddJcXOwh93e3mhi+7suFbsqAXNlHk8GrpuUlKXDyXnzxMSG4KglwcHJX1NpDXY/++npl6OSbbpdx9Twl0YtlVflZ2Iof8P3TeMj8t4YVVHP+GzM1oEJF71dano2q9fJYenSwaMG9e/tNXNe+uZqplNblXM9YldoZWfH5iVXzWsss3Cq2VqPvWtz3W6O96scvXR4x/tBTsX+b35Db6vDktwqrvBu41nym3DV7wH3V32NBXiVEjfTem3txl/dD3BCLfD+XpLGtwHp/8+PEVwP6qMX0JL1lfpEYSKxbOl1zznSnEYMZyDZw0Ij+DmrUXiwX6NJN3HfGNbYGMon5GC+D5rqpp0+emqnmwYqaKyT/gbopo/eTDnSZclSQkWddNBJL+1h15QrleWzZQZOGKk8vTtQBf1hqF0GffKmrA1imUE+W34jZCbPy5WmvW4GXiJi8ocV81B9mO9i0MST/Ze5uKKPvoYZdtNFVwP3N1z0RVNNTVXRhMZ1ZPWVqbKfxA4gAvzAJU0KAAAA); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAARQABEAAAAADJAAAAP2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKghyCDAsGAAE2AiQDCAQgBYJeByAMFBtNC8iO0UvPCUWZcpJwSsfD136v5+7uD5ACBB8XFy6xkIDjW1thm7rqql8boQqoCHVt3s/nZS8DKMXPFFRmSv5168xa0+P+hZV1VjycCp72Cp8q//8vbTB3fppg6WL5OfPORDxCvVJpVjtQBUkIV8NbOmDFEC/6jvqO6lUarPy7KNAGFOUkjJEWg78JtemtagKFAlUFA7fn/CIOkJIkxPXEUJcaiokUDXK44BFWts+VtkLh0Tc8Il41dx1EPwkHrkmox5+GQaqlY4ySIiGjk1igk8QoUBTB0be5CihtdK1eqelEV1kHWNwSQLPf9oCiHp0XqLmHArBDz0EjX10UJwC1iJCHY3lqSZwAokUBqHkmTgDxIvLy4jBvQ1sIRgSR8i6CvKivvYuXhCW+1nd1E5yAeGg8xyEems4xfCGmnY1ujLPjBJBswSRZgmEJ+RYzn4985EycANLFSsSLw+va6tt4P0vzhSymGQZ5+Hd1bfw7lmYwjhNAdklfUt3OOa4LeU42T5KKDWKNzEcqmJBKNoSBC4TQJARbZwUKqKawIMDsaXGYR6D8++0t/wRDo2wIIx6DaQazcQIoFysb2zwszTAYqFTnBVB8rkbBqaFhavm1AllH10swwCgadCZVIQfu/H8L3ps3EyycFTZmld8ukB10pwQXaNGl1ADABxKCuGAgFiw/I5Dd9BAJoQgTQ5UaDvgIQiQXhWgWJX+MQI6lx0mIR4IYr9RE4JrUBJDt1yW9qKqSQQIlwFXcAbTBFZceY7ixnRxzD9kuUf09p+3X1XtPPzkL/sMjlo7W4WH7caplSEU6j4C/72wraRkKPzIQy6tI9J/9OBxy+rT9+HX17q6j4B89ASdPPx+0HrnRTLLHh+3H2/59eAOHT3ct8o2M6KsWD6TTOav/HfJCa+uxj7i3+XXL1qKz4hLxQlFS8xGP+G5rRWK6UaY82PH1m9uTu91nOVhQf/yXKQglF5T/j6g9nvjK/togMmxNN8ZPZSoO3Kmb9BQGOo6/dCks8rXS+gMvNZrnz9prpE/mMpqgEHCreiI2imYF8mDUi4HY+sX63P8Kdf4NHy7/CAXgW0zYobnv1VyZzqsBNEkg+Nlky/8B/fG3U8ENoK78wFrWTemfGcwitS6D7m2NLhCL0ox5Y4U1dPpiTTrUrdkysl2GrTX3mWIN5ufAOZx2Ky3TjtOoRItua6zFWWkFJEW8JElysLp16rZcB2wjqWJZOVliUM7hnd5ep8QaFGvPsLKMJG2QSgzKydIbMZTcLFWcDpx1l0ggflw2jzXAcq/1Ew+uWebjxpVW2ezM6dVn3fbNi15EqrQp1UrM9VZdl6hRF7kQIAgWqPKwAAAA); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAARsABEAAAAADIwAAAQTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKghiCBQsGAAE2AiQDCAQgBYJeByAMFBtGC8iuA2xwfQMNpVXW2LKcYgxDZLO05aK8Fyc+hxsPfGusPzuYWqWJaSNCpZHJRCohWiZ0a3KX7nVN6/9b93VTqdaYr85fDVpCBv6oBrDsjLWDM86IS2qvtTBxzf9eZnKf73zDDXBtlaIDjhJNng6vUVCiSzjCCEuf2ZUP/iRgK+9/OP/CFQeacLHk/n/35se9f7YJlm4LuLPnv22iKzKzvVBNYrUDVZCEMNo7WMUoRzxfPYPuJgXr71cigAIAASQYhoE8s8zCpmbyyuDLBFIABq6P8XEYQyFhgHCZ2J55AmFBErzBgwtEBWuW9jIrkfQioXNiMwXRA2w6M8GDn++AJNP4h5YtU2RjBBU4lgQyEciwlMGLJIU7k6/eyzTJ+5HPAAYWNShre2cYNuxr9vcMZBovg4KfnvhrgANE6XaaYjWoAQ1ogH2WvwY8QBmKM6OkyiFIksxeIymDPCvXKJNYtr7KKUUgKZT2bFIo71kqScx0NjiFiPHXQLZgZl0K2KHqxaxakvf8a30GOpBLikdRVXGVGszMVElpYqZlUbq6tVZXt6bElhD+GtglZdLvs6ddF3gD6yNlwgaFUiZJT0hZqTssuOKmK5YOYe2rmVBTtjRmL+ZM16zX2se63ZqJRCz4WWKmJdL8NYgDuaVV6WkVQSUskD43PggmAkcGhZEjT1XINDpdAwNMlWFhGZI4hBr8W3hvnk3gcFzwGDfyfIUsoAs1iCBWRXqVAF5KkHFyKJg88kqFrKKrNWigVTV61QFeTzBwRpiYMfJmhWyhWzXYYFdtenWAYOe9AJEvwzQsBQbQYiADuP0UXAAK4C2xZ/aMFplwrGLHy76t50fSqTrEsLM68dW7PbrXzpF7LzxZfnTedf/tmN425CkQgyM72FTTsw+P3lfXFbvu5ZEG7zjbytd1NWa85HJGQOXu8hfk5wNXDP3Xg/d+LThFv9Ne7SxprqtLTv9BIzVNTPGWfyg9rw9MOtgftnfaKPHWjuGGLTsn3sWjOJ2zA8Z1Jqc8rLavjrHu3XM/lz6S6e0Pjo7YNLT+GV3rxJTO8iluL3j231n7+ry6++y0CN73jiNsb8GVAK7SonITDMSGeaU724aXj418JZD5R/g4vDqAn+bOLf9n9I8tkMMABPjT1DN+G+vfXoGbQpPitTabTJIvujELlTGZdq/LtgjHMvwAfd4WbmaSB27DGNrNBZCbzWG3l04TCt7m+2CPbaUGtVaylUpVwalZC1uDeiRUgGDBYqVxWs2pzio4TsIsZN0QQYGApYzp461SNcPCygwNXRK8QSUo6IaIaBQoOVgYf6vYWi9RIr67GF4ogV23tok7Ni+T3N6gUZe/zc2jdfPRix5K8lTJVIlzE6UJMvLM0C8hAwekJtAPAA==); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAR4ABEAAAAADLwAAAQfAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgkiCMQsGAAE2AiQDCAQgBYJeByAMFBtyC8iOwradM1YI0gkehDEKJx6exv137swH0aT6E7SKUIhwKHCoW+rb+ENbqMMVnp/y8t802d3Sq0llTz9bp2Z6nU+fxHxP69MHfDjR/v9f5uDe+dsESxfbv2feNtEVKb2md5AKkhBGw61oQhWjHPEMewbdTQrW369EoAkQSEIINBiigdY388rAUBWUAgNX5/w4NoKCJCHOJboKhEXduhQ1crjgEXYdOJpZCUn7wXQVd650gegeNq7m0cM3TwBSdfqPsS3D5GBGF04k9rwxoEoRk/3g/wVX1+6u3qnW5f3ICsDMHgPTI0fPIPSAMPT/OoO04Wkwlc+c9meAZjBOF9NktHqWgcEMAzQl+DPgZnCGzLlnlFS5Ekwxza6nOAM319TLvHsSbH1RAyWBWIbSoyKWoeyoICcRtbOvgZAYfwb8FowvUAKruGUxawmS9/zrz0Axk4tlzqOoqrhKltLUclIaUQsCTpeXiqrkpTS1QIg/A+Ulg0l3XHS8LlRF5RTJGG6QLGVB0iGUVgquAtxGqZq6EutchoCqksoMZm/k3NMZkoraR5KroEa3cRVcBaIWSJo/A6OZ3NKq9DQRoEGYNP5c32CoMuRMYMpM3G8mkM3pFhIsYSVaaqwVSRw4k/4WvDdvQ7Dl7GDP7NzvIJAd6U4SnKEWneWqAbyWoOP0wEzvfkEgu9BdJbjBXXSTqwfgPQlenDd8mLf7fQWyH91fQgACxQC5BgHH4CGAbD8t6YNKkUECVQEu4TqgCV6zasDHbLKdVlz3WUBTicdnI6+YrAm/8Ei7D6S4I27nG6n9djRVufjE9cnx1jcEqWwrSPPlj7y3gcSMqcf2hZJDx4y33n3odaTmyiyaMqZhV0FyulfHd+1GKJ430GN2Q73jybLCHpQWHHaQ/4jdtkcg2e48kB/aJno8ufglzntbaW9FZVVSxLPMsA9PAgOLtr+I/Zip7P1jF1C+ap93wW6L1AuGHl56h1URqna74tBMn5llJlZW5l1jOzZ+j+vlu0pgyozV/PfuYb/amQJy1sf28/NVP83VW+K1AXU1vK3XWUvjc0dLLXLqKlddAp/OWZs/KuIqbzyeDAqGJMDZcjM7G/wUyEPebwcLTVa1xn01NMkfAa/3v3MD4I2v++b/b4s3/zd3A3USCP4/hapvA9r/X88KbhgtyLehky2k9IUnZpFdkhH3qlrHcaKqHlOeF+bQ5bI5aVExZ3Po4aphc7VrrJM15vvAUaIandrUEJVKVaFBj16iTh2wUAGCBYuVpkGdBu1q4RwWxo+1QwQF7VgZ0+f6pOpByZoMnW0seINsUNAOEdFI4uRiYfzVEvVdIo356WJ4sgS2m/RPPLFnWZDrO3UZthc1adZ3+OhFL8XyVMlUieP6K+cEGVTAazqADrYwLsE0AA==); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAQQABEAAAAADFgAAAO4AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgWSBWgsGAAE2AiQDCAQgBYJeByAMFBsbC1GUDUqH7Odh7IxoGdAyZ+VKI31IG+puNXjodbX387MnouFEl1MRRHRhqES1VKlMtIKOISiD241DCQiDhm2jwug4h/F0czljYSdX3cOj22euhLmER84fKB1c8IKrNX2Z/QvKuEhg43KZ35CxMYpRITpAoVCYRMnYAuuqKkBZq8nI/qhehcHM328JArABAASgIBAIwAofPkRBUUUDFqgAug4wcreUd1uJARQUQExIladIyGJIEWZI4QF2grmKLW4m5xfRR5UT9AkgJ7CyRxU73jwBxaD8BxoDoAAScCERqVxFA1UgmucW6TrL58/dvGjABX/Jg2XGhmLV0FeID6vQ7wpM/oeF7F5aBRoB/MWJ6LEKMiowAq2CjRCIDA76ZBhCLSzdh1oA581e1ODU3XmvQ9haAuGjCwg/oeRw1l06MJetQvYgaipshXm4riZXN3nNv1WosQEiQ7rUIzGZrOQ4ziKCl0tdkksui8xWYbd0p6XbJXVf4GkWQWJih/CAuUmRw8W1lEE4FYZlGMj2QRVQUU5WWTwqg70KU7e7bjKYRSmD4jLOIjurSGNjQN4BGXJY/a5zhEhQGiyibW8zaAfvcvDAZz1JIMihsGT6X3w3HSIiKoaExLZPGXSGzzkUULIFXytA14iGaqEjre17Bj3gRw4TzOzE1wXQK2KjdjjIbvuTQV/4m8MDL/vw1cQYYB77IEBigYIHoetIABQA1Hy2EnSjDTyJkuE484Tf5ramh5g81rocs1ocst7tcNtjscB9g/USz00m68ZGW+G6znOddMGOy9yXBAcrCxu3Ydo4LnlJszd/wmpx0Fo28Wj8j4sxpU9+M9e+5xrm3SWp97uPpC0etX5yQr3BR/ZEJE6cYhE2rW683VRG197ZcNbO7vTaWA/DvhvyT/f61zFWXh4pqealzR72892/TojKtRZ5lvM3pLQ8emCdXG6oaZ1i9rys9AkfYnH0Ubd9xl8La/kV8HTP7yCAD5HBq/WP+q7+kxMBC5QVPjMlpf4dkf7/uU94XjRALmUUGyjKD6GYiHic9Hl3mdNGIlRLIMLzUidwcVmnYMcpnSTK4lV1XGdgBqewmfV50GKkXuON0WukevmaDJpkspHGG0cTL0qsWOkKDOo3aKw+2NMkMLJCnJiwkK5ofm+KfJNQuDeH8QVN7A7xmLAQJ6kV1tLjEgzVZ6Qpt4hqfLc0Hq6DheGmztw6aZ2bq8abYKbpSMONMGX10E1P1FRoUayZxHOlTyBG9RRhI8EPXMAqQyQ=); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAP8ABEAAAAADCgAAAOhAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgTSBNQsGAAE2AiQDCAQgBYJeByAMFBv2ChEVm7/JfibwZHiNAF8Ur3BUq+BQX17m/XLwUO9qvU5ndgfx9SxVHURncF2XBFMJ4ha8Mf2GE5e/OzJuDriphvh1jYEGWBllHwBXlx5m/9IESxfLZX7nIx6hXqk0qx2oguQJo+FmoXDFKEc8zxIduA2s6t+vBAFUBwAEYCAQCKAqqaQi0jLyyghjAgQBwMBxKV+JrVBgYABiWqLRnCI8YIgYpHABB8FMnpNZSZ8bn0g9clowDaJ3snWYKY58/j7ACBlvAEUIMAAJxCERQBwmCjAxEXDjkyAAudzGqxdCxPFHakAkVyMWOVeF2OxqEazWXPXvICKHDolqYESp9PFpvhgW1aCIBrawoxoiojJ82TijxGnoKk952aM8laHGDR/lm40TV+tVoz23tfL5nPHK53dsv49rOQujXbdbVENuQc2k51JOTVhMJ7jEe/4f1VCRXOXLJkVOseMvS7P8PmmuZdsq3X9c5PiP0yzbdaMa+pKupLh4fNJ1gUnRLcQou0GoVHaJBdfzKsmGNk14nuU1dC1RLZAUfTKa2cOycboWy4raa8sa2hYnG9rqJa5lu2lRDRfJLXXS0yzbdqGGF9ewn6tgGQFEKggvEbSMV3iooHGqSpf1YbC37Ld4b9ZAmIwFNrWEdwjaxXs8fAg4X6oh2AgRMwmkNBE+I+gcX/AooeJKqdZgG0TLdNDTTviBoEf8xGOGhZulusJ2uwmQhDFIQgQBEgADADOb7g7kQRP4+0ajxJkbK24lXH5PLLf2ZL5fbcO7xMUve6es7N3y8g0dT1XbtQ+8c6frVbys6iXsF8svVDs1/Mt3rV3guJ3Pb9k5E+UXifPjfm7TZWfDdn7sgazCmMRQKDGv+iXxsVH9pdX/rDi2c03tHV44PGFdZkqvfaF2rx8s/EOrllLD7mYaYkVst7t1qzo1rwIABCBTmwcfMHdorR7/hqvJHwA+2G+NAL6u8fbgm6C5+Z+cDoQxFnj/IEnz3wH1m+8icD3cRJ7glpuG8TNNBSpi7TSveyyWAUiEWQVowUeFURDHS6NBTbRR0gpv2Rw2hphH3VCM+T4ZnPHDp04aPr60f8XoGTPHT52itNdKW211lzZ65OjJI6iudBCR8+20CfLdZUyvz+o/g0PDM5iaV9puEGsT5Nvp1AipZL8OokaMn3WJiFK266aESig/dvbEjTOWuRTt1GnzrcePHTdr+dxFDyp5TmaldJ0F09qo6DYNYjCBT4OWAAAA); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAQAABEAAAAADDQAAAOoAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgUCBRQsGAAE2AiQDCAQgBYJeByAMFBsGC8gepyt6cCTJgI18vrb0D0NcN+91iKiSjdoS803FnNTsZHajTm+qwuDNvd49gIEthEji4fP2ViVWIOuLlVV34SzQIQaejCXOvl/Tk7cJywgHbFx+5l7I2BhDRC4F9ihUlawiXd16QFmrycjeML2Ewfz7loAArAEAQAAcgiAAS168kE1fXA1zPACaBsDI3bS/SJaAAQ4HIDXVNtzJfI1LpqDJA9yIXcUlrw6Z71H6qHSYNgygFUtaebLuwQ2AG7n/AMYEwAEowBlFUg2PgefJePdRTWOVI23ztgln/CUbQOiuQr4MOwlZJKlEm63imQ9ARu/mMBUwGMs1igppDVOBQgXMQpgKHEyvUD99pcFHYjKTCzplpme9bZ0K74cDnffqkqUIpoAWI1PwFkHJlHTuvi5JSg5TQfaQ8nlZghXWt1raFyCv+S9MBRNFTKH+5YYKgzJN1CmZoqQTBJarHCw3KAdFnSBJYSrYWwbSzmSj+33BFdhM0vwOiSoWIG1Jlmt5HwFuk2Wd7CPZF6oEVJ5ZUrF4I/XLVcm08u7hNB9Bh/I+grhK0gmSGKZCiKIZ+VwRqgUpIf6ud/BynpEgSyXXKxxZpWsCdBgSXWnymQwcTftf+G7WItiMA1fquN7jyD49EBAikoRijQGbEFImQy7NXF9w5JJeCajRSGqxtoDtCD0zYJQOrp848kxfBKzYJKtYd2B/vCIAyhzHHfk1FABwAIAHEEAOoAbawIPIOvGxpXzddRVZ7bb6hk3tdNfp+yzlfZ5rr5Ppom/l0r/arvffsMqv7Me33Xdz9VXnadc8gmtqrh3DtD2W1XiU/k1rYoZZJ1remZHDu0+wt+33z6Y8qW0MNBPLcl5Xr7b8FO6t6+KGEyYOpjuGUD7br9ff1LL60Bn+Ei8EWOxIt8g0WYaf/HYY8OAUyUl3i3+OViNMnM+hU5DTmNI7LXap38yt6EsAuLnpvS8APAnxW6Y91YL4v3Q4AHMcACBgktTBfyOq/29De8S8CF6BPqBMx3VvEJDBHD5axgFaM/XokcECQLDbpYlwdtzEsaWaqHDycX7cZGIcx4Sp9XmAgVGboQZpY1QlR60uI4xkNNQQTIxwUaKkEHXp0GWwdrhgYoWyVrTI0A9T+vmLUXKMgIm2HENbTNQOmciwFS2+lWDp5WKFaWc06hYpxs+XzBOVsNVj9MwzR6wLcN1Qw4y3NerRa9TxHTe9lSlmkKcO5fnShiFSX0W/hEhhQyyCEA==); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAQ8ABEAAAAADIgAAAPhAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKghSCAgsGAAE2AiQDCAQgBYJeByAMFBtDC8iOw7jhK61Mllg8cBRB/V639y6lq9CK/nlUoXFdli4cg0JabNRXEo/Q6Bz/XjZZo+BLQS5KpfLWuu2dc7ByzslfoP/g/fs5jczLLxkJbFx/L+9S42sMIY/QojCrkrPTBHaK5ayen5DLqF6lwcq/X4nABBAoQgiM7LKBXejS8oCnAysTDFydeR2bB2yKgvhMlC0EBW9FCQ5kuABWYcvVvb4Q4pbv6Ryzw9QBonvAvEoWtvbZPYDSZfzH4ZYusjMxxxSJEssh6LDRXr43mXDmemv1ctfc+5EtQL2kQXRXtA/D5hA0ZppCg2bvKIjkW7k3DVhFSGvQUFilNw2MSgPW4N40MCvSUUxnXU6RI4FIRCbXkkiHGqtqKZZz4mh9UR1J+CIKcu8NiIK8e5yKI6ydHXUEEeFNA2sLwoqTBMygpsWkyUFu88+bBnZNRRTTJasou4gyaqyxX0O34DjSUmeyioLDGmucILxp4FzSkVRGDRbXBW6C05Awb4NALnOQMkGSlbgjDjeQpDXpSFhLaQyoNC5Fw+zVTGctjRmz2ptGR9waxR1xcRvCGic03jTwa2pukVZjjeMEUIBgOQ28z5XyKCGIiFB4MYOW4KU8ZCDnZHIFG0eBJeP/gvemlQgVpQYzohbenEFb4C15WIE1ZyVWG0DbIuwoe0DEXnicQTvgHXk4gTPnJFYXQLsi3Ch38CDuwnsyaC+8Nw8f8OV8xOoHzP3fEUAaKDZhK5MEBXSQ+AC+QBO8QlYbyxLSbInV/oK72Lj5VuFM58VgVC06KCAXgdH2jnox89+TiYtAB5pNt/OqpuUd7jIZu7SuXp1/OXJMLC4TCKbH82Z1OzfwL4XKQ/l33BcnDy3v+oNu70K2+dtOzua1c/KC7V7/mDBhWoNIcSVpk751rlwRJp7yOcfPbxrLw7lHxWBbWOLL+OO8F1Nlu7d5cY16n87javWMcdatXlk0zjYbS/OfMGnK9oOfQhb+EqeLa6JErjcE3cI8fqH8wp3HYgYmu2qWhv2P3jZ33Y2Pb3yqkEZ94wmZ7wH43fjVCYA/T+cFptcm987f7AQwUBa4/zPxzv+A4v/n84LrQiP5AylsVMoncMUkIufS7V7V94gpOnyg8bDQhblLumKm1aVj5NHOsK7rmyLQM98H7hlUadeiikGuRAXqdOlm0K4NEsiHP3+RNOrUqNOqGg6QIF6sFMAvsMOQbvqgR6IuGKjKoL2E+G8Q8QtKAUIaAZRcLIi3agY9lwghfrYIHsiBpQa9E0/tWubgqnYdBk0NGjTqObr9opciaYroFWJyba06+Km34LaQYAcqECRhAQAAAA==); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAPcABEAAAAADBAAAAODAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgRyBIQsGAAE2AiQDCAQgBYJeByAMFBviCsieg3HzcaR6hDg+8REeiGxd22NrRzw8LW3vz0yuNFWbS/a67VVeR9g9h0RYhAYbHyXRIDR6/U9d+bTeIwigbyZfB4heB8k6Ym8AqFOY2lwqXSqFsGQowx3B4M293j2AgZXFidf/5P6F/+/Uw/xcp9jYYr2+/C7RCu1JYwONCTSBSlgNdy3gYJUr3ohih7FLHMZXIjACCCQhBIbMi8HO7AkzEKxA0wAj+3O+y3aBIkmIOtX1cEZwX4pA5PAAHkGiu+fRs1Hd/dH9kev/NeQau1q9cfLNE0gtzz8sC0BCxjhDQHuvZVC46HV/NFhl2uDmtZZx/yN7QHWrIT45/YztEJr9n8a1cJYof2vO0GBF5HMtxVozNFRpsM0zNFyRrYwEe5oTJ0guy+tOSTb1tnUqbwIOdD7VJUUWKfezS8rzzNWRMN25LiFKMzSyB/Xm5QuskH819QfIKX8zNKoaTyonTnGmOmqjZeInLWFyTj51ZYqjrlgmFyJDo28ZSOvr3OH3BaZAt0ma3SExnQVITUhZy8dxOCalKdeE3aoDVFld0hYPGgk+zTZO6e5sjOMmOiWOx3FhcmFlaFw1frrjs4SWiwT/u77BKllGAJEK7pcIWsYrAlTQeFWtc9UMZz9+y3ezBsJkLLCp5X6HoF28J8CHgPflGgI2QsRMAilN3J8RdI4vBJRQ8aVca8A2iJbpoKed+weCHvGTgBkWfpbrChy3NiA79yXTWAMZJFDyxC6DI6AsJ6TlQQvk6SNs01HzydLJeDtYyveezH4S1ncY/4xDMx4O3/d7xjb7AGNHkw6OPnpkf9//OfhG93bYFn/IkFU25MxRfczlwf4MPqpu8NGw8fc9FZcaOmlD2FfYU+0Cz9+T8fZvLXCw/1HtS7bEGDzn8UQdCQQI5PmU/8leWUvU3tfgYeMdwJ9fX+IB/nUS9jRJKX/yF2BAAkGu/9dQ/jf9U/kjeOE5d+Sf+DCk9BFJAOB2aAp5+/q9MkQJAW3PS3MYd8ucjOmZsw1ysYybW74bmOgz0sEzV5sF5mrjmq7OLF0WW8K1wHwkT6YcOcpYunToMk87FCP50pFc2WG1jD1/dqk6i3Vpw7CgSnJ2yGTjaq7CVoLS3fJlaOdaeosU8c1KeWIarPZYNnPt4nUBrl9goVX2rh69li723VSUTOAYbTaD56+pZWv10HYkxGACXwQdAA==); } @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAARgABEAAAAADLAAAAQFAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgjyCJAsGAAE2AiQDCAQgBYJeByAMFBtlC8geg+NuKcNiiSWmINp9/h4P/7/2+33unYdYMm1mkUxzD3EioVDJ8E0aq0+JP9K/aP2V+fk68/1MyFX0Z0EGS2Tqhdik9dS6wVNPzZN0uNEFQe7//2UO7p2/hResdLH9e+ZtE12R+Vsr1qKlpWoFCmE0VJrleDpHOeIZYcwwdonD+JUIdAACSQiBNsMM0KqtsBKECqhrGHk45y+xGngkCVGmlgpiQziXokkOD0LC1vqxvQYyHxF9VaL8X4JcwuprLnr79ilIjfSMcTwkZHQjBDJzjaPQxfAx/testL95s6Eb/8gKYHaNBem24yhCdxSL/t+yYBk5A1L5alYYC2gWY2urhUFzwljgzLKApskwFohZbGMIP1u5w4fCNKbzGmhswy21DQzXD4vOFzXSVARmoOK4FTNQeUwymZTe3dNIUclhLHD3YNwVmsI23LaatQnymX/DWODNFmCG8C91lDkYp0XPZFooPUliK3O51MFctuhJigpjgX9LkbYmWz3uC0GVP00Kwh2yFUyQJkXTtYoPCddoWk/7UPZSFgE1ZNZZWLxI+FlZ5Czt7jt9SD16jg/pQ1J6krKEsSCaLahwWC1CpQJmxb8bGYQGISeBlEmCL5PIcrpCgRIqWWlS6zI58Of8W/DdvIag5XRwY7rgu0tkD7qnAi/oZS+tGgBvJJg4MzAzB5+UyN50HwW+8JN9teoP+ABCIBeEYBYU/BCJHEoPUxCOCDlcq5HAN+oTAWQtkn6ormWQQIGMErgFbfiuPBtgrKGR62nBuadPkWujuPJRG73bbSNyuW+7JTn99NZpyTJw7jOPSs+zvqzv/V633VuRSz8tI6ag1bpA3U1Pa56Kmx/rNoCzez08mlw/faOb/wuvTlVs7aiy3vgMzgr/a8J6zuHN2vXNP6nMhUXvnuobI6bJUUvXvTyX686ZU3C7XTARk1KNijiaekGUyc0tMyCjlvK3n/qyvBpVlvoWSDWhwmI3N0ltUvIufnJyncBL5B9qEQ4RC7n5XtM4XXlS9ejtFfGS3q/KXQ/DRFsDQrSdeuNfdIhB73uNvhExAo2hPVY9/ywABPJwkJ0zcu1KkfpVKMm/4OnjO18Avs74rf2/Dir+5F4ALRIIcvm/BMX/+vO/4o/gJZyH8mtwQEjprwmrjmEZJOihZqcIUbRi2ovSGbrddCZdKmc2jz5ZjDsbbqizTeY7wLFWtbp1qNWqQo5qjfr0a9WtCxYjXJQoKSwa1YeNTnVohsUKZY1okUiFedv82YAcfTBbm6O7gUXtUIwMG9HiW1mcXi1WmDqtBm6Rx/xiyTxbDhvNBmee27dOcGu3HqPerZq1GDi576bXYoUc7GoQvGh1KVK3EjgjYYIW4hrMAAAAAA==); } @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,d09GMgABAAAAAAHwAA0AAAAABBAAAAGhAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGx4cNAZgADQRCAoALAsGAAE2AiQDCAQgBYMYByAbUwPIrgpscEcPjAqbbfFGeKx5Kz5EU3R4bDzUL93bvX8JXUVSmorE9SJxvRjNeBQOYXEOHSway/n/P+buVKO/qf2JJVWsT8RCwUokBQ4hUxIh0zx2kOoSixA6//37cw+I33LHb5EcSZbiLwn1l1CELdAXC7/Ia2HUcht7no7PES0JadRRYMAoA87WTvMJYgUaIDBgDsM3u00398MKuofDeAnda/+0gQ7Y6yWfIrW+/EzgUNU4x/xDBFjZOqq08QNClf+f6uoSTsInxFsCk8RIVOjgCel8k6AoApMN3NH0cADRkCBBwaAYFwg+3u9CxZ9YxvsDevfuFsDP16+mlcs86JMgeJ5qrXFd4uBUWQ2UIgTSN4QgEQJrAGg7xhNFAl79NkLHN9KIL1S6XlHMGqC2wm7dMgu23Qz1rcxNbG2cBDwYmzpb6Tt4MXZwNLe1QSKCwvXjrIqVu52ZIxIVxBC3KIZJ8px7SJ61Fz2qaMtGEnnLBb26c3cwNzVzQtyGPAgTxsSQgTtKV44c9F0FkZyVFcrjcfBYND7qYmwkiAc0qxEAAA==); }</style><rect x="0" y="0" width="632.0353021317197" height="468.12524655748945" fill="#ffffff"></rect>버그 심각도코드 단순성<mask></mask><mask></mask>

복잡도를 올리는 방향으로는 점진적으로 빈도와 심각도를 낮출 수 있지만 수렴하는 위치가 최적이 아닌 문제가 있고, 복잡도를 낮추는 방향으로 가면 점진적인 접근을 시도하기 어려워서 문제를 해결하기까지의 비용이 쉽게 예상되지 않는 문제가 있다.

회사에서 복잡도를 높이는 방향으로 문제 해결을 요구받는 일이 많은데 최적해로 가길 원하는 엔지니어로서의 자아와 늘 충돌하게 된다.

개인시간을 희생해서 문제를 푸는 데에도 한계가 있고 (풀어서 갖고와도 도입하는데 많은 설득비용을 써야함).. 그냥 회사에서는 자아실현을 포기해야 하는지 싶음.

Read more →
0

한국 연합우주 개발자 모임(FediDev KR)은 이름 그대로 한국에서 연합우주(fediverse)와 관계된 개발(프로그래밍 뿐만 아니라 문서화, 번역 등을 포함)을 하는 사람들의 모임입니다. 실제로 Hackers' Pub의 개발 논의도 이 모임에서 처음 나왔었고요. Hackers' Pub을 통해서 ActivityPub이나 연합우주에 관심이 생기셨다면 한 번 참여해 보셔도 좋을 것 같습니다.

참고로 올해에는 아직 개최한 적 없지만 비정기적으로 스프린트 모임도 하고 있습니다. @sprints.fedidev.kr한국 페디버스 개발자 모임 계정을 팔로하시면 스프린트 모임이 열리기 전에 미리 공지를 올릴테니 미리 확인하실 수 있을 거예요.

0
0

Jaeyeol Lee shared the below article:

Browser-Native Translation and Language Detection APIs Coming Soon

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

Just reviewed the W3C draft for the Translator and Language Detector APIs. This is genuinely exciting development for web developers.

The proposal would add native browser support for:

  • Text translation between languages
  • Language detection of arbitrary text
  • Both with streaming capabilities

No more relying on third-party translation services or embedding external APIs for basic language operations. All processing happens locally in the browser.

The API design is clean and straightforward:

// Translation example
const translator = await Translator.create({
  sourceLanguage: "en",
  targetLanguage: "fr"
});

const translatedText = await translator.translate("Hello world");

// Language detection example
const detector = await LanguageDetector.create();
const results = await detector.detect("Hello world");
// Returns array of detected languages with confidence scores

This will be a game-changer for multilingual sites and applications. The browser handles downloading appropriate language models and manages usage quotas.

The spec is still in draft form but shows promising progress toward standardizing these capabilities across browsers. Looking forward to seeing this implemented.

Read more →
0
0

옛날에 만들어놓고 저 혼자는 잘쓰고 있는 React 폼 라이브러리 react-form-mozard를 소개합니다.

폼 중에서 Stepper 또는 Wizard라고 하는, 여러 개의 폼을 순차적으로 합친 형태를 다룰때 씁니다. 그래서 하나의 폼에 대해서는 react-hook-form 등 을 쓰고, 그걸 여러개 조합할땐 react-form-mozard를 활용하면 됩니다.

순차적으로 합친 에서 느낌이 오지요? 모나드가... 그대를 부릅니다...

폼 말고 CLI를 만들때를 잠깐 생각해보죠.

const name = prompt("이름이?")
const age = prompt(`{name} 님, 나이가?`)
if (Number(age) < 20) {
  console.info("미성년자는 이용할 수 없습니다")
  return
}
const gender = prompt(`{name} 님, 성별이?`)

뭐 이런 흐름을 생각해볼 수 있는데요. 보시면 먼저 받은 입력값에 따라 이후의 메시지나, 제어 흐름이 달라질 수 있습니다. 즉, 모나딕하죠. 근데 이런 평범한 로직을 Stepper/Wizard 에서 짜게되면 코드게 쉽게 더러워 지는걸 알수 있습니다.

react-form-mozard의 step은 위 예제의 prompt와 같은 역할을 합니다. 그리고 그걸 Generator 위에 얹으면 모나딕한 폼 합성이 가능해집니다.

단점이라면... 지금은 React랑 강결합 되어 있어, XState 등 다른 상태관리 라이브러리를 같이 쓴다면 연동이 깔끔하지 않을수 있습니다. 근데 평소에 쉽게 겪을 문제는 아니라고 보고, 또 추후에 설계를 수정해서 개선이 가능한 부분입니다.

0
0
0
0
0
0
0
0

Hackers' Pub에 글을 쓸만한게 뭐가 있을까 하고 생각해봤는데, 알고리즘 문제풀이 컨텐츠로 채우는것쯤은 금방금방 가능할 것 같지만 이런식의 양치기보다는 그래도 엑기스를 모아서 정제되어있는 형태의 글을 올리는게 나을 것 같아

0
0

소프트웨어 개발자들이 자주 틀리는 외래어 표기법.

영어 틀린 표기 올바른 표기
app 어플
application 플리케이션 플리케이션
directory 디렉 디렉
front-end 트엔드 트엔드
message
method
release 릴리 릴리
repository 포지 포지

또 있을까요?

0
9
0
0
0
0

자동으로 설정된 프로필은 어디에서 오는 걸까 (분명 어디엔가 쓴 이미지가 자동으로 연동된 걸텐데(랜덤으로 구우사마가 붙을 가능성은 매우 희박하다) 요즘 구우를 어디에서 썼는지 기억이 잘.

0
0

DEI 중에 접근성은 I에 가깝겠지만, 개발자 중에 관심 있는 사람은 적은 듯.

공동 작업을 위한 저장소 계정을 따로 만들고, 개인 계정을 협업자로 등록해서 작업을 하고는 있는데...

  • 수집할 정보도 많고,
  • 개개인의 관심사도 다르고,
  • 각자 사용 가능한 시간도 다를테고,
  • 함께 해줬으면 하는 전문가들이 있지만 말 꺼내기도 쉽지 않다.

저변을 넓히고 싶고, 토론의 장도 만들었으면 좋겠고, 하고 싶은 것도 많고. 그러나 나 역시 현생의 문제가 여전하다.

0

Hacker's Pub에 입문한 한국어권 여러분을 위한 안내서

Jaeyeol Lee @kodingwarrior@hackers.pub

먼저 터를 잡은 사람으로서 Hacker's Pub에 오신 여러분들을 환영합니다. 현재 추정하건데 150명이 넘는 분들께서 Hacker's Pub에 들어오고 계신 것 같은데요. 물이 들어오면.... 노를 젓는게 인지상정이겠죠? 이 서비스가 만들어진 초기부터 관심을 가져왔고, 이 서비스의 가능성을 믿는 사람으로서 여러분에게 안내를 드리고자 합니다.

Hacker's Pub은 무엇을 하는 곳인가요?

Hacker's Pub은 소프트웨어 업계에 몸을 담고 있는 여러분들의 찰나의 생각, 혹은 장문의 정제된 생각들을 자유롭게 개시할 수 있는 소셜 네트워크 서비스이자, 블로깅 플랫폼입니다. 여러분은 그때그때 드는 생각들을 올려서 다른 사람들과 자유롭게 소통이 가능합니다.

Hacker's Pub 이라는 이름은 중의적인 의미를 가지고 있습니다.

  • ActivityPub 프로토콜을 지원하는 해커들을 위한 커뮤니티
  • Hacker's + Pub - 해커들이 자유롭게 웃고 떠들 수 있는 주점

Hacker's Pub이라는 커뮤니티에 애정을 가지고 있는 저로서는, 여기에 들어오시는 모든 분들이 Pub에 들렸다가 가는 것처럼 편안한 공간으로 느껴지시길 바랍니다. 우리 모두가 편안함 경험을 누릴 수 있도록 초대제로 운영이 되고 있습니다. 또한, 사회적 합의로서 행동강령도 마련되어 있으니 한번 참고해보시면 좋을 것 같습니다.

ActivityPub 프로토콜이란 무엇인가요?

Hacker's Pub은 ActivityPub 프로토콜을 지원하는 커뮤니티서비스입니다. 그렇다면, ActivityPub은 무엇일까요? ActivityPub은 웹 상의 분산형 소셜 네트워크를 구현하기 위한 국제 표준 프로토콜로, W3C에서 표준화되었습니다. Mastodon, Misskey, Pleroma 등 다양한 SNS 서비스들이 이 프로토콜을 기반으로 상호 호환되며 자유롭게 소통할 수 있도록 지원합니다. 쉽게 말해, 어떤 SNS를 사용하더라도 경계를 넘어 서로 소통할 수 있도록 돕는 것이 ActivityPub의 핵심입니다.

ActivityPub에 대한 자세한 설명은 여기가 정말 잘 되어 있으니 관심있는 분들은 한번 정독해보시는걸 권장드립니다.

Hacker's Pub을 이용하는 여러분들은 ActivityPub 프로토콜을 사용하는 모든 SNS 서비스(Mastodon, Misskey 등)의 사람들과 연결이 되어 있으며, 심지어 Bluesky에 있는 사람들과 연결이 되어 플랫폼의 경계가 허물어져 있는, 사실상 초연결적인 사회의 경험을 누릴 수 있습니다.

Hacker's Pub 생태계에 기여하기

Hacker's Pub은 아직 Early Stage 단계이며, 여전히 개선하고 발전해야 하는 여지는 있습니다. Hacker's Pub은 모든 것이 오픈소스로 개발되는, 전적으로 개방된 커뮤니티 서비스이기 때문에 여러분도 생태계의 발전에 기여할 수 있습니다. 해커들을 위한 공간이니만큼, 어느 누구에게도 기여는 열려있습니다. 여러분은 여기에서 실시간으로 기여에 참여하실 수 있습니다.

경우에 따라서는 Hacker's Pub에 당장은 기여하기가 어려울 수도 있습니다. ActivityPub 프로토콜에 대한 사전지식이라던가 혹은 서비스가 만들어진 기술스택에 대한 사전지식 같은 것들이 진입장벽이 될 수는 있을 것이거든요. 그렇다고 해도 괜찮습니다. ActivityPub에 대한 이해는 한국 연합우주 개발자 모임에서 함께 커뮤니티 차원에서 함께 알아가면 됩니다.

더불어, 시간이 지나면 Hacker's Pub 주변 생태계도 더더욱 발전할 수 있을 것이라 믿습니다. 당장은 서버와 클라이언트가 합쳐져서 개발되고 있는 형태이지만, 조만간 서버와 클라이언트가 분리되어서 개발될 예정이고, Mastodon/Misskey 같은 다른 ActivityPub 기반의 서비스가 그래왔듯, 우리만의 Hacker's Pub 클라이언트를 만들게 되는 날도 올 것입니다.

Hashnode 처럼 Hacker's Pub 블로그 템플릿 같은 것이 만들어지는 미래, 기대되지 않나요?

함께 만들어가는 Hacker's Pub

Hacker's Pub은 해커들을 위한 공간인 동시에, 모든 분들이 각자의 색깔과 생각을 마음껏 표현할 수 있는 열린 무대입니다. 우리 커뮤니티는 상호 존중과 신뢰를 기반으로 하며, 이를 위해 마련된 행동강령을 준수하는 동시에, 우리 모두의 다양한 의견과 피드백이 존중될 수 있는 공간입니다. 만약 새로운 아이디어나 개선 사항이 있다면 언제든지 의견을 공유해도 됩니다. 우리 모두의 참여가 바로 Hacker's Pub의 미래를 밝게 만드는 원동력입니다.

Read more →
0
4
0
0
20
0

블루스카이를 연합우주보다 먼저 썼고, 해커뉴스에서 관련 주장에 대해서 꽤 싸우기도 한 입장에서 민희님의 글 〈Bluesky는 X의 훌륭한 대안일 수 있지만, 연합우주의 대안은 아닙니다〉에 대한 반대 의견을 제시하고자 한다. 이 의견이 연합우주에 대한 전면적인 비판이 아니라는 것을 의견을 제시하기에 앞서 확실히 해 둔다(그랬다면 Hackers' Pub에 들어 올 일이 없었겠지).

탈중앙화는 매력적인 개념임이 틀림 없다. 인터넷의 많은 중요한 요소들이 어느 정도 탈중앙화되어 있으므로 탈중앙화가 인터넷의 장점들에 큰 몫을 했다는 생각을 쉬이 할 수 있고, 어느 정도는 그게 사실이기도 하니까. 하지만 엄밀히 말하자면 탈중앙화는 기술적인 특징이지 그 자체로 장점이 아니며, 탈중앙화가 장점으로 작용하려면 연결고리가 필요하다. 이를테면 비트코인을 위시한 암호화폐는 본디 비잔틴 실패까지 대비할 수 있는 강력한 탈중앙화를 장점으로 내세웠으나, 결국 화폐로서 제대로 사용되기 시작하자 현실 경제와의 커플링 때문에 그 "장점"이 크게 희석되고 말았다. 현 시점에서 암호화폐는 무에서 유의 신뢰를 창조하여 신용화폐의 요건을 충족하는 데까지는 성공했고 그것만으로도 역사적인 일이기는 하지만, 그게 탈중앙화랑 무슨 상관이 있느냐 하면 글쎄올시다.

블루스카이가 연합우주보다 덜 탈중앙화되어 있음은 분명하다. 민희님의 글에서 지적되었듯, 블루스카이가 이런 선택을 한 가장 큰 이유는 온전한 소셜 네트워크 기능을 위해 전역 뷰가 필수적으로 필요하다고 보았기 때문이다. 반대로 말하면 연합우주는 더 탈중앙화를 하기 위하여 전역 뷰를 포기했는데, 이 때문에 연합우주에서의 "소셜 네트워크"는 트위터/X와는 구조가 크게 다르다. 노드 규모가 문턱값에 다다르지 못하면 다른 노드에 있는 사용자를 찾아서 팔로해야만 온전한 소셜 네트워크 구성이 가능한데, 연합우주 안에서는 이런 외부 사용자를 찾는 구체적인 방법을 제공하지 않는다. 물론 인터넷과 똑같이 검색 엔진이 존재할 수야 있겠지만, 크롤링으로 인한 부하와 프라이버시에 대한 의견 차이 때문에 현실적으로 작동하는 연합우주 내 검색 엔진은 없다고 알고 있다. 따라서 연합우주에서 소셜 네트워크의 구성은 연합우주 바깥의, 보통은 중앙화되어 있는, 다른 소셜 네트워크(이를테면 현실 인간 관계)를 빌어야만 하는데, 이러면 탈중앙화가 큰 가치가 있을까?

한편으로는 전역 뷰가 소셜 네트워크의 단점이라고 주장할 수 있는 여지도 있다. 트위터/X를 오래 써 본 사람이라면 다 알겠지만 한 무리의 사람들이 다른 의견을 가진 무리와 충돌하는 주된 통로는 검색이나 해시태그를 통한 노출, 즉 전역 뷰이기 때문이다. 그러나 현실의 규모 있는 연합우주 노드들을 살펴 보면 각 노드가 곧 한 무리에 대응하는 식으로 충돌을 미리 회피하는 형태로 구성되지, 딱히 이런 충돌을 막기 위한 접근을 가지고 있는 것은 아니다. 노드 운영자를 위해 차단하는 걸 추천하는 서버 목록 같은 게 돌아다니는 건 연합우주 바깥의 일이지 않는가. 결국 전역 뷰의 역할을 대체하는 소셜 네트워크 바깥의 또 다른 소셜 네트워크가 존재할 것이기에, 우리가 소셜 네트워크를 어떤 이유로든 유용하다고 여긴다면 전역 뷰가 없는 게 장점이 될 수는 없다.

모든 이들이 이런 사고 과정을 가지고 블루스카이나 연합우주를 선택했다고 생각하진 않지만, 적어도 현 시점에서 사용자들은 블루스카이(이 글을 쓰는 시점에서 약 3360만명)를 연합우주(FediDBFediverse.party로부터 추정할 때 최대 1530만명)보다 선호하는 것은 틀림이 없다. 게다가 블루스카이의 규모는 최근 1년 사이에 10배 불어난 것이고, 조금 장애가 있었지만 현재는 잘 동작하는 것으로 보인다. 위의 논의와 결합해 보면, 블루스카이는 정석적인 스케일링에 성공하고 있는 반면 연합우주는 스케일링 문제를 회피하기 위해 온전한 소셜 네트워크의 구성을 포기했다고 볼 수도 있는 대목이다. 블루스카이가 못미더운 부분은 분명히 존재하지만, 연합우주가 더 좋은 소셜 네트워크 경험을 제공한다고 가정하고 블루스카이의 단점을 제시할 수는 없다. 마치 암호화폐를 논할 때 장점만 말할 수 없는 것과 마찬가지로 말이다.



RE: https://hackers.pub/@hongminhee/2025/bluesky-a-good-alternative-to-x-not-to-the-fediverse

0
0
0
0
0
0

한국은행은 여러 지표 및 보고서 등을 구독할 수 있도록 토픽 별 RSS 피드를 제공합니다. 하지만 <![CDATA[로 감쌌음에도 <, & 같은 글자들을 escape 처리하여 제대로 읽기 어려운 문제가 있었습니다.

때문에 기대한대로 읽을 수 있도록 간단한 릴레이 서버를 작성했습니다. https://bokrss.moreal.dev에서 지원되는 RSS 피드들을 확인할 수 있고 링크를 복사하여 각자 사용하는 RSS 리더에서 구독할 수 있습니다.

좌측에는 한국은행에서 제공하는 원본 RSS의 내용이 표시되어 있고, 우측에는 릴레이 RSS의 내용이 표시되어 있습니다.https://bokrss.moreal.dev 의 스크린샷입니다. 릴레이 서비스에서 지원하는 한국은행 RSS 피드들의 목록이 표시되어 있습니다.
0
1
0
0
0
0
0
0

Hackers' Pub에 행동 강령이 있다는 사실, 아셨나요?

우리 커뮤니티는 단순한 기술 토론을 넘어 모든 구성원이 진정으로 환영받는 포용적인 공간을 만들기 위해 상세한 행동 강령을 마련했습니다.

특히 주목할 만한 점은:

  1. 구조적 차별에 대한 명확한 입장: “모든 사람을 동등하게 대우한다”는 명목 하에 현실의 구조적 불평등을 무시하지 않으며, 이를 극복하기 위한 적극적인 노력을 중요시합니다.

  2. 기술적 엘리트주의 지양: “이것도 모르세요?”와 같은 조롱, 특정 기술 스택이나 도구에 대한 비하, 초보자의 질문을 무시하는 행위를 명확히 금지합니다.

  3. 모든 언어의 동등한 존중: 전 세계의 모든 언어를 동등하게 존중하며, 어떤 언어로도 자유롭게 소통할 수 있습니다.

자세한 내용은 행동 강령 페이지에서 확인하실 수 있습니다.

0
0
0

해커스 펍에 남기는 첫 글로 진.짜. 술을 파는 해커스 펍을 소개하겠습니다… 도쿄 히가시나카노에 위치한ハッカーズバー(hackers bar)에 가시면 바텐더 분의 라이브코딩을 구경하며 블루스크린, 커널 패닉 등의 이름이 붙여진 칵테일을 마실 수 있어요… 모두가 각자의 랩탑을 들고 와서 자유롭게 코딩하고 이야기 나누는 분위기! 도쿄에서 손에 꼽게 인상적이었던 바였습니다. 도쿄에서 술도 마시고 코딩도 하고 싶으신 분들은 한 번 들러보심이~~!

긴 술 잔에 파란색 술이 담겨있다.술집 천장에 달린 세개의 모니터를 사람들이 보고 있다.
0
0
2
0
0

Jaeyeol Lee shared the below article:

파이어폭스의 숨은 기능

가을별 @gaeulbyul@hackers.pub

내 Hackers' Pub 계정은 좀 더 정보있는 글을 올리는 블로그처럼 운영하면 좋을 거 같다.

그래서 이번 글은 내가 예전에 마스토돈에 공유했던 글 중 파이어폭스에 숨겨진, 그래서 비교적 잘 알려지지 않은 기능을 소개하는 글을 모아보았다. 추가로 아직 공유하지 않았던 기능도 하나 덧붙였다.

주소창에서 쓰는 계산기 및 단위변환

파이어폭스의 about:config 에는 브라우저 설정페이지에선 보이지 않는 각종 실험적인 기능이 숨겨져있기도 하다. 그 중 하나는 주소창에서 사칙연산 수식을 입력하면 드롭다운에 이를 계산한 결과값을 보여주는 계산기 기능인데, 예를 들어 "12 + 12"를 입력하면 24가 아래에 나타난다. 이는 about:config에서 browser.urlbar.suggest.calculatortrue로 설정하고나면 이 기능을 사용할 수 있다.

단위변환 기능도 숨어있는데, 예를 들어 주소창에 "30 cm in inches"를 입력하면 "11.81102362 in" 가 나타난다. 이는 about:config에서 browser.urlbar.unitConversion.enabled 값을 true로 설정한 뒤 사용할 수 있다.

설정된 검색엔진에 따라, 저 옵션이 설정하지 않더라도 검색제안을 통해 위와 비슷한 기능을 쓸 수 있기도 한다. (구글이나 빙 등)

페이지내 미디어 모아보기 & 내려받기

보통 웹 페이지에서 이미지를 저장할 땐 마우스 우클릭 메뉴를 사용하거나, 우클릭이 막혀있을 경우 개발자도구를 사용하여 URL을 알아내어 저장한다. 파이어폭스에선 방법이 하나 더 있는데, 바로 페이지 정보를 활용하는 것이다.

이 기능은 Ctrl + I 단축키나 Alt 메뉴 -> 도구 -> 페이지 정보를 통해 들어갈 수 있는데, 여기서 "미디어" 탭에 들어가면 해당 페이지에 들어간 미디어 즉, 이미지와 배경 이미지는 물론, HTML5 오디오나 동영상까지 모두 모아서 보여준다.

게다가 여기에 나타난 파일들은 우클릭/개발자도구 방지같은 방해없이 저장하는 것도 가능하고, 심지어 여러 파일을 선택해서 한꺼번에 저장하는 기능도 있다!

다만, 여러 파일을 저장하는 기능은 이름이 겹치는 파일을 빼먹는 경우가 있어서 이 점이 아쉽다. 또한 이 기능을 가지고 유튜브나 일부 웹툰사이트에선 미디어를 저장할 수 없다. (URL 앞에 blob: 가 붙어있으면 여기서 저장할 수 없는 파일이다.)

이스터에그: 파이어폭스에도 숨겨진 게임이 있다.

크롬에선 인터넷 접속이 안 될 때 공룡이 달리는 게임이 숨어있다. MS에지(Edge)에선 서핑하는 게임이 숨어있고 비발디 브라우저에선 Vivaldia라는 게임이 있다. 파이어폭스에도 이런 숨겨진 게임이 있는데, 주소창 입력으로 진입할 수 있는 타 브라우저들과는 달리 너무 꼭꼭 숨겨서 다른 브라우저에 비해 찾기가 힘들다.

파이어폭스에서 도구모음 사용자지정(Customize toolbar)에 들어간 뒤, 가변 공간(Flexible Space)만 남기고 나머지 항목을 모조리 도구모음이나 더보기 메뉴에 넣으면 아래에 유니콘 에모지 버튼이 생긴다. 이를 누르면 Pong을 90도 돌린거 같은 게임이 나타나며 키보드의 좌우 방향키로 조작하여 플레이할 수 있다.

개발자도구 UI크기 조절

이건 사실 Chromium계 브라우저에서도 있는 기능이다. 개발자나 파워유저의 경우 종종 브라우저의 개발자도구를 사용하기도 하는데, 사람에 따라, 혹은 사용하고 있는 모니터에 따라 개발자도구의 UI나 글자 크기가 너무 작게 느껴질 수도 있다.

그럴 땐 개발자 도구에서 Ctrl + (+ 혹은 -) 단축키를 누르거나 아니면 Ctrl + 마우스 휠을 통해 UI 크기를 조절할 수도 있다.

Read more →
1
0
0
0
0

Bluesky는 X의 훌륭한 대안일 수 있지만, 연합우주의 대안은 아닙니다

최근 X(구 Twitter)를 떠나는 사람들이 늘면서 Bluesky에 대한 관심이 뜨겁습니다. Bluesky는 깔끔한 인터페이스와 과거 Twitter와 유사한 사용자 경험을 제공하며, 신뢰할 수 있는 이탈(credible exit)이라는 매력적인 개념을 내세워 X의 유력한 대안으로 떠오르고 있습니다. 하지만 Bluesky와 그 기반 프로토콜인 AT Protocol을 연합우주(fediverse)의 대안으로 보기에는 근본적인 차이가 존재합니다. 이 글에서는 Christine Lemmer-Webber 씨(@cwebber)의 날카로운 분석(〈Bluesky는 실제로 얼마나 탈중중앙화 되어 있나〉 및 〈답장: 답장: Bluesky와 탈중앙화〉)을 바탕으로, Bryan Newbold 씨(@bnewbold)의 반론(〈Bluesky와 탈중앙화에 대한 답변〉)을 충분히 고려하면서 Bluesky가 어째서 X의 대안은 될 수 있어도 연합우주의 대안은 될 수 없는지 이야기를 풀어볼까 합니다.메시지 전달 對 공유 힙: 근본적인 설계 차이 Bluesky와 연합우주의 가장 큰 차이점 중 하나는 설계입니다. 연합우주는 이메일이나 XMPP와 유사한 메시지 전달(message passing) 방식을 채택하고 있습니다. 이는 특정 수신자에게 메시지를 직접 전달하는 방식으로, 효율성이 높습니다. 예를 들어, 수많은 서버 중 단 몇 곳의 사용자만 특정 메시지에 관심을 있다면 해당 서버에만 메시지를 전달하면 됩니다. 비유하자면, 철수가 영희에게 편지를 보내려면 직접 영희의 집으로 편지를 보내고, 영희가 회신하고 싶으면 직접 철수에게 회신하는 것과 같은 방식입니다. 반면, Bluesky는 공유 힙(shared heap) 방식을 사용합니다. 이는 메시지를 특정 수신자에게 직접 보내는 대신, 모든 메시지를 중앙의 “릴레이”라는 곳에 저장하고, 관심 있는 사용자가 릴레이에서 자신에게 필요한 정보를 필터링하는 방식입니다. 이는 마치 모든 편지가 하나의 거대한 우체국(릴레이)에 쌓이고, 각자가 이 우체국에 방문하여 자신에게 관련된 편지를 직접 찾아야 하는 것과 같습니다. 이런 방식에서는 메시지가 직접 전달되지 않기 때문에, 답글이 어떤 메시지에 대한 것인지 파악하려면 모든 가능한 메시지를 알고 있어야 합니다. 이 설계는 데이터와 색인을 분리하여 유연성을 제공한다는 주장도 있지만, 필연적으로 대규모 중앙 집권화된 릴레이에 의존하게 되어 탈중앙화의 이상과는 거리가 멀어진다는 한계가 있습니다. 결국 Bluesky가 공유 힙 방식을 채택하고 중앙 집권화된 릴레이에 의존하게 되는 데에는 운영 비용이라는 현실적인 이유가 크게 작용합니다. Christine Lemmer-Webber 씨의 분석에 따르면, Bluesky에서 전체 네트워크 기록을 저장하는 릴레이를 운영하는 데에는 상당한 스토리지를 요구하며, 이는 빠르게 증가하고 있습니다. 2024년 7월에는 약 1TB의 저장 공간이 필요했지만, 불과 4개월 후인 11월에는 약 5TB로 증가했습니다. 상업용 호스팅 서비스 기준으로 이는 연간 수만 달러(약 $55,000)에 달하는 비용이 발생할 수 있습니다. 반면, 연합우주에서는 개인이나 소규모 단체가 Raspberry Pi와 같은 저렴한 장비로도 GoToSocial과 같은 소프트웨어를 실행하여 독립적인 노드를 운영할 수 있습니다. 물론 대규모 연합우주 인스턴스는 더 많은 비용이 들겠지만, Bluesky의 전체 릴레이 운영 비용과는 비교하기 어려울 정도로 저렴합니다. 이처럼 운영 비용의 현격한 차이는 Bluesky가 분산된 구조를 채택하기 어렵게 만들고, 결국 중앙 집권화된 릴레이에 의존하게 만드는 주요 원인이라고 볼 수 있습니다.전역 뷰에 대한 집착과 중앙 집권화의 심화 Bluesky는 댓글 누락과 같은 문제를 피하기 위해 네트워크 전체의 일관된 전역 뷰를 유지하는 데 집중하는 것으로 보입니다. 이러한 목표는 사용자 경험 측면에서 긍정적일 수 있지만, 필연적으로 중앙 집권화를 야기합니다. 대표적인 예가 차단 목록의 전체 공개입니다. 네트워크 전체의 일관성을 유지하기 위해 누가 누구를 차단했는지 모든 앱뷰가 알아야 하므로, 차단 정보가 공개되는 것입니다. 이는 개인 정보 보호 측면에서 심각한 우려를 낳을 수 있습니다. 단순히 누군가의 게시물을 보고 차단된 사람을 추측하는 것과, 네트워크에 “J.K. 롤링을 차단한 모든 사람”을 직접 질의할 수 있는 것 사이에는 큰 차이가 있습니다. 실제로 ActivityPub 개발 과정에서는 이런 문제를 고려하여 서버 간에 차단 활동을 전달하지 않도록 명시적으로 설계했습니다. 이는 차단한 사람이 차단당한 사람의 보복을 받을 위험을 줄이기 위함입니다. 반면 연합우주에서는 각 서버가 독립적으로 차단 정책을 시행하며, 사용자에게 더 많은 자율성을 제공합니다.AT Protocol과 개방형 표준으로서의 ActivityPub 연합우주의 핵심 프로토콜인 ActivityPub은 W3C의 채택 권고안으로, 개방형 표준입니다. 이는 누구나 자유롭게 구현하고 사용할 수 있으며, 다양한 소프트웨어 간의 상호 운용성을 보장합니다. 현재 페디버스 커뮤니티는 FEP를 중심으로 활발하게 프로토콜을 개선하고 발전시켜 나가고 있습니다. 반면, Bluesky의 AT Protocol은 아직 특정 사기업에 의해 주도되고 있으며, 개방형 표준으로서의 지위는 아직 확립되지 않았습니다. 이는 페디버스가 가진 확장성과 지속 가능성 측면에서 중요한 차이점이라고 할 수 있습니다.DM의 중앙화 Bluesky는 콘텐츠 주소 지정이나 이동 가능한 아이덴티티와 같은 탈중앙화 요소를 도입했지만, DM은 완전히 중앙화되어 있습니다. 사용자가 어떤 PDS를 사용하든, 어떤 릴레이를 사용하든 상관없이 모든 DM은 Bluesky 회사를 통해 전송됩니다. 이는 Bluesky가 아직 기능적으로 완전한 Twitter 대체품이 되기 위해 속도를 우선시했다는 증거입니다. Bluesky는 이 DM 시스템이 장기적인 솔루션이 아니라고 밝혔지만, 대부분의 사용자들은 이 사실을 인지하지 못하고 있으며 DM도 AT Protocol의 다른 기능처럼 작동한다고 가정합니다. 이러한 중앙화된 DM 구현은 “신뢰할 수 있는 이탈”이라는 Bluesky의 핵심 가치와도 모순됩니다. 만약 Bluesky社가 적대적인 인수나 정책 변경을 겪게 된다면, 사용자들의 개인 대화는 완전히 회사의 통제 하에 남게 됩니다.이동 가능한 아이덴티티와 DID: Bluesky 방식의 한계 Bluesky는 이동 가능한 아이덴티티(portable identity)를 핵심적인 장점 중 하나로 내세우며, 이를 위해 DIDs, 즉 분산 식별자를 활용합니다. 이는 사용자가 자신의 계정과 데이터를 다른 플랫폼으로 쉽게 이동할 수 있도록 하는 중요한 기능입니다. 하지만 Christine Lemmer-Webber는 AT Protocol이 채택한 did:web과 did:plc 방식이 여전히 DNS와 Bluesky社가 관리하는 중앙 집권화된 PLC 레지스트리에 의존하고 있어 완전한 사용자 통제하의 독립적인 아이덴티티를 제공하는지 의문을 제기합니다. 더 놀라운 점은 Bluesky社가 초기에 모든 계정에 대해 동일한 rotationKeys를 사용했다는 사실입니다. 이는 클라우드 HSM 제품이 키별로 비용을 청구해서 각 사용자에게 고유한 키를 제공하는 것이 금전적으로 비용이 많이 들었기 때문이라고 합니다. 이러한 접근 방식은 DIDs 시스템을 구축하는 근본적인 목표와 모순되는 것으로 보입니다. 중요한 점은 DIDs 기술 자체가 탈중앙화된 아이덴티티를 위한 잠재력을 가지고 있음에도, Bluesky와 AT Protocol이 채택한 특정 방식이 중앙 집권화된 요소에 의존한다는 것입니다. 블록체인 기반의 DIDs와 같은 진정으로 탈중앙화된 방식도 존재하지만, AT Protocol은 비교적 구현이 쉬운 did:web과 did:plc를 선택했습니다. 따라서 사용자가 Bluesky 생태계를 벗어나 자신의 아이덴티티를 완전히 독립적으로 관리하고자 할 때 제약이 발생할 수 있습니다. 또한 현재 시스템에서는 Bluesky社가 사용자의 키를 대신 관리하고 있어, 사용자가 현재는 Bluesky社를 신뢰하더라도 미래에 신뢰하지 않게 된 경우에도 여전히 회사에 의존해야 합니다. Bluesky社가 사용자를 대신하여 이동을 수행하도록 신뢰해야 하며, 심지어 Bluesky社가 사용자에게 향후 신원 정보를 제어할 권한을 위임하더라도 Bluesky社는 항상 해당 사용자의 키를 통제할 것입니다. 한편, 연합우주에서는 이미 노마딕 아이덴티티(nomadic identity)라는 개념을 통해 이동 가능한 아이덴티티에 대한 논의와 연구가 활발하게 진행되어 왔습니다. 이는 단순히 계정을 이전하는 것을 넘어, 사용자의 데이터와 관계, 심지어 평판까지도 자유롭게 이동할 수 있도록 하는 더 포괄적인 개념입니다. 《We Distribute》에 실린 기사 〈오, Zot! ActivityPub에 노마딕 아이덴티티가 도입된다〉에 소개된 Zot 프로토콜과 같은 기술은 이미 연합우주 안에서 이러한 노마딕 아이덴티티를 구현하기 위한 메커니즘을 제공하고 있습니다. 또한, FEP-ef61와 같은 제안을 통해 ActivityPub 자체를 개선하여 더 나은 이동 가능한 아이덴티티 기능을 추가하려는 노력도 진행 중입니다.그래서, 결론은? 결론적으로, Bluesky는 사용자 친화적인 인터페이스와 신뢰할 수 있는 이탈 기능을 통해 X의 훌륭한 대안이 될 수 있습니다. Bluesky는 콘텐츠 주소 지정 방식을 통해 노드가 다운되더라도 콘텐츠가 살아남을 수 있게 하는 등 연합우주가 아직 충분히 활용하지 못하는 몇 가지 강점도 가지고 있습니다. 하지만 중앙 집권화된 설계, 전역 뷰에 대한 집착으로 인한 부작용, 개방형 표준으로서의 한계, DM의 중앙화, 그리고 이동 가능한 아이덴티티 구현의 제한점 등 여러 측면에서 연합우주의 대안으로 보기는 어렵습니다. 연합우주는 메시지 전달 방식의 분산된 아키텍처, 낮은 참여 장벽, 개방형 표준 기반의 활발한 커뮤니티 개발, 그리고 사용자에게 더 많은 자율성과 통제권을 제공하는 철학을 바탕으로 구축된, 근본적으로 다른 종류의 탈중앙화 소셜 네트워크입니다. 또한, Bluesky社가 벤처 캐피털 자금을 확보함에 따라 “조직은 미래의 적이다”라는 그들의 자체 인식에도 불구하고, 투자자 수익과 플랫폼 성장이라는 상업적 압력이 진정한 탈중앙화 추구보다 우선시될 위험이 있습니다. 특히 유료 계정과 광고가 도입되면서 이러한 우려는 더욱 커질 수 있습니다. 따라서 Bluesky는 X를 대체할 수 있을지 모르지만, 연합우주가 제공하는 탈중앙화된 가치와 경험을 대체하기는 어려울 것이라고 생각합니다. 두 시스템은 근본적으로 다른 목표와 설계 철학을 가지고 있으며, 이상적으로는 서로를 보완하는 방향으로 발전해 나갈 수 있을 것입니다.

hackers.pub · Hackers' Pub

Link author: 洪 民憙 (Hong Minhee)@hongminhee@hackers.pub

0

2025 Q1 Review

Jaeyeol Lee @kodingwarrior@hackers.pub

작년 10월 쯤부터 강남에 파견근무를 가게 되었다. 간만에 돈벌이가 나쁘지 않은 생활, 요즘 받는거에 비하면 월급 두배 이벤트를 하고 있는데, 그만큼 너무 바빠졌다. 주말도 쉬지 않고 일했고, 설연휴도 삼일절 연휴도 쉬지도 못하고 일했다. 그러다 보니, 책을 읽을 시간도 없을 뿐더러, 사람을 만나러 다닐 여유도 거의 없다시피 했다. 일정을 잡는 것도 눈치봐야 하는 수준으로 바빠졌고, 이 일정이 언제 끝날지도 모르겟다.

그래서 블로그에 근황을 남기자니, "네.. 그냥 뺑이치고 있습니다..." 라고 밖에 요약이 되지 않는다.

요즘 근황이 어떻냐면....

블로그에 쓸만한 근황은 잘 없는 것 같지만, 그래도 몇가지 변경사항은 있는것 같아서 기록이라도 남겨야겠다. 대외활동을 하게 될 일은 당연히 없었어서 타임라인을 나열하기도 어렵고, "그냥 요즘 이런 변화가 생겼고, 이런 생각을 하고 있습니다" 정도로 남겨두겠다.

노트를 사서 끄적이는 습관을 들이려고 하는 중이다

삶에 변화를 좀 줘볼까하는 마음가짐에 프랭클린 플래너랑 속지를 구매했다. (사실 이런짓은 2016년/2020년 시도해본 적도 있었다) CEO 사이즈가 간편하기도 하고, 펜을 꽂을 수 있는 공간도 있어서 들고 다니면서 뭔가를 끄적이기에도 좋다.

Post by @kodingwarrior@silicon.moe
View on Mastodon
<script data-allowed-prefixes="https://social.silicon.moe/" async src="https://social.silicon.moe/embed.js"></script>

요즘은 일할때 아에 A4 용지 하나 꺼내서 거기다가 해야할 일들 나열하고, 어떤 Sub task를 해야하는지 시각적으로 쪼개기도 하는데, 키보드로 타이핑해서 할 일을 관리하는 것보다 역설적으로 더 관리가 잘 된다. 하나하나 남김없이 기록으로 남겨야겠다는 강박을 가지면 그것도 그것대로 집중이 안되었던 것 같다. 필요하면 그때그때 하나의 축약된 스냅샷을 남긴다면 모를까.

Getting Things Done 에 따르면, 할 일 관리 내지는 생산성의 끝판왕은 펜과 종이로 충분하다고도 설명하곤 했었는데, 왜 그런지는 요즘 들어서 실감하고 있다. 그렇다고, Vim을 사용하는 워크플로우가 별로이냐면 그것도 아니다. 각자, 담당할 수 있는 영역이 다를 뿐이고, 시각화가 필요하거나 시각적인 정보의 자유로운 배치를 원한다면 마우스로 어거지로 배치하느니 차라리 펜과 종이만한게 없다.

지하철 타고 다닐때나 버스를 타고 다닐때, 종이책을 들고 다니면서 읽거나 아이패드로 책을 읽곤 하지만, 책 자체가 내용이 많은건지 내 처리속도(1분당 1-2페이지)가 느린건지 유의미하게 읽는 양이 그렇게 많지는 않다. 꾸준히 읽는다는 것 자체에 의미를 둘 수는 있긴 하겠지만, '찔끔찔끔 읽으면서 내가 가져갈 수 있는게 무엇인가?'라는 실용적인 관점에서 접근해보니, 책 읽는데 시간을 들이기보다는 조금이라도 생각나는 것들을 다이어리에다가 기록이라도 남겨두면 이것들을 조합해서 밀린 계획들을 조금이라도 정리도 할 수 있고, 블로그에 글도 올리고, 블로그에 글을 올리겠다고 밀린 것들도 청산할 수 있고 일석이조 아닌가?

물론 책을 읽을 시간이 많으면 베스트겠다.

슬슬 취준을 시작하고 있다

지금 진행중인 3년이 넘는 계약도 슬슬 끝나간다. 취업 시장에 나올 수 있을때까지 한 6개월~1년 정도 남았다고 볼 수 있는데, 밥벌이를 하면서 취업 준비를 하기도 적당한 시기다. 사실은, "취업 준비"라는걸 제대로 해본 적도 없었다. 지금까지 해온 밥벌이도 그냥 코딩테스트는 그냥저냥 통과해서 그 운빨로 인턴을 시작하기도 했고, 그 다음부터는 지인(혹은 2차 지인)이 다니는 회사에 공식적인 전형이 없이 일을 해오긴 했었다. 그래서, 취업 준비를 하는 것도 이번이 처음이다.

여기에서도 간단하게 언급하긴 했었는데, 취준을 하게 된다면 프론트엔드 직군을 알아보거나 혹은 풀스택 직군을 알아보게 될 것 같다. 프론트엔드 직군을 생각하게 된 이유는 아래와 같다.

  • 돈이 되는 제품을 만드는건 결국 프론트에서 시작한다.

아무리 기능이 많더라도 사용성이 구리거나 이쁘지도 않다면, 그걸 쓰려고 하는 고객도 잘 없다. 그것은 즉슨 돈벌이가 되지도 않는다. 기능을 특정 고객에게 맞춤형으로 개발한다고 한들, 사용성이 구리거나 이쁘지도 않으면 다른 경쟁업체에게 빼앗기기 일쑤다. 돈이 되는 일을 하고 가치를 창출하려면 프론트엔드를 하는게 불가피하다는 결론에 도달했다.

  • 이왕 피할 수 없으면, 그냥 이대로 커리어로 끌고 가야겠다는 생각이 들었다.

본업은 분명히 백엔드로 시작하긴 했었지만, 실무에서 주로 하게 되었던 일들은 프론트엔드 할 사람이 없거나 혹은 일손이 모자라서 짬처리를 하는 일이었다. 거쳐갔던 회사 중에는 신중하게 기획하고 제품을 잘 만드는 것에 집중하고 기술스택을 가리지 않는 좋은 회사도 있었지만 이 경우는 짬처리와는 거리가 멀었다. 짬처리를 당하든, 내가 자발적으로 하게 되든, 결국에는 프론트엔드는 피할 수 없는 일이 되어왔다.

피할 수 없으면, 이걸로 계속 밥벌이를 하고 있으면, 그냥 이걸 내 커리어로 들고 가는게 맞지 않을까? 라는 생각이 들었다. 어차피, 백엔드도 그렇게 깊게 하지도 않았으니 프론트엔드가 손에 맞아가는 이 시점에 프론트엔드로 방향 트는 것도 방법이겠다 싶다.

프론트엔드 취준을 생각하면서도 걱정이 든다

프론트엔드 쪽으로 취업을 하려고 생각은 하고 있지만, 이래저래 걱정은 많다. 가장 먼저 드는 생각은, 내가 프론트엔드 개발을 할 때는 손이 그렇게 빠르지가 않다. Figma를 보면서 작업하면 금방이라고 느끼는 사람도 있겠지만, 하루에 10페이지-20페이지를 금방 찍어내는 사람이랑은 속도 차이가 좀 있는 것 같다.

거기다 처음부터 다시 배워야 하는 수준이다. 백엔드도 그렇게 깊게 하지는 않았지만, 프론트엔드는 더더욱 구조를 생각하면서 짜왔던 편도 아니거니와, 돌아만 가면 되는 수준으로 야매로 짜오긴 했다. 컴포넌트 나눠서 개발하는건 당연히 기본이긴 하지만, 잘 나누는지는 모르겠다. 그나마, "CSS는 과학이다"라는 마음가짐이었어서 CSS는 어느 정도 익숙하지만 딱 거기까지만인 것 같다.

지금까지 커리어를 이어오면서, 가장 취약했던 것도 사실은 프론트엔드이기도 하다. 퍼블리싱을 입히는 작업이 가장 괴롭게 느껴지기도 했었고, 다른 작업보다 심리적인 저항감이 있었어서 상대적으로 시간이 오래 걸리기도 했었다. (ADHD의 영향이 있어서일지도 모른다) 오히려 약점인 분야로 취업을 생각하고 있는 것도 어떻게 보면 이상하기도 하지만, "나는 프론트엔드 개발자다" 라는 마음가짐으로 임하게 된다면 그나마 저항감이 덜어질 것 같다.

당장은 할 수 있는 것부터 하고 있다

프론트엔드 개발자로서 어필하려면, 당장은 프론트엔드 개발자로서 포트폴리오가 될만한 것들을 만들어야 한다. 그러면서, 더더욱 의욕을 잃지 않을만한 것을 찾아서 만들어야 한다. 그래서 요즘은 나도 쓰고 남한테도 쓰라고 권장할 수 있는 앱을 만들려고 시도하는 중이다. 이 글을 쓰고 있는 Hackers Pub에 기여할 방법을 찾아보기도 하고, 직접 Mastodon 클라이언트를 만들고 있기도 하다. 다음 분기에는 꼭 출시하는게 목표다. 면접이나 과제 전형 준비는.... 일단 맞으면서 배워야겠지..

그래도 Full-stack 엔지니어(요즘 용어로는 Product 엔지니어) 라는 선택지도 완전히 버리지는 못해서 백엔드를 해야한다면 그때그때 습득하면 될 것 같다.

지금까지 읽은 책들

위에서 언급했다시피, 책 읽을 시간도 거의 확보하지 못했다. 집 - 사무실 - 집 - 사무실 루틴을 반복하는 것도 모자라서 최소 일주일에 한번 이상은 사무실에서 밤새기까지 해서 책을 읽을 정신적인 여력 조차도 없었다.

그나마 읽은 것들을 나열하자면....

  • 또라이 제로 조직 (No Asshole Rule)
    • 개인적으로 별로였다. 어떤 특징을 가진 사람을 또라이라고 규정하는 방식이나, 또라이라고 하는 사람이 조직에 얼마나 해로운지를 그럴듯한 설명을 하고 있지만, 이것도 주관적인 기준에 따라 다를 수 있기 때문에 평범한 사람도 또라이로 지목이 되어서 따돌림을 당하고도 남는 사회다.
    • 일부는 납득은 되지만, 어조가 너무 노골적인 책이었어서 개인적으론 별로였다. 노골적인게 누군가에겐 사이다일 순 있겠지만, PTSD 있는 사람들에겐 피하라고 하고 싶은 책이다.
  • RAG에 대한 책을 읽긴 했는데, 아직 공식적인 제목은 나오진 않았다. JPub에서 협찬을 받았지만, 출간 소식이 공식적으로 올라오면 그 때 링크를 달아두겠다.
  • 큐레이션 : 정보 과잉 시대에서 쓸모에 맞게 조합해서 전시하는 것만으로도 어떤 가치를 전달할 수 있는지 잘 설명해주는 책이다. 알고리즘 기반의 추천이 어떻게 보면 이 시대의 큐레이션이라고 볼 수 있지 않을까?
  • 노 필터(-ing) : 인스타그램 창업 스토리를 다루고 있는 책인데, 지금 읽고 있는 중이다. "사진을 찍고, 공유한다"라는 핵심적인 기능을 파고 들어서 시장에서 독보적인 위치를 차지해온 서사가 재밌다. 근데, 책 읽을 시간도 계속 없어져서 어느 시점부터는 맥락이 날아갈 것 같다.

And...?

이젠 좀 바쁜 것도 끝이 보이고, 이젠 진짜 하고 싶은거 많이 하면서 다음 분기를 보내고 싶다.

  • Vim 행사 열기
    • 좀 더 초보자들 친화적이고, 좀 더 많은 사람들에게 와닿고, 특히 Vim 자체에 어려움을 겪는 학생들에게도 Vim에 대해 가지는 "접하기 어렵다" 라는 고정관념을 타파할 수 있는 행사를 여는게 목표다.
    • 지난 주부터 서베이를 돌렸는데, 44명이나 되는 분들이 응해주셨다. 이미 큰 행사를 열 것으로 계획하고는 있었지만, 정말 큰 행사가 될 것 같다
  • JLPT N3 따기
    • 듀오링고 일본어 모든 섹션을 다 완주하고 나서 자신감이 생겼다. 한자를 공부하는게 좀 고역이긴 하겠지만, 쪼끔이라도 잠깐 훑어보면 되지 않을까?라는 나이브한 생각이긴 하다. 어차피, 일본으로 넘어가는게 목표이기도 하겠다, N3 따는 걸로 시작해서 그 다음은 N2, 그 다음은 N1 점진적으로 따려고 한다.
    • 일본 이민가기 프로젝트... 성공하겠지...?
  • 만들고 있는 Mastodon Client를 플레이스토어에 출시하기
Read more →
0

Jaeyeol Lee shared the below article:

Bluesky는 X의 훌륭한 대안일 수 있지만, 연합우주의 대안은 아닙니다

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

최근 X(구 Twitter)를 떠나는 사람들이 늘면서 Bluesky에 대한 관심이 뜨겁습니다. Bluesky는 깔끔한 인터페이스와 과거 Twitter와 유사한 사용자 경험을 제공하며, 신뢰할 수 있는 이탈(credible exit)이라는 매력적인 개념을 내세워 X의 유력한 대안으로 떠오르고 있습니다. 하지만 Bluesky와 그 기반 프로토콜인 AT Protocol을 연합우주(fediverse)의 대안으로 보기에는 근본적인 차이가 존재합니다. 이 글에서는 Christine Lemmer-Webber 씨(@cwebber)의 날카로운 분석(〈Bluesky는 실제로 얼마나 탈중앙화 되어 있나〉 및 〈답장: 답장: Bluesky와 탈중앙화〉)을 바탕으로, Bryan Newbold 씨(@bnewbold)의 반론(〈Bluesky와 탈중앙화에 대한 답변〉)을 충분히 고려하면서 Bluesky가 어째서 X의 대안은 될 수 있어도 연합우주의 대안은 될 수 없는지 이야기를 풀어볼까 합니다.

메시지 전달 對 공유 힙: 근본적인 설계 차이

Bluesky와 연합우주의 가장 큰 차이점 중 하나는 설계입니다. 연합우주는 이메일이나 XMPP와 유사한 메시지 전달(message passing) 방식을 채택하고 있습니다. 이는 특정 수신자에게 메시지를 직접 전달하는 방식으로, 효율성이 높습니다. 예를 들어, 수많은 서버 중 단 몇 곳의 사용자만 특정 메시지에 관심을 있다면 해당 서버에만 메시지를 전달하면 됩니다. 비유하자면, 철수가 영희에게 편지를 보내려면 직접 영희의 집으로 편지를 보내고, 영희가 회신하고 싶으면 직접 철수에게 회신하는 것과 같은 방식입니다.

반면, Bluesky는 공유 힙(shared heap) 방식을 사용합니다. 이는 메시지를 특정 수신자에게 직접 보내는 대신, 모든 메시지를 중앙의 “릴레이”라는 곳에 저장하고, 관심 있는 사용자가 릴레이에서 자신에게 필요한 정보를 필터링하는 방식입니다. 이는 마치 모든 편지가 하나의 거대한 우체국(릴레이)에 쌓이고, 각자가 이 우체국에 방문하여 자신에게 관련된 편지를 직접 찾아야 하는 것과 같습니다. 이런 방식에서는 메시지가 직접 전달되지 않기 때문에, 답글이 어떤 메시지에 대한 것인지 파악하려면 모든 가능한 메시지를 알고 있어야 합니다.

이 설계는 데이터와 색인을 분리하여 유연성을 제공한다는 주장도 있지만, 필연적으로 대규모 중앙 집권화된 릴레이에 의존하게 되어 탈중앙화의 이상과는 거리가 멀어진다는 한계가 있습니다.

결국 Bluesky가 공유 힙 방식을 채택하고 중앙 집권화된 릴레이에 의존하게 되는 데에는 운영 비용이라는 현실적인 이유가 크게 작용합니다. Christine Lemmer-Webber 씨의 분석에 따르면, Bluesky에서 전체 네트워크 기록을 저장하는 릴레이를 운영하는 데에는 상당한 스토리지를 요구하며, 이는 빠르게 증가하고 있습니다. 2024년 7월에는 약 1TB의 저장 공간이 필요했지만, 불과 4개월 후인 11월에는 약 5TB로 증가했습니다. 상업용 호스팅 서비스 기준으로 이는 연간 수만 달러(약 $55,000)에 달하는 비용이 발생할 수 있습니다.

반면, 연합우주에서는 개인이나 소규모 단체가 Raspberry Pi와 같은 저렴한 장비로도 GoToSocial과 같은 소프트웨어를 실행하여 독립적인 노드를 운영할 수 있습니다. 물론 대규모 연합우주 인스턴스는 더 많은 비용이 들겠지만, Bluesky의 전체 릴레이 운영 비용과는 비교하기 어려울 정도로 저렴합니다. 이처럼 운영 비용의 현격한 차이는 Bluesky가 분산된 구조를 채택하기 어렵게 만들고, 결국 중앙 집권화된 릴레이에 의존하게 만드는 주요 원인이라고 볼 수 있습니다.

전역 뷰에 대한 집착과 중앙 집권화의 심화

Bluesky는 댓글 누락과 같은 문제를 피하기 위해 네트워크 전체의 일관된 전역 뷰를 유지하는 데 집중하는 것으로 보입니다. 이러한 목표는 사용자 경험 측면에서 긍정적일 수 있지만, 필연적으로 중앙 집권화를 야기합니다. 대표적인 예가 차단 목록의 전체 공개입니다. 네트워크 전체의 일관성을 유지하기 위해 누가 누구를 차단했는지 모든 앱뷰가 알아야 하므로, 차단 정보가 공개되는 것입니다.

이는 개인 정보 보호 측면에서 심각한 우려를 낳을 수 있습니다. 단순히 누군가의 게시물을 보고 차단된 사람을 추측하는 것과, 네트워크에 “J. K. Rowling[1]을 차단한 모든 사람”을 직접 질의할 수 있는 것 사이에는 큰 차이가 있습니다. 실제로 ActivityPub 개발 과정에서는 이런 문제를 고려하여 서버 간에 차단 활동을 전달하지 않도록 명시적으로 설계했습니다. 이는 차단한 사람이 차단당한 사람의 보복을 받을 위험을 줄이기 위함입니다.

반면 연합우주에서는 각 서버가 독립적으로 차단 정책을 시행하며, 사용자에게 더 많은 자율성을 제공합니다.

AT Protocol과 개방형 표준으로서의 ActivityPub

연합우주의 핵심 프로토콜인 ActivityPub은 W3C의 채택 권고안으로, 개방형 표준입니다. 이는 누구나 자유롭게 구현하고 사용할 수 있으며, 다양한 소프트웨어 간의 상호 운용성을 보장합니다. 현재 페디버스 커뮤니티는 FEP를 중심으로 활발하게 프로토콜을 개선하고 발전시켜 나가고 있습니다. 반면, Bluesky의 AT Protocol은 아직 특정 사기업에 의해 주도되고 있으며, 개방형 표준으로서의 지위는 아직 확립되지 않았습니다. 이는 페디버스가 가진 확장성과 지속 가능성 측면에서 중요한 차이점이라고 할 수 있습니다.

DM의 중앙화

Bluesky는 콘텐츠 주소 지정이나 이동 가능한 아이덴티티와 같은 탈중앙화 요소를 도입했지만, DM은 완전히 중앙화되어 있습니다. 사용자가 어떤 PDS를 사용하든, 어떤 릴레이를 사용하든 상관없이 모든 DM은 Bluesky 회사를 통해 전송됩니다.

이는 Bluesky가 아직 기능적으로 완전한 Twitter 대체품이 되기 위해 속도를 우선시했다는 증거입니다. Bluesky는 이 DM 시스템이 장기적인 솔루션이 아니라고 밝혔지만, 대부분의 사용자들은 이 사실을 인지하지 못하고 있으며 DM도 AT Protocol의 다른 기능처럼 작동한다고 가정합니다.

이러한 중앙화된 DM 구현은 “신뢰할 수 있는 이탈”이라는 Bluesky의 핵심 가치와도 모순됩니다. 만약 Bluesky社가 적대적인 인수나 정책 변경을 겪게 된다면, 사용자들의 개인 대화는 완전히 회사의 통제 하에 남게 됩니다.

이동 가능한 아이덴티티와 DID: Bluesky 방식의 한계

Bluesky는 이동 가능한 아이덴티티(portable identity)를 핵심적인 장점 중 하나로 내세우며, 이를 위해 DIDs, 즉 분산 식별자를 활용합니다. 이는 사용자가 자신의 계정과 데이터를 다른 플랫폼으로 쉽게 이동할 수 있도록 하는 중요한 기능입니다. 하지만 Christine Lemmer-Webber는 AT Protocol이 채택한 did:webdid:plc 방식이 여전히 DNS와 Bluesky社가 관리하는 중앙 집권화된 PLC 레지스트리에 의존하고 있어 완전한 사용자 통제하의 독립적인 아이덴티티를 제공하는지 의문을 제기합니다.

더 놀라운 점은 Bluesky社가 초기에 모든 계정에 대해 동일한 rotationKeys를 사용했다는 사실입니다. 이는 클라우드 HSM 제품이 키별로 비용을 청구해서 각 사용자에게 고유한 키를 제공하는 것이 금전적으로 비용이 많이 들었기 때문이라고 합니다. 이러한 접근 방식은 DIDs 시스템을 구축하는 근본적인 목표와 모순되는 것으로 보입니다.

중요한 점은 DIDs 기술 자체가 탈중앙화된 아이덴티티를 위한 잠재력을 가지고 있음에도, Bluesky와 AT Protocol이 채택한 특정 방식이 중앙 집권화된 요소에 의존한다는 것입니다. 블록체인 기반의 DIDs와 같은 진정으로 탈중앙화된 방식도 존재하지만, AT Protocol은 비교적 구현이 쉬운 did:webdid:plc를 선택했습니다. 따라서 사용자가 Bluesky 생태계를 벗어나 자신의 아이덴티티를 완전히 독립적으로 관리하고자 할 때 제약이 발생할 수 있습니다.

또한 현재 시스템에서는 Bluesky社가 사용자의 키를 대신 관리하고 있어, 사용자가 현재는 Bluesky社를 신뢰하더라도 미래에 신뢰하지 않게 된 경우에도 여전히 회사에 의존해야 합니다. Bluesky社가 사용자를 대신하여 이동을 수행하도록 신뢰해야 하며, 심지어 Bluesky社가 사용자에게 향후 신원 정보를 제어할 권한을 위임하더라도 Bluesky社는 항상 해당 사용자의 키를 통제할 것입니다.

한편, 연합우주에서는 이미 노마딕 아이덴티티(nomadic identity)라는 개념을 통해 이동 가능한 아이덴티티에 대한 논의와 연구가 활발하게 진행되어 왔습니다. 이는 단순히 계정을 이전하는 것을 넘어, 사용자의 데이터와 관계, 심지어 평판까지도 자유롭게 이동할 수 있도록 하는 더 포괄적인 개념입니다. 《We Distribute》에 실린 기사 〈오, Zot! ActivityPub에 노마딕 아이덴티티가 도입된다〉에 소개된 Zot 프로토콜과 같은 기술은 이미 연합우주 안에서 이러한 노마딕 아이덴티티를 구현하기 위한 메커니즘을 제공하고 있습니다. 또한, FEP-ef61와 같은 제안을 통해 ActivityPub 자체를 개선하여 더 나은 이동 가능한 아이덴티티 기능을 추가하려는 노력도 진행 중입니다.

그래서, 결론은?

결론적으로, Bluesky는 사용자 친화적인 인터페이스와 신뢰할 수 있는 이탈 기능을 통해 X의 훌륭한 대안이 될 수 있습니다. Bluesky는 콘텐츠 주소 지정 방식을 통해 노드가 다운되더라도 콘텐츠가 살아남을 수 있게 하는 등 연합우주가 아직 충분히 활용하지 못하는 몇 가지 강점도 가지고 있습니다.

하지만 중앙 집권화된 설계, 전역 뷰에 대한 집착으로 인한 부작용, 개방형 표준으로서의 한계, DM의 중앙화, 그리고 이동 가능한 아이덴티티 구현의 제한점 등 여러 측면에서 연합우주의 대안으로 보기는 어렵습니다. 연합우주는 메시지 전달 방식의 분산된 아키텍처, 낮은 참여 장벽, 개방형 표준 기반의 활발한 커뮤니티 개발, 그리고 사용자에게 더 많은 자율성과 통제권을 제공하는 철학을 바탕으로 구축된, 근본적으로 다른 종류의 탈중앙화 소셜 네트워크입니다.

또한, Bluesky社가 벤처 캐피털 자금을 확보함에 따라 “조직은 미래의 적이다”라는 그들의 자체 인식에도 불구하고, 투자자 수익과 플랫폼 성장이라는 상업적 압력이 진정한 탈중앙화 추구보다 우선시될 위험이 있습니다. 특히 유료 계정과 광고가 도입되면서 이러한 우려는 더욱 커질 수 있습니다.

따라서 Bluesky는 X를 대체할 수 있을지 모르지만, 연합우주가 제공하는 탈중앙화된 가치와 경험을 대체하기는 어려울 것이라고 생각합니다. 두 시스템은 근본적으로 다른 목표와 설계 철학을 가지고 있으며, 이상적으로는 서로를 보완하는 방향으로 발전해 나갈 수 있을 것입니다.


  1. 판타지 소설 시리즈 《해리 포터》의 작가. ↩︎

Read more →
2
0
1
0
0
1
0
0
0
0