- Published on
韓国の開発ブログ名文キュレーション 2 — 障害振り返りとトラブルシューティング、直接開いて確認した12本
- Authors

- Name
- Youngju Kim
- @fjvbn20031
- 韓国の開発者がもっとも得意とするジャンル
- 原因がまったく別の場所にあった事件
- メモリとCPUに食らいついた記録
- データベースとコネクションが起こした事故
- 人が起こした事故と、それを書いた勇気
- このブログの関連記事とツール
- シリーズの他の記事
韓国の開発者がもっとも得意とするジャンル
韓国語の開発記事を長く読んでいると、ひとつの印象が残ります。概念整理の記事は英語圏と重なる内容が多いのに、障害の振り返りはそうではありません。自分のサービスで自分が遭遇したことを書くので代替が利かず、失敗を隠さない記事ほど情報の密度が高くなります。
選定方法はシリーズ全体と同じです。検索で候補を見つけたあと、記事を直接開いて確認し、そのなかから説明が具体的で再現可能なものを選びました。この記事ではもう一つ基準を足しています。症状と原因が別の場所にあった記事、つまり最初に疑ったものが犯人ではなかった過程が残っている記事を優先しました。そういう記事が実際の調査にもっとも近いからです。
このリストは編集者の選択であり、ランキングではありません。 閲覧数や人気は測定していませんし、測定する手段もありません。別の人が選んでいたらリストは違っていたはずです。
出典は個人ブログを優先しました。この記事はvelogの比重が高いのですが、それは障害の振り返りというジャンル自体がvelogに集まっているためで、velogのほうが優れているという意味ではありません。
韓国国外の読者に一点。リンク先は韓国語です。 読むには韓国語が必要ですが、論旨を支えるスタックトレースやパケットキャプチャや設定断片は、どの言語でも同じように読めます。
リンクは2026-08-12に直接開いて確認しました。個人ブログの記事は消えたりURLが変わったりすることがあります。
原因がまったく別の場所にあった事件
良いトラブルシューティング記事の目印はひとつです。最初に疑った場所と実際の原因の距離が残っているか。
사내 서비스 장애 해결 일대기 - p6spy 사용시 DB Routing 안됨, HikariCP 커넥션 누수
- ブログ · 著者: Just Do It · uHan2 (velog)
- 一行要約: 読み書きのデータソースルーティングが静かに失敗した原因が、SQLロギングのライブラリにあったことを追跡した記録です。
- こんな人に: リードレプリカを付けたのにトラフィックが期待どおりに分散していないと感じたことのある人。
この記事がリストの先頭にあるのは、誰も疑わない位置に原因があったからです。SQLをきれいに出力するために入れたライブラリがコネクションを包むことで遅延取得のプロキシを飛ばしてしまい、その結果ルーティングが無力化されました。開発の便宜のために入れたツールがランタイムの挙動を変える典型例で、この種のものはコードレビューでは捕まりません。著者が見つけた内容を上流へ知らせたくだりまであり、調査の締めくくりがどうあるべきかも見せてくれます。
Timeout이 작동하지 않은 이유
- ブログ · 著者: sejinkim.log · sejin (velog)
- 一行要約: タイムアウトを3秒に設定していたのに15秒止まっていた理由が、DNS解決にあったことを明らかにします。
- こんな人に: 外部APIの障害が自分のサービスへ伝播する経路を塞げていると信じている人。
タイムアウトを設定したから安全だと考えるのはよくある誤解で、この記事はその誤解が崩れる地点を正確に突きます。名前解決はたいていHTTPクライアントのタイムアウトの外で同期的に起きるため、設定値がかからない区間が残ります。クライアントの実装によって挙動が分かれる点まで比較しているので、自分のスタックで確認すべき項目がはっきりします。短い記事ですが、読んだあとはタイムアウト設定の見え方が変わります。
문제 현상 이면에 숨겨진 원인 찾기: TCP 통신 트러블슈팅
- ブログ · 著者: JooSing (velog)
- 一行要約: アプリケーションレベルの例外に見えた症状の実際の原因が、TCPのハーフクローズだったことをパケット分析で突き止めます。
- こんな人に: 状態管理のバグに見える問題が、実はネットワーク層にある可能性を残しておきたい人。
タイトルがこの記事の要旨をそのまま含んでいます。例外メッセージは重複処理の問題を指していましたが、実際には接続が半分だけ閉じた状態で残り、次の接続を塞いでいました。アプリケーションのログだけを見ていたら永遠に見つからない原因で、パケットを取ったことが転換点になります。層をまたいで調査する過程がそのまま残っているので、調査範囲をいつ広げるべきかという感覚が得られます。
쿠버네티스 네트워크 문제 트러블슈팅
- ブログ · 著者: hyeongjun-hub.log · hyeongjun Jo (velog)
- 一行要約: 運用クラスタで繰り返していた遅延スパイクの原因が、Helmチャートが塞いでいたポートひとつにあったことを2週間かけて突き止めた記録です。
- こんな人に: 原因不明の断続的な遅延のせいでダッシュボードばかり眺めている人。
この記事は規模が印象的です。三人が2週間取り組み、その過程で消していった仮説が残っています。最終的な原因は、ロードバランサの構成要素が互いを認識するために使うポートが塞がれていて、その結果複数のノードが同じ仮想IPを同時に広告し、ARPテーブルが揺れたことでした。チャートのデフォルト値が生んだ問題という点で、マネージドな構成要素を使うすべてのチームに当てはまる話です。調査のツールと順序が具体的に書かれていて再現性も高くなっています。
メモリとCPUに食らいついた記録
遅いことと落ちることは別の問題で、調査のツールも違います。この節の記事はそのツールを実際に使います。
Java의 heap dump를 이용한 OOM 원인 분석 with Eclipse MAT
- ブログ · 著者: kyle's devlog (velog)
- 一行要約: 採点サーバーが落ちた原因をヒープダンプで追跡し、次の事故に備えてダンプ収集を自動化する過程まで扱います。
- こんな人に: OOMが起きたときにログ以外に何を見ればいいのか分からない人。
原因そのものも興味深いところです。ユーザーが提出した無限ループのコードが巨大な出力ファイルを作り、それを丸ごと読み込むコードがヒープを埋めました。ただしこの記事のより大きな価値は事後の備えにあります。ダンプができたら自動で保管ストレージへ上げる仕組みを作ってあるので、次回は再現を待たなくて済みます。ヒストグラムとドミネータツリーをどの順で見るかも具体的に書かれていて、ツールの使い方の文書としても使えます。
3. [400분이 걸리는 10만 개의 알림 요청 시간을 줄여보자] 왜 CPU 스파이크가 발생할까? JVM WarmUP으로 해결해보자
- ブログ · 著者: rawfish의 개발공부.log · 이건회 (velog)
- 一行要約: デプロイ直後だけCPUが99パーセントに達する現象をJITコンパイルの段階まで降りて説明し、ウォームアップで解決します。
- こんな人に: デプロイ直後の数分間の遅さを、仕方のないことだと受け入れていた人。
デプロイ直後の性能低下をキャッシュが空だからだと片付けることが多いのですが、この記事はプロファイルがない状態でJITコンパイラが何をするかまで降りていきます。スレッドダンプとモニタリング画面と負荷テストの結果が一緒に付いていて、主張が観測に裏打ちされています。シリーズの三本目なので前後の文脈があり、10万件処理という具体的な目標があるため改善幅も数字で出ます。ウォームアップが必要な条件とそうでない条件を区別するのにも役立ちます。
[Java] 에러 스택 트레이스 최적화를 도와주는 -XX:+OmitStackTraceInFastThrow(사라진 예외 스택 트레이스)
- ブログ · 著者: MangKyu's Diary (망나니개발자)
- 一行要約: 同じ場所で繰り返される例外のスタックトレースがある時点から消える理由を、JVMの最適化オプションで説明します。
- こんな人に: ログに例外名だけが残りスタックトレースがないのを、ロギング設定の問題だと疑ったことのある人。
この現象は調査する人を的確に阻みます。もっとも頻繁に出る例外ほどスタックトレースが消えるからです。原因がロギングではなくJVMの最適化だと知らなければ、見当違いの場所を何時間も探すことになります。繰り返し呼び出しでトレースが消えるのを実際に再現する例が付いているので、自分の環境で確認できます。知っている人には常識でも知らなければ絶対に見つけられない種類の知識で、それを韓国語で整理した記事は貴重です。
データベースとコネクションが起こした事故
アプリケーションのコードは正常なのにデータ層で崩れることは少なくありません。原因がフレームワークのデフォルト挙動にあるときは特にそうです。
[트러블슈팅 - DB] 외래키(Foreign Key)와 데드락(DeadLock) 그리고 쿼리 지연 실행
- ブログ · 著者: hocaron.log · Hocaron (velog)
- 一行要約: 明示的なロックをかけていないのに起きたデッドロックの原因が、外部キー制約と書き込み遅延の順序にあったことを明らかにします。
- こんな人に: デッドロックのログを見たのに、コードのどこにもロックを取る箇所がなく戸惑ったことのある人。
この記事は二つの知識をつなぎます。子行が変わると親行にロックが伝播するということと、ORMが書き込みを遅らせて決まった順序で出すということです。それぞれは知られた事実ですが、二つが重なったときデッドロックが決定的に再現するという点がこの記事の貢献です。解決策として外部キー制約を外す選択をしていて、その判断の根拠も書かれています。同意するかどうかにかかわらず判断の過程が見えているので、議論の材料として使えます。
HikariCP Connection 고갈 문제
- ブログ · 著者: zini9188.log (velog)
- 一行要約: 通知機能を付けたあとサーバーが落ちた原因がコネクションプールの枯渇で、その背後にどの設定があったのかを追跡します。
- こんな人に: コネクションプールのサイズを増やすことで問題を覆ったことのある人。
プールが枯れる問題はたいていサイズではなく、返却されない経路にあります。この記事は長く開いている接続がトランザクションの範囲と重なってコネクションを掴んだままになる構造を押さえ、フレームワークの設定ひとつがその構造を作っていたことを示します。コードを分けて接続の維持とデータアクセスを切り離す方向で解決していて、設定を切るだけより根本に近い対応です。リアルタイム機能を付ける計画があるなら、事前に読んでおく価値があります。
MySQL 트러블슈팅 회고 (feat. 대소문자 구분)
- ブログ · 著者: 숑숑의 삽질로그 · 숑숑 (velog)
- 一行要約: アプリケーションは違うと見なし、データベースは同じと見なした二つの文字列のせいで、同じレコードが更新され削除された事件です。
- こんな人に: 文字列比較を言語とデータベースの両方でやっているコードを持っている人。
比較の基準が層ごとに違いうることは知っていても、それが実際の事故になる姿を見る機会は多くありません。この記事はその場面をそのまま見せます。原因はコレーション設定ひとつで、症状は同期ロジック全体がおかしくなることです。解決策として比較方式を明示する方法とスキーマを変える方法の両方を提示していて、状況に合わせて選べます。多言語やメールアドレスを扱うサービスなら他人事ではありません。
JPA가 Fetch Join에 대한 On절을 지원하지 않는 이유
- ブログ · 著者: Tecoble (Woowacourse) · 5기_베베
- 一行要約: フェッチジョインに条件を付けようと迂回した結果、データベースの行が実際に削除されうることを示します。
- こんな人に: ORMがなぜある構文を禁じているのか気になっていた人。
禁じられた構文にはたいてい理由があり、その理由がこれほど恐ろしい例は多くありません。条件を付けて一部だけ取得すると、永続性コンテキストは残りが削除されたと解釈し、その解釈が実際の削除クエリとして出ていくことがあります。例が付いているのでなぜそうなるかを追え、結果としてORMの動作モデルをもう一段深く理解できます。企業所属のブログですが、このテーマについて韓国語でまとまった記事のなかで因果がもっとも鮮明なので入れました。
人が起こした事故と、それを書いた勇気
技術的な原因と同じくらいよく起きるのが、手順の事故です。そしてそれを公開するには別種の勇気が要ります。
주니어 개발자의 첫 장애 회고 (새벽에 문자발송이라니..)
- ブログ · 著者: 작심삼일을 꾸준히 · Jeonghwa (velog)
- 一行要約: 性能テストが実際のSMS送信につながり深夜に数十万件が送られた事故と、それを戻そうとしたデプロイが状況を復活させた過程です。
- こんな人に: ステージング環境が本番とどれだけ分離されているかを正確に言えない人。
事故の構造が教科書的です。テスト環境が実際の送信経路とつながっていて、問題に気づいて戻そうとしたデプロイがヘルスチェックのタイムアウトで自動ロールバックされ、問題のコードが生きているバージョンへ戻ってしまいました。ひとつのミスではなく、二つの安全装置がそれぞれ外れたことで大きくなった事故で、その連鎖が時系列で書かれています。ジュニア時代の事故をここまで詳しく公開した記事は多くなく、読む側には自分のチームのどの継ぎ目を見るべきかが残ります。このリストに入れたのは反面教師としてではなく、振り返りの形式そのものが良いからです。
このブログの関連記事とツール
- LinuxのOOMキラーをデバッグする
- デッドロックのデバッグと予防
- コネクションプールのサイズを決める
- Connection refusedとtimeoutの違い
- KubernetesのOOMKilledと終了コード137
- ツール: HTTPステータスコード事典 · SQLプレイグラウンド
シリーズの他の記事
- 前の記事: 韓国の開発ブログ名文キュレーション 1 — バックエンドとインフラ
- 次の記事: 韓国の開発ブログ名文キュレーション 3 — AIとML実務
- 全体の一覧: 4 フロントエンド · 5 キャリアと成長