Map

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)ย ๊ธ€์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.)

https://blog.kakaocdn.net/dn/HF8N6/btsHRoepilS/1ZnW5lvqEywNQs0zDfHeQK/img.png

๋‹จ์ผ ์Šค๋ ˆ๋“œ

https://blog.kakaocdn.net/dn/TkXWt/btsHR9gtIvH/M9YKrkk4cH03KjvvIMWip1/img.png

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ Thread-0, Thread-1์— ์š”์ฒญ์„ ๋ณด๋‚ด ์ž‘์—…์„ ๋ถ„๋‹ด์‹œ์ผœ์„œ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋˜ ํ•˜๋‚˜ ์ฃผ๋ชฉํ•ด์•ผํ•  ๋ถ€๋ถ„์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ์ฒ˜๋ฆฌํ•  ์ž‘์—…์ด ์—†๋”๋ผ๋„ Thread-0, Thread-1์˜ ์ž‘์—…์ด ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๊ณ  ๋‚˜์„œ์•ผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋„ ์‘๋‹ตํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผย ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ฅผ '์Šค๋ ˆ๋“œ ๋ธ”๋กœํ‚น'์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋‹จ์ผ ์Šค๋ ˆ๋“œ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ,ย ์Šค๋ ˆ๋“œํ’€๊นŒ์ง€ ์Šค๋ ˆ๋“œ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹๋“ค์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. JVM์—์„œ ๋‹ค๋ฃจ๋Š” ์Šค๋ ˆ๋“œ๋Š” OS์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ์™€ ๋งคํ•‘๋˜๋Š” ๋น„์‹ผ ์ž์›์ด๋‹ค. ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ต‰์žฅํžˆ ๋งŽ์€ ์š”์ฒญ์ด ๋ชฐ๋ ธ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์ž. ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ DB๋‚˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ๋ธ”๋กœํ‚น ์ƒํƒœ์— ์žˆ์œผ๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ์ง€์—ฐ๋  ์ˆ˜๋ฐ–์— ์—†๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ย ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค. (๋Œ€ํ‘œ์ ์œผ๋กœ RxJava์™€ WebFlux๊ฐ€ ์žˆ๋‹ค.) ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๊ต‰์žฅํžˆ ๋†’์€ ํŽธ์ด๋‹ค. ์ด๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งŽ์€ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ๋ณ€ํ˜•๋˜์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํ’ˆ ์ •๋ณด์™€ ํŒ๋งค์‚ฌ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜์—ฌ ProductResponse๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.