メインコンテンツにスキップ

안녕 2024, 안녕 2025

· 21分の読み時間
Haril Song
Owner, Software Engineer at 42dot

reminiscence

Overview

警告

개인적인 일기를 바탕으로 작성했기 때문에, 글이 살짝 오글거릴 수 있습니다 😂

2024년엔 정말 많은 일이 있었다.

더 좋은 문장이 떠오르지 않아서, 이런 뻔하기 그지없는 문장으로 회고를 시작한다. 누구나 '오늘, 엄마가 죽었다' 같은 문장으로 글을 시작할 수 있는건 아니니까. 아니, 그게 가능한가. 잘 모르겠다.

「[書評] コード執筆ガイド」

· 7分の読み時間
Haril Song
Owner, Software Engineer at 42dot

石川宗俊の『コード執筆ガイド』の表紙

情報

このレビューは出版社から提供された本をもとに書かれていますが、内容や評価には影響を与えていません。

概要

コードをレビューしやすくするにはどうすればいいのか?

読みやすくレビューしやすいコードを書くためのガイドは、現役のLINE開発者が自身の経験をもとに執筆した本です。コードの可読性を向上させるためのさまざまな方法と原則を詳しく解説しています。

個人的には、コード規約の入門書として非常に優れていると思います。その理由を説明します。

Naver DAN 24 Review

· 25分の読み時間
Haril Song
Owner, Software Engineer at 42dot

overview

Overview

  • 참가 일시: Nov 11, 2024
  • 장소: 코엑스 그랜드블룸
  • 관련 링크: DAN 24

운좋게도 네이버에서 주관한 DAN24 에 다녀올 수 있었습니다. 결론부터 말씀드리면, 24년에 참여한 컨퍼런스 중 가장 수준이 높았다고 할 수 있을 것 같아요. 아래는 대략적인 내용을 적어둔 것이며, 자세한 내용은 DAN24 공식페이지를 참고해주세요.

KafkaKRU Meetup Review

· 6分の読み時間
Haril Song
Owner, Software Engineer at 42dot

KafkaKRU 밋업 리뷰: Event Sourcing부터 리더 파티션 밸런싱까지

2024년 11월 21일, 서울 중구 삼화타워에서 열린 KafkaKRU 밋업에 참석했습니다. 사실 대기자 명단에 있었어서 참석이 어려운 상태였던 것 같지만, 열정으로 봐주셔서 다행히 쫓겨나지는 않았습니다. 결과적으로는 예상을 훨씬 뛰어넘는 값진 시간이었어요.

[Shell] 面倒なダミーファイルを簡単に整理する方法

· 10分の読み時間
Haril Song
Owner, Software Engineer at 42dot

概要

複数のデバイスでクラウドストレージを使用していますか?それなら、おそらく衝突ファイルが少しずつ増えていく経験をしたことがあるでしょう。

衝突ファイルが増えている様子を示すアニメーション

隙あらば増えていく衝突ファイル

ファイルが同期される前に編集作業を行ったり、ネットワークの問題で同期が少し遅れたりするなど、さまざまな理由で衝突ファイルは増え続けます。

個人的には常にきれいな状態を好むので、こうしたダミーファイルを定期的に削除しています。

しかし、今日は何だか繰り返しの作業が面倒に感じます。久しぶりにシェルスクリプトを書いて、開発者らしさを出してみようと思います。

開発ツールのバージョン管理、mise

· 11分の読み時間
Haril Song
Owner, Software Engineer at 42dot

概要

  • 一つの開発言語だけでなく、さまざまな開発言語を使っていますか?
  • sdkman、rvm、nvmなどの複数のパッケージマネージャーのコマンドを覚えるのに疲れたことはありませんか?
  • 開発環境をもっと速く、便利に管理したくありませんか?

miseを使えば、どの言語やツールを使っても正確に必要なバージョンを使用でき、他のバージョンに切り替えたり、プロジェクトごとにバージョンを指定することも可能です。ファイルで明示するため、チームメンバー間でどのバージョンを使うか議論するなどのコミュニケーションコストも減らせます。

これまでこの分野で最も有名だったのはasdfでした[^fn-nth-1]。しかし、最近miseを使い始めてからは、miseの方がUXの面で少し優れていると感じています。今回は簡単な使用例を紹介しようと思います。

mise vs asdf

意図的かどうかは分かりませんが、ウェブページさえも似ています。

mise-en-place、mise

mise(「ミーズ」と発音するようです)は開発環境設定ツールです。この名前はフランス料理の用語に由来し、大まかに「設定」または「所定の位置に置く」と訳されます。料理を始める前にすべての道具と材料が所定の位置に準備されている必要があるという意味だそうです。

簡単な特徴を列挙すると以下の通りです。

マルチコネクションサーバへの旅

· 21分の読み時間
Haril Song
Owner, Software Engineer at 42dot

banner

概要

複数のクライアントリクエストを同時に処理できるサーバアプリケーションの実装は、今や非常に簡単です。Spring MVCを使うだけで、すぐに実現できます。しかし、エンジニアとして、その基礎原理に興味があります。本記事では、明らかに見えることを問い直しながら、マルチコネクションサーバを実装するための考慮事項について考察していきます。

情報

例のコードはGitHubで確認できます。

ソケット

最初の目的地は「ソケット」です。ネットワークプログラミングの観点から、ソケットはネットワーク上でデータを交換するための通信エンドポイントです。「ファイルのように使用される」という説明が重要です。これは、ファイルディスクリプタ(fd)を通じてアクセスされ、ファイルと同様のI/O操作をサポートするためです。

なぜソケットはポートではなくfdで識別されるのか?

ソケットはIP、ポート、および相手のIPとポートを使用して識別できますが、fdを使用する方が好まれます。これは、接続が受け入れられるまでソケットには情報がなく、単純な整数(fd)以上のデータが必要だからです。

ソケットを使用してサーバアプリケーションを実装するには、次の手順を踏む必要があります:

SELECT FOR UPDATEの動作

· 9分の読み時間
Haril Song
Owner, Software Engineer at 42dot

banner

PostgreSQLでは、FOR UPDATEロックはトランザクション内でSELECTクエリを実行する際にテーブルの行を明示的にロックするために使用されます。このロックモードは、選択された行がトランザクションが完了するまで変更されないようにし、他のトランザクションがこれらの行を変更したり、競合するロックをかけたりするのを防ぐために使用されます。

例えば、特定の顧客がチケット予約プロセスを進めている間に他の顧客がデータを変更するのを防ぐために使用されることがあります。

この記事で検討するケースは少し特殊です:

  • ロックされた読み取りとロックされていない読み取りが混在する場合、select for updateはどのように動作するのか?
  • 最初にロックが使用された場合、他のトランザクションが読み取ることは可能か?
  • 読み取り方法が混在してもデータの一貫した読み取りが保証されるか?

PostgreSQLでは、select for update句はトランザクション分離レベルによって異なる動作をします。したがって、各分離レベルでの動作を確認する必要があります。

以下のデータが存在する場合にデータが変更されるシナリオを仮定します。

idname
1null