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..
FeignClient vs RestClient
ยท
TIL
์™ธ๋ถ€  API ํ…Œ์ŠคํŠธ์ธ WireMock ์ฐพ์•„๋ณด๋‹ค๊ฐ€ FeignClient๋ฅผ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.์ง€๋‚œ๋ฒˆ์— RestTemplate, WebClient(webflux), RestClient ์ฐพ์•„๋ณผ ๋• ๋ชฐ๋ผ์„œ ํ•จ๊ป˜ ๋น„๊ตํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. FeignClient ๋ž€?Netflix์—์„œ ๊ฐœ๋ฐœํ•œ ์„ ์–ธํ˜• HTTP ํด๋ผ์ด์–ธํŠธ๋กœ Spring Cloud์™€ ํ†ตํ•ฉ์ด ์›ํ™œํ•˜์—ฌ MSA์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.์„ ์–ธํ˜• HTTP ํด๋ผ์ด์–ธํŠธ: ์ธํ„ฐํŽ˜์ด์Šค์™€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ REST API ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.Spring Boot์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์„ค์ •๋œ๋‹ค.Ribbon ๋ฐ Hystrix๋ฅผ ํ™œ์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ์žฅ์•  ๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— MSA์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์‰ฝ๋‹ค.  Restclient ๋ž€?Spri..