ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_Lv3 ์ž…๊ตญ ์‹ฌ์‚ฌ ํ’€์ด ๋ณต๊ธฐ
ยท
์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•™์Šต
๋ฌธ์ œ ์š”์•ฝn: ์ž…๊ตญ ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ 10์–ตtimes: ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ํ•œ ์‚ฌ๋žŒ์„ ์‹ฌ์‚ฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ตœ๋Œ€ 10์–ต, ์‹ฌ์‚ฌ๊ด€ ์ˆ˜๋Š” ์ตœ๋Œ€ 10๋งŒ=> ์Œ.. ์กฐ๊ฑด์ด ์ผ๋‹จ ๊ทธ๋ฆฌ๋””๋‚˜ ์กฐํ•ฉ์€ ์•ˆ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๐ŸŽ ์ฃผ์š” ํฌ์ธํŠธ์‹ฌ์‚ฌ๊ด€๋“ค์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ช…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํ˜•ํƒœ์ด๋‹ค.๊ฐ ์‹ฌ์‚ฌ๊ด€์€ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ํ•œ ์‚ฌ๋žŒ์”ฉ ์‹ฌ์‚ฌํ•œ๋‹ค. ํ•ต์‹ฌ ์•„์ด๋””์–ด์ตœ์†Œ ์‹œ๊ฐ„์€ min(times) ~ ์ตœ๋Œ€ ์‹œ๊ฐ„์€ max(times) * n (= ์ตœ์•…์˜ ๊ฒฝ์šฐ ํ•œ ์‹ฌ์‚ฌ๊ด€์ด ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์ฒ˜๋ฆฌ)๋”ฐ๋ผ์„œ, ํšจ์œจ์ ์ธ ํƒ์ƒ‰์ด ํ•„์š”ํ•˜๋‹ค. ๊ฒฐ์ • ๋ฌธ์ œ๋กœ ์ „ํ™˜ํŠน์ • ์‹œ๊ฐ„ ๋‚ด์— ๋ชจ๋“  n๋ช…์˜ ์‹ฌ์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? ๋ผ๋Š” ๊ฒฐ์ • ๋ฌธ์ œ๋กœ ์ „ํ™˜ํ•˜๊ธฐ!์‹ฌ์‚ฌ ๊ฐ€๋Šฅ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํŠน์ • ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด๋ฉด์„œ ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„์„ ์ฐพ์ž => ์ด๋ถ„ ํƒ์ƒ‰=> ์ด๋ถ„ ํƒ์ƒ‰์œผ..
git rm --cached ์ปค๋ฐ‹์— ํฌํ•จ๋œ ํŒŒ์ผ ์ œ๊ฑฐํ•˜๊ธฐ
ยท
TIL
ํ”„๋กœ์ ํŠธ๋ฅผ ์ดˆ๊ธฐ ์ƒ์„ฑํ•˜๊ณ  Git์— ์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •์—์„œ build ๊ด€๋ จ ํด๋”๊นŒ์ง€ ๊ฐ™์ด commit์ด ๋˜์—ˆ๋‹ค.. (์ œ๋Œ€๋กœ ํ™•์ธ ์•ˆ ํ•˜๊ณ  ์ปค๋ฐ‹ํ•œ ๋‚ด ์ž˜๋ชป…..)ํŒ€์›๋“ค์—๊ฒŒ ๋„์›€์„ ์ฒญํ•˜๋‹ˆ ์บ์‹œ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•ด์„œ ์‹œ๋„ํ•ด๋ดค๋‹ค.ํŒ€์›๋ถ„์ด ์•Œ๋ ค์ฃผ์‹  ๋ช…๋ ์–ด๋Š”git rm -r -f --cached . ์ด๋‹ค.  git rm --cached  ๋ช…๋ น์–ด๋Š” Git์˜ ์Šคํ…Œ์ด์ง• ์˜์—ญ์—์„œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๊ณ , ๋กœ์ปฌ ํŒŒ์ผ์€ ๋ณด์กดํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.์ฆ‰, Git์ด ํŒŒ์ผ์„ ๋” ์ด์ƒ ์ถ”์ ํ•˜์ง€ ์•Š๋Š”๋‹ค.๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์— ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.์ž˜๋ชป ์ปค๋ฐ‹๋œ ํŒŒ์ผ ์ œ๊ฑฐ.gitignore์— ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๋˜ ํŒŒ์ผ์„ ์‹ค์ˆ˜๋กœ ์ปค๋ฐ‹ํ•œ ๊ฒฝ์šฐ๋ฏผ๊ฐํ•œ ์ •๋ณด ์ œ๊ฑฐ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ API ํ‚ค๊ฐ€ ํฌํ•จ๋œ ์„ค์ • ํŒŒ์ผ์ด ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์ œ๊ฑฐ์ €์žฅ์†Œ์— ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํฐ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋œ ๊ฒฝ..
๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ (multi module) ๊ฐœ๋…
ยท
TIL
๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์ด๋ž€?๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ธŒ ๋ชจ๋“ˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.๊ฐ ๋ชจ๋“ˆ์€ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.MSA ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์—์„œ๋Š” ๊ณตํ†ต ๋ชจ๋“ˆ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ(Module) ์ด๋ž€?ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.ํ•œ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑํ•จ์œผ๋กœ์„œ ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์—์„œ์˜ ๋ชจ๋“ˆ์€ ํŒจํ‚ค์ง€ ํ•œ ๋‹จ๊ณ„ ์œ„์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์˜ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ์žฅ์ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ: ๊ณตํ†ต ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ: ๊ฐ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ๋ฐฐํฌ ..
Transaction ์ด๋ž€?
ยท
DataBase
1๏ธโƒฃTransaction ์ด๋ž€?Transaction์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์˜ ์ตœ์†Œ ๋‹จ์œ„๋กœ, ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.Transaction์€ ํ•˜๋‚˜ ์ด์ƒ์˜ query๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ACID ์›์น™์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ACID ์›์น™์ด๋ž€?์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ณ ๋ฆฝ์„ฑ, ์ง€์†์„ฑ 4๊ฐ€์ง€ ๊ทœ์น™1. ์›์ž์„ฑ (Atomicity)Transaction์— ํฌํ•จ๋œ ์ž‘์—…์€ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. (== All Or Nothing)2. ์ผ๊ด€์„ฑ (Consistency)Transaction์ด ์‹คํ–‰์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ•˜๋ฉด ์‹คํ–‰ ์ „๊ณผ ํ›„์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.3. ๊ณ ๋ฆฝ์„ฑ (Isolation)์—ฌ๋Ÿฌ Tr..
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ์ด์ƒ ํ˜„์ƒ (์š”์•ฝํŽธ)
ยท
TIL
ํŠธ๋žœ์ ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํŠธ๋žœ์ ์…˜ ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ •๋„์ž…๋‹ˆ๋‹ค.์ฆ‰, ์—ฌ๋Ÿฌ ํŠธ๋žœ์ ์…˜์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋  ๋•Œ, ํŠน์ • ํŠธ๋žœ์ ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์ ์…˜์—์„œ ๋ณ€๊ฒฝ ๋˜๋Š” ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITED๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์„์ˆ˜๋ก ์„ฑ๋Šฅ์€ ์ €ํ•˜๋˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ๋ณด์žฅ๋˜๊ณ , ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋‚ฎ์„์ˆ˜๋ก ์„ฑ๋Šฅ์€ ์ข‹์•„์ง€์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.  [ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ]SERIALIZABLE ์€ ๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ๋กœ, ํŠธ๋žœ์ ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํŠธ๋žœ์žญ์…˜ ์˜์—ญ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ˆ˜์ • ๋ฐ..
SpringBoot์—์„œ FeignClient ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•˜๊ธฐ
ยท
TIL
์™ธ๋ถ€ API์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ์„ WebClient -> RestClient ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์— ์ด์–ด์„œ FeignClient ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค์ด๋ฒˆ ๋ฆฌํŒฉํ† ๋ง์—๋Š” ๋ณ„ ์ด์œ ๋Š” ์—†๋‹ค. ์ง์ ‘ ์ ์šฉํ•ด๋ณด๋ฉด ๊ฐ ๊ธฐ์ˆ ์˜ ํŠน์ง•์„ ๋” ์ž˜ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒํ•ด์„œ.. FeingClient ์ ์šฉ ๋ฐฉ๋ฒ•1. OpenFeign ์˜์กด์„ฑ ์ถ”๊ฐ€dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:2024.0.0" }} implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'FeingClient๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Spring Cl..