๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

ZSet์€ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ์ €์žฅ๋˜๋Š” ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ๊ฐ ์›์†Œ๋Š” ์ ์ˆ˜(Score) ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ์ •๋ ฌ1. Redis Sorted Set(ZSet) ์ด๋ž€?Key-Value ์ €์žฅ ๊ตฌ์กฐ์ง€๋งŒ, ๊ฐ Value์— Score(์ˆซ์ž)๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋™ ์ •๋ ฌ๋จ์ค‘๋ณต๋œ ๊ฐ’์€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ(Unique), Score๋Š” ์ค‘๋ณต ๊ฐ€๋Šฅ๋น ๋ฅธ ์กฐํšŒ ์†๋„(O(log N))๋กœ ๋žญํ‚น, ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, TTL ๊ธฐ๋ฐ˜ ์บ์‹ฑ ๋“ฑ์— ์œ ์šฉํ•˜๋‹ค.์ฃผ์š” ๋ช…๋ น์–ด1. ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€(ZADD)ZADD key score1 member1 [score2 member2 ... ]2. ๋ฐ์ดํ„ฐ ์กฐํšŒ(ZRANGE, ZREVRANGE)์˜ค๋ฆ„์ฐจ์ˆœ ์กฐํšŒ(ZRANGE)๋‚ด๋ฆผ์ฐจ์ˆœ ์กฐํšŒ(ZREVRANGE)3. ํŠน์ • ๊ฐ’์˜ ์ˆœ์œ„ ์กฐํšŒ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆœ์œ„ ์กฐํšŒ(ZRANK)๋‚ด๋ฆผ์ฐจ์ˆœ..
์ธ๊ธฐ๊ธ€ ์š”๊ตฌ์‚ฌํ•ญ์ผ ๋‹จ์œ„๋กœ ์ƒ์œ„ 10๊ฑด ์ธ๊ธฐ๊ธ€ ์„ ์ •๋งค์ผ ์˜ค์ „ 1์‹œ ์—…๋ฐ์ดํŠธ์ข‹์•„์š” ์ˆ˜/๋Œ“๊ธ€ ์ˆ˜/์กฐํšŒ์ˆ˜ ๊ธฐ๋ฐ˜ ์ ์ˆ˜ ๊ณ„์‚ฐ์ ์ˆ˜ = (์ข‹์•„์š” ์ˆ˜ * 3) + (๋Œ“๊ธ€ ์ˆ˜ * 2) + (์กฐํšŒ์ˆ˜ * 1)์ตœ๊ทผ 7์ผ ์ธ๊ธฐ๊ธ€ ๋‚ด์—ญ ์กฐํšŒ์„ค๊ณ„๋งค์ผ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ ํŠธ๋ž˜ํ”ฝ์€ ์ˆ˜๋ฐฑ~์ˆ˜์ฒœ๋งŒ ๊ฑด ์ด์ƒํ•˜๋ฃจ๋™์•ˆ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•ด์„œ,์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ƒ์œ„ 10๊ฑด์„ ์ฐพ์•„์•ผํ•˜๋Š” ์ž‘์—…์ด๋Ÿฌํ•œ ์ž‘์—…์€ 1์‹œ๊ฐ„ ๋งŒ์— ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.์˜ค์ „ 12์‹œ๊ฐ€ ๋˜์ž๋งˆ์ž, ์ „๋‚  ์ž‘์„ฑ๋œ ๊ฒŒ์‹œ๊ธ€์„ ๋ชจ๋‘ ์ˆœํšŒ๊ฐ ๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•ด์„œ ์ข‹์•„์š” ์ˆ˜, ์กฐํšŒ์ˆ˜, ๋Œ“๊ธ€ ์ˆ˜๋ฅผ ์กฐํšŒ๊ฒŒ์‹œ๊ธ€์˜ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐ๋ชจ๋“  ๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•ด์„œ ์ƒ์œ„ 10๊ฑด์„ ์„ ์ •๋ฐฐ์น˜ ์ž‘์—…์„ ํ†ตํ•ด ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ œํ•œ์‚ฌํ•ญ์ด ..
Apache Kafka๋Š” ๋ถ„์‚ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์œผ๋กœ, ๋Œ€๊ทœ๋ชจ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์—ญํ• ์„ ํ•œ๋‹ค.Kafka๋Š” ๋†’์€ ํ™•์žฅ์„ฑ, ๋‚ด๊ฒฐํ•จ์„ฑ(fault tolerance), ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ธฐ์—…์˜ ๋กœ๊ทธ ์ฒ˜๋ฆฌ, ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ, ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๋“ฑ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค.1. Kafka๋ž€?๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง€ ์‹œ์Šคํ…œPub/Sub(๋ฐœํ–‰-๊ตฌ๋…) ๋ชจ๋ธ ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๊ฐ€๋Šฅ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ํ๋กœ ํ™œ์šฉ2. Kafka ์•„ํ‚คํ…์ฒ˜1. Producer(์ƒ์‚ฐ์ž)Kafka์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ์—ญํ• ๋ฉ”์‹œ์ง€๋ฅผ Topic์—๊ฒŒ ๊ฒŒ์‹œ(Publish) ํ•จacks ์„ค์ •์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ณด์žฅ ์ˆ˜์ค€ ์กฐ์ ˆ ๊ฐ€๋Šฅ (acks=0, 1, all..
๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ” ์„ค๊ณ„column_nameTypeDescriptionarticle_idBIGINTPrimary KeytitleVARCHAR(100)์ œ๋ชฉcontentVARCHAR(3000)๋‚ด์šฉboard_idBIGINT๊ฒŒ์‹œํŒID(Shard Key)writer_idBIGINT์ž‘์„ฑ์žIDcreated_atDATETIME์ƒ์„ฑ์‹œ๊ฐ„modified_atDATETIME์ˆ˜์ •์‹œ๊ฐ„์—ฌ๊ธฐ์„œ Shard Key๋Š” ๊ฒŒ์‹œํŒ ID์™œ? ๊ฒŒ์‹œ๊ธ€ ์„œ๋น„์Šค๋Š” ๊ฒŒ์‹œํŒ ๋‹จ์œ„๋กœ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ธฐ์—, ๊ฒŒ์‹œํŒ ๋‹จ์œ„๋กœ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์ด ์กฐํšŒ๋˜๋Š” ๊ฒƒprimary key ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Snowflake ์‚ฌ์šฉ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๊ณ ์œ ํ•œ 64bit ID๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋„ ์ค‘๋ณต ์—†์ด ์ˆœ์ฐจ์  ID๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™[1bit][41bits:ํƒ€์ž„์Šคํƒฌํ”„][10bit..
ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ ๋ฉ์ฒญํ•œ ์ง“1jdk๋ฅผ 21๋กœ ์„ค์ •ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์„ธํŒ…์„ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ, gradle build๋Š” ๋ฌธ์ œ์—†์ด ๋˜๋Š”๋ฐ ์™œ?์ž๊พธ ์ด๋”ฐ์œ„ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š”์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋Œ....build.gradle ์—์„œ๋„ 21ํ”„๋กœ์ ํŠธ ์„ธํŒ…์—์„œ๋„ 21๋ฌด์ˆ˜ํžˆ ์„ค์ • ์ ์šฉ์„ ๋ฐ˜๋ณตํ•˜๋‹ค ๋ฐœ๊ฒฌํ•œ ๋ฉ์ฒญํ•œ ์ง“intellij ์„ธํŒ… ์ž์ฒด์—์„œ 17๋กœ ๋˜์–ด์žˆ์Œ....์ด๊ฑธ 21๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋‹ˆ ์ •์ƒ ๋™์ž‘..... ๋ช‡๋ถ„์„ ์“ธ๋ฐ์—†์ด ๋‚ ๋ ธ๋„คใ… 
Oracle์˜ PIVOT ํ•จ์ˆ˜๋Š” ํ–‰ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ํŠนํžˆ, ์š”์•ฝ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ ๋‚˜, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. Pivot์€ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๋ ฌ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.Pivot ํ•จ์ˆ˜์˜ ์ฃผ์š” ๊ตฌ์กฐSELECT , FROM ( SELECT FROM )PIVOT ( () FOR IN (, , ... , ));๊ณ ์ •๋œ ์—ด : ๋ณ€ํ™˜๋˜์ง€ ์•Š๊ณ  ์ถœ๋ ฅ์— ๊ทธ๋Œ€๋กœ ์œ ์ง€๋  ์—ด์„ ์ง€์ •ํ•œ๋‹ค.๋ฐ์ดํ„ฐ ์›๋ณธ : ํ”ผ๋ฒ— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ…Œ์ด๋ธ” ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค.์ง‘๊ณ„ ํ•จ์ˆ˜ : SUM, AVG, COUNT ๋“ฑ ์ง‘๊ณ„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.ํ”ผ๋ฒ— ์—ด : ํ–‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ด ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜๋  ๊ธฐ์ค€ ์—ด์„ ..
L3 (Layer 3)OSI ๋ชจ๋ธ์˜ 3๊ณ„์ธต์ธ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์„ ์˜๋ฏธํ•œ๋‹ค. L3 ์žฅ๋น„๋Š” ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์„ ๋„คํŠธ์›Œํฌ ๊ฐ„์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.์ฃผ์š” ๊ธฐ๋Šฅ๋ผ์šฐํŒ… : L3๋Š” IP ์ฃผ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ๊ฒฝ๋กœ๋กœ ์ „๋‹ฌํ•œ๋‹ค.์„œ๋ธŒ๋„ทํŒ… : ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ธŒ๋„ท์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์„œ๋ธŒ๋„ท ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•œ๋‹ค.ํŒจํ‚ท ํ•„ํ„ฐ๋ง : ACL(Access Control List)์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.VLAN ๊ฐ„ ๋ผ์šฐํŒ… : VLAN(Virtual Local Area Network) ๊ฐ„์˜ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค.๋ฐฑ๋ณธ (Backbone)๋ฐฑ๋ณธ ๋„คํŠธ์›Œํฌ๋Š” ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ณ ์† ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ง€์›ํ•˜๋Š” ์ค‘์•™ ๋„คํŠธ์›Œํฌ์ด๋‹ค.๋ฐฑ๋ณธ ๋„คํŠธ์›Œํฌ๋Š” ๋†’์€ ๋Œ€์—ญํญ๊ณผ ๋น ๋ฅธ ์†๋„๋กœ ๋„คํŠธ์›Œํฌ ์ค‘์‹ฌ..
XSS(Cross-Site Scripting)XSS๋Š” ์›น ๋ณด์•ˆ ์ทจ์•ฝ์  ์ค‘ ํ•˜๋‚˜๋กœ, ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค.์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž…๋ ฅ ๊ฒ€์ฆ ๋ฏธ๋น„๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋ฉฐ, ๊ณต๊ฒฉ์ž๋Š” ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค, ์„ธ์…˜ ํ† ํฐ ๋˜๋Š” ๊ธฐํƒ€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž๋ฅผ ํ”ผ์‹ฑ ์‚ฌ์ดํŠธ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ฑฐ๋‚˜, ์›ํ•˜์ง€ ์•Š๋Š” ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.์œ ํ˜•1. ๋ฐ˜์‚ฌํ˜• XSS(Reflected XSS)์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ๋ฐ˜์‚ฌ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™”๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ URL ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ์–‘์‹ ์ž…๋ ฅ ๊ฐ’์ด HTML ํŽ˜์ด์ง€์— ํฌํ•จ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "q" ๋งค๊ฐœ๋ณ€์ˆ˜์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์ด ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆ ์—†..
KIMHYEYUN
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก