[Spring] ์Šคํ”„๋ง ํŠธ๋žœ์žญ์…˜์˜ ๊ฐœ๋… ๋ฐ ์ ์šฉ (@Transactional ์‚ฌ์šฉ๋ฒ•)

[Spring] ์Šคํ”„๋ง ํŠธ๋žœ์žญ์…˜์˜ ๊ฐœ๋… ๋ฐ ์ ์šฉ (@Transactional ์‚ฌ์šฉ๋ฒ•)

ํŠธ๋žœ์žญ์…˜์ด๋ž€? [Postgresql] - [PostgreSQL] ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ โ—† ๋™๊ธฐํ™” (Synchronization) ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ Connection ๊ฐ์ฒด๋ฅผ ํŠน๋ณ„ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ž‘์—… ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค Connection ๊ฐ์ฒด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ JDBC๊ฐ€ ์•„๋‹Œ Hiberate ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด JDBC ์ข…์†์ ์ธ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ์ฝ”๋“œ๋“ค์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Hibernate๋Š” Connection์ด ์•„๋‹ˆ๋ผ Session ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ถ€๋ถ„์„ ์ถ”์ƒํ™”ํ•œ ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ...

[์šด์˜์ฒด์ œ(OS)] ์Šค๋ ˆ๋“œ (Thread), ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(Multithreaded Programming)๋ž€?

[์šด์˜์ฒด์ œ(OS)] ์Šค๋ ˆ๋“œ (Thread), ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(Multithreaded Programming)๋ž€?

๋‘ ๊ฐœ์˜ ์‹คํ–‰ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์„œ ์œ„์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ์Šต 1. Thread๋ž€? CPU ์ˆ˜ํ–‰์˜ ๊ธฐ๋ณธ๋‹จ์œ„์ด๋ฉฐ ํŠนํžˆ ํ”„๋กœ์„ธ์Šค ์•ˆ์˜ ํ๋ฆ„์˜ ๋‹จ์œ„์ด๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ Task๋ผ๊ณ  ํ•˜๋ฉฐ Thread ID, Program counter, register set, Stack space๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ์™€ ์Šคํƒ์„ ๊ฐ–๋Š”๋‹ค. Code, Data ์„น์…˜์ด๋‚˜ ์šด์˜์ฒด์ œ ์ž์›๋“ค์€ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ๊ณต์œ ํ•œ๋‹ค.ย ์Šค๋ ˆ๋“œ์˜ ์ข…๋ฅ˜ ์Šค๋ ˆ๋“œ๋Š” ์ง€์› ์ฃผ์ฒด์— ๋”ฐ๋ผ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. User Threads ์œ ์ € ์Šค๋ ˆ๋“œ๋Š” ์‚ฌ์šฉ์ž ์ˆ˜์ค€์˜ ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์Šค๋ ˆ๋“œ์˜ ์ƒ์„ฑ ๋ฐ ์Šค์ผ€์ฅด๋ง ๋“ฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋™์ผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ ์ค‘ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋“ฑ์œผ๋กœ ์ค‘๋‹จ๋˜๋ฉด ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์ด ์ข…๋ฃŒ๋œ๋‹ค. (์ปค๋„์ด ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜์—ฌ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์ „ํ™˜์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ) ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” POSIX, Pthreads, Win32 threads, Java threads ๋Œ€ํ‘œ์ ์ด๋‹ค Kernel Threads ...

[AWS] RDS ์ ์ • ์ธ์Šคํ„ด์Šค ์„ ํƒ, ๋น„์šฉ ์ตœ์ ํ™”

[AWS] RDS ์ ์ • ์ธ์Šคํ„ด์Šค ์„ ํƒ, ๋น„์šฉ ์ตœ์ ํ™”

1. RDS๋ž€? RDS๋Š” ํด๋ผ์šฐ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •, ์šด์˜ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์™„์ „๊ด€๋ฆฌํ˜• ์˜คํ”ˆ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.ย ์˜จ๋””๋งจ๋“œ, ํ˜น์€ ์˜ˆ์•ฝํ˜• ์ธ์Šคํ„ด์Šค ๊ตฌ๋งค๋กœ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ์„ค์ •์— ๋”ฐ๋ผ ๊ธˆ์•ก์ด ๋‹ฌ๋ผ์ง„๋‹ค. 2. RDS ๋น„์šฉ์„ ๊ฒฐ์ •ํ•˜๋Š” ์š”์†Œ DB ์ธ์Šคํ„ด์Šค ๊ฐ€์šฉ์‹œ๊ฐ„ - 1์ดˆ ๋‹จ์œ„๋กœ ์ฒญ๊ตฌ๋˜๋ฉฐ 1ํšŒ ์ตœ์†Œ 10๋ถ„ ๊ณผ๊ธˆ ์Šคํ† ๋ฆฌ์ง€ (์›”๋ณ„ GB๋‹น) - DB์ธ์Šคํ„ด์Šค์— ํ”„๋กœ๋น„์ €๋‹ ํ•œ ์Šคํ† ๋ฆฌ์ง€ ์šฉ๋Ÿ‰ ์›”๋ณ„ I/O - ์ด ์Šคํ† ๋ฆฌ์ง€ I/O ์š”์ฒญ ์ˆ˜ ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ - ์ž๋™ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… ๋ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šค๋ƒ…์ƒท๊ณผ ์—ฐ๊ฒฐ๋œ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ์ดํ„ฐ ์ „์†ก - RDS์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ํ‹ฐ์–ด๋ณ„ ๊ณ„์‚ฐ์€ ์—ฌ๊ธฐ์„œ ๊ฐ€๋Šฅ (PostgreSQL ๊ธฐ์ค€) ...

