์ „์ฒด

ํŠน์ • ์š”๊ฑด์—์„œ๋Š” ์ด๋ฒคํŠธ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.  ์ฒ ์ˆ˜๋Š” 100์›์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ 100์›์„ ๋” ์ž…๊ธˆํ•˜๊ณ  200์›์„ ๊ฒฐ์ œํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ์ด์œ ๋กœ ๋จผ์ € ๋ฐœํ–‰๋œ(t=5)์ธ 100์› ์ž…๊ธˆ ์ด๋ฒคํŠธ๋ณด๋‹ค ๋‚˜์ค‘์— ๋ฐœํ–‰๋œ(t=10) 200์› ์ธ์ถœ ์ด๋ฒคํŠธ๊ฐ€ ๋จผ์ € ๋„์ฐฉํ–ˆ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ž”์•ก ๋ถ€์กฑ์œผ๋กœ ๊ฒฐ์ œ๋ฅผ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค !! ์ž์นซ ์ด๋ ‡๊ฒŒ ์ˆœ์„œ๊ฐ€ ์–ด๊ธ‹๋‚˜๊ฒŒ ๋„์ฐฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์•ˆ ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ˆ๋Œ€ ์–ด๊ธ‹๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค. ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๊ฒฐ๊ตญ ๋ถ€์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜์€ ์ด๋Ÿฐ ๋น„์ˆœ์ฐจ ์ด๋ฒคํŠธ, ์ง€๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๋งํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์†Œ๋น„ํ•  ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•  ๊ฒƒ์ธ์ง€?์ˆœ์„œ๊ฐ€ ์–ด๊ธ‹๋‚œ ์ด๋ฒคํŠธ, ์ง€๊ฐ ์ด๋ฒคํŠธ๋Š”..
๋ชจ๋†€๋ฆฌ์‹ ๊ธฐ๋ฐ˜์˜ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์—ฌ๋Ÿฌ ๊ธฐ์—…์ด ์„ฑ์žฅํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๊ทœ๋ชจ๋ฅผ ๋Š˜๋ฆด ๋•Œ ๋งŽ์ด ๊ฑฐ์ณ๊ฐ€๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์˜ค๋Š˜์€ ์ด ๊ณผ์ •์—์„œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ํ•„์š”ํ•œ "๋ฐ์ดํ„ฐ ํ•ด๋ฐฉ"์— ๋Œ€ํ•ด ์–˜๊ธฐํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 0. ๋ฐ์ดํ„ฐ ํ•ด๋ฐฉ์ด๋ž€?๋ฐ์ดํ„ฐํ•ด๋ฐฉ(data liberation)์€ ๊ต์ฐจ ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ ์„ธํŠธ(cross-domain data set)๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ๊ฐ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์— ๋ฐœํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์ด๋‹ค. ๋‚˜๋Š” 'ํ•ด๋ฐฉ'์˜ ์˜๋ฏธ๋ฅผ '๋†“์•„์ฃผ๋‹ค'๋กœ ํ•ด์„ํ–ˆ๋Š”๋ฐ, ๊ธฐ์กด(๋ ˆ๊ฑฐ์‹œ) ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ๋ฌถ์—ฌ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์†Œ๋น„(์ด๋ฒคํŠธ ๋“ฑ)ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์‹ฑํ•˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ํ•ด์„ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด..
ยท BackEnd
๋ฐ์ดํ„ฐ ํ†ต์‹  ๊ตฌ์กฐ - EDA์˜ ์ด์œ ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ๋œ ์„œ๋ฒ„๋“ค์˜ ํ†ต์‹ ์€ ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ค. ์„œ๋น„์Šค ๋‚ด์˜ ํ†ต์‹  ๊ตฌ์กฐ, ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹  ๊ตฌ์กฐ๋Š” ์œ ์—ฐ์„ฑ, ํ™•์žฅ์„ฑ, ํšจ์œจ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค #1ํ•œ ํŒ€์—์„œ ์ƒˆ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ฑด์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋‘ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•œ๋‹ค. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค์ด ์ƒํ™ฉ์—์„œ ๋น ๋ฅด๊ณ  ์‰ฌ์šด ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค. ์ด๋ฏธ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๋กœ๊น…, ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ฐฐํฌ, ๋กค๋ฐฑ ํ”„๋กœ์„ธ์Šค ๋“ฑ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์ด ๊ตฌ์ถ•๋˜์–ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊ธฐ์กด ์ฝ”๋“œ์™€ ์—ฎ์ด๋ฉฐ ๊ตฌํ˜„์ฒด ๋‚ด๋ถ€ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐํ•ฉ๋„๋Š” ์˜ฌ๋ผ๊ฐ€๊ณ  ์‘์ง‘๋„๋Š” ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๋กœ ๊ตฌํ˜„ํ•œ๋‹คํ™•์žฅ์„ฑ์„ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๋ชจ๋“ˆํ™”ํ•œ ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์ด ๋” ์ข‹์•„๋ณด์ด๊ธฐ๋„ ํ•œ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์˜› ๋ฐ์ดํ„ฐ๋„ ์ฐธ์กฐํ•ด์•ผ ..
0. ๋“ค์–ด๊ฐ€๋ฉฐDB์™€์˜ ํ†ต์‹  ๊ณผ์ •์—์„œ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ธ๋ฑ์Šค, ์ง€์—ฐ๋กœ๋”ฉ, ์บ์‹ฑ ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜์€ ๊ธฐ์กด์— ์ž˜ ์ƒ๊ฐํ•ด๋ณด์ง€ ๋ชปํ–ˆ๋˜ ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ ๋ฐฉ๋ฒ•์„ ๋งํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ‰์†Œ์— JPA๋ฅผ ์ด์šฉํ•ด์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ์‘๋‹ตํ•  ๋•Œ, ๋ณดํ†ต์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. public interface UserRepository extends JpaRepository { Optional findById(Long id); }@Builder@Getterpublic class UserResponseDto { Long id; String email; String name; public static UserResponseDto from(User u..
ยท BackEnd
0. ์‹œ์ž‘์ด๋ฒคํŠธ๋Š” ๊ฐ•๊ฒฐํ•ฉ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋“ฑ ์—ฌ๋Ÿฌ ์œ ์šฉํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์–ธ์ œ๋‚˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํ•˜๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰/๊ตฌ๋…์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค. ์—ฌ๊ธฐ์„œ "์•ˆ์ „ํ•˜๋‹ค"๋Š” ์—ฌ๋Ÿฌ ์กฐ๊ฑด์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ๋ฉ”์„ธ์ง€ ๋ฐœํ–‰์ด ๋ณด์žฅ๋˜๋Š”์ง€๋ฐœํ–‰๋œ ๋ฉ”์„ธ์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€์ „๋‹ฌ๋œ ๋ฉ”์„ธ์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜์—ˆ๋Š”์ง€์ค‘๋ณต ๋ฉ”์„ธ์ง€๊ฐ€ ์ค‘๋ณต ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜๋Š”์ง€(ํ•„์š”ํ•œ ๊ฒฝ์šฐ) ๋ฉ”์„ธ์ง€์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์—ˆ๋Š”์ง€ ์ด๋ฒคํŠธ ๋ฐœํ–‰/๊ตฌ๋…์—์„œ ์‚ฌ์†Œํ•œ ์˜ค๋ฅ˜ ํ•˜๋‚˜๊ฐ€ ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•จ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์˜ค๋Š˜์€ ์ด๋ฒคํŠธ ๋ฐœํ–‰ ๊ณผ์ •์—์„œ ๊ณ ๋ คํ•ด์•ผํ•  ์—ฌ๋Ÿฌ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์•Œ์•„๋ณด๊ณ , ๊ทธ์— ๋Œ€ํ•œ ๋Œ€์ฒ˜๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. 1. ์˜ˆ์™ธ๋จผ์ €, ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋“ค์„ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์˜ˆ..
0. ๋™์‹œ์„ฑ ์ด์Šˆ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋™์‹œ์„ฑ ์ด์Šˆ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐœ์ƒํ•œ ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋จผ์ €, Spring Boot ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค. 0-1. ๋ฝ (Lock)๋ฝ์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋™์‹œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ๋ฝ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  Race Condition์„ ๋ฐฉ์ง€ํ•œ๋‹ค. 0-1-1. ๋‚™๊ด€์  ๋ฝ (Optimistic Lock)๋‚™๊ด€์  ๋ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ๋ฝ์„ ๊ฑธ์ง€ ์•Š๋Š”๋‹ค. ๋ณดํ†ต ๋ฒ„์ „ ๋ฒˆํ˜ธ๋‚˜ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•œ๋‹ค. ์ถฉ๋Œ์ด ๊ฐ์ง€๋˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค..
ddonghyeo
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก