2024/11 (4) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ISO 8601 ๊ธฐ์ค์ผ๋ก ํน์ ๋ ์ง์ N์ N์ฃผ์ฐจ๋ฅผ Java 8 ๋ ์ง API๋ก ๊ตฌํ๊ธฐ ISO 8601 ๋ ?ISO 8601์ ๋ ์ง์ ์๊ฐ์ ๊ด๋ จ๋ ๊ตญ์ ํ์ค์ผ๋ก์จ, ์ ์๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ๋งค์ฃผ์ ์์์ผ์ ์์์ผ์ด ๋ฉ๋๋ค.๋ํ, ๋งค์์ ์ฒซ ์ฃผ๋ ๊ณผ๋ฐ์ ์ด์์ ์์ผ์ด ํฌํจ๋ ์ฃผ๊ฐ ๊ธฐ์ค์ด ๋ฉ๋๋ค. ISO 8601 ๊ธฐ์ค์ผ๋ก ์ฃผ์ฐจ ๊ณ์ฐ ์์2024๋ 12์ ์์ 2024๋ 12์ 30์ผ, 31์ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค. 2025๋ 1์ 1~5์ผ(์ด 5์ผ)์ 7์ผ ์ค ๊ณผ๋ฐ์๋ฅผ ๋์ผ๋ฏ๋ก 1์ 1์ฃผ์ฐจ์ ๋๋ค ๋ฐ๋ผ์, 2024๋ 12์ 30์ผ, 31์ผ์ 2025๋ 1์ 1์ฃผ์ฐจ์ ํฌํจ๋ฉ๋๋ค 12์ 2์ผ ~ 12์ 8์ผ -> 12์ 1์ฃผ์ฐจ12์ 9์ผ ~ 12์ 15์ผ -> 12์ 2์ฃผ์ฐจ12์ 16์ผ ~ 12์ 22์ผ -> 12์ 3์ฃผ์ฐจ12์ 23์ผ ~ 12์ 29์ผ -> 12์ 4์ฃผ์ฐจ12์ 30์ผ ~ .. [ํธ๋ฌ๋ธ์ํ ] RestTemplate ๋ก๊น ์ค 404 ์๋ต์ ๋ํ FileNotFoundException ํด๊ฒฐ ๊ฒฐ์ ์น์ธ POST ์์ฒญ ์ RestTemplate ๋ก๊ทธ์์ ๋ฐ์ํ ์ค๋ฅ ๊ฒฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ฉด์, ๊ฒฐ์ ์น์ธ ์์ฒญ์ ๋ณด๋ด๋ RestTemplate์ ํ์์์์ ์ ์ฉํ๊ณ , ์์ฒญ๊ณผ ์๋ต์ ๋ํ ๋ก๊น ์ ์ถ๊ฐํ๊ณ ์ ํ์ต๋๋ค. Baeldung์ "RestTemplage Logging" ๊ณผ ๋ง๋๋ ๊ฐ๋ฐ์๋์ ๋ก๊น ์ ์ฐธ๊ณ ํด์ RestTemplate ์ ๋ก๊ทธ๋ฅผ ์ถ๊ฐ ํ์ง๋ง ์๋ต์ ๋ฐ์ ๋, FileNotFoundException ์ด ๋ฐ์ํ๋ฉฐ ์๋์ ๊ฐ์ ์คํ ํธ๋ ์ด์ค๋ฅผ ํ์ธํ์ต๋๋ค.java.io.FileNotFoundException: https://api.tosspayments.com/v1/payments/confirmjava.base/sun.net.www.protocol.http.HttpURLConnection.. @Async ์ด๋ฉ์ผ ์ ์ก ๊ณ ๋ํ: ์ฌ์๋, ์์ธ ์ฒ๋ฆฌ, ํ ์คํธ ์ธ์ฆ ์ด๋ฉ์ผ ์ ์ก ์, ๊ฐํน ๋คํธ์ํฌ ์ค๋ฅ๋ก ์ธํด ๋ฉ์ผ์ด ์ ์์ ์ผ๋ก ์ ์ก๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค.์ด๋ฌํ ์ํฉ์์ ์ฌ์ฉ์์๊ฒ ์ฆ์ ์ค๋ฅ๋ฅผ ์๋ฆฌ๋ ๋์ , ์ฌ์๋ ๋ก์ง์ ํตํด ์ด๋ฉ์ผ ์ ์ก ์ฑ๊ณต ๊ฐ๋ฅ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์ํ๋ ์ค์ํ ์์๋ผ๊ณ ํ๋จํ์ต๋๋ค. ๊ทธ๋์, ์ฌ์๋ ์ถ๊ฐ ์ ๊ณ ๋ คํ ๊ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ฐจ๋ก ์๊ฐํฉ๋๋ค.์ฌ์๋(@Retryable) ์กฐ๊ฑด ์ค์ ์ฌ์๋ ์์ธ์ ์ฐ๋ ๋ ํ ์์ธ๋ฅผ ๊ตฌ๋ถํด์ ์ฒ๋ฆฌํ๊ธฐ์ฌ์๋ ๋ฐ ๋ณต๊ตฌ๊ฐ ์ ๋์๋์ง ํ ์คํธํ๊ธฐ* ๋น๋๊ธฐ์์ ์ฌ์๋ ๋ก์ง ๊ตฌํ์ ์ํด Baeldung(async-retry)๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค. ์ฌ์๋(@Retryable) ์กฐ๊ฑด ์ค์ ๋จผ์ , ์ด๋ฉ์ผ ์ ์ก์ ์ฌ์๋ ์กฐ๊ฑด์ ์ค์ ํ๊ธฐ ์ํด Spring Mail ๊ด๋ จ ์์ธ๋ฅผ ์๊ฐํฉ๋๋ค.MailAuthentic.. @Async๋ก ์ด๋ฉ์ผ ์ ์ก์ Async-NonBlocking ์ฒ๋ฆฌํ๊ธฐ: ์ฐ๋ ๋ ํ ์ค์ ๊ณผ API ์๋ต ์๋ 99% ๊ฐ์ @Async ๋ฅผ ๋์ ํ๋ฉฐ ์ปจํ ์คํธ ์ค์์นญ๊ณผ ์ฐ๋ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ง์์ ๋ฐํ์ผ๋ก ์ฐ๋ ๋ ํ ์ค์ ์ ํ์ตํ๊ณ ์ ์ฉํ๋ ๊ณผ์ ์ ์๊ฐํ๋ฉฐ Jmeter ๋ฅผ ํตํด API ์๋ต ์๋๊ฐ ๊ฐ์ ๋์๋์ง ํ์ธํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ฐจ๋ก ์๊ฐํฉ๋๋ค.์ด๋ฉ์ผ ์ ์ก์ ๋น๋๊ธฐ๋ก ๊ฒฐ์ ํ ์ด์ ์ฐ๋ ๋ ํ ์ฌ์ฉ ์ฌ๋ถ ๊ณ ๋ ค์ฐ๋ ๋ ํ ์ค์ ๊ณ ๋ ค ์ฌํญ์ฐ๋ ๋ ํ ์ค์ ThreadPoolTaskExecutor ๋์ ๋ฐฉ์์ฐ๋ ๋ ํ ์ค๋ฅ ์ฒ๋ฆฌ ์ค์ Jmeter ๋ก @Async ๋์ ์ ์ฉ ์ ๊ณผ ํ์ API ์๋ต ์๊ฐ์ ๋น๊ต@Async ์ฌ์ฉ ์ ์ฃผ์์ ์ด๋ฉ์ผ ์ ์ก์ ๋น๋๊ธฐ๋ก ๊ฒฐ์ ํ ์ด์ ์์ด๋น์ค๋น ํด๋ก ํ๋ก์ ํธ์์๋ ์ด๋ฉ์ผ ์ธ์ฆ ๊ธฐ๋ฐ์ ํ์๊ฐ์ /๋ก๊ทธ์ธ์ ์งํํ๊ณ ์์ต๋๋ค. ์ด๋ฉ์ผ ์ ์ก์๋ Spring Mail์ JavaMailSender๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ.. ์ด์ 1 ๋ค์