๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Backend๐ŸŒฑ/Java9

๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• (feat. ์ž๋ฐ”, DB Lock, Redis์˜ ๋ถ„์‚ฐ๋ฝ) ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ž€? ์ด๋ฒˆ ๋ฑ…ํ‚น์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•˜์˜€๋‹ค. ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ์— ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ์ •๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ž€ ๊ณต์œ ์ž์›์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜์—ฌ ์ƒ๊ธฐ๋Š” ๊ฒฝ์Ÿ ์ƒํ™ฉ(race condition)์„ ๋งํ•œ๋‹ค. ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ๋™์ผํ•œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ, ํ˜น์€ ์„ธ์…˜์—์„œ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ œ์–ดํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ๋กœ, ํ•˜๋‚˜์˜ ์„ธ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ • ์ค‘์ผ ๋•Œ, ๋‹ค๋ฅธ ์„ธ์…˜์—์„œ ์ˆ˜์ • ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์ด ๊นจ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•œ๋‹ค. ๊ฐ„๋‹จํ•œ ์žฌ๊ณ  ์‹œ์Šคํ…œ ๋กœ์ง์„ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. Entitiy, Service, Repository๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. @E.. 2023. 2. 14.
[์ž๋ฐ”/Java] ์ŠคํŠธ๋ฆผ(stream) ์ŠคํŠธ๋ฆผ(stream) ์ŠคํŠธ๋ฆผ(๋ฐ์ดํ„ฐ์˜ ์—ฐ์†์ ์ธ ํ๋ฆ„)์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์ปฌ๋ ‰์…˜, ๋ฐฐ์—ด)๋ฅผ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด for๋ฌธ๊ณผ Iterator๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์™”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ณ  ์•Œ์•„๋ณด๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ ์žฌ์‚ฌ์šฉ์„ฑ๋„ ๋–จ์–ด์ง„๋‹ค. ๋˜ํ•œ ์ปฌ๋ ‰์…˜์ด๋‚˜ Iterator์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ปฌ๋ ‰์…˜์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์„ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ์ปฌ๋ ‰์…˜์— ํ•ด๋‹นํ•˜๋Š” List,Set๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ Map์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์ด ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ๊ฒƒ์ด ์ŠคํŠธ๋ฆผ(Stream)์ด๋‹ค. ์ฆ‰, JDK 1.8์— ์ŠคํŠธ๋ฆผ์ด ๋‚˜์˜ค๊ฒŒ ๋˜์–ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์ด ํ†ต์ผ ๋˜์—ˆ๋‹ค!!!! ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ž‘์—….. 2023. 1. 8.
[์ž๋ฐ”/Java] ์“ฐ๋ ˆ๋“œ(thread) ์“ฐ๋ ˆ๋“œ(thread) ํ”„๋กœ์„ธ์Šค : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ, ์ž์›(resources)๊ณผ ์“ฐ๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ = ๊ณต์žฅ ์“ฐ๋ ˆ๋“œ : ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ. ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. = ์ผ๊พผ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ๊ทธ๋žจ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์€ ๋น„์šฉ์ด ๋“ ๋‹ค!!! ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์žฅ์ ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์žฅ์  ์‹œ์Šคํ…œ ์ž์›์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. CPU์˜ ์‚ฌ์šฉ๋ฅ ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์‘๋‹ต์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค. ์ž‘์—…์ด ๋ถ„๋ฆฌ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค. ๋‹จ์ (์ž์›์„ ๊ณต์œ ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋ฌธ์ œ๋ฐœ์ƒ) ๋™๊ธฐํ™”์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. .. 2023. 1. 5.
[์ž๋ฐ”/Java] ์ง€๋„ค๋ฆญ์Šค(Generics) ๋‚˜๋ฆ„ ์ž๋ฐ”๋ฅผ ๊ฝค ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ž๋ฐ”์˜ ์ •์„ ์ฑ…์„ ๋ณด๋ฉด์„œ ์ง€๋„ค๋ฆญ์Šค ๋‹จ์–ด๋ฅผ ๋ณด๊ณ  ์ƒ์†Œํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๊ธฐ๋ณธ๊ธฐ๊ฐ€ ๋งŽ์ด ๋ถ€์กฑํ–ˆ์—ˆ๋‚˜๋ณด๋‹ค. ์ด์— ์ง€๋„ค๋ฆญ์Šค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ง€๋„ค๋ฆญ์Šค(Generics) ์ง€๋„ค๋ฆญ์Šค๋Š” JDK1.5๋ถ€ํ„ฐ ๋„์ž…๋œ ๊ฒƒ์œผ๋กœ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋“ค์„ ๋‹ค๋ฃจ๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์— ์ปดํŒŒ์ผ ์‹œ์˜ ํƒ€์ž… ์ฒดํฌ(compile-time type check)๋ฅผ ๊ฐ•ํ™”ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค. ์ฆ‰, ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ปดํŒŒ์ผ ์‹œ์— ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ํ˜•๋ณ€ํ™˜์˜ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ค„์–ด๋“œ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์˜ˆ๋กœ, ArrayList์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธด ํ•˜์ง€๋งŒ ๋ณดํ†ต ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ๋‹ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ๋„ ๊บผ๋‚ผ ๋•Œ.. 2023. 1. 4.
[์ž๋ฐ”/Java] Stringํด๋ž˜์Šค String ํด๋ž˜์Šค ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ๋ฌธ์ž์—ด์„ charํ˜•์˜ ๋ฐฐ์—ด๋กœ ๋‹ค๋ฃจ์—ˆ์œผ๋‚˜ ์ž๋ฐ”์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๊ฒƒ์ด Stringํด๋ž˜์Šค์ด๋‹ค. Stringํด๋ž˜์Šค = ๋ฐ์ดํ„ฐ(char []) + ๋ฉ”์„œ๋“œ(๋ฌธ์ž์—ด ๊ด€๋ จ)๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Š” ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ถˆ๋ณ€(immutable)ํด๋ž˜์Šค๋ผ๋Š” ์ ์—์„œ ๋ง์…ˆ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ์€ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฌธ์ž์—ด์˜ ๊ฒฐํ•ฉ์ด๋‚˜ ๋ณ€๊ฒฝ์ด ์žฆ๋‹ค๋ฉด, ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•œ StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ๋“, ์ž๋ฐ”์—์„œ String์ด ์™œ ๋ถˆ๋ณ€์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. String str = "first"; str = "second"; ์ด์ฒ˜๋Ÿผ Java์—์„œ ๋ณ€์ˆ˜๋Š” ์–ธ์ œ๋“  ๊ฐ’.. 2023. 1. 3.