ConcurrentHashMap์€ ์–ด๋–ป๊ฒŒ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ• ๊นŒ?
ยท
Java
๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ๋„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํฌ๋กค๋งํ•˜์—ฌ HashMap์— ์ €์žฅํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” 100๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์œผ๋‚˜, HashMap์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.๋ฌธ์ œ ์›์ธ์„ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ, ๋น„๋™๊ธฐ ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด HashMap๋งŒ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค๋Š” ์ ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HashMap, HashTable, ConcurrentHashMap์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๊ณ , ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๋น„๊ตํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. HashMapkey์™€ value์— null ํ—ˆ์šฉ๋™๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์ŒHashMap์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „(thread-safe)์„ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ฃผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ..
๋ณ„์  ์ค‘๋ณต ์ƒ์„ฑ ๋™์‹œ์„ฑ ์ด์Šˆ ํ•ด๊ฒฐ
ยท
Project
๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ถ„ ๊ป˜์„œ ๋ณ„์  ๊ธฐ๋Šฅ์—์„œ ๋ณ„์  ๊ฐ’์ด ์ œ๋Œ€๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ, ๋™์ผํ•œ ๋ณ„์  ๋ฐ์ดํ„ฐ๊ฐ€ 2๊ฐœ ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. public RatingCreateResponse createRating(Long userId, RatingCreateServiceRequest request) { User user = userRepository.findById(userId) .orElseThrow(() -> new BusinessException(USER_NOT_FOUND)); Book book = bookRepository.findById(request.getBookIsbn()) ..
HTTP์™€ HTTPS
ยท
Computer Science/Network
๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ์ธํ„ฐ๋„ท์„ ์‚ฌ์šฉํ•  ๋•Œ ์šฐ๋ฆฌ๋Š” ๋งค์ผ HTTP์™€ HTTPS๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ http:// ๋˜๋Š” https:// ๋กœ ์‹œ์ž‘ํ•˜๋Š” URL์„ ๋ณด๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋‘ ํ”„๋กœํ† ์ฝœ์ด ๋ฌด์—‡์ธ์ง€, ๊ฐ ํ”„๋กœํ† ์ฝœ์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” HTTP์™€ HTTPS์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ๊ณผ ํŠน์ง•์„ ๋น„๊ตํ•˜์—ฌ HTTPS๋งŒ์ด ๊ฐ€์ง€๋Š” ํŠน๋ณ„ํ•œ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  HTTPHTTP (HyperText Transfer Protocol)๋Š” ์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.  HTTP๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ง€์†์ ์œผ๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ..
๋Œ€์นญ ํ‚ค์™€ ๋น„๋Œ€์นญ ํ‚ค
ยท
Computer Science/Security
๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ์ •๋ณด ๋ณด์•ˆ ๋ถ„์•ผ์—์„œ 'ํ‚ค' ๋ผ๋Š” ๊ฐœ๋…์€ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ์˜ ๊ทผ๋ณธ์ ์ธ ์š”์†Œ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค๋Š” ํ‰๋ฌธ์„ ์•”ํ˜ธ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‹ค์‹œ ์•”ํ˜ธ๋ฌธ์„ ํ‰๋ฌธ์œผ๋กœ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹์€ ์šฐ๋ฆฌ์˜ ์†Œ์ค‘ํ•œ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.  ์˜ค๋Š˜๋‚  ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ์ €์žฅ ๋ฐฉ์‹์ด ์กด์žฌํ•˜์ง€๋งŒ, ๊ทธ ์ค‘์—์„œ๋„ ๋Œ€์นญ ํ‚ค์™€ ๋น„๋Œ€์นญ ํ‚ค(๊ณต๊ฐœ ํ‚ค)๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์•”ํ˜ธํ™” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์€ ๊ฐ๊ฐ ๋…ํŠนํ•œ ์›๋ฆฌ์™€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  ์ด ๊ธ€์—์„œ๋Š” ๋Œ€์นญ ํ‚ค์™€ ๋น„๋Œ€์นญ ํ‚ค์˜ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๊ณ , ์ด๋“ค์ด ์–ด๋–ป๊ฒŒ ์ •๋ณด ๋ณดํ˜ธ์— ๊ธฐ์—ฌํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€์นญ ํ‚ค๋Œ€์นญ ํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹์€ ๋™์ผํ•œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์•”..
CompletableFuture์™€ ForkJoinPool
ยท
Java
๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋‘ ์ถ•Java 8 ๋ถ€ํ„ฐ ๋„์ž…๋œ CompletableFuture์™€ ForkJoinPool์€ ๋น„๋™๊ธฐ ๋ฐ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋Š” ์„œ๋กœ ๋ณด์™„์ ์ธ ๊ด€๊ณ„์— ์žˆ์œผ๋ฉฐ, ํšจ์œจ์ ์ธ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.  ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋“ค์ด ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€์™€ ์ฃผ์˜ํ•ด์•ผ ๋  ์ ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  CompletableFutureCompletableFuture๋Š” ๊ธฐ์กด์˜ Future ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋น„๋™๊ธฐ ๊ฒฐ๊ณผ ๊ฐ’์˜ ์กฐํ•ฉ๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ›จ์”ฌ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋™๊ธฐ์ ์ธ ์ˆ˜ํ–‰ ๋ฐฉ์‹์„ ๋น„๋™๊ธฐ์ ์ธ ์ˆ˜ํ–‰ ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ , ๋” ์œ ์—ฐํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„..
CompletableFuture๋ฅผ ํ™œ์šฉํ•œ ์„ฑ๋Šฅ ๊ฐœ์„ ๊ธฐ
ยท
Project
๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ์ €ํฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋งค์ผ ์˜ค์ „ 4์‹œ์— ๋ฒ ์ŠคํŠธ ์…€๋Ÿฌ ๋„์„œ 100๊ถŒ์˜ ์ •๋ณด๋ฅผ ํฌ๋กค๋งํ•˜์—ฌ ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋™๊ธฐ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ด ์ž‘์—…์„ ํ…Œ์ŠคํŠธํ•ด ๋ณด์•˜์œผ๋‚˜, ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ํฌ๋กค๋ง์— ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์—ˆ๊ณ , ์ „์ฒด ํ”„๋กœ์„ธ์Šค ํšจ์œจ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CompletableFuture๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ธฐ์กด ๋™๊ธฐ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ์™€ ๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ์ง€์—ฐ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ๋œ ํšจ์œจ์„ฑ์— ๋Œ€ํ•ด ๊ณต์œ ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ ์ƒํ™ฉ@Component@RequiredArgsConstructorpublic..