Zero Copy๋ฅผ ์•„์‹œ๋‚˜์š”? with kotlin S3 upload

์ฝ”๋“œ๋ ˆ๋ฒจ์—์„œ ํŒŒ์ผ ์ „์†ก ๋“ฑ local storage(e.g. disk)์—์„œ ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์™ธ๋ถ€๋กœ ๋ณด๋‚ด๋Š” ๋กœ์ง์„ ๊ตฌ์„ฑํ–ˆ๋‹ค๋ฉด ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋ ๊นŒ์š”?๋ณดํ†ต ํฌ๊ฒŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๋„๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.1. OS kernel context์—์„œ local storage์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ฝ์–ด Read Buffer์— ๋‹ด๊ณ 2. Application context์—์„œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ Application Buffer์— ์˜ฌ๋ฆฌ๊ณ  ๋‹ค์‹œ kernel context์˜ Socket Buffer๋กœ ์ „๋‹ฌ3. NIC Buffer๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€๋กœ ์ „์†ก ์—ฌ๊ธฐ์„œ Buffer ๊ฐ„ ์—ฐ๊ฒฐ์— ์ฃผ๋ชฉํ•ด๋ณผ๊นŒ์š”?์œ„์— ํฌ์ปค์Šคํ•œ ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด๋ฉด Application Buffer์— ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ ๋” ๋ณต์ œํ•˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทผ๋ฐ ์ด ๋ถ€๋ถ„ ๋‚ญ๋น„๊ฐ™์€๋ฐ ์ข€ ํšจ์œจ..

BackEnd 2024. 11. 24. 18:50
์šฐ๋ฆฌ ์„œ๋ฒ„์— OOMKilled ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š” - ํšŒ๊ณ ํŽธ

์ด ๊ธ€์€ ์ตœ๊ทผ์— ์žˆ์—ˆ๋˜ ์„œ๋ฒ„ OOMKilled ์žฅ์•  ๊ณผ์ •์„ ๊ธฐ๋ก ๋ฐ ๊ณต์œ ํ•˜๋ฉฐ ํšŒ๊ณ ํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.๋˜ํ•œ ์ด ๊ธ€์€ ์ธํ”„๋ผ ๋ ˆ๋ฒจ(cpu, memory)์—์„œ์˜ ์žฅ์•  ๊ฐ์ง€ ๋ฐ ๋Œ€์‘ ํ”„๋กœ์„ธ์Šค์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์— NPE(Null Point Exception) ๊ฐ™์€ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ์˜ ๋ช…ํ™•ํ•˜๊ณ  ๋‹จ์ˆœํ•œ ๋ฌธ์ œ๋Š” ํฌ๊ฒŒ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด OOMKilled ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•˜์‹œ๋‚˜์š”?์ €๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋กœ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.1. ์žฅ์•  ๊ฐ์ง€2. ์˜ˆ์ƒ๋˜๋Š” ์›์ธ ๋ฒ”์œ„๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ฐพ๊ณ  ๊ฐ€์„ค์„ ์„ธ์šด๋‹ค. (๊ฐ€์„ค ์ˆ˜๋ฆฝ)3. ๊ฐ€์„ค์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด APM, log ๋“ฑ ๋‹จ์„œ๋“ค์„ ์ฐพ๊ณ  ๊ฐ€์„ค์„ ํ™•์ธํ•˜๊ณ  ์›์ธ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๊ฐ„๋‹ค. (๊ฐ€์„ค ๊ฒ€์ฆ ๋ฐ route finding)4. ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์›์ธ์„..

BackEnd 2024. 11. 10. 21:08
MySQL ์‹คํ–‰ ๊ณ„ํš ํ†บ์•„๋ณด๊ธฐ

MySQL ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„๐Ÿ’ก ์‹คํ–‰ ๊ณ„ํš์—์„œ ํ‘œ์‹œ๋˜๋Š” ๊ฐ ์ปฌ๋Ÿผ์ด ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž๋ฉ”๋‰ด์–ผํ•œ ์ž‘์—…์ด๋‚˜ ๊ฐ€๋” ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ EXPLAIN ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด MySQL ์‹คํ–‰ ๊ณ„ํš์„ ์‚ดํŽด๋ณด๊ฒŒ ๋˜๋Š”๋ฐ, ๊ฐ ์นผ๋Ÿผ์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด์„œ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ์•Œ์•„๋ณธ ๊ฒฝํ—˜์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ด๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์ƒ๊ธฐํ•ฉ๋‹ˆ๋‹ค.๊ฐ ์นผ๋Ÿผ์˜ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra id ์นผ๋Ÿผ๐Ÿ’ก ID ์ปฌ๋Ÿผ์€ ๋‹จ์ˆœํžˆ SELECT ์ฟผ๋ฆฌ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ  ํ•ด๋‹น SELECT ์ฟผ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ.SELECT ์ฟผ๋ฆฌ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ ๊ฐ™์€ ID๊ฐ€ ์—ฌ๋Ÿฌ..

BackEnd 2024. 4. 28. 20:31
ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation level)์ด๋ž€?

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation level)์— ๋Œ€ํ•ด์„œ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ •ํ™•ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์— ์žˆ์–ด์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๋˜ ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•ด์„œ ์žฌํ•™์Šต์„ ์œ„ํ•ด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์€ MySQL ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐ€์ง€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋‰˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 1๋ฒˆ์—์„œ 4๋ฒˆ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณดํ†ต SERIALIZABLE ์ •๋„๊ฐ€ ์•„๋‹ˆ๋ฉด ํฌ๊ฒŒ ์„ฑ๋Šฅ์˜ ๊ฐœ์„ ์ด๋‚˜ ์ €ํ•˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ..

BackEnd 2024. 3. 3. 20:13
AWS Elastic Beanstalk ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ๋ฌด์ค‘๋‹จ ๋ฐฐํฌํ•˜๊ธฐ

์ตœ๊ทผ์— staging ํ™˜๊ฒฝ์—์„œ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‘๋ฉด์„œ๋„ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, AWS Elastic Beanstalk์„ ํ™œ์šฉํ•ด์„œ ์ด๋ฅผ ์†์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ธฐ๋ก์ฐจ ์ด ๊ธ€์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. AWS Elastic Beanstalk์€ vercel๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ฝ”๋“œ๋งŒ ์˜ฌ๋ฆฌ๋ฉด ์ธํ”„๋ผ ๊ด€๋ จ ์„ธํŒ…์„ ๋งค์šฐ ์†์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” PaaS(Platform as a Service)์ž…๋‹ˆ๋‹ค. Elastic Beanstalk์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ”„๋ผ ๊ด€๋ฆฌ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ  ๋น„์šฉ๋„ Elastic Beanstalk ๊ธฐ๋Šฅ ์ž์ฒด๋Š” ๋ฌด๋ฃŒ์ด๋ฉฐ S3, EC2 ๋“ฑ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์ง€๋ถˆํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ..

BackEnd 2023. 10. 8. 17:27
์š”์ฆ˜ ๋– ์˜ค๋ฅด๋Š” gRPC ํ†บ์•„๋ณด๊ธฐ

gRPC๋Š” ์™œ ์‹ค์šฉ์ ์ผ๊นŒ? ์ด ๊ธ€์€ gRPC๋ฅผ ์ ‘ํ•œ ์ง€ ์–ผ๋งˆ ์•ˆ ๋๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ์•„๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์„ ๋Œ€์ƒ์œผ๋กœ go, gRPC ๊ทธ๋ฆฌ๊ณ  MSA ํ™˜๊ฒฝ์—์„œ์˜ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” gRPC๋Š” ์ธํ”„๋ผ ๊ตฌ์ถ•์— ์žˆ์–ด ๋‹ค์†Œ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ๋Š” ํŽธ์ด์ง€๋งŒ ๊ต‰์žฅํžˆ ์‹ค์šฉ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”. ๋จผ์ €, gRPC๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? gRPC๋Š” ํ•œ ๋ฌธ์žฅ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gRPC๋Š” Protocol Buffer๋ฅผ IDL(Interface Definition Language)๋กœ ์‚ฌ์šฉํ•˜๋Š” HTTP/2๊ธฐ๋ฐ˜์˜ RPC ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ƒ์†Œํ•œ ๋‹จ์–ด๋“ค์ด ๋งŽ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ์š”! ์ž ๊น ๋ช‡ ๊ฐ€์ง€ ์‚ดํŽด๋ณผ๊นŒ์š”? RPC(Remote Procedure Call) RPC๋Š” ๋ง ๊ทธ๋Œ€..

BackEnd 2022. 12. 4. 18:39
JWT

JSON WEB TOKEN JWT๋ž€? ํ† ํฐ ์ž์ฒด์— ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ ๋ฌด๊ฒ์ง€ ์•Š๊ณ  ๊ฐ„ํŽธํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅ Base64 URL Safe Encoding์„ ์ด์šฉํ•ด์„œ URL, Cooke, Header ๋“ฑ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ค‘์•™์˜ ์ธ์ฆ ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์—†์–ด์„œ ์‹œ์Šคํ…œ ์ˆ˜ํ‰ ํ™•์žฅ์— ์œ ๋ฆฌํ•จ → ๊ธฐ์กด์— ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ธ์…˜์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ํ•ด๋‹น ์„œ๋ฒ„์—์„œ๋งŒ ํ•ด๋‹น ์ธ์ฆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋”ฐ๋กœ ์„ธ์…˜ ์„œ๋ฒ„๋ฅผ ๋‘ฌ์•ผํ–ˆ์ง€๋งŒ, ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ์„œ๋ฒ„๊ฐ€ ํ•„์š” ์—†์–ด์ง. JWT๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐœ์˜ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ aaaaaa.bbbbbb.cccccc // ์•ž์—์„œ๋ถ€ํ„ฐ .์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Œ // ํ—ค๋”(header).๋‚ด์šฉ(payload).์„œ๋ช…(signature) ํ—ค๋”(Header) S..

BackEnd 2021. 6. 26. 19:01