[PostgreSQL] ์ฟผ๋ฆฌ ์„ฑ๋Šฅํ–ฅ์ƒ (์‹คํ–‰๊ณ„ํš ๋ณด๋Š” ๋ฒ•, ์ƒ์„ธ ํ™•์ธ๋ฐฉ๋ฒ•, Explain์˜ ์–ด๋–ค ์ง€ํ‘œ๋ฅผ ๋ด์•ผํ• ๊นŒ?)

[PostgreSQL] ์ฟผ๋ฆฌ ์„ฑ๋Šฅํ–ฅ์ƒ (์‹คํ–‰๊ณ„ํš ๋ณด๋Š” ๋ฒ•, ์ƒ์„ธ ํ™•์ธ๋ฐฉ๋ฒ•, Explain์˜ ์–ด๋–ค ์ง€ํ‘œ๋ฅผ ๋ด์•ผํ• ๊นŒ?)

1. ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ --Synopsis EXPLAIN [ ( option [, ...] ) ] ์ฟผ๋ฆฌ๋ฌธ EXPLAIN [ ANALYZE ] [ VERBOSE ] ์ฟผ๋ฆฌ๋ฌธ option ์ž๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค: ANALYZE [ boolean ] VERBOSE [ boolean ] COSTS [ boolean ] BUFFERS [ boolean ] TIMING [ boolean ] FORMAT { TEXT | XML | JSON | YAML } * ์ดํ›„ ์„ค๋ช…์—์„œ ์‚ฌ์šฉ๋  ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์˜ "7. ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ" ๋ถ€๋ถ„ ์ฟผ๋ฆฌ ํ™•์ธ ...

[PostgreSQL] ๋ทฐ(VIEW) ํ…Œ์ด๋ธ” ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ, ์ƒ์„ฑ(CREATE), ์ˆ˜์ •(CREATE OR REPLACE), ์‚ญ์ œ(DROP)

[PostgreSQL] ๋ทฐ(VIEW) ํ…Œ์ด๋ธ” ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ, ์ƒ์„ฑ(CREATE), ์ˆ˜์ •(CREATE OR REPLACE), ์‚ญ์ œ(DROP)

1. ๋ทฐ(VIEW) ํ…Œ์ด๋ธ”์˜ ์‚ฌ์šฉ (์ƒ์„ฑ, ์‚ญ์ œ, ์ˆ˜์ •) -- ๊ธฐ๋ณธ ์ƒ์„ฑ CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy'; -- ์‚ญ์ œ DROP VIEW comedies --Synopsis CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query -- or CREATE VIEW name [ ( column [, ...] ) ] AS query [ WITH [ CASCADE | LOCAL ] CHECK OPTION ] 2. ๋ทฐ(VIEW)์˜ ๊ฐœ๋… ๋ฐ ํŠน์ง• ์ •์˜๋œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๋ฉฐ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. VIEW๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”์‹œํ‚ค๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋œ ์ฟผ๋ฆฌ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. VIEW์— ์ฐธ์กฐ๋œ ์ฟผ๋ฆฌ๋Š” ํ˜ธ์ถœ ์‹œ ๋งค๋ฒˆ ์ƒˆ๋กœ ์‹คํ–‰๋˜๊ธฐ์— ์‹ค์‹œ๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. CREATE OR REPLACE VIEW๋กœ VIEW๋ฅผ ์ˆ˜์ •ํ•  ์‹œ, ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋Š” ์ปฌ๋Ÿผ ์…‹์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋กœ๋งŒ ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. (๊ฐ™์€ ์ปฌ๋Ÿผ๋ช…๊ณผ ๋ฐ์ดํ„ฐํƒ€์ž…) Schema ๋ช…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ํ•ด๋‹น Schema์—, ์•„๋‹ˆ๋ผ๋ฉด ํ˜„์žฌ Schema์— ์ƒ์„ฑ๋œ๋‹ค. View, Table, Sequence, Index๋Š” ํ•œ ์Šคํ‚ค๋งˆ์— ์ค‘๋ณต๋œ ๋ช…์นญ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. VIEW ๊ฒฐ๊ณผ๋ฌผ์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ์ปฌ๋Ÿผ ๋ฐ ์ •๋ณด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š์€ ์ฑ„๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 3. ์ฃผ์˜์‚ฌํ•ญ 3-1. READ-ONLY VIEW ์ž์ฒด์— insert, update, delete๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ...