๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก๋ถ€ํŠธ์บ ํ”„ (41)

๋‚˜์˜ ๋ชจ์–‘

052 | Transaction

๐ŸŽˆํŠธ๋žœ์žญ์…˜์ด๋ž€? ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž‘์—…๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฒ˜๋ฆฌ ๋‹จ์œ„์ด๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค. ๐Ÿงฉ ACID ์›์น™ ์›์ž์„ฑ(Atomicity) ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์˜ ๊ธฐ๋ณธ ๋‹จ์œ„์ด๋‹ค. ์ƒํƒœ ๋ณ€ํ™”๋Š” All or Nothing ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ผ๊ด€์„ฑ(Consistency) ํŠธ๋žœ์žญ์…˜ ์„ฑ๊ณต ํ›„ ์ผ๊ด€๋œ DB ์ƒํƒœ๋ฅผ ๋ณด์กดํ•ด์•ผ ํ•œ๋‹ค. ๊ณ ๋ฆฝ์„ฑ(Isolation) ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋  ๊ฒฝ์šฐ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ง€์†์„ฑ(Durability) ํŠธ๋žœ์žญ์…˜ ์„ฑ๊ณต ํ›„ ๊ฒฐ๊ณผ๋Š” ์ง€์†์ ์œผ๋กœ DB์— ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค. ๐Ÿงฉ ์ปค๋ฐ‹(commit) ๋ชจ๋“  ์ž‘์—…์„ DB์— ์ตœ์ข… ๋ฐ˜์˜ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. commit์„ ํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋œ ํ›„ ..

SEB/TIL 2022. 9. 5. 22:27
043 | Layer interconnect & Class Mapping

๐ŸŽˆ DI๋ฅผ ํ†ตํ•œ ์„œ๋น„์Šค ๊ณ„์ธต ←→ API ๊ณ„์ธต ์—ฐ๋™ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Service: ๋„๋ฉ”์ธ ์—…๋ฌด ์˜์—ญ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค ๊ณ„์ธต์€ ๋Œ€๋ถ€๋ถ„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. Spring Bean์œผ๋กœ ๋“ฑ๋ก Controller ํด๋ž˜์Šค์— @RestController ์ถ”๊ฐ€ Service ํด๋ž˜์Šค์— @Service ์ถ”๊ฐ€ ์ƒ์„ฑ์ž ๋ฐฉ์‹์˜ DI๋Š” ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ์—๋Š” @Autowired ์• ๋„ˆํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ DI๊ฐ€ ์ ์šฉ๋œ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ธต๊ณผ API ๊ณ„์ธต์„ ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ๊ฒƒ์€ API ๊ณ„์ธต์—์„œ ๊ตฌํ˜„ํ•œ Controller ํด๋ž˜์Šค๊ฐ€ ์„œ๋น„์Šค ๊ณ„์ธต์˜ Service ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๐ŸŽˆ ๋งคํผ(Mapper)๋ฅผ ์ด์šฉํ•œ DTO ํด๋ž˜..

SEB/TIL 2022. 8. 23. 20:24
[DB] SQL vs NoSQL

๐Ÿ’™ SQL vs NoSQL SQL NoSQL ๊ธฐ๋ฐ˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์ €์žฅ SQL์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์— ์ €์žฅ key-value, document, wide-column, graph ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฐ์ดํ„ฐ ํ˜•์‹ ํ–‰(์—ด์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹)๊ณผ ์—ด(์†์„ฑ)๋กœ ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ์ •๋˜์–ด์žˆ์ง€ ์•Š์Œ ์Šคํ‚ค๋งˆ - ์Šคํ‚ค๋งˆ์— ๋งž์ถฐ ์ฝ์–ด์™€์„œ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•… ๊ฐ€๋Šฅ - ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ๋ณ„๋กœ ์—ด(column)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผ๋จ - ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ด(schema on read) - ํ–‰ ์ถ”๊ฐ€ ์‹œ ์ฆ‰์‹œ ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ - ๊ฐœ๋ณ„ ์†์„ฑ์— ๋ชจ๋“  ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋จ ์ฟผ๋ฆฌ ํ…Œ์ด๋ธ”์˜ ํ˜•์‹๊ณผ ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ๊ตฌ์กฐํ™” ๋˜์ง€ ์•Š์€ ์ฟผ..

WILT/DB 2022. 8. 7. 15:23
031 | RDBMS, SQL, ACID

๐Ÿ’™ SQL ๐Ÿค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•„์š”์„ฑ In-Memory ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ถˆ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†์Œ File I/O ํŒŒ์ผ์„ ์ฝ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ํ˜•ํƒœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ „์ฒด ํŒŒ์ผ์„ ์ฝ์–ด์•ผํ•จ. ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋น„ํšจ์œจ์ ์ธ ๋‹จ์ ์ด ์žˆ์Œ ๐Ÿค SQL(Structed Query Language) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ธ์–ด, ๊ตฌ์กฐํ™”๋œ ์ฟผ๋ฆฌ ์–ธ์–ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ ์ข…๋ฅ˜: MySQL, Oracle, SQLite, PostgreSQL ๐Ÿค NoSQL ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ์กฐํ™”๋˜์–ด์žˆ์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ์ €์žฅ ์ข…๋ฅ˜: MongoDB ๐Ÿค ์ฟผ๋ฆฌ(Query) ์งˆ์˜๋ฌธ(์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต) ๊ธฐ์กด ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰์–ด๋กœ ํ•„ํ„ฐ๋งํ•ด์ฃผ๋Š” ๊ฒƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ..

SEB/TIL 2022. 8. 4. 20:33
030 | REST API

๐Ÿ’™API & REST ๐Ÿค API(Application Programming Interface) ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ๋ชฉ๋ก์„ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉ ์›น ์•ฑ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ๋„ค์ด๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” OpenAPI๋ฅผ ํ†ตํ•ด ๋„ค์ด๋ฒ„์˜ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜์—ฌ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์Œ ๐Ÿค REST(Representational State Transfer) REST๋Š” ์›”๋“œ ์™€์ด๋“œ ์›น๊ณผ ๊ฐ™์€ ๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ ํ˜•์‹์œผ๋กœ, ์ž์›์„ ์ด๋ฆ„(์ž์›์˜ ํ‘œํ˜„)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•จ ์‰ฝ๊ฒŒ ๋งํ•ด API๋ฅผ ๊ตฌ์ถ•ํ• ๋•Œ URI์™€ HTTP Method๋ฅผ ํ™œ์šฉํ•˜์—ฌ API์˜ ๊ธฐ๋Šฅ์„ ์ถ”..

SEB/TIL 2022. 8. 3. 23:52
029 | ๋„คํŠธ์›Œํฌ - ์›น์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ์ˆ 

๐Ÿ’™ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘๋™์›๋ฆฌ ๐Ÿค ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์ • ๊ธฐ๊ธฐ์— ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜… ๊ทธ๋ƒฅ ๋ญ ์–ดํ”Œ ๋‹ค์šด๋ฐ›๋Š”๊ฑฐ ํŠน์ • ์‹คํ–‰ํ™˜๊ฒฝ์— ์ข…์†(Apple iOS, Android OS, Windows, …) iOS์šฉ์œผ๋กœ ๋‚˜์˜จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ์‹คํ–‰ ๋ถˆ๊ฐ€ ๐Ÿ‘๐Ÿป ์žฅ์  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณด๋‹ค ๋น ๋ฆ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ค์น˜๋œ ๊ธฐ๊ธฐ์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์ด ์šฉ์ด (ex. GPS, ์นด๋ฉ”๋ผ, …) ์˜คํ”„๋ผ์ธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋น„ํ•ด ์•ˆ์ „ (๋ชจ๋ฐ”์ผ์€ ์•ฑ์Šคํ† ์–ด ์Šน์ธ ํ•„์š”) ๐Ÿ‘Ž๐Ÿป ๋‹จ์  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋น„ํ•ด ๋งŽ์ด ๋“œ๋Š” ๊ฐœ๋ฐœ๋น„์šฉ (๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ๊ฐœ๋ฐœ ๋“ฑ) ์–ด๋ ค์šด ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ ์•ฑ์Šคํ† ์–ด ์Šน์ธ ์‹œ ๋น„์šฉ ๋ฐœ์ƒ, ์Šน์ธ๋„ ํž˜๋“ฆ ๐Ÿค ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๐Ÿ‘๐Ÿป ์žฅ์  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜..

SEB/TIL 2022. 8. 2. 19:44