Map<String, String> test1 = Map.of(
"a", "b",
"c", "d"
);
import static java.util.Map.entry;
Map<String, String> test2 = Map.ofEntries(
entry("a", "b"),
entry("c", "d")
);
Collections.singletonMap("errorCode", errorCode);
JVM์ ์ค๋ ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค. ๋จ์ผ ์ค๋ ๋๋ ๋์ ์์ ์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌ๋ ์ง์ฐ๋๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฉํฐ ์ค๋ ๋๋ค. ๋ฉํฐ ์ค๋ ๋๋ ์ค๋ ๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํด ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ผ๋ก, ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค. (๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ์ ์ฐจ์ด๋ย ๋์์ฑ (Concurrency) vs ๋ณ๋ ฌ์ฑ (Parallelism)ย ๊ธ์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.)
๋จ์ผ ์ค๋ ๋
๋ฉํฐ ์ค๋ ๋
๋ฉํฐ ์ค๋ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ๋ฉ์ธ ์ค๋ ๋๊ฐ Thread-0, Thread-1์ ์์ฒญ์ ๋ณด๋ด ์์ ์ ๋ถ๋ด์์ผ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ณ ์๋ค. ์ฌ๊ธฐ์ ๋ ํ๋ ์ฃผ๋ชฉํด์ผํ ๋ถ๋ถ์ ๋ฉ์ธ ์ค๋ ๋๋ ์ฒ๋ฆฌํ ์์ ์ด ์๋๋ผ๋ Thread-0, Thread-1์ ์์ ์ด ๋ชจ๋ ์ข ๋ฃ๋๊ณ ๋์์ผ ๋ฉ์ธ ์ค๋ ๋๋ ์๋ตํ๋ค. ์ด์ฒ๋ผย ์ค๋ ๋๊ฐ ์๋ฌด๊ฒ๋ ํ์ง ๋ชปํ๊ณ ์ฌ์ฉ๋ ์ ์๋ ์ํ๋ฅผ '์ค๋ ๋ ๋ธ๋กํน'์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋จ์ผ ์ค๋ ๋, ๋ฉํฐ ์ค๋ ๋,ย ์ค๋ ๋ํ๊น์ง ์ค๋ ๋๋ฅผ ์ง์ ๋ค๋ฃจ๋ ๋ฐฉ์๋ค์ ํ๊ณ๊ฐ ์๋ค. JVM์์ ๋ค๋ฃจ๋ ์ค๋ ๋๋ OS์ ์ปค๋ ์ค๋ ๋์ ๋งคํ๋๋ ๋น์ผ ์์์ด๋ค. ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ต์ฅํ ๋ง์ ์์ฒญ์ด ๋ชฐ๋ ธ๋ค๊ณ ์๊ฐํด ๋ณด์. ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๊ฐ DB๋ ๋ค๋ฅธ ์๋น์ค๋ก๋ถํฐ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ํด ๋งค๋ฒ ๋ธ๋กํน ์ํ์ ์์ผ๋ฉด ์ฒ๋ฆฌ๊ฐ ์ง์ฐ๋ ์๋ฐ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๋ฐฉ์ ์ค ํ๋๊ฐย ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. (๋ํ์ ์ผ๋ก RxJava์ WebFlux๊ฐ ์๋ค.) ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ๋ฌ๋์ปค๋ธ๊ฐ ๊ต์ฅํ ๋์ ํธ์ด๋ค. ์ด๋ฅผ ๋์ ํ๊ธฐ ์ํด์๋ ๋ง์ ๋ถ๋ถ์ ์ฝ๋๊ฐ ๋ณํ๋์ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ํ ์ ๋ณด์ ํ๋งค์ฌ ์ ๋ณด๋ฅผ ์กฐํํ์ฌ ProductResponse๋ก ๋ณํํ์ฌ ๋ฐํํ๋ ๋ฉ์๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.