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

CS9

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊นŠ์ด ์šฐ์„  vs ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ์–ด๋–ค ๊ฑธ ์–ธ์ œ ์“ฐ๋‚˜์š”? ๐Ÿ“Œ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) & ๋„“์ด ์šฐ์„  ํƒ์ƒ‰(BFS)DFS(Depth-First Search)์™€ BFS(Breadth-First Search)๋Š” ๊ทธ๋ž˜ํ”„๋‚˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ, ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ์‹์ด๋‚˜ ์‘์šฉ ํฌ์ธํŠธ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฉด์ ‘, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ, ์‹ค๋ฌด ๋กœ์ง ์„ค๊ผ ๋“ฑ์—์„œ ์ž์ฃผ ํ™œ์šฉ๋œ๋‹ค. โœ… DFS์™€ BFS ์ฐจ์ด ํ•œ๋ˆˆ์— ๋ณด๊ธฐ๊ตฌ๋ถ„DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)BFS (๋„“์ด ์šฐ์„  ํƒ์ƒ‰)ํƒ์ƒ‰ ์ˆœ์„œํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ„์† ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ๋„“๊ฒŒ ํƒ์ƒ‰์ž๋ฃŒ๊ตฌ์กฐ์Šคํƒ(์žฌ๊ท€ ๋˜๋Š” ๋ช…์‹œ์  ์Šคํƒ)ํ๊ตฌํ˜„ ๋ฐฉ์‹์ฃผ๋กœ ์žฌ๊ท€๋กœ ๊ตฌํ˜„๋ฐ˜๋ณต๋ฌธ + ํ ์‚ฌ์šฉ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฏธ๋กœ ํƒ์ƒ‰, ๋ฐฑํŠธ๋ž˜ํ‚น์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํƒ์ƒ‰, ๋„คํŠธ์›Œํฌ ํƒ์ƒ‰๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ƒ๋Œ€์ ์œผ๋กœ ์ ์Œ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์Œ์‹œ๊ฐ„๋ณต์žก๋„O(.. 2025. 8. 7.
[JPA] ID ์ƒ์„ฑ ์ „๋žต ์™„์ „ ์ •๋ฆฌ (GenerationType 4๊ฐ€์ง€ ๋น„๊ต) ๐Ÿ“Œ JPA ID ์ƒ์„ฑ ์ „๋žตJPA์—์„œ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค(ID)๋Š” ์ง์ ‘ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜, JPA๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋„๋ก ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋‹ค.์ž๋™ ์ƒ์„ฑ ์ „๋žต์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, @GeneratedValue์˜ strategy ์˜ต์…˜์„ ํ†ตํ•ด ์›ํ•˜๋Š” ID ์ƒ์„ฑ ๋ฐฉ์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. โœ… ID ์ƒ์„ฑ ์ „๋žต์€ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค์ „๋žต ์œ ํ˜•์„ค๋ช…์ง์ ‘ ํ• ๋‹น๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ID ๊ฐ’์„ ์„ธํŒ… (@Id๋งŒ ์‚ฌ์šฉ)์ž๋™ ํ• ๋‹นJPA๊ฐ€ DB ๋˜๋Š” ์ „๋žต ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ID ์ƒ์„ฑ (@Id + @GeneratedValue) ๐Ÿ” ์ž๋™ ID ์ƒ์„ฑ ์ „๋žต 4๊ฐ€์ง€ (GenerationType)1๏ธโƒฃ GenerationType.IDENTITYDB๊ฐ€ ID ์ƒ์„ฑ์„ ๋‹ด๋‹น (MySQL, PostgreSQL ๋“ฑ์—์„œ AUTO_INCREMENT)JPA๋Š” INSERT ์‹œ์ ์— DB์— ๊ฐ’์„ .. 2025. 8. 4.
[Java] ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜(First-Class Collection)์ด๋ž€? ๐Ÿ“ฆ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜(First-Class Collection)์ด๋ž€?์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์€ ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜(List, Set ๋“ฑ)์„ ๊ฐ์‹ธ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ํ•ด๋‹น ํด๋ž˜์Šค ์•ˆ์—์„œ๋งŒ ์ปฌ๋ ‰์…˜์„ ๊ด€๋ฆฌํ•˜๊ณ , ๊ด€๋ จ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ•จ๊ป˜ ํฌํ•จ์‹œํ‚ค๋Š” ์„ค๊ณ„ ํŒจํ„ด์ด๋‹ค.์ฃผ๋กœ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ, ๋ถˆ๋ณ€์„ฑ ์œ ์ง€, ๋กœ์ง ์บก์Аํ™”๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๐Ÿ” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๊ตฌ์กฐ ์˜ˆ์‹œpublic class Orders { private final List orders; public Orders(List orders) { validate(orders); // ์ƒ์„ฑ ์‹œ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜ํ–‰ this.orders = new ArrayList(orders); } public void add(Order order.. 2025. 7. 31.
[DB] ์ธ๋ฑ์Šค๋ž€? B+Tree ๊ตฌ์กฐ๋ถ€ํ„ฐ ์Šค์บ” ๋ฐฉ์‹๊นŒ์ง€ ์ •๋ฆฌ ๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค๋ž€?๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค(Idex)๋Š” ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ฑ…์˜ ์ƒ‰์ธ(index)์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค.์ •๋ ฌ๋œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ ์„ฑ๋Šฅ์€ ๋›ฐ์–ด๋‚˜์ง€๋งŒ, INSERT, UPDATE, DELETE ์‹œ์—๋Š” ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.(์ •๋ ฌ ์œ ์ง€์™€ ์žฌ๊ตฌ์„ฑ ๋น„์šฉ ๋•Œ๋ฌธ) โœ… ์ธ๋ฑ์Šค๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„๋ ๊นŒ?๋Œ€๋ถ€๋ถ„์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)๋Š” B-Tree ๋˜๋Š” B+Tree ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.(MySQL์˜ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•  ์˜ˆ์ •) ๐ŸŒณ B+Tree ์ธ๋ฑ์Šค ๊ตฌ์กฐB+Tree๋Š” B-Tree์˜ ๋ณ€ํ˜•์œผ๋กœ ๋ชจ๋“  ์‹ค์ œ ๋ฐ์ดํ„ฐ(๋ ˆ์ฝ”๋“œ ์œ„์น˜)๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ์กด์žฌํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ ์œ ์ง€(→ ๋ฒ”์œ„ ์กฐํšŒ๊ฐ€ ๋น ๋ฅด๋‹ค, ์ˆœ์ฐจ ์ ‘.. 2025. 7. 29.
[DB] ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์™„๋ฒฝ ์ •๋ฆฌ! (Isolation Level) ๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ž€?ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation Level)์€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์ด ์„œ๋กœ์˜ ์ž‘์—…์— ์–ผ๋งˆ๋‚˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์ด๋‹ค.๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋‚ฎ์„์ˆ˜๋ก ๋™์‹œ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ(์„ฑ๋Šฅ)์€ ๋†’์•„์ง€์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.๋ฐ˜๋Œ€๋กœ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์„์ˆ˜๋ก ์ •ํ•ฉ์„ฑ์€ ํ–ฅ์ƒ๋˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค. โœ… ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ 4๊ฐ€์ง€๊ฒฉ๋ฆฌ ์ˆ˜์ค€๋ณด์žฅ ์ˆ˜์ค€๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œREAD UNCOMMITTED๊ฐ€์žฅ ๋‚ฎ์ŒDirty Read, Non-Repeatable Read, Phantom ReadREAD COMMITTED๋‚ฎ์ŒNon-Repeatable Read, Phantom ReadREPEATABLE READ๋†’์ŒPhantom ReadSERIALIZABLE๊ฐ€์žฅ ๋†’์Œ์—†์Œ (์„ฑ.. 2025. 7. 28.
[DB] ACID๋ž€? ํŠธ๋žœ์žญ์…˜์˜ 4๋Œ€ ์†์„ฑ ํ•œ ๋ฒˆ์— ์ •๋ฆฌ ๐Ÿ’พ ACID๋ž€?๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠธ๋žœ์žญ์…˜(Transaction)์ด ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์ง€์ผœ์•ผ ํ•˜๋Š” 4๊ฐ€์ง€ ์†์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.ํŠธ๋žœ์žญ์…˜์€ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„์ด๋ฉฐ, ์ด ์ž‘์—…์€ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. โœ… ACID 4๊ฐ€์ง€ ์†์„ฑ ์š”์•ฝ์•ฝ์–ด์ด๋ฆ„์˜๋ฏธ ์š”์•ฝA์›์ž์„ฑ (Atomicity)์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜, ์ „ํ˜€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.C์ผ๊ด€์„ฑ (Consistency)ํŠธ๋žœ์žญ์…˜ ์ „ํ›„์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ๊ฐ€ ์ผ๊ด€๋˜์–ด์•ผ ํ•œ๋‹ค.I๊ณ ๋ฆฝ์„ฑ (Isolation)๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.D์ง€์†์„ฑ (Durability)ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌํžˆ ๋ณด์กด๋˜์–ด์•ผ ํ•œ๋‹ค. ๐Ÿ” ๊ฐ ์†์„ฑ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ1๏ธโƒฃ A - ์›์ž์„ฑ (Atomicity)๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜ ๋‚ด ๋ชจ๋“  ์ž‘์—…์€ ์ „๋ถ€ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ์ „๋ถ€ .. 2025. 7. 24.