์ „์ฒด ๊ธ€

Network

[๋„คํŠธ์›Œํฌ] TCP์˜ ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ

TCP๋ž€? ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœํ† ์ฝœ โž• UDP๋Š” ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ๋งŽ์ด ์•Œ๊ณ  ์žˆ๋Š”๋ฐ UDP ์ž์ฒด์—์„œ๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๋„๋ก ํ•˜๋ฉด ์‹ ๋ขฐ์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ex) HTTP/3์—์„œ๋Š” UDP๊ธฐ๋ฐ˜์˜ QUIC์ด๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์„œ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๋„๋ก ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. (TCP์˜ Fast Retransmit, Selective Acknowledgement์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•จ) TCP์—์„œ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• 1. ์ˆœ์„œ ๋ณด์žฅ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์— ์ˆœ์„œ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•ด์„œ ์ˆ˜์‹ ์ž๊ฐ€ ํŒจํ‚ท์„ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ์žฌ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋งŒ์•ฝ์— ์ˆœ์„œ๋Œ€๋กœ ๋„์ฐฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ˆ„๋ฝ๋œ ํŒจํ‚ท์ด ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ณ  ๊ทธ ํ›„์— ํŒจํ‚ท์„ ์žฌ์กฐ๋ฆฝํ•˜์—ฌ..

DB

[DB] ๊ต์ฐฉ์ƒํƒœ(Dead Lock)๋ž€?

DB ๊ต์ฐฉ ์ƒํƒœ(Dead Lock) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ต์ฐฉ ์ƒํƒœ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜๋“ค์ด ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์„œ๋กœ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ์ž์›์˜ lock์„ ํš๋“ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ์š”๊ตฌํ•˜๋ฉด ์•„๋ฌด๋ฆฌ ๊ธฐ๋‹ค๋ ค๋„ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค. โž• ์šด์˜์ฒด์ œ์—์„œ์˜ ๊ต์ฐฉ ์ƒํƒœ๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ์˜ ์ž์›์„ ์ ์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋ฉด์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•œ๋‹ค. โ–ช๏ธ ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์ƒํ™ฉ ํŠธ๋žœ์žญ์…˜ 1์ด ํ…Œ์ด๋ธ” B์— insert๋ฅผ ํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ํ…Œ์ด๋ธ” A์— insert๋ฅผ ํ•˜๊ณ  ๋‚˜์„œ ์„œ๋กœ๊ฐ€ lock์„ ๊ฑธ์—ˆ๋˜ ํ–‰์— insert ์ž‘์—…์„ ์‹œ๋„ํ•œ๋‹ค๋ฉด ๋‘ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋‘ waiting์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ต์ฐฉ์ƒํƒœ(Dead Lock)์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค. ๊ต์ฐฉ์ƒํƒœ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ..

๊ธฐํƒ€

IntelliJ ์—์„œ git flow ์‚ฌ์šฉํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ์—์„œ jira๋กœ git flow ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ด์„œ ์ธํ…”๋ฆฌ์ œ์ด์—์„œ git flow ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค 1. OS์— git flow ์„ค์น˜ ๋‚œ macOS์—ฌ์„œ homebrew๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ–ˆ๋‹ค. brew install git-flow-avh 2. ์ธํ…”๋ฆฌ์ œ์ด์—์„œ git flow integration plugin ์„ค์น˜! ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๊ณ  ๋‚˜๋ฉด ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— git flow๋ผ๋Š” ํ‘œ์‹œ๊ฐ€ ์ƒ๊ธด๋‹ค. ํ•ด๋‹น ์˜์—ญ์„ ํด๋ฆญํ•˜๋ฉด Init Repo๋ผ๋Š” ๋ฒ„ํŠผ์ด ๋œจ๋Š”๋ฐ ํด๋ฆญํ•œ๋‹ค! ๊ทธ๋Ÿผ Options for git flow init๋ผ๋Š” ์ฐฝ์ด๋œฌ๋‹ค! ์ด๋ฏธ ์„ค์ •ํ•ด๋ฒ„๋ ค์„œ ์บก์ณ๋ฅผ ํ•  ์ˆ˜๊ฐ€...๐Ÿ˜… ๋‚˜๋Š” ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์„ธํŒ…ํ•˜์ง€ ์•Š๊ณ  main - develop - feature - release - hotfix - su..

DB

DB ์ •๊ทœํ™”๋ž€?

๐Ÿ”ธ์ •๊ทœํ™”๋ž€? ์ด์ƒํ˜„์ƒ์ด ์žˆ๋Š” ๋ฆด๋ ˆ์ด์…˜์„ ๋ถ„ํ•ดํ•ดํ•˜์—ฌ ์ด์ƒํ˜„์ƒ์„ ์—†์• ๋Š” ๊ณผ์ • ์ด์ƒํ˜„์ƒ์ด ์กด์žฌํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜์„ ๋ถ„ํ•ดํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฆด๋ ˆ์ด์…˜์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ •๊ทœํ˜•์ด ๋†’์•„์งˆ ์ˆ˜๋ก ์ด์ƒํ˜„์ƒ์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค. ๐Ÿซง ์ œ1 ์ •๊ทœํ˜• (1NF) ๊ฐ ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜์˜ ์†์„ฑ๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์€ ๊ฐ™์€ ์ข…๋ฅ˜๋‚˜ ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ๊ฐ ์ปฌ๋Ÿผ์ด ์œ ์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค. ์นผ๋Ÿผ์˜ ์ˆœ์„œ๊ฐ€ ์ƒ๊ด€์—†์–ด์•ผ ํ•œ๋‹ค. ํ•™์ƒ ๋ฒˆํ˜ธ ์ด๋ฆ„ ๊ณผ๋ชฉ 101 ์•„์ด์œ  ์šด์˜์ฒด์ œ, DB 102 ํ•œํšจ์ฃผ ์ž๋ฐ” ํ•ด๋‹น ํ…Œ์ด๋ธ”์€ ๊ณผ๋ชฉ์—์„œ ํ•˜๋‚˜๋งŒ์˜ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ!! ํ•ด๊ฒฐ ํ•™์ƒ๋ฒˆํ˜ธ ์ด๋ฆ„ ๊ณผ๋ชฉ 101 ์•„์ด์œ  ์šด์˜์ฒด์ œ 101 ์•„์ด์œ  DB 102 ํ•œํšจ์ฃผ ์ž๋ฐ” ์นต ์นผ๋Ÿผ์ด ์›์ž ๊ฐ’์„ ๊ฐ–๋„๋ก ํ•˜๋ฉด ์ œ1 ์ •๊ทœํ˜•์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์Œ ๐Ÿซง ์ œ2 ์ •๊ทœํ˜• ..

JAVA & OOP

Java 17์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

โ˜•๏ธ Java 17์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  Java 11๋ณด๋‹ค ์ง€์›๊ธฐ๊ฐ„์ด ๊ธธ๋‹ค. Java 8์ด๋‚˜ Java 11์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ณด๋‹ค ์‹ ๊ทœ ๋ฒ„์ „์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ์— ๋ฆฌ์Šคํฌ๊ฐ€ ์ ์–ด์ง„๋‹ค. SpringBoot 3.0 ๋ถ€ํ„ฐ Java 17 ์ด์ƒ์„ ์ง€์›ํ•œ๋‹ค. ํ˜„์žฌ SpringBoot 2.x.x๋Š” 23๋…„ 11์›”์— ์ง€์›์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. Java 17์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜(ZGC, Shenandoah GC)์ด ๊ฐœ์„ ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํšจ์œจ์ด ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ๊ธฐ์ˆ ์ด ์—…๊ทธ๋ ˆ์ด๋“œ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ์†๋„์™€ ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค. Java 17์—์„œ ์•”ํ˜ธํ™” ๋ฐ ์ธ์ฆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ตœ์‹  ํ‘œ์ค€์„ ์ง€์›ํ•ด์„œ ์›น ์„œ๋น„์Šค ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•œ๋‹ค. ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๐Ÿ”Ž Java 17 ๋ฉ”์„œ๋“œ 1. recode recode๋Š” ..

DevOps

docker log ํ™•์ธํ•˜๊ธฐ

๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด ์ •๋ฆฌ! ์ „์ฒด ๋กœ๊ทธ ํ™•์ธ docker logs [container] ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ n์ค„ ํ™•์ธ docker logs --tail n [container] ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ ํ™•์ธ docker logs -f [container] ๋กœ๊ทธ๋งˆ๋‹ค ํƒ€์ž„์Šคํƒฌํ”„ ํ™•์ธ docker log -f -t [container]

DevOps

docker ๋ช…๋ น์–ด ์ •๋ฆฌ

run : ๋„์ปค ์‹คํ–‰ create : ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ฆ start : create๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ด pause : ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์ผ์‹œ์ค‘์ง€ unpause : ์ผ์‹œ์ค‘์ง€ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ์‹คํ–‰ stop : ์ค‘์ง€ rm : ์ค‘์ง€๋๊ฑฐ๋‚˜ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ 1. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹œ์ž‘ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ docker create [image] ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ docker start [container] ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ณ ์œ  ๊ฐ’์ด๋‚˜ ๋žœ๋ค์œผ๋กœ ๋ถ€์—ฌ๋œ ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค! 2. ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• docker run [image] ๐Ÿ‘‰ ๋„์ปค๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋กœ์ปฌ์— ์—†์„ ๊ฒฝ์šฐ ์ž๋™์ ์œผ๋กœ pull์„ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค ex) nginx ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ํ•˜๊ธฐ docker ..

DevOps

[mac] minikube์„ค์น˜ ๋ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ

minikube ์„ค์น˜ brew install minikube ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ minikube start --driver docker ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋‹ค ! minikube์™€ ๊ด€๋ ค๋œ ์œ ์ €, ํด๋Ÿฌ์Šคํ„ฐ, ์ปจํ…์ŠคํŠธ ์„ค์ • ํ™•์ธ cat ~/.kube config ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ minikube status ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ๋™ ์—ฌ๋ถ€ ํ™•์ธ kubectl cluster-info

DevOps

[mac] kubectl, kustomize ์„ค์น˜

kubectl ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ api ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” CLI ๋„๊ตฌ kubectl๋„ homebrew๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. brew install kubectl ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธ kubectl version kustomize ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ brew install kustomize kustomize version

DevOps

[mac] docker, docker-compose ๋‹ค์šด๋กœ๋“œ

mac์—์„œ๋Š” docker๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.! ์ผ๋‹จ homebrew๋ฅผ ์„ค์น˜ํ•ด์•ผ ์‰ฌ์šด ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. homebrew์„ค์น˜๊ฐ€ ๋๋‚ฌ์œผ๋ฉด ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค. brew install --cask docker ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋„์ปค ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค. ๋„์ปค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ docker --version docker-compose docker-ps ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ž˜ ์ž‘๋™๋˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค! ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ด๊ธฐ ์œ„ํ•ด์„œ๋Š” spotlight์—์„œ docker๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋กœ๊ทธ์ธ์„ ํ•ด์ค€๋‹ค ~

DAHLIA CHOI
๐ŸŒผ dali's log ๐ŸŒผ