Call by Value์™€ Call by Reference
ยท
Java
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, Call by Value์™€ Call by Reference๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š”ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํŠน์ง•๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ Java์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.  Call by ValueCall by Value๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ฃผ๋กœ ๊ธฐ๋ณธํ˜• ๋˜๋Š” ์›์‹œ ํƒ€์ž…(primitive type)์˜ ๋ฐ์ดํ„ฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์ˆ˜๋‚˜ ์‹ค์ˆ˜ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๐Ÿ’ซ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•ด C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.#include using namespace std;void modify(int a)..
Java์˜ GC
ยท
Java
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์˜ ํ•„์š”์„ฑ๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ์ด๋ž€?GC๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ๋” ์ด์ƒ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ GC๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ํž™(Heap) ์˜์—ญ์„ ์˜๋ฏธํ•˜๊ณ , GC๊ฐ€ ํ•ด์ œํ•˜๋Š” ๋Œ€์ƒ์€ ์–ด๋–ค ๋ณ€์ˆ˜์—์„œ๋„ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.  C๋‚˜ C++๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฑด ๊ฝค ๋ฒˆ๊ฑฐ๋กœ์šธ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ํ•ด์ œํ•˜๋ ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ๋Š” ์ด๋Ÿฐ ์ž‘์—…์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž..
์ฑ„ํŒ… ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๊ตฌ์กฐ ๊ฐœ์„ ๊ธฐ
ยท
Project
๊ฐœ์š”์ฑ„ํŒ…๋ฐฉ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€ ๋ฉ”์„ธ์ง€๋ฅผ ์ถ”์ ํ•˜์—ฌ, ์ฝ์ง€ ์•Š์€ ๋ฉ”์„ธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฐ ๋ฉ”์„ธ์ง€์— ๋Œ€ํ•ด '์ฝ์ง€ ์•Š์€ ๊ฐœ์ˆ˜ (Unread Count)'๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.  ๊ธฐ์กด์˜ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ๋Š” ๊ฐ ๋ฉ”์„ธ์ง€๋งˆ๋‹ค ํ•ด๋‹น ๋ฉ”์„ธ์ง€๋ฅผ ์ฝ์€ ์œ ์ €์˜ ID ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ์ฝ์€ ์œ ์ € ID ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ํ†ตํ•ด '์ฝ์ง€ ์•Š์€ ๊ฐœ์ˆ˜ (Unread Count)'๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ์ฑ„ํŒ…๋ฐฉ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์€ ์ฑ„ํŒ…๋ฐฉ์— ๋น„ํ•ด ๋” ๋งŽ์€ ๋ฉ”์„ธ์ง€๊ฐ€ ์˜ค๊ฐ€๋ฏ€๋กœ, ์ˆ˜์ •ํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ฐœ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ๊ธฐ์กด์˜ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๋กœ์ง๋จผ์ €, ๊ธฐ์กด์˜ ์ฑ„ํŒ… ์‹œ์Šคํ…œ์˜ ๋ฉ”์„ธ์ง€ ์ฝ์Œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ์•ž์„œ ์„ค..
Embedded Mongo/Redis ์ ์šฉํ•˜๊ธฐ
ยท
Project
๋“ค์–ด๊ฐ€๋ฉฐ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ผ๊ด€์„ฑ๊ณผ ํšจ์œจ์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ, ์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ํ”„๋กœ์ ํŠธ๋ฅผ GitHub์—์„œ ํด๋ก ํ•œ ๋’ค, ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.  ์ดˆ๊ธฐ์—๋Š” ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ Redis, MySQL, MongoDB์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ฐ๋ชฌ์€ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๊ณ , ๊ทธ๋กœ ์ธํ•ด ์„ค์ •์—๋งŒ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜, ํ™˜๊ฒฝ ์„ธํŒ…์„ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•œ ํ›„ ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ , ์ด๋ฅผ ์œ„ํ•ด ๋กœ์ปฌ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ..
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()) ..