๐ ํ์๊ฐ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ๊ณ ๋จ๊ธฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ณด๊ฐ ๋ฏธํกํ ์ ์์ต๋๋ค. ์๋ชป๋ ๋ด์ฉ์ด ์์๊ฒฝ์ฐ ์ง์ ํด์ฃผ์ ๋ค๋ฉด ๊ฐ์ฌํ ๋ฐ๊ฒ ์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ฐ๋ฐ๋ง ํ๊ณ ๋๋ฌ๋ ์์ ๊ณผ ๋ฌ๋ฆฌ ์ค์ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์ด์๊น์ง ์งํํ๊ณ ์๋ค.
๋๋ฌธ์ ํผ์ ๊ฐ๋ฐํ ๋์ ๋ฌ๋ฆฌ ์ ๋ง ๋ค์ํ exception์ ๋ง์ฃผํ๊ณค ํ๋๋ฐ, ๋ฐ๋ก ์ด์ ๋ฐ์ํ ๋ฐ๋๋ฐ๋ํ exception์ธ Broken pipe์ ๋ํด์ ์์๋ณด๊ณ ํ๋ก์ ํธ์์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ๊ธ๋ก ์ ์ด๋ณด๊ณ ์ ํ๋ค.
ํ Broken pipe
..?
๊ทธ๋ฅ ๋ด์ฉ๋ง ๋ณด์๋ฉด ์ฐ๊ฒฐ์ด ๋์ด์ก๋ค ๋ผ๋ ๋ง๊ฐ์๋ฐ ๋์ฒด ์ ์ด๋ฐ exception์ด ๋ฌ๋์ง ์์๊ฐ ์์๋ค.
java.net.SocketException: Broken pipe
java.io.IOException: Broken pipe
์ฐพ์๋ณด๋ ๋๊ฐ์ง์ Broken pipe Exception์ด ์กด์ฌํ๋ค. ํ์์ ๊ฒฝ์ฐ I/O ์์ ์ค์ ๋ฐ์ํ๋ ์ค๋ฅ์์ง๋ง, ๊ธฐ์ ์์๋ณด๋ ๊น์ SocketException๊น์ง ์์๋ณด๋ ค ํ๋ค.
๐งจ java.io.IOException: Broken pipe
๋ฐ์ดํฐ ์ก์์ ์ค์ ์ฐ๊ฒฐ์ด ๋์ด์ง ๊ฒฝ์ฐ
์์ผ ์ฐ๊ฒฐ ๋๋ ํ์ดํ ์ฐ๊ฒฐ์์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ์๋ ๋์ค์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ๊ฐ์ ๋ก ์ข
๋ฃํ๋ฉด ๋ฐ์ํ๋ค.
๋คํธ์ํฌ๋ ์๋ฒ CPU๋ฌธ์ ๋ก ์ก์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ
์ก์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ์ํฉ์์ ๊ณ์ํด์ ์์ฒญ์ด ๋ค์ด์ฌ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๐งจ java.net.SocketException: Broken pipe
์น๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ๋ accept๋ ์์ผ์ HttpThread๋ก ๋๊ธฐ๊ฒ ๋๋ค.
ํด๋น ์์ผ์ด ThreadPool์ ๋ค์ด์ค๊ณ ์ด HttpThread๋ก ์ํ๋๋๋ฐ, ์ด ๋ HttpThread๊ฐ ์๋ฃ๋์ง ์ ์ ์ฌ์์ฒญ์ ํ๊ฒ ๋๋ค๋ฉด ์ฒ์ ์์ฒญ ๋น์ ์์ฑ๋ ์์ผ์ ์์์ HttpThread.run์์ ์ํ์ด ์๋ฃ๋๊ธฐ๋ ์ ์ ๋๋ฒ์งธ ์์ฒญ์ด ๋ค์ด์์ ์ฒซ๋ฒ์งธ ์ํ์ด ์ข ๋ฃ๊ฐ ๋๋ค. ๋๋ฌธ์ ์ด ๋ ์์ผ์ ๋น์ฐํ ๋์ด์ง๊ณ Broken pipe๋ผ๋ ๋ฉ์ธ์ง๊ฐ ๋ํ๋๊ฒ ๋๋ค.
์ด์ธ์๋ ์ด๋ฏธ ๋ซํ Connection์ ์ฌ์ฉํ๋ คํ ๋ "Broken pipe" ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค.(ex. ํ์ผ, ์คํธ๋ฆผ)
Breadcrumbs๋ฅผ ํตํด ์ฌ์ฉ์์ ํ์ ์ ๋ณด์๋ค.
ํจ๊ป ๋ฐ์ํ exception์ผ๋ก ๋ณด์ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์ข์ง ์์ ํด๋ผ์ด์ธํธ๊ฐ ์ผ๊ตดํ๋ถ์์ ์ํด ์๋ฒ์ ํ์ผ์ ์ ์กํ๋ ๋์ค ๋คํธ์ํฌ๊ฐ ๋๊ฒจ exception์ด ๋ฐ์ํ ๊ฒ์ผ๋ก ์์ธกํ๋ค.
์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฐ ํด๋ผ์ด์ธํธ์ผ ๊ฒฝ์ฐ๋ ์๊ฐํ์ง ๋ชปํ ๋ถ๋ถ์ด๊ธฐ์ Timeout์๊ฐ์ ์กฐ๊ธ ๋ ๋๋ ค์ฃผ์๋ค.
์ถ๊ฐ์ ์ผ๋ก java.net.SocketException: Broken pipe
์ด ์์ง ๋ฐ์ํ์ง ์์์ง๋ง ์์ผ๋ก ์ถฉ๋ถํ ๋ฐ์ ๊ฐ๋ฅํ ์ํฉ์ด๋ผ ํ๋จํ๋ค.
๋๋ฌธ์ redis๋ฅผ ์ด์ฉํด ๊ฐ์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์์ฒญ์ ๋ฐ๋ณต์ ์ผ๋ก ๋ณด๋ผ ์ ์๋๋ก ์ค๋ณต์์ฒญ์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.