[Redis] springboot + Redis cache(์กฐํšŒ)
ยท
Languages | Frameworks/Spring
๐Ÿ’ก๋ฌธ๋“ ๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง€ ํ˜ธ์ถœ ์‹œ ๋งˆ๋‹ค DB์— ์ ‘๊ทผํ•ด์„œ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด, ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.(๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ) ๊ทธ๋ž˜์„œ In-memory ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ Redis๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. (TTL ์„ค์ •์„ ํ†ตํ•œ ํœ˜๋ฐœ์„ฑ ๋ฐ์ดํ„ฐ ์ €์žฅ) ๋˜ํ•œ, Springboot์—์„œ๋Š” Redis์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ library๋„ ์ง€์›ํ•ด์ฃผ๊ณ , cache ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. Springboot์—์„œ Redis๋ฅผ ํ™œ์šฉํ•˜์—ฌ cache ๊ธฐ๋Šฅ์„ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์€ [Redis] ์บ์‹œ ์„ค๊ณ„ ์ „๋žต ์ง€์นจ์„ ์ฐธ๊ณ ํ•˜์ž. ์ด์ œ ์•„๋ž˜๋ฅผ ํ†ตํ•ด Spring boot์— Redis๋ฅผ ์—ฐ๋™ํ•˜๊ณ , cache๋„ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜์ž! 1. ๋ ˆ๋””์Šค ์—ฐ๋™ํ•˜๊ธฐ(์˜์กด์„ฑ ..
[QueryDSL] N + 1 ํ˜„์ƒ ํ•ด๊ฒฐ ๊ณผ์ •
ยท
Languages | Frameworks/Spring
๋ฌธ์ œ์  poi_basic ํ…Œ์ด๋ธ” ๋งŒ์„ ์กฐํšŒํ•˜๋ คํ–ˆ๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์ด N + 1 ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์—ˆ๋‹ค. ํ˜„์ƒํ™ฉ poi_basic ํ…Œ์ด๋ธ”๊ณผ poi_facility ํ…Œ์ด๋ธ”์€ OneToOne๊ด€๊ณ„์ด๋‹ค. Entity๋กœ DB ์กฐํšŒ ํ…Œ์ด๋ธ” ์กฐํšŒ ์ฝ”๋“œ ๊ณ ์ฐฐ ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ OneToOne๊ด€๊ณ„์—์„œ N+1 ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค. ๋ถ„๋ช… ์–‘์ชฝ ํ…Œ์ด๋ธ”์— ์ง€์—ฐ๋กœ๋”ฉ(Lazyloading)์„ ์„ค์ •ํ–ˆ์—ˆ๋Š”๋ฐ, ์ง€์—ฐ๋กœ๋”ฉ์ด ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ด๋‹ค. ์ž ๊ทธ๋Ÿผ ์™œ N+1์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. N+1์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ํ”„๋ก์‹œ ์ดˆ๊ธฐํ™”๊ฐ€ ์ผ์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. Q. [Order_Item]ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š”๋ฐ [Order]ํ…Œ์ด๋ธ”๊ณผ [Product]๋ฅผ ํ•ญ์ƒ ํ•จ๊ป˜ ์กฐํšŒํ•ด์•ผ ํ•˜๋‚˜? ๋‹ต์€ โ€œNoโ€..
Java) 2์ฐจ์› ๋ฐฐ์—ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ(Arrays.sort ๋žŒ๋‹ค์‹)
ยท
Languages | Frameworks/Java
Java Array Sort ์ž๋ฐ”์—์„œ 1์ฐจ์› ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” Arrays.sort() ๋ฉ”์„œ๋“œ์— ์ธ์ž๋กœ ๋ฐฐ์—ด์„ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, 2์ฐจ์› ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•˜๋ ค๋ฉด Arrays.sort์—์„œ ๋žŒ๋‹ค์‹์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 1์ฐจ์› ๋ฐฐ์—ด(int) ์ •๋ ฌ - ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์—ฌ๊ธฐ์„œ ์ž ๊น 1์ฐจ์› ๋ฐฐ์—ด(์ •์ˆ˜ํ˜•) ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ฝ”๋“œ๋กœ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž. # ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ int[] arr = {1, 26, 17, 25, 99, 44, 303}; Arrays.sort(arr); >>>>>๊ฒฐ๊ณผ: [1, 17, 25, 26, 44, 99, 303] 1์ฐจ์› intํ˜• ๋ฐฐ์—ด์˜ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ์ƒ๋‹นํžˆ ๊นŒ๋‹ค๋กญ๋‹ค. intํ˜• ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด..
Java) HashMap์˜ computeIfAbsent์— ๋Œ€ํ•ด(feat. getOrDefault)
ยท
Languages | Frameworks/Java
getOrDefault ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” map์˜ ๋ฉ”์„œ๋“œ์ค‘ getOrDefault ๋ฉ”์„œ๋“œ๋Š” ํ‚ค๊ฐ’์ด ์—†์œผ๋ฉด ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ๋‹ค. ํ‰์†Œ์— ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ํ’€๋•Œ, Map ๊ฐ™์€ map์— key, value๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด, key๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น key์˜ value๋ฅผ ๊ฐ€์ ธ์™€์„œ +ํ•ด์ฃผ๊ณ , key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด default๊ฐ’์— + ํ•ด์„œ ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค. ์˜ˆ์‹œ map.put("key", map.getOrDefault("key", "default๊ฐ’") + "๋”ํ•ด์ค„ ๊ฐ’"); ํ•˜์ง€๋งŒ value๊ฐ€ ๋ฌธ์ž์—ด ๋˜๋Š” ์ •์ˆ˜ํ˜•์ด ์•„๋‹Œ ๋ฆฌ์ŠคํŠธ์ผ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ• ๊นŒ? Map strListMap = new HashMap(); // ๊ธฐ๋ณธ๊ฐ’ ๋„ฃ๊ธฐ List list = strListM..
๋„์ปค ํƒ€์ž„์กด(timezone) ๋ณ€๊ฒฝ
ยท
Languages | Frameworks/Docker
๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ timezone(default: UTC)๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” docker runํ• ๋•Œ -e TZ=Asia/Seoul ์˜ต์…˜์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, tzdata๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค. export TZ=Asia/Seoul ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ , date๋ช…๋ น์–ด๋กœ ์‹œ๊ฐ„์„ ํ™•์ธํ•ด๋ณด๋ฉด ์—์„œ ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ํ–ˆ๋Š”๋ฐ๋„, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜๊ฐ”๋‹ค๊ฐ€ ๋“ค์–ด์™”์„๋•Œ ์ ์šฉ์ด ์•ˆ๋˜์–ด์žˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. -์ปจํ…Œ์ด๋„ˆ ์ ‘์† ํ›„ # dpkg-reconfigure tzdata - ํ•œ๊ตญ ์„œ์šธ ๊ธฐ์ค€ 6(Asia) -> 69(Seoul) ์„ ํƒ # date๋กœ ๋ณ€๊ฒฝ๋œ ์‹œ๊ฐ„ ํ™•์ธ ํ›„ docker ์žฌ์‹œ์ž‘ ์ถ”๊ฐ€> DB TimeZone ๋ณ€๊ฒฝํ•˜๊ธฐ http:..