Develop

Develop

PQ3 and PQC ๐Ÿ—๏ธ

2 min read

Apple์—์„œ ์กฐ๋งŒ๊ฐ„ iMessage์— PQ3๋ผ๋Š” ์•”ํ˜ธํ™” ํ”„๋กœํ† ์ฝœ์„ ์ ์šฉํ•  ์˜ˆ์ •์ด๋ผ๊ณ  ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค.

Do you need a config? Now, Pkl

1 min read

์ตœ๊ทผ์— Apple์ด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋˜ Configuration language๋ฅผ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ—€์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ Pkl(ํ”ผํด)์ธ๋ฐ์š”, ๊ณผ์—ฐ Pkl์€ JSON๊ณผ YAML๊ณผ ํ•จ๊ป˜ Config๊ณ„์˜ ๋Œ€ํ‘œ ์ฃผ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ์„๊นŒ์š”?

Crystal-Lang is โค๏ธ

2 min read

์ €๋Š” ์ตœ๊ทผ์— Crystal-lang์„ ์ฆ๊ธฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ Noir๋ž€ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ ์  ์ปค์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊นŒ์ง€ Crystal์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ œ๊ฐ€ Crystal์„ ์ข‹์•„ํ•˜๊ฒŒ๋œ ์ด์œ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

DOM Handling with MutationObserver

3 min read

์ตœ๊ทผ ZAP์€ SPA ๊ธฐ๋ฐ˜์˜ ์•ฑ์„ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด Client Side Integration ์ด๋ž€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ด ๋•Œ DOM์˜ ๋ณ€ํ™”๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜๋กœ MutationObserver๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ์š”. ์˜ค๋Š˜์€ MutationObserver๊ฐ€ ๋ญ”์ง€ ๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ ํ…Œ์ŠคํŒ… ์‹œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ์ด์•ผ๊ธฐํ•ด๋ด…๋‹ˆ๋‹ค.

Lazy-loading iframe in Firefox

~1 min read

์ตœ๊ทผ์— Firefox์ชฝ์—์„œ ํ•˜๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์˜ˆ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณง img ํƒœ๊ทธ์—๋งŒ ์กด์žฌํ•˜๋˜ lazy-loading์ด iframe์—๋„ ์ ์šฉ๋˜๋Š”๋ฐ์š”. ์„ฑ๋Šฅ์ ์ธ ์žฅ์ ์€ ๋ถ„๋ช…ํžˆ ์žˆ๊ฒ ์ง€๋งŒ, img์™€ ๋‹ฌ๋ฆฌ XSS์˜ ๋ฆฌ์Šคํฌ๊ฐ€ ๋†’์€ iframe์˜ ๋กœ๋“œ ์‹œ์ ์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋ผ ์žฌ๋ฏธ์žˆ๋Š” ์ด์Šˆ๊ฐ€ ๋‚˜์˜ฌ์ง€ ๊ธฐ๋Œ€๋˜๊ธฐ๋„, ๋ฐ˜๋Œ€๋กœ ๋˜ ๊ฑฑ์ •๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Fiber concurrency

2 min read

๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์žฌ๋ฏธ์žˆ์ง€๋งŒ ๊ตฌ์กฐ๋‚˜ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ์–ด๋ ค์›€์„ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ๋„ ๋„๊ตฌ ์ž‘์„ฑ ์‹œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฐ€ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋ธ”๋กœ๊ทธ์—๋„ Goroutine๊ณผ Sync, Ruby Concurrency ๋“ฑ ๋งค๋…„ ๋™์‹œ์„ฑ ๊ด€๋ จํ•ด์„œ ๊ธ€์„ ์ž‘์„ฑํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

WebAuthn๊ณผ Passkey

4 min read

์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ํŒจ์Šค์›Œ๋“œ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”? ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ Apple์˜ ์•”ํ˜ธ ๊ธฐ๋Šฅ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ icloud+๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด ์ด๋ฉ”์ผ ๊ฐ€๋ฆฌ๊ธฐ + ์•”ํ˜ธ ์กฐํ•ฉ์œผ๋กœ ๊ฐ€๊ธ‰์  ์„œ๋น„์Šค๋ณ„๋กœ ๊ณ„์ •๊ณผ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€์˜ ๊ฒฝ์šฐ Google password manager๋ฅผ ํ†ตํ•ด ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๋ถ„๋“ค๋„ ์žˆ์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Apple์ด๋‚˜ Google์˜ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค๊ณผ FIDO ๊ด€๋ จ ์ธ์ฆ ๋ฐฉ์‹๋“ค์€ Passwordless์˜ ๋Œ€์ค‘ํ™”๋ฅผ ์•ž๋‹น๊ฒผ๊ณ  ์ด์ œ๋Š” Password๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์ ์  ์–ด์ƒ‰ํ•ด์ง€๋Š” ์‹œ๊ธฐ๊ฐ€ ์˜จ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Zest + YAML = โค๏ธ

1 min read

์ตœ๊ทผ์— Zest ์ชฝ์˜ Commit (zaproxy/zest/6d67925) ํ•˜๋‚˜๋ฅผ ์ฃผ์‹œํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ Zest์—์„œ YAML ํฌ๋งท ์ง€์›์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด์˜€๋Š”๋ฐ์š”. ๋“œ๋””์–ด ๊ณต์‹ ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ์ด๋ฃจ์–ด์กŒ๊ณ  ์ด์ œ Zest์—์„œ YAML ํฌ๋งท์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

XSpear Reborn: Big Changes Coming

2 min read

์ œ๊ฐ€ Dalfox ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „์— Ruby๋กœ ์ž‘์„ฑํ–ˆ์—ˆ๋˜ XSpear๋ž€ ๋„๊ตฌ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•˜๊ฒŒ XSS๋ฅผ ํ…Œ์ŠคํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์˜€๊ณ , ํ˜„์žฌ ์„ฑ๋Šฅ์€ ๋‹น์—ฐํžˆ Dalfox์ชฝ์ด ์••๋„์ ์œผ๋กœ ์ข‹์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘๋…„๋ถ€ํ„ฐ XSpear์— ๋Œ€ํ•œ Reborn ๊ณ„ํš์„ ์ƒ๊ฐํ•ด ๋‘์—ˆ์—ˆ๋Š”๋ฐ, ์ตœ๊ทผ ๋งŒ๋“ค๋˜ ๋„๊ตฌ๋„ ์–ด๋Š ์ •๋„ ์œค๊ณฝ์ด ์žกํ˜€์„œ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ XSpear์— ๋Œ€ํ•ด ๋Œ€๊ทœ๋ชจ ๊ฐœํŽธ์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ/์‚ฌ์„ค ๋„๋ฉ”์ธ์—์„œ Crystal Shard ํŒจํ‚ค์ง€ ์ฝ์–ด์˜ค๊ธฐ

~1 min read

Crystal-lang์—์„  Shards๋ฅผ ํ†ตํ•ด์„œ ํŒจํ‚ค์ง€์™€ ๋””ํŽœ๋˜์‹œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” go์˜ go get๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ yaml ๋‚ด ์ž‘์„ฑ๋œ github repository์—์„œ ์†Œ์Šค๋ฅผ ์ฝ์–ด์™€ ์„ค์น˜ํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

Embed resources in crystal

2 min read

Crystal์—์„œ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ์— Embed ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ด๋‘ก๋‹ˆ๋‹ค. ๊นƒํ—™ ์ด์Šˆ๋“ฑ์„ ์ฐพ์•„๋ณด๋ฉด stdlib๋กœ ๋งŒ๋“ค์–ด์ค„ ๊ฒƒ ๊ฐ™์ง„ ์•Š์•˜๊ณ  ์ฐพ์•„๋ณด๋‹ˆ Rucksack์ด๋ž€ ์ข‹์€ shard๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋‘˜๊ฒŒ์š”. ์ฐธ๊ณ ๋กœ Rucksack์€ Linux์™€ macOS์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ณ  Windows๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜๋‹ˆ ์ด ์  ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Default vs Release build in Crystal

1 min read

Crystal์€ ์ปดํŒŒ์ผ ์–ธ์–ด๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋นŒ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต์‹ ๊ฐ€์ด๋“œ์—์„  release build ์‹œ โ€”release flag ์‚ฌ์šฉ์„ ๊ถŒ๊ณ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. ์˜ค๋Š˜์€ ์ด flag๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€, ์™œ ๊ถŒ๊ณ ๋˜๊ณ  ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค.

Homebrew๋กœ ํŒจํ‚ค์ง€ ์ œ๊ณตํ•˜๊ธฐ ๐Ÿบ

2 min read

์ œ๊ฐ€ ๋งŒ๋“  ๋„๊ตฌ๋Š” ๋Œ€๋ถ€๋ถ„ Homebrew, Binary, RubyGem, Snapcraft ๋“ฑ์„ ํ†ตํ•ด ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ macOS์˜ ๊ฒฝ์šฐ Homebrew๋ฅผ ํ†ตํ•œ ์„ค์น˜ ๋น„์ค‘์ด ์—„์ฒญ ๋†’๊ธฐ ๋–„๋ฌธ์— Go ๊ธฐ๋ฐ˜ ์•ฑ๋“ค์€ ๊ฐ€๊ธ‰์ ์ด๋ฉด Homebrew๋ฅผ ์ง€์›ํ•˜๋ ค๊ณ  ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ Goreleaser๋ž€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด์„œ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ง„ํ–‰ํ–ˆ์—ˆ์ฃ .

Encoding Only Your Choices, EOYC

2 min read

์š”์ฆ˜ ์žฅ๋‚œ๊ฐ ์‚ผ์•„ Crystal๊ณผ Elixir๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Crystal์€ Ruby์™€ ์ œ๊ฐ€ ์˜ˆ์ „์— ํ•œ๋ฒˆ ์†Œ๊ฐœํ•˜๊ธฐ๋„ ํ—€๊ณ  Ruby์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์— ์†๋„๊นŒ์ง€ ๊ฐ–์ถ”๊ณ  ์žˆ์–ด ๊ฐœ์ธ์ ์œผ๋กœ ๊ด€์‹ฌ์ด ๋งŽ์•˜๋˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ Crystal์€ ์ฃผ๋ ฅ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Crystal๋กœ ์ž‘์„ฑํ•œ ๊ฐ„๋‹จํ•œ ๋„๊ตฌ ํ•˜๋‚˜ ๊ณต์œ ํ•˜๋ ค๊ณ  ๊ธ€์„ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

CORS Bypass via dot

1 min read

Origin ํ—ค๋”์™€ ACAO(Access-Control-Allow-Origin) ํ—ค๋”๋Š” Cross-Origin ๊ด€๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํ—ค๋”๋กœ SOP(Same-Origin Policy)๋ฅผ ๊ณต์‹์ ์œผ๋กœ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ํ—ค๋”์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ CORS๋ผ๊ณ  ํ†ต์šฉ๋˜์–ด ๋ถ€๋ฅด๋ฉฐ, ์ด๋Š” JSON Hijacking๊ณผ CSRF ์ทจ์•ฝ์ ์— ํฐ ์ ‘์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ZAP Custom En/Decoder ๋งŒ๋“ค๊ธฐ

2 min read

ZAP์˜ ํ™•์žฅ์„ฑ์€ Scripting Engine์˜ ํŒŒ์›Œ์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค. URL, HTML, Base64 ๋“ฑ ํ…Œ์ŠคํŒ… ๋‹จ๊ณ„์—์„  ์ธ/๋””์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์€๋ฐ์š”. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Encode/Decode/Hash ๊ธฐ๋Šฅ ๋˜ํ•œ Scripting์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Broken link๋ฅผ ์ฐพ์ž! DeadFinder

1 min read

์ตœ๊ทผ์— Broken Link(Dead Link)๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์˜ Broken Link๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด์˜€์ง€๋งŒ, ๊ฐ€๋ณ๊ฒŒ๋ผ๋„ ํ•œ๋ฒˆ ๊ณต์œ ํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ธ”๋กœ๊ทธ ๊ธ€๋กœ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

Rake(Ruby Make)

2 min read

Rake๋Š” Ruby์—์„œ ์‚ฌ์šฉ๋˜๋Š” build utility๋กœ Make์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. rake๋ž€ ์ด๋ฆ„ ๋˜ํ•œ ruby + make ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋‹จ์–ด๋กœ ์ผ๋ฐ˜์ ์ธ Ruby application๊ณผ Rails ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ ๋„๊ตฌ๋กœ์จ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Ruby Concurrency

2 min read

๋งค๋ฒˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ๋ฉด ๋™์‹œ์„ฑ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•˜์ง€ ์•Š์„ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ ์ธ ๊ตฌํ˜„์— ์ง์ ‘ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ํผํฌ๋จผ์Šค๋ฅผ ๊ฒฐ์ • ์ง€์„ ์ˆ˜ ์žˆ๋Š” ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Jekyll Collection ๋‹ค๋ฃจ๊ธฐ

1 min read

์ตœ๊ทผ์— Jekyll๋กœ ๋‹ค์‹œ ์ด์‚ฌ ํ›„ ๋ช‡๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  ํŠน์ • type์˜ ํŽ˜์ด์ง€๋“ค์„ ๋ชจ์•„์„œ json์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•œ๋ฐ, Jekyll์˜ Collection ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

Hugo to Jekyll

1 min read

์ •๋ง ์„ค๋งˆ์„ค๋งˆ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ ์ด๋Ÿฐ ์ผ์€ ์—†์„๊ฑฐ๋ผ๊ณ  ์žฅ๋‹ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋…„์— Jekyll์—์„œ Hugo๋กœ ์ „ํ™˜ํ•œ์ง€ ๋”ฑ 1๋…„๋งŒ์— ๋งˆ์Œ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ Jekyll๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

Hex? Imhex and Hexyl

1 min read

์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์–ด๋–ค Hex editor/viewer๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”? ์ €๋Š” Linux๋ฅผ ๋ฉ”์ธ์œผ๋กœ ์‚ฌ์šฉํ•  ๋–ˆ Ghex์™€ hexdump, macOS์—์„  hexyl์™€ vim(+plug)์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์ง€์›ํ•˜๋Š” ์—„์ฒญ๋‚œ Hex Editor์ธ ImHex์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €๋„ ์ด์ œ๋Š” ImHex์™€ hexyl ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค :D

Docker์™€ Dumb-Init

2 min read

์˜ค๋Š˜์€ ๋„์ปค์—์„œ ์•ˆ์ •์ ์ธ ๊ตฌ๋™์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” dumb-init๊ณผ pid1 ๊ทธ๋ฆฌ๊ณ  init ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Go dependency(go.mod) ์ถ”์ ํ•˜๊ธฐ

~1 min read

์ œ๊ฐ€ ์ตœ๊ทผ์— Dependabot alerts ์— ํ™•์ธ๋œ ์ทจ์•ฝ์  ์ค‘ ํŒจํ‚ค์ง€ ํ™•์ธ์ด ์•ˆ๋˜๋Š” ์ทจ์•ฝ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Go์—์„œ Stdin์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

1 min read

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ค‘ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜ ์ธ์ž ๊ฐ’์€ ์‰ฝ๊ฒŒ ์ฒดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‹œ์Šคํ…œ์œผ๋กœ ๋ถ€ํ„ฐ ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ง‰์ƒ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผ์ด ๋˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Golang Logrus์—์„œ Channel hook ๋งŒ๋“ค๊ธฐ

1 min read

Logrus๋Š” golang์˜ ์•„์ฃผ ์ข‹์€ logger ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. logrus๋Š” hook์„ ์ด์šฉํ•ด์„œ ์ง€์ •๋œ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ณณ์— ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. built-in hook์œผ๋กœ๋Š” ํ˜„์žฌ syslog์™€ io.Writer๊ฐ€ ์žˆ๊ณ  ์ €๋Š” channel๋กœ hook์„ ์“ธ ์ผ์ด ์žˆ์–ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์—ฌ ๊ณต์œ ํ•ด๋ด…๋‹ˆ๋‹ค :D

๊ฐœ๋ฐœ์ž๋งŒ? ์•„๋‹ˆ ์šฐ๋ฆฌ๋„ ์Šคํฌ๋ž˜์น˜ ํŒจ๋“œ ํ•„์š”ํ•ด! Boop!

1 min read

์ €๋Š” ์ข…์ข… ์žฌ๋ฏธ์žˆ๋Š” ์•ฑ์ด ์žˆ์„์ง€ ์•ฑ์Šคํ† ์–ด๋ฅผ ๋‘˜๋Ÿฌ๋ณด๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ ๋ณด์•ˆ ํ…Œ์ŠคํŒ…์—์„œ ์“ธ๋งŒํ•  ๊ฒƒ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์ฐพ์•„ ์ด๋ฒˆ ์—ฐํœด๋™์•ˆ ์‚ฌ์šฉํ•ด๋ณด๊ณ , ๊ดœ์ฐฎ๋‹ค๊ณ  ๋Š๊ปด์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ณต์œ ํ•ด๋ด…๋‹ˆ๋‹ค. ๋ฐ”๋กœ Boop ์ž…๋‹ˆ๋‹ค.

Go์—์„œ HTTP gzip response ์ฒ˜๋ฆฌํ•˜๊ธฐ

1 min read

์ตœ๊ทผ dalfox์— ๋…ํŠนํ•œ ์ด์Šˆ๊ฐ€ ์ œ๋ณด๋ฌ๋Š”๋ฐ(์˜คํ”„๋ผ์ธ์œผ๋กœ๋„ ํ•œ๋ฒˆ ์ œ๋ณด๋ฐ›์€ ์‚ฌํ•ญ์ด๋ผ ์ด๋ฏธ ์‚ฝ์งˆ์„ ์ข€ ํ—€๋˜ ์ƒํƒœ์˜€๋„ค์š”) ์˜ค๋Š˜ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๊ฐ„๋žตํ•˜๊ฒŒ ๊ณต์œ ํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ๋‚ด์šฉ์€ ์•„๋‹ˆ์ง€๋งŒ, golang์—์„œ http ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ๋•Œ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์‹ค์ˆ˜๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด์ฃ .

Hugo aliases์—์„œ noindex๋กœ ์ธํ•œ SEO ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

1 min read

Hugo์—์„œ aliases๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ฃผ์†Œ๋Š” meta tag๋ฅผ ์ด์šฉํ•œ redirect๋ฅผ ํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ url์„ ์ด๋™ํ•˜๊ธฐ์—” ์ ํ•ฉํ•˜์ง€๋งŒ, 30x์˜ status code๊ฐ€ ์•„๋‹ˆ๊ณ  200์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๊ธ€ ๋“ฑ ๊ฒ€์ƒ‰ ๋ด‡์ด ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ง‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

pkg.go.dev์— go ํŒจํ‚ค์ง€ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

~1 min read

golang์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์•ฑ์€ pkg.go.dev์— ์ €์žฅ๋˜๋ฉฐ ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์‹ค์ œ go get ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ด๊ณณ์˜ latest ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์‚ฌ์‹ค์„ ์ž˜ ๋ชฐ๋ž๋˜ ๊ณผ๊ฑฐ์˜ ์ €๋Š” ์ด๋Ÿฐ ์‹ค์ˆ˜๋„ ํ–ˆ์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚˜๋„ค์š”.

Github repo ๋‚ด Languages ๋ณ€๊ฒฝํ•˜๊ธฐ (.gitattributes)

1 min read

Github repository ํŽ˜์ด์ง€์˜ ์šฐ์ธก์—๋Š” ํ•ด๋‹น repo์˜ ์–ธ์–ด ํ†ต๊ณ„์ธ Languages๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์ฃผ๋ ฅ์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ํ‘œ๊ฐ€ ๋˜๊ณ , ์ผ๋ถ€ ๋„๊ตฌ๋“ค์€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์„ ๋ถ„๋ฅ˜ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Go์—์„œ ์•„์ฃผ ํฐ JSON ํŒŒ์ผ์„ ํ•ธ๋“ค๋งํ•˜๊ธฐ

2 min read

์ตœ๊ทผ์— ์‹œ๋ฅ์ง€ ์•Š์€ ๋ฌธ์ œ๋กœ ๊ตฌ๊ธ€๋งํ•˜๋‹ค๊ฐ€ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•ด๊ฒฐํ•œ ์ผ์ด ์žˆ์–ด์„œ ์งง๊ฒŒ ๊ธ€๋กœ ๊ณต์œ  ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฌธ์ œ๋กœ ์ƒ๊ฐํ•ด์„œ ์˜คํžˆ๋ ค ๊ฐ€๊นŒ์ด์— ์žˆ๋Š” ๋‹ต์„ ๋†“์น˜๊ณ  ๋ง์•˜์—ˆ๋„ค์š”.

Goreleaser์—์„œ M1, Windows ARM64 ์ง€์›ํ•˜๊ธฐ

~1 min read

goreleaser์˜ ๊ฐ๊ฐ v0.157.0, v0.175.0 ๋ฒ„์ „์—์„œ M1 macbook, Windows ARM 64 ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋„ ์ œ๊ฐ€ ๊ฐœ๋ฐœํ•˜๋Š” ๋„๊ตฌ์—์„  M1 ์ง€์›์ด ์•ฝ๊ฐ„ ๋Šฆ์€ ๋Š๋‚Œ์ด ์žˆ๊ธดํ•œ๋ฐ์š”. ๊ด€๋ จํ•ด์„œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ๋“ค ์ •๋ฆฌํ•ด ๋‘ก๋‹ˆ๋‹ค.

Asciinema Shortcode in Hugo

2 min read

TL;DR

์ฝ”๋“œ๋ฅผ gist์— ๋”ฐ๋กœ ์˜ฌ๋ ค๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

Hugo์—์„œ Sitemap-index ์‚ฌ์šฉํ•˜๊ธฐ(split sitemap)

3 min read

sitemap.xml

sitemap.xml์€ Sitemap protocol์„ ์œ„ํ•œ XML schema๋กœ ์›น ์„œ๋น„์Šค๊ฐ€ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋งํฌ๋“ค์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์‚ฌ์šฉ์ž๋‚˜ ๊ฒ€์ƒ‰ ๋ด‡ ๋“ฑ์€ ์ด ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

Github action ์„ฑ๊ณต ์‹œ ๋‹ค๋ฅธ action ์‹คํ–‰ํ•˜๊ธฐ

1 min read

Github action์€ github์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. yaml ํฌ๋งท์˜ config ๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ deploy ๊นŒ์ง€ ๊ตฌํ˜„ํ•˜๊ธฐ์— ๋”ฐ๋ผ ์ •๋ง ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๊ณ  github๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด jenkins๋‚˜ ๋‹ค๋ฅธ devops ๋„๊ตฌ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ์ด๋™ํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ข‹์€ ๊ธฐ๋Šฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

git subtree๋ฅผ ์ด์šฉํ•ด github pages์— ๋ฐฐํฌํ•˜๊ธฐ

1 min read

hugo ๋“ฑ jekyll์ด ์•„๋‹Œ static site generator๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœํ•ด์„œ github pages์— ํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ gh-pages ๋ธŒ๋žœ์น˜๋‚˜ ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐํฌํ•˜๊ณ  ๋ฐฐํฌ path๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ github pages๋กœ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Hugo Shortcodes

1 min read

Hugo์—๋Š” Shortcode๋ผ๋Š” snippet์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ hugo๋กœ ๋„˜์–ด์˜ค๊ณ  ๊ต‰์žฅํžˆ ๋ง˜์— ๋“ค์—ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ์š”. ์˜ค๋Š˜์€ shortcode๊ฐ€ ๋ญ”์ง€, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์“ฐ๋ฉด ๋” ์ข‹์„์ง€ ์ด์•ผ๊ธฐํ•ด๋ณผ๊ฒŒ์š”.

Hugo Archetypes์„ ์ด์šฉํ•œ ๊ธ€ Template ์‚ฌ์šฉํ•˜๊ธฐ

1 min read

Hugo์—์„œ๋Š” content management๋ฅผ ์œ„ํ•ด archetypes ๋ผ๋Š” template file์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” hugo new ๋กœ ์ƒˆ๋กœ์šด ๊ธ€์„ ๋งŒ๋“ค ๋•Œ ์ž๋™์œผ๋กœ ๊ธ€์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉฐ, ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

Goroutine๊ณผ Sync

3 min read

Go ํ•˜๋ฉด ์–ด๋–ค ํŠน์ง•์ด ๋– ์˜ค๋ฅด์‹œ๋‚˜์š”? ๊ตฌ๊ธ€์˜ ์–ธ์–ด, ๋น ๋ฅด๋‹ค ๋“ฑ ์ „๋ฐ˜์ ์ธ ๊ฐœ๋…์—์„œ goroutine, ์ฑ„๋„ ๋“ฑ ๋””ํ…Œ์ผํ•œ ๋ถ€๋ถ„๊นŒ์ง€ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์„ํ…๋ฐ์š”, ์ €๋Š” ์ œ๊ฐ€ ์ฒ˜์Œ ๊ณ ๋ฅผ ์ ‘ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ดค๋˜ ๊ฒƒ์ด goroutine๊ณผ ์ฑ„๋„์ด์˜€์Šต๋‹ˆ๋‹ค.

Html to Markdown in Cli

1 min read

์–ด์ œ Hugo๋กœ ์ด์‚ฌ๋กœ ์ด์‚ฌ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉด์„œ ๋ชปํ–ˆ๋˜ ์ž‘์—…์„ ํ•˜๋‚˜ ์ง„ํ–‰ํ•œ๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๊ธฐ์กด jekyll ๋ถ€ํ„ฐ ์œ ์ง€ํ•ด์˜ค๋˜ blogger๋กœ ๋ถ€ํ„ฐ ๋„˜์–ด์˜จ ์ž”ํ•ด, html ํฌ์ŠคํŠธ๋“ค์ธ๋ฐ์š”. ๋ฌผ๋ก  ํŽ˜์ด์ง€ ๋žœ๋”ฉ์—๋Š” ์ „ํ˜€ ์ง€์žฅ์ด ์—†์ง€๋งŒ, html ํŒŒ์ผ ์ž์ฒด๊ฐ€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค๋ณด๋‹ˆ ๊ธ€์„ ์ˆ˜์ •ํ•˜๊ธฐ ๊นŒ๋‹ค๋กญ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Utterances์—์„œ ๋Œ“๊ธ€ ์ด๋™ํ•˜๊ธฐ

~1 min read

๊ฐ„ํ˜น github page์˜ repo ์ด์ „ ๋“ฑ utterances์˜ ๋Œ“๊ธ€์„ ์ด๋™ํ•ด์•ผํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ์ด๋ฒˆ์— hugo ์ด์ „ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ ํ•˜๋‹ค๋ณด๋‹ˆ, ๊ฐ„๋‹จํ•œ ํŠธ๋ฆญ์„ ์ด์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ์‰ฝ๊ฒŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์–ด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค.

Jekyll์—์„œ Hugo๋กœ ์ด์‚ฌ๊ฐ€๊ธฐ (Migration log)

7 min read

jekyllโ€ฆ ์ œ๊ฐ€ ์˜ˆ์ „์—๋Š” rubyist(ruby ์‚ฌ์šฉ์ž) ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ 2018~19๋…„ ์ฏค์— gopher(golang ์‚ฌ์šฉ์ž)๊ฐ€ ๋˜์—ˆ๊ณ  ์ดํ›„๋ถ€ํ„ด ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋Œ€๋‹ค์ˆ˜์˜ ๋„๊ตฌ๋Š” golang ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Golang์˜ nil๊ณผ interface nil์˜ ์žฌ๋ฏธ์žˆ๋Š” ํŠน์ง•

1 min read

Null์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์–ธ์–ด์— ๋”ฐ๋ผ null nil nan none undefined ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ null์ด๋ž€ ๊ฐœ๋…์ด ์–ธ์–ด๋งˆ๋‹ค ํŠน์„ฑ๊ณผ ์ฒ ํ•™, ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ ๋‹ฌ๋ผ์ง€๊ธฐ๋„ ํ•˜๋Š”๋ฐ์š”. ์˜ค๋Š˜์€ golang์—์„œ์˜ null์ธ nil์˜ ํŠน์„ฑ ํ•˜๋‚˜๋ฅผ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

25 Keywords in Go

1 min read

Go supports only 25 keywords. Itโ€™s very simple, which has the advantage of a low learning curve. Iโ€™ve never posting it while using Go. Let me summarize the meaning of each keyword today.

go-jwt์™€ golang-jwt/jwt

1 min read

์ตœ๊ทผ์— golang์œผ๋กœ ๊ฐœ๋ฐœํ•œ ๋„๊ตฌ ์ค‘ jwt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋Œ€๋‹ค์ˆ˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด Security dependency alert์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

Ruby์™€ Google Indexing API๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์‹ ๊ทœURL ๋“ฑ๋กํ•˜๊ธฐ

4 min read

์ œ๊ฐ€ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  commit - push ์‹œ ๋งŽ์€ ์ž‘์—…๋“ค์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ๋“ค์„ ์ด์•ผ๊ธฐ ๋“œ๋ฆฌ๋ฉด, Jekyll build ๋ฐ deploy ๊ณผ์ •์ด ์ง„ํ–‰๋˜๊ณ  ์ด๋ฏธ์ง€ ์ค‘ compress๊ฐ€ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋Š” compress ์ฒ˜๋ฆฌํ•˜์—ฌ ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ , notify ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ณผ์ •๋“ค์ด github action์— ๋…น์•„์žˆ์Šต๋‹ˆ๋‹ค.

Github default branch ๋ณ€๊ฒฝํ•˜๊ธฐ (master to main)

1 min read

์˜ค๋Š˜ ๋„๊ตฌ๋งŒ๋“ค ๋–„ ์“ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ ค๊ณ  github repository๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค ํ–ˆ๋”๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Go์—์„œ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ƒ์„ฑํ•˜๊ธฐ(with gotests)

3 min read

์ €๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋ณธ์—…์ด ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด๋ง์ด๋‹ค ๋ณด๋‹ˆ ํ˜„์—… ๊ฐœ๋ฐœ์ž์ฒ˜๋Ÿผ ๊ผผ๊ผผํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ€ TDD(Test-Driven Development)๋ฅผ ์‹ ๊ฒฝ์“ฐ๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์œ ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ตฌ์š”.

rvm is not a function ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ

~1 min read

Problem

์ €๋Š” ๋ณดํ†ต ๊ธ€์„ ์ž‘์„ฑํ•  ๋–„ ๋งฅ๋ถ์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ™ˆ ์„œ๋ฒ„์—์„œ๋Š” ์ง์ ‘ ๊ธ€์„ ์ž‘์„ฑํ•  ์ผ์ด ๋ณ„๋กœ ์—†์—ˆ๋Š”๋ฐ, ๋””์ž์ธ ์ข€ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ์ž‘์—…ํ•˜๋‹ค ๋ณด๋‹ˆ jekyll serve ์‹œ ruby ๋ฒ„์ „ ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์š”์•ฝํ•˜๋ฉด github pages gem์€ 2.x ๋ฒ„์ „๋งŒ ์ง€์›ํ•˜๋Š”๋ฐ, ์‹œ์Šคํ…œ ๋ฒ„์ „์ด 3.x ๋ฒ„์ „์ด๋ผ์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๊ณ , ์ด๋ฅผ rvm๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž rvm use๋ฅผ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—‡์Šต๋‹ˆ๋‹ค.

GOPRIVATE์„ ํ†ตํ•ด ๊ฐœ์ธ/์‚ฌ์„ค ๋„๋ฉ”์ธ์—์„œ go get ํ•˜๊ธฐ(Gitlab, Github enterprise)

~1 min read

go get

go ๊ธฐ๋ฐ˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์‚ฌ์šฉํ•ด๋ณด์…จ๊ฑฐ๋‚˜ go ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ์„ ํ•œ๋‹ค๋ฉด go get ์€ ๋งค์šฐ ์ต์ˆ™ํ•œ ๋ช…๋ น์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

DCO and Github Sign-off Commit

3 min read

์–ด์ œ ๋ฐค์— ZAP์ชฝ์— Pull Request๋ฅผ ๋‚ ๋ ธ๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Secure JWT and Slinding Sessions

3 min read

Sessions ์ด๋ž€?

Sessions์€ ์ปดํ“จํŒ…์—์„œ ๋น„์Šทํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๊ณ , ์›น์—์„œ๋Š” HTTP๊ฐ€ ๋น„ ์—ฐ๊ฒฐํ˜• ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๊ฐ€ ๊ธฐ์กด์— ์ ‘์†ํ–ˆ๋˜ ํด๋ผ์ด์–ธํŠธ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. (ํŒŒ์ผ ์ฟ ํ‚ค๋ž‘ ๋น„์Šทํ•˜์ฃ . ๋‹ค๋งŒ ์ฒ˜๋ฆฌ์—์„  ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ธดํ•ฉ๋‹ˆ๋‹ค.)

[Learn ML #1] ์ด์ œ๋ถ€ํ„ฐ ๋จธ์‹ ๋Ÿฌ๋‹(Machine Learning)๋„ ๊ณต๋ถ€ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜

1 min read

์ตœ๊ทผ์— ๋จธ์‹ ๋Ÿฌ๋‹ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ญ ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ธฐ์—๋Š” ์ œ ์ฃผ๋ ฅ์ธ ๋ณด์•ˆ๊ณผ ๋„๋ฉ”์ธ๋„ ์›Œ๋‚™ ๋‹ค๋ฅด๊ณ , ๊ฐœ๋ฐœ์ ์ธ ํ…Œํฌ๋‹‰ ์ด์™ธ์—๋„ ์ˆ˜ํ•™/ํ†ต๊ณ„ํ•™์ ์ธ ๋ถ€๋ถ„์ด ๋งŽ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ํ•  ์ˆ˜ ์žˆ์„๊ฑฐ๋ž€ ํ™•์‹ ์€ ๋“ค์ง€ ์•Š๋„ค์š”.

[Phoenix #4] Fixed bug in session entropy page

~1 min read

Problem

Session entropy ๊ณ„์‚ฐ ์‹œ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๊ท€์ฐฎ์•„์„œ Session type ๋“œ๋กญ๋ฐ•์Šค์— Ascii๋กœ ์„ ํƒ ์‹œ ๋ฐ˜์˜๋˜๋„๋ก ์ถ”๊ฐ€ํ–ˆ์—ˆ๋Š”๋ฐ, ํฌ๊ฒŒ ํšจ์šฉ์„ฑ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”..

[Phoenix #3] Update session entropy page

~1 min read

Change note

  • ์†Œ์ˆซ์  3์ž๋ฆฌ ๊นŒ์ง€ ์ž˜๋ ค์„œ Entropy ํ‘œํ˜„ํ•˜๋„๋ก ์ˆ˜์ •
  • ์ผ๋ถ€ ๋ฌธ๊ตฌ ์ˆ˜์ • ๋ฐ table ๋“ฑ ๊ฐ„๊ฒฉ ์ˆ˜์ •
  • Case , Length ๋“ฑ์„ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ณ€๊ฒฝ(๋‹จ์ผ Element์—๋งŒ ์ ์šฉ๋˜๋„๋ก)

Bump a go package version

1 min read

My Problem

๊ฐ„ํ˜น go get ์œผ๋กœ ์ œ๊ฐ€ ๋งŒ๋“  ๋„๊ตฌ๋ฅผ ์„ค์น˜ ์‹œ ๊ตฌ๋ฒ„์ „(ํ˜„์žฌ๋Š” 2๋ฒ„์ „๋Œ€์ธ๋ฐ, 1๋ฒ„์ „๋Œ€๊ฐ€..)์ด ์„ค์น˜๋˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ pkg.go.dev์—๋„ ๊ตฌ๋ฒ„์ „์ด ๋งˆ์ง€๋ง‰ ๋ฆด๋ฆฌ์ฆˆ๋กœ ์žˆ๊ณ  ๋ณ€ํ™”๊ฐ€ ์—†๋˜ ์ƒํƒœ์˜€์ฃ .

Go flag์—์„œ custom usage ๋งŒ๋“ค๊ธฐ

2 min read

golang์—์„œ cli ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์ ‘ํ•˜๋Š” ๋„๊ตฌ๋Š” flag์ž…๋‹ˆ๋‹ค. ์ € ๋˜ํ•œ flag๋กœ ์‹œ์ž‘ํ•˜์—ฌ cobra, unfave ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์จ๋ณด๋‹ค๊ฐ€ ๊ฒฐ๊ตญ์€ ์ž˜ ์‚ฌ์šฉํ•˜๋˜ cobra๋ฅผ ๋ฒ„๋ฆฌ๊ณ  flag๋กœ ๋‹ค์‹œ ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค. go์˜ ๋‚ด์žฅํ˜• option parser๋กœ ์‹ฌํ”Œํ•˜์ง€๋งŒ, ํŽธ์˜์„ฑ์„ ์œ„ํ•œ ๋ถ€๋ถ„๋“ค์€ ๋งŽ์ด ์ ์–ด์„œ ๋•Œ๋•Œ๋กœ, ์ง์ ‘ ์˜ค๋ฒ„๋ผ์ด๋“œ์™€ ๊ฐ™์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์›๋ณธ ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Rails generate ์‹œ ๋ฉˆ์ถ”๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

~1 min read

์ œ๊ฐ€ 2019๋…„๋ถ€ํ„ฐ go๋ฅผ ๋ฉ”์ธ์–ธ์–ด๋กœ ํ™•์ •ํ•˜๋ฉด์„œ ruby๋กœ ๊ฐœ๋ฐœํ•  ์ผ์ด ๋งค์šฐ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ฐ€๋”์”ฉ ๋น ๋ฅด๊ฒŒ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ruby๋ฅผ ์˜๋„ํ•˜์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ฐ„ํ˜น rails g, rails generate ์‹œ ๋ฉˆ์ถ”๋Š” ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์›์ธ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธ€ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค :D

MacOS Atom์—์„œ ์ด๋ชจ์ง€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ ๋ฒ„๊ทธ ํ•ด๊ฒฐํ•˜๊ธฐ

~1 min read

Atom์„ ์‚ฌ์šฉํ•˜๋˜ ์ค‘ ์€๊ทผํžˆ ๋ถˆํŽธํ•œ ๋ถ€๋ถ„์ด ํ•˜๋‚˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๋ชจ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์Šˆ์ธ๋ฐ์š”. ๊ณ ์ณ์„œ ์จ์•ผ์ง€ ํ•˜๋‹ค๊ฐ€ ์ด์ œ์„œ์•ผ ์†”๋ฃจ์…˜์„ ์ฐพ์•„๋ณด๊ณ  ์ ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋‹ˆ ํŒจ์น˜ ์ „๊นŒ์ง„ ์ž„์‹œ๋ฐฉํŽธ์œผ๋กœ ์“ธ๋งŒํ•œ ๊ฒƒ ๊ฐ™์•„ ๊ธ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Git pull/merge ์ถฉ๋Œ ์‹œ ๊ธฐ๋ณธ ์—๋””ํ„ฐ ๋ณ€๊ฒฝ, ์—๋””ํ„ฐ ๋„์šฐ์ง€ ์•Š๊ธฐ

~1 min read

git์€ ๋•Œ๋•Œ๋กœ git pull ๋“ฑ remote์˜ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์ถฉ๋Œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ฆฌ๋ฉฐ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ nvim์„ ๊ธฐ๋ณธ ์—๋””ํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ฝ”๋“œ ๋จธ์ง€ ๋‹จ๊ณ„์—์„œ ์—ด๋ฆฌ๋Š” ๊ธฐ๋ณธ ์—๋””ํ„ฐ๊ฐ€ nano๋ผ ์ƒ๋‹นํžˆ ๋ถˆํŽธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CI์—์„œ ์ด๋Ÿฌํ•œ ํŒ์—…์€ ์ž๋™ํ™”๋œ push ๊นŒ์ง€ ์ด์–ด์ง€๋Š”๋ฐ ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ธฐ๋ณธ ์—๋””ํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Auto-Edit์„ ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

[Phoenix #2] Added change note

~1 min read

Cullinan๊ณผ ๋™์ผํ•˜๊ฒŒ Phoenix์—๋„ change note๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋ถ€ํ„ด phoenix ํŽ˜์ด์ง€์—์„œ ๋ณ€๊ฒฝ ์ด๋ ฅ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ ๋ฐฉ์‹ ๋˜ํ•œ ๋™์ผํ•˜๋‹ˆ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

[Phoenix #1] Phoenix์— gist ๊ธฐ๋ฐ˜ snippets๊ฐ€ ์ถ”๊ฐ€

1 min read

์ด์ „๋ถ€ํ„ฐ ๋””์ž์ธ/๊ธฐ๋Šฅ ๋“ฑ ๋ธ”๋กœ๊ทธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ธ€๋„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, ์˜ฌํ•ด๋˜์„œ์•ผ ์žฌ๋Œ€๋กœ ์‹œ์ž‘๋˜๋„ค์š”. ์‚ฌ์‹ค ๋ญ ์ค‘์š”ํ•œ ์ •๋ณด๊ฑฐ๋ฆฌ๋Š” ์•„๋‹ˆ๊ณ , ๊ทธ๋ƒฅ ๊ฐœ์ธ์ ์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ํƒœ๊ทธ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๊ณ  ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค. ์•„๋งˆ ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ๋“ค๋งŒ ๋“ค์–ด๊ฐˆ ๊ฒƒ ๊ฐ™์•„์š”.

How to applying IntelliJ theme in ZAP

1 min read

์–ด์ œ BurpSuite์˜ Customizer์— ๋Œ€ํ•œ ๊ธ€์„ ์ผ์—ˆ์Šต๋‹ˆ๋‹ค. BurpSuite์—์„œ FlatLaf์˜ IntelliJ Theme๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์ด์˜€๊ณ , ๊ธ€ ๋ง๋ฏธ์™€ ๋Œ“๊ธ€์—๋„ ์ž‘์„ฑํ–ˆ๋“ฏ์ด ZAP ๋˜ํ•œ 2.10 ๋ฒ„์ „๋ถ€ํ„ฐ FlatLaf๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ• ๊ฑฐ๋ž€ ์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Github actions๊ณผ App

1 min read

์˜ค๋Š˜์€ ์ œ๊ฐ€ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” git-action ๊ณผ app์— ๋Œ€ํ•ด ๊ฐ€๋ณ๊ฒŒ ์†Œ๊ฐœํ•ด๋“œ๋ฆด๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋“ค๊ณผ ๋น„๊ตํ•ด๋ณด๋ฉด ์ „ ๊ทธ๋ƒฅ ๋งŽ์ง€๋„, ์ ์ง€๋„ ์•Š์€ ์–‘์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋„ค์š” ๐Ÿ˜

Make cloud base ZAP Scanning Environment Using github-action

1 min read

Hi hackers and bugbounty hunters :D Today, I talk about building a github-action-based ZAP scanning environment. As you know, there is no time limit for public repo, so you can configure a cloud-based vulnerability scanner for free ๐Ÿ˜‰

Github 2FA ์ธ์ฆ ์ดํ›„ Authentication Error ํ•ด๊ฒฐํ•˜๊ธฐ

~1 min read

Gitub๋Š” ํŽธ์˜์„ฑ ๋•Œ๋ฌธ์— 2FA(Two-Factor) ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์—ˆ๋Š”๋ฐ, Marketplace ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ๋ถˆํŽธํ•จ์„ ๊ฐ์ˆ˜ํ•˜๊ณ  2FA๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. (์–ด์ฐจํ”ผ ๋‹ค๋ฅธ ์„œ๋น„์Šค์—์„œ ์ด๋ฏธ ๋งŽ์ด ์“ฐ๊ณ ์žˆ๋˜ ์ƒํƒœ๋ผ.. ๋ญ ์‚ฌ์‹ค ํฌ๊ฒŒ ๋ถˆํŽธํ• ๊ฒŒ ์—†์„ ์ค„ ์•Œ์•˜์ฃ )

Jekyll Build Speed Up!

3 min read

์ข…์ข… ์ œ Github page๋Š” ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋Œ€๋žต์ ์ธ ์ด์œ ๋Š” ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Github page๋Š” ์•ฝ ์ตœ๋Œ€ 13๋ถ„ ์ „ํ›„ ์ •๋„์˜ build time์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด pending ๋˜๊ฑฐ๋‚˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ œ Jekyll์˜ ๋นŒ๋“œ ์‹œ๊ฐ„์ด 15๋ถ„ ์ •๋„ ๊ฑธ๋ฆฌ๋˜ ์ƒํƒœ๋กœ ๋‹น์—ฐํžˆ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ์ฃ .

Jekyll feed.xml ์ตœ์†Œํ™”ํ•˜๊ธฐ

2 min read

RSS๋Š” ๋งค์šฐ ์˜ค๋ž˜๋œ ๊ธฐ์ˆ ์ด์ง€๋งŒ, ์•„์ง๊นŒ์ง€๋„ ๋งŽ์€ ์›น ์„œ๋น„์Šค์—์„œ ์ง€์›ํ•˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฆฌ๋”๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ธ€ ๋ชฉ๋ก์„ ๋ฐ›์•„์„œ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ , SEO ๊ด€์ ์—์„œ๋„ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

workflow_dispatch๋ฅผ ์ด์šฉํ•œ github action ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ

1 min read

์ด๋ฒˆ ์ฃผ๋ง์— ์ง‘ ์„œ๋ฒ„์— ์žˆ๋˜ ์ž๋™ํ™” ๋กœ์ง ์ค‘ ์ผ๋ถ€๋ฅผ github action์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ git pro๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ, ์›” 3000๋ถ„์˜ private repo์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” github action์˜ ์‹œ๊ฐ„์ด ์žˆ๊ธฐ๋„ํ•˜๊ณ , ์•„๋ฌด๋ž˜๋„ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด๋‹ค๋ณด๋‹ˆ, ํ”ผ์”จ๊บผ์ง ๋“ฑ์œผ๋กœ ์ธํ•ด cron์ด ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ ์ด๋™์„ ๊ฒฐ์‹ฌํ–ˆ์ฃ .

Jekyll์— Utterances, Giscus ๋Œ“๊ธ€ ์ ์šฉํ•˜๊ธฐ

2 min read

์ตœ๊ทผ์— ๋ธ”๋กœ๊ทธ๋ฅผ blogger์—์„œ github page๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. Jekyll์—์„œ ๋งŽ์ด๋“ค ์‚ฌ์šฉํ•˜์‹œ๋Š” Disqus์˜ ๊ฒฝ์šฐ ๊ฐœ์ธ์ ์œผ๋กœ ๊ด‘๊ณ  ์ด์Šˆ๋•Œ๋ฌธ์— ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋Œ“๊ธ€ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์ฐพ์•„๋ดค๊ณ , github issue ๊ธฐ๋ฐ˜์˜ ๋Œ“๊ธ€ ์„œ๋น„์Šค์ธ Utterances๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

How to add custom header in ZAP and zap-cli

3 min read

The zap-cli is a tool that helps make ZAP easy to use on the command line. From simple scanning to CI/CD Pipeline, itโ€™s a tool thatโ€™s used everywhere. Unlike other scanners, it does not support custom headers.

Write Metasploit Module in Golang

2 min read

Metaploit์—์„œ 2018๋…„ 12์›”๋ถ€ํ„ฐ golang module ์ง€์›์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋„ ์ž˜ ๋ชจ๋ฅด๊ณ  ์žˆ๋‹ค๊ฐ€ ์ตœ๊ทผ์—์„œ์•ผ ์•Œ๊ฒŒ ๋˜์—ˆ๋„ค์š”.

theme-color๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ toolbar ์˜์—ญ ์ƒ‰์ƒ ๋ฐ”๊พธ๊ธฐ

~1 min read

๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋กœ ๊ฒ€์ƒ‰ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ์ƒ๋‹จ์˜ ํˆด๋ฐ” ์˜์—ญ(์ฃผ์†Œํ‘œ์‹œ์ค„์ด ํฌํ•จ๋œ..)์˜ ์ƒ‰์ƒ์ด ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋“ค์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ๋ณ„๋กœ ๋‹ค ๋‹ค๋ฅธ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ๋ถ„๋ช… HTML/CSS/JS ์ค‘ ํ•˜๋‚˜ ์ผ๊บผ๋ผ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, @yozora770 ์˜ ๋„์›€์œผ๋กœ ์•Œ๊ฒŒ๋˜์–ด ๊ฐ€๋ณ๊ฒŒ ๋ธ”๋กœ๊ทธ ๊ธ€๋กœ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

Cookie and SameSite

5 min read

์˜ฌ 2์›”๋ถ€ํ„ฐ Chrome ๋ธŒ๋ผ์šฐ์ €์—์„œ SameSite=Lax๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

Update golang 1.10 to 1.13 with update-golang(subfinder install error fix)

~1 min read

SubFinder ์„ค์น˜ ์ค‘ undefined: os.UserHomeDir , undefined: strings.ReplaceAll ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค. ์•„๋งˆ.. ํ˜„์žฌ ์ผ๋ถ€ ํ”ผ์”จ์—์„œ ์„ค์น˜ ์‹œ ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ํ…๋ฐ์š”, ์›์ธ์€ golang ์˜ ๋ฒ„์ „ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Check logic vulnerability point using GET/HEAD in Ruby on Rails

3 min read

์ตœ๊ทผ์— Github OAuth flow bypass ์ทจ์•ฝ์ ์ด ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ Rails ์•ฑ์˜ ํŠน์„ฑ์„ ์ด์šฉํ•œ ์ทจ์•ฝ์ ์ด๊ณ , Github๋งŒ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ณ  ํŒจ์น˜๋กœ ๋ชจ๋“  Rails ์•ฑ์„ ๋ณดํ˜ธํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. Today, I going to review one vulnerability that needs to be checked in the Rails App environment through the Github OAuth flow bypass vulnerability. (B recently shared something interesting to me.)

[๋ฃจ๋น„์—์„œ Go๋กœ ๋„˜์–ด๊ฐ€๊ธฐ] Revel์„ ์ด์šฉํ•ด MVC ์›น ๊ตฌ์„ฑํ•˜๊ธฐ

3 min read

Ruby์—์„œ golang์œผ๋กœ ์ฃผ๋ ฅ ์–ธ์–ด๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์ด ์›น์•ฑ์ด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ Rails์— ์ต์ˆ™ํ•ด์ง„ํ„ฐ๋ผ ๋Œ€์•ˆ์ด ๋ ๋งŒํ•œ ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ์•„๋ดค๊ณ , 2๊ฐ€์ง€ ์ƒ๊ฐ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

Mac ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ xcrun: error: invalid active developer path ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ

~1 min read

MacOS ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ์–ด๊น€์—†์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ซ ๋ฐ”๋กœ ๊ฐœ๋ฐœ ๊ด€๋ จ ๋„๊ตฌ ์‚ฌ์šฉ ์‹œ ๋Œ€๋‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” missing xcrun ์—๋Ÿฌ์ธ๋ฐ์š”.

Golang ์œผ๋กœ ๋งŒ๋“  ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ Heroku์— ๋ฐฐํฌํ•˜๊ธฐ

1 min read

์š”์ฆ˜ ๊ณต๋ถ€๋„ํ• ๊ฒธ golang ์œผ๋กœ ๋„์ ๋„์  ๋งŒ๋“ค์–ด๋ณด๊ณ  ์žˆ๋Š”๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ์›น ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  heroku์— ๋„์šธ ์ƒ๊ฐ์ธ๋ฐ, ๋ฃจ๋น„์ฒ˜๋Ÿผ ์‚ฌ์ „์— ์„ธํŒ…์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด์„œ ๋‚ด์šฉ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค.

Rails์—์„œ HTTP Basic Auth ์ ์šฉํ•˜๊ธฐ

~1 min read

HTTP Basic Auth๋Š” HTTP์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ID/PW๋ฅผ Base64๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ Auth ํ—ค๋”์— ๋„ฃ์–ด ์„œ๋ฒ„๊ฐ€ ์‹ ๋ขฐ๋œ ์‚ฌ์šฉ์ž์ธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

HTTP Request(ZAP, Burp) Parsing on Ruby code

1 min read

XSpear ๊ด€๋ จํ•ด์„œ ์ด๋Ÿฐ ๊ฑด์˜์‚ฌํ•ญ์ด ํ•˜๋‚˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Burp, ZAP ๋“ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ท ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ํ›„ ์˜ต์…˜์„ ์ฃผ์–ด ์ฝ์œผ๋ฉด ์ž๋™์œผ๋กœ URL, Header ๋“ฑ์„ ํŒŒ์‹ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋ง์”€ํ•˜์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.(๋งˆ์น˜ sqlmap์˜ ๊ทธ๊ฒƒ ์ฒ˜๋Ÿผ)

Ruby on Rails Double-Tap ์ทจ์•ฝ์ (CVE-2019-5418, CVE-2019-5420)

4 min read

๊ฐ„๋งŒ์— ์ทจ์•ฝ์  ๋ฆฌ๋ทฐํ•ด๋ด…๋‹ˆ๋‹ค. ์˜ฌ ๋ด„์— ์ •๋ฆฌํ•œ๋ฒˆํ•˜๊ณ  ์ตœ๊ทผ์— ์ถ”๊ฐ€๋กœ ์ •๋ฆฌํ–ˆ๋˜๊ฑฐ๋ผ ๋จธ๋ฆฌ์†์—์„œ ๋‚ ์•„๊ฐ€๊ธฐ ์ „์— ๋ธ”๋กœ๊ทธ ๊ธ€๋กœ ๋‚จ๊ฒจ๋ณด์•„์š”. ์šฐ์„  ์˜ฌ ํ•ด 3์›” ์ •๋„์— ๋ ˆ์ผ์ฆˆ ๊ด€๋ จ ์ทจ์•ฝ์ ์ด 3๊ฐœ์ •๋„ ์˜ฌ๋ผ์™”์—ˆ์Šต๋‹ˆ๋‹ค. CVE-2019-5418 ~ 5420 ์ด์Šˆ์ธ๋ฐ, ๊ฒฐ๊ณผ์ ์œผ๋ก  Rails์—์„œ ์‹œ์Šคํ…œ ํŒŒ์ผ์„ ์ฝ๊ณ , ๋ช…๋ น ์‹คํ–‰๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ 3๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค.

Finding in-page scripts & map files with javascript (very simple..)

~1 min read

๋ณ„ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์“ฐ๋ฉด ํŽธํ•˜๋‹ˆ.. ํŽ˜์ด์ง€์— ์žˆ๋Š” ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ๋งํฌ์™€ map ํŒŒ์ผ ๋งํฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (map์€ ๊ทธ๋ƒฅ ๋ฌด์กฐ๊ฑด ๋‚˜ํƒ€๋‚˜๊ฒŒ..)

Rails์—์„œ routing parameters์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ

1 min read

Rails์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์€ params๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค. ์ด ๊ณผ์ • ์ค‘ ๋ ˆ์ผ์ฆˆ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •ํ•œ ๊ฐ’์ด ์žˆ์–ด ์ฝ์–ด์˜ค์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๋Ÿฐ ์ผ€์ด์Šค์ž…๋‹ˆ๋‹ค.

How to resolve duplicate mail transmission in Rails ActionMailer(์ค‘๋ณต ๋ฉ”์ผ ์ „์†ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)

~1 min read

Rails์—์„œ ActionMailer๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋ฉ”์ผ ์†ก/์ˆ˜์‹  ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ActionMailer๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ตฌ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํŠน์ • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฉ”์ผ์ด ์ค‘๋ณต์œผ๋กœ ๋ฐœ์†ก๋˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ์š”, ์ฐพ์•„๋ณด๋‹ˆ ์ •ํ™•ํ•œ ์ด์œ ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ž์ฒด์ ์ธ ๋ฒ„๊ทธ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. (์ค‘๋ณต ์ฝœ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐโ€ฆ)

Send Gmail using Rails ActionMailer Class (ActionMailer๋ฅผ ์ด์šฉํ•˜์—ฌ Gmail ์ „์†กํ•˜๊ธฐ)

2 min read

Rails๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Mail ์†ก/์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ์›น์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ธ๋ฐ์š”, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์ด๋‚˜ ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ๋ฉ”์ผ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Rails App ์‹œ์ž‘ ์‹œ ํŠน์ • ์ฝ”๋“œ ์‹คํ–‰ํ•˜๊ธฐ(How to startup code on Ruby on Rails with initialize)

1 min read

Rails ์•ฑ ๊ตฌ๋™ ์‹œ ํŠน์ • ์ž‘์—…์ด๋‚˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? ๊ณ ๋ฏผ์„ ์˜ˆ์ „์— ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋•Œ initialize๋กœ ํ•ด๊ฒฐํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋งŒ์— ๋™์ผํ•œ ๊ณ ๋ฏผ์„ ์ž ๊นํ•˜๊ฒŒ ๋ฌ์—ˆ๋Š”๋ฐ, ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค.

Rails crono๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šค์ผ€์ค„๋งํ•˜๊ธฐ(Scheduling with crono on Rails)

2 min read

๋ณดํ†ต ์œ ๋‹‰์Šค ๊ธฐ๋ฐ˜ PC์—์„  ์Šค์ผ€์ค„๋ง์„ ์œ„ํ•ด crontab ๋˜๋Š” at๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์œˆ๋„์šฐ์—์„  ์„œ๋น„์Šค์— ๋“ฑ๋กํ•˜๋Š”์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„  ์‹œ์Šคํ…œ์—์„œ crontab ๊ฐ™์€ ๋„๊ตฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์•ผํ•˜๋ฉฐ, PaaS ์ด์ƒ์˜ ์ถ”์ƒํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„ ํ”Œ๋žซํผ์—์„  ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜์ž…๋‹ˆ๋‹ค.

Rails์—์„œ kaminari๋ฅผ ์ด์šฉํ•˜์—ฌ Pagination ๊ตฌํ˜„ํ•˜๊ธฐ(How to make pagination on rails(with kaminari)

1 min read

Rails์—์„œ ํŽ˜์ด์ง€(Pagination)๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” kaminari, will_paginate ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์ค‘์—์„œ ์˜ค๋Š˜์€ kaminari๋ฅผ ๊ฐ€์ง€๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋‚ด์šฉ์œผ๋กœ ๊ธ€ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

๋ฃจ๋น„์—์„œ string-similarity๋กœ ๋ฌธ์ž์—ด ํผ์„ผํŠธ๋กœ ๋น„๊ตํ•˜๊ธฐ(Comparing string-similarity percent in Ruby)

~1 min read

ํ•œ ๋‘๋‹ฌ? ์ •๋„์ „์— ๋ฃจ๋น„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ค‘์— ๊ดœ์ฐฎ์€๊ฑฐ ํ•˜๋‚˜ ๋ด๋‘”๊ฒŒ ์žˆ์—ˆ๋Š๋ฐ, ์ด์ œ์„œ์•ผ ๊ธ€๋กœ ์ž‘์„ฑํ•˜๋„ค์š”. ๋ฌธ์ž์—ด ๋น„๊ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ, ๋งค์นญ๋ฅ ์„ ํผ์„ผํŠธ๋กœ ๋ฝ‘์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์šฉ์ฒ˜๊ฐ€ ๋งŽ์„๋“ฏํ•˜์—ฌ ๋ฉ”๋ชจํ•ด๋‘ก๋‹ˆ๋‹ค.

[ Rails on Heroku ] ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” heroku ๋ช…๋ น์–ด ์ •๋ฆฌ

~1 min read


[ Rails on Heroku ] ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” heroku ๋ช…๋ น์–ด ์ •๋ฆฌ (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] ๊ฐ„๋‹จํ•œ ๋ฃจ๋น„ ๋ ˆ์ผ์ฆˆ ์•ฑ ๊ตฌ์„ฑ ๋ฐ Heroku์— ๋ฐฐํฌํ•˜๊ธฐ (https://www.hahwul.com/2019/04/ruby-on-rails-distribute-heroku.html) [ Rails on Heroku ] Heroku๋ž€? ๋น ๋ฅด๊ฒŒ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ (https://www.hahwul.com/2019/04/favorite-command-heroku.html)

[ Rails on Heroku ] ๊ฐ„๋‹จํ•œ ๋ฃจ๋น„ ๋ ˆ์ผ์ฆˆ ์•ฑ ๊ตฌ์„ฑ ๋ฐ Heroku์— ๋ฐฐํฌํ•˜๊ธฐ

2 min read


[ Rails on Heroku ] ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” heroku ๋ช…๋ น์–ด ์ •๋ฆฌ (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] ๊ฐ„๋‹จํ•œ ๋ฃจ๋น„ ๋ ˆ์ผ์ฆˆ ์•ฑ ๊ตฌ์„ฑ ๋ฐ Heroku์— ๋ฐฐํฌํ•˜๊ธฐ (https://www.hahwul.com/2019/04/ruby-on-rails-distribute-heroku.html) [ Rails on Heroku ] Heroku๋ž€? ๋น ๋ฅด๊ฒŒ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ (https://www.hahwul.com/2019/04/favorite-command-heroku.html)

[ Rails on Heroku ] Heroku๋ž€? ๋น ๋ฅด๊ฒŒ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ

1 min read


[ Rails on Heroku ] ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” heroku ๋ช…๋ น์–ด ์ •๋ฆฌ (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] ๊ฐ„๋‹จํ•œ ๋ฃจ๋น„ ๋ ˆ์ผ์ฆˆ ์•ฑ ๊ตฌ์„ฑ ๋ฐ Heroku์— ๋ฐฐํฌํ•˜๊ธฐ (https://www.hahwul.com/2019/04/ruby-on-rails-distribute-heroku.html) [ Rails on Heroku ] Heroku๋ž€? ๋น ๋ฅด๊ฒŒ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ (https://www.hahwul.com/2019/04/favorite-command-heroku.html)

Get cookie value in Javascript function

~1 min read

Javascript ์—์„œ ์ฟ ํ‚ค ๊ฐ’ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ž์ฃผ์“ฐ๋Š”๋ฐ, ๋”ฐ๋กœ ์ •๋ฆฌ ์•ˆํ•ด๋‘๋‹ˆ ์‚ฝ์งˆํ•˜๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”.. ๋ฉ”๋ชจ ์ฐจ ๊ธ€ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์Šค๋‹ˆํ•!

Swift codeโ€™s Access Control(์Šค์œ„ํ”„ํŠธ์˜ ์ ‘๊ทผ์ œ์–ด)

1 min read

iOS ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ ์ž๊พธ ๊นŒ๋จน์–ด์„œ ๊ฒ€์ƒ‰ํ•˜๊ธธ๋ž˜ ๋ฉ”๋ชจํ•ด๋‘ก๋‹ˆ๋‹ค. Swift์—์„  ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด๋ฅผ open, public, internal, file-private, private๋กœ ์ง€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋ช‡๊ฐœ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์ด ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Blogger์— ๋ชฉ์ฐจ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ(Table of Contents on blogger)

1 min read

์ œ ๋ธ”๋กœ๊ทธ ๊ธ€์— ์•„์ง๊นŒ์ง„ ๋ชฉ์ฐจ ๊ฐœ๋…์ด ์—†์—ˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ์žˆ๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ƒˆ๋ฒฝ์— ๋ถ€๋žด๋ถ€๋žด ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค.

How to Re-Size Image in Blogger

~1 min read

์ด๊ฑฐ ์ด์ „๊ธ€(video resize) ์ž‘์„ฑํ•˜๋ฉด์„œ ๋ธ”๋กœ๊ทธ ๋‚ด ์ด๋ฏธ์ง€๋„ ์ตœ๋Œ€ ํฌ๊ธฐ๋กœ ์กฐ์ •ํ–ˆ๋Š”๋ฐ, ๋ฉ”๋ชจํ• ๊ฒธ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค. google blogger์—์„œ ์ฒจ๋ถ€/์‚ฝ์ž…ํ•œ ์ด๋ฏธ์ง€๋Š” ๋ณ„๋กœ์˜ class,id๋ฅผ ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— .post-body(๋ณธ๋ฌธ)์— ์ง์ ‘ css๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ .post-body์—์„œ img ํƒœ๊ทธ๊ฐ€ ์“ฐ์ด๋Š”๊ฑด, ์ฒจ๋ถ€ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์ „๋ถ€์ธ์ง€๋ผ, ์ตœ๋Œ€ ํฌ๊ธฐ ๋ฐ ํ…Œ๋‘๋ฆฌ๋งŒ ์ง€์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

How to Re-Size Video in Blogger Posts

~1 min read

Problem

๊ตฌ๊ธ€ ๋ธ”๋กœ๊ฑฐ์—์„  ๊ธ€ ์ž‘์„ฑ์ค‘์— youtube ์˜์ƒ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ์˜์ƒ์„ ์‚ฝ์ž…ํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ต‰์žฅํžˆ ์ž‘์€ ํ™”๋ฉด์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง‘๋‹ˆ๋‹ค(์ด๊ฒŒ ๊ธฐ๋ณธ ํฌ๊ธฐ..) ๊ทธ๋ž˜์„œ ๋ณดํ†ต youtube ํŽ˜์ด์ง€์—์„œ ๊ณต์œ (iframe ํƒœ๊ทธ) ํ•˜์—ฌ ์ฝ”๋“œ ์‚ฝ์ž…ํ•˜๊ณ  ์ง์ ‘ ํฌ๊ธฐ ์กฐ์ •์„ ํ–ˆ์—ˆ๋Š”๋ฐ,์•ฝ๊ฐ„์˜ ํŠธ๋ฆญ์œผ๋กœ ์†์ด ์ข€ ๋œ๊ฐ€๊ฒŒ ๋ฆฌ์‚ฌ์ด์ฆˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

editor.js - Simple Markdown Javascript Library

~1 min read

ํ•˜๋ฃจํŒจ๋“œ(haroopad) ์•Œ๊ธฐ์ „์— google blogger์— markdown ์–ด๋–ป๊ฒŒ ์ ์šฉํ• ๊นŒ ๊ณ ๋ฏผ์ด ๋งŽ์•˜์—ˆ๋Š”๋ฐ์š”, ๊ทธ๋Ÿฌ๋ฉด์„œ ์ฐพ์•„๋ณธ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜ ๊ฐ„๋žตํ•˜๊ฒŒ ์†Œ๊ฐœํ•ด๋“œ๋ฆด๊นŒ ํ•ฉ๋‹ˆ๋‹ค. editor.js๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณ„๋‹ค๋ฅธ ์ฝ”๋“œ ์—†์ด ์›น์ƒ์—์„œ ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HarooPad - markdown ์—๋””ํ„ฐ(to html view, to plain html)

1 min read

markdown์ด ํŽธํ•œ์ง€๋ผ, ๋ฉ”๋ชจ๋‚˜ ๋ธ”๋กœ๊น… ์ดˆ์•ˆ ์ž‘์„ฑ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ markdown์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๊ณผ์ •์ด ์ „๋ฌธํ™”๋œ ์—๋””ํ„ฐ๋Š” ์•„๋‹ˆ๊ณ  ๊ฐ€๋ฒผ์šด ์ฝ”๋”ฉ์šฉ์œผ๋กœ ์“ฐ๋˜ geany์—์„œ ๊ทธ๋ƒฅ ์ž‘์„ฑ๋งŒ ํ•ด์„œ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ZAP Java ๋ฒ„์ „ ๋ฐ”๊ฟ”์น˜๊ธฐ(Change Java version for fixed ssl error on ZAP)

1 min read

ZAP HUD ํ…Œ์ŠคํŠธํ•œ๋‹ค๊ณ  alpha ๋ฒ„์ „ ์˜ฌ๋ ธ์—ˆ๋Š”๋ฐ, macOS ์—์„  ์ธ์•ฑ ๋ธŒ๋ผ์šฐ์ €๋กœ ํŠน์ • ์‚ฌ์ดํŠธ ์ ‘๊ทผ ์‹œ SSL ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์‚ฝ์งˆํ–ˆ๋˜๊ฑฐ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค. Linux๋Š” ๋ณ„ ๋ฌธ์ œ ์—†๋˜ ๊ฑธ๋กœ ๋ณด์•„.. macOS์™€ ์—ฐ๊ด€๋œ ๋ฌธ์ œ์ธ๊ฐ€๋ณด๋„ค์š”.

Ruby gem ๋งŒ๋“ค๊ธฐ(Make ruby gem)

1 min read

์š”์ฆ˜ ์ข€ ์ •์‹ ์—†์ด ์ง€๋‚ด๋‹ค๋ณด๋‹ˆ ๋ฒŒ์จ 10์›”์ด๋„ค์š”.. ์จ๋†“์€ ๊ธ€๋„ ๋งˆ์นจ ์—†๋Š” ์ƒํƒœ์ธ์ง€๋ผ ์ด๋ฒˆ์—๋„ ๊ฐ„๋žตํ•œ ๊ธ€ ์ž‘์„ฑํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. (์•„ 10์›”์˜ ์ฒซ๊ธ€์ด ๋ฉ”๋ชจ๊ธ€์ด๋ผ๋‹ˆโ€ฆ) ๋งŽ์€ ruby application ๋“ค์ด ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ clone ํ•ด์„œ ์“ฐ๋Š” ํ˜•ํƒœ๋ณด๋‹จ gem์œผ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

Ruby IDB(iOS App ๋ณด์•ˆ๋ถ„์„ ๋„๊ตฌ) Select App ์‹œ ์ฃฝ๋Š” ํ˜„์ƒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(iOS10, Error downloading file)

1 min read

์˜ˆ์ „์— idb๋ผ๋Š” iOS ๋ถ„์„๋„๊ตฌ๋ฅผ ๊ณต์œ ๋“œ๋ฆฐ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ํ…Œ์ŠคํŠธ ์‹œ Select App ์‹œ ์•ฑ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์ฃฝ๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋Š๋ฐ์š”, ์˜ˆ์ „์— ๊ฐ€๊นŒ์šด๊ณณ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ๊ณต์œ ํ•ด์ฃผ์…จ๋˜๊ฒŒ ๊ธฐ์–ต๋‚˜์„œ ์ € ๋˜ํ•œ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ—€๋„ค์š”.

Scala์˜ underscore(_)๋ž€?

1 min read

์š”์ฆ˜ ์ž๊พธ ์Šค์นผ๋ผ๋ž‘ ๋ถ€๋”ซํžˆ๊ฒŒ ๋˜๋„ค์š”. ์จ๋ณธ์ ๋„ ์—†๋Š” ์–ธ์–ด์ง€๋งŒ ๋‹ค๋ฅธ ์–ธ์–ด๋ž‘ ๋น„์Šทํ•˜๊ฑฐ๋‹ˆ(Js+Java๋Š๋‚Œ..) ํ•˜๊ณ  ๋ดค๋Š”๋ฐ, ์–ด๋งˆ๋ฌด์‹œํ•˜๊ฒŒ ๊ฐ€๋…์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐœ๊ฒฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Consul์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž! (Service Mesh)

3 min read

์ตœ๊ทผ ์žฌ๋ฏธ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ ์žˆ๋Š”๋ฐ, Health cheak, Service discovery ์šฉ๋„๋กœ Consul์„ ์จ๋ณด๊ฒŒ ๋˜์—ˆ๊ณ  ๊ธ€๋กœ ์•ฝ๊ฐ„ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค. hashicorp์—์„œ ๋งŒ๋“  Consul, ๊ฑฐ๊ธฐ์„œ ์ง€์ •ํ•œ DevOps ๊ด€๋ จ ๋‚ด์šฉ ์ค‘ Monitor์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

Git pull/push ์‹œ Password ๋ฌผ์–ด๋ณด์ง€ ์•Š๋„๋ก ์„ค์ •ํ•˜๊ธฐ(credential.helper)

~1 min read

git์„ ์“ฐ๋‹ค๋ณด๋ฉด ๊ฐ„ํ˜น config ๋ฏธ์Šค, ํ™˜๊ฒฝ ๋ณ€๊ฒฝ์œผ๋กœ push/pull ๋“ฑ ๊ธฐ๋Šฅ ์‹คํ–‰ ์‹œ ๊ณ„์ •๊ณผ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Ruby์—์„œ Cookie ๊ฐ’์„ JSON ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ(Cookie format to JSON with hash!)

~1 min read

ํ…Œ์ŠคํŠธํ•˜๋˜ ์ฝ”๋“œ ์ƒ๊ฐ๋‚˜์„œ ์ •๋ฆฌํ•ด๋‘ก๋‹ˆ๋‹ค. Ruby์—์„œ Cookie format์˜ ๋ฐ์ดํ„ฐ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„  hash๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ถ„ํˆฌ 18.04 ์—์„œ ์นด์นด์˜คํ†ก ์„ค์น˜ํ•˜๊ธฐ(Install kakaotalk on ubuntu 18.04)

1 min read

๐Ÿ“•ํŠน์ด์‚ฌํ•ญ WineTrick์—์„œ ์‚ฌ์šฉํ•˜๋Š” MPSetup.exe๊ฐ€ download.microsoft.com์—์„œ ์‚ญ์ œ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋Œ€์•ˆ์œผ๋ก  ์ง์ ‘ ๋ฐ›์•„์„œ ์„ค์น˜ํ•˜๋ฉด ๋˜๊ธดํ•˜๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ์™ธ๋ถ€์—์„œ ๋ฐ›๋Š” ํŒŒ์ผ์ด๋‹ˆ ๋ฐ”์ด๋Ÿฌ์Šค ํ† ํƒˆ ๊ฒฐ๊ณผ๋‚˜ ์›๋ณธ ์žˆ๋‹ค๋ฉด ์›๋ณธ์ด๋ž‘ ๋น„๊ต ํ›„ ์„ค์น˜ํ•˜์‹œ๋Š”๊ฒŒ ์ข‹์„๋“ฏ ์‹ถ์Šต๋‹ˆ๋‹ค..์•„๋ž˜ ๋Œ“๊ธ€ 2๊ฐœ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

JRuby Burp suite ํ™•์žฅ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ(failed to coerce [Lburp.IHttpRequestResponse; to burp.IHttpRequestResponse)

~1 min read

๊ธ€ ์ข€ ์“ฐ๊ณ  ์ž๋ คํ–ˆ๋Š”๋ฐ, ์žก๋‹คํ•œ ์ผ์ด ๊ผฌ์—ฌ.. ๊ธ€์€ ํŒจ์Šคํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”๋ชจ ํ•˜๋‚˜๋งŒ ์ž‘์„ฑํ•ด๋‘ก๋‹ˆ๋‹ค.

Crystal - Ruby์™€ ๋น„์Šทํ•˜๋ฉฐ ๋น ๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

2 min read

์˜ฌ ์ดˆ์ฏค์— Crystal์ด๋ž€ ์–ธ์–ด์— ๋Œ€ํ•ด ์ž ๊น ์ด์•ผ๊ธฐ๋“ค์€์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Ruby ๋ฌธ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ๋งŒ ๋“ฃ๊ณ  ๋“œ๋””์–ด ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ดค๋„ค์š”. ์•„์ง ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ๋„ ์•„๋‹Œ ์ƒํƒœ์ด๋‹ˆ ์–ด๋–ค ์–ธ์–ด์ธ์ง€ ์ •๋„๋งŒ ์ •๋ฆฌํ•ด๋‘˜๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

Git commit์œผ๋กœ Issue ์ข…๋ฃŒํ•˜๊ธฐ(Closing issue with commit)

~1 min read

Git์€ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Issue ๊ด€๋ฆฌ์— ์žˆ์–ด๋„ ๊ต‰์žฅํžˆ ํŽธ๋ฆฌํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฐ˜์˜์„ ์œ„ํ•ด Commit ํ•˜๋Š” ๊ณผ์ •์—์„œ ํŠน์ • ํ‚ค์›Œ๋“œ์™€ ์ด์Šˆ๋ฒˆํ˜ธ๋ฅผ ๊ฐ™์ด ๊ธฐ์ž…ํ•ด์ฃผ๋ฉด ์ž๋™์œผ๋กœ Issue์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋„ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

Insomnia๋กœ REST API๋ฅผ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•˜์ž ๐Ÿ˜Ž

1 min read

์˜ค๋Š˜ ์†Œ๊ฐœํ•ด๋“œ๋ฆด ํˆด์€ REST API ํ…Œ์ŠคํŒ… ํˆด์ธ Insomnia ์ž…๋‹ˆ๋‹ค. postman๊ณผ ๊ฐ™์ด API๋ฅผ ํ…Œ์ŠคํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ณ , ๊ฐœ๋ฐœ์ž๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณด์•ˆ์ชฝ์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ์ž์ฃผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ผ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต์œ ๋“œ๋ฆด๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

Rubocop auto correct๋ฅผ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ฝ”๋“œ ์Šคํƒ€์ผ ๋”ฐ๋ผ๊ฐ€๊ธฐ

1 min read

์ตœ๊ทผ์— ๋ฃจ๋น„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ๊ด€๋ จํ•ด์„œ ๊ธ€์„ ํ•˜๋‚˜ ์ž‘์„ฑํ–ˆ์—ˆ๋Š”๋ฐ์š”, ์ด์–ด์„œ ๊ทธ๋–„ ์ž ๊น ์†Œ๊ฐœ๋“œ๋ ธ๋˜ rubocop์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ต์ •ํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์ž ๊น ์ด์•ผ๊ธฐํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

Ruby Limit to number of thread in loop(๋ฐ˜๋ณต๋ฌธ์—์„œ ์ œํ•œ๋œ ๊ฐฏ์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ ๋Œ๋ฆฌ๊ธฐ)

~1 min read

๋ณดํ†ต ์“ฐ๋ ˆ๋“œ๋Š” ๊ฐœ๋ณ„๋‹จ์œ„์˜ ์ฒ˜๋ฆฌ ์ˆ˜ํ–‰์ด๋‚˜ ๊ณ  ์„ฑ๋Šฅ์˜ ์ž‘์—…(์š”์ฒญ์„ ์—„์ฒญ๋‚˜๊ฒŒ ์ „์†กํ•œ๋‹ค๋Š” ๋‘ฅ, ๋น ๋ฅธ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ๋‹ค๋Š” ๋‘ฅ)์ด ํ•„์š”ํ•  ๋•Œ ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ๊ณต์œ ๋˜๋Š” ์ž์›์„ ํ• ๋‹น๋ฐ›์œผ๋ฉฐ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹์œผ๋กœ ๋งŽ์ด ๊ตฌ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Ruby Style Guide์™€ Rubocop

1 min read

์˜ค๋Š˜์€ ๋ฃจ๋น„ ๊ฐœ๋ฐœ ๊ด€๋ จํ•ด์„œ ์ข‹์€ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ์–ด ๊ณต์œ ๋“œ๋ฆด๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ฒœ์ฒœํžˆ ๋‚ด์šฉ ์ฝ์–ด๋ณด๋ฉด์„œ ๊ณ ์ณ์•ผํ•  ์Šต๊ด€๋“ค์ด ๋งŽ์ด ๋ณด์ด๋„ค์š”.

inquirer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์ปค๋งจ๋“œ๋ผ์ธ ๊ธฐ๋ฐ˜ ์ฒดํฌ๋ฐ•์Šค ๋งŒ๋“ค๊ธฐ(Ruby/Python)

1 min read

recon-raven ๊ฐœ๋ฐœ ์ค‘ ์ปค๋งจ๋“œ๋ผ์ธ ๊ธฐ๋ฐ˜ ์ฒดํฌ๋ฐ•์Šค(๋ชจ๋“ˆ๊ฐ™์€๊ฑฐ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก..) ๊ตฌ์„ฑํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ ํ•ด์„œ ํ•™์ƒ๋•Œ ์ปค๋งจ๋“œ๋ผ์ธ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ๋งŒ๋“  ๊ธฐ์–ต์„ ๋”๋“ฌ์œผ๋ฉฐ ์ง์ ‘ ๋งŒ๋“ค๋‹ค๊ฐ€ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ZAP์—์„œ Passive Script ๋งŒ๋“ค๊ธฐ

1 min read

์š”์ฆ˜ ๋ช‡๊ฐ€์ง€ ๋งŒ๋“ค์–ด์“ฐ๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‹€์ด๋˜๋Š” ์ฝ”๋“œ์™€ ๋Œ€๋žต์ ์ธ ์„ค๋ช…์œผ๋กœ ๊ธ€ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Ruby์—์„œ Exception ์ฒ˜๋ฆฌ( begin-rescue-else-ensure-end )

~1 min read

๋ฒŒ์จ 7์›”์ด๋„ค์š”.. ์˜ค๋Š˜์€ ๋งค๋ฒˆ ์ฝ”๋“œ ์ž‘์„ฑํ• ๋•Œ๋งˆ๋‹ค ๊ท€์ฐฎ์ง€๋งŒ, ๋บด๋จน์„ ์ˆ˜ ์—†๋Š” ์ค‘์š”ํ•œ ์นœ๊ตฌ์— Exception, ์ฆ‰ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ์ด์•ผ๊ธฐํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ์ •๋ฆฌ ์ฐจ์›์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ฐ๋Š”๊ฑฐ๋‹ˆ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜์ฃ .

JRuby๋กœ Ruby์™€ Java ๋™์‹œ์— ์‚ฌ์šฉํ•˜๊ธฐ

1 min read

๊ฐœ์ธ์ ์œผ๋กœ BurpSuite์˜ Extender๋ฅผ ๋งŒ๋“ค ๋•Œ Java๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ Burp๊ฐ€ Java base์ด๊ณ , API ๋“ฑ์˜ ์‚ฌ์šฉ์„ฑ ๋•Œ๋ฌธ์— Java๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ๋ฐ์š”, ์˜ค๋Š˜์€ Jruby๋ฅผ ์ด์šฉํ•˜์—ฌ Ruby์™€ Java๋ฅผ ํ˜ผ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Javascript๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์นด์นด์˜คํ†ก ๊ณต์œ (์นด์นด์˜ค๋งํฌ) ์ ์šฉํ•˜๊ธฐ

2 min read

์š”์ฆ˜์€ SNS ๊ณต์œ  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋‚˜๋ณด๊ธฐ๊ฐ€ ๊ต‰์žฅํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํŠนํžˆ๋‚˜ ๋ธ”๋กœ๊ทธ๋‚˜ ๋งค์ฒด, ํŒ๋งค ์‚ฌ์ดํŠธ๋“ค์€ ์ปจํ…์ธ ์˜ ๊ณต์œ ์— ์žˆ์–ด ๊ต‰์žฅํžˆ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๊ณ  ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ธฐ ๋–„๋ฌธ์— ๊ทธ๋ ‡๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“œ๋„ค์š”. ์ด์ „๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ SNS ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ ๊ณต์œ  ๋ฒ„ํŠผ์„ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์ตœ๊ทผ์—๋Š” google, twitter, facebook ์ •๋„๋งŒ ์œ ์ง€ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

MacOS์—์„œ git ์‹คํ–‰ ์‹œ CommandLIneTools ์—๋Ÿฌ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

~1 min read

์ตœ๊ทผ(?)์— MacOS ๋ฐฐํฌํŒ ์—…๊ทธ๋ ˆ์ด๋“œ(์‹œ์—๋ผ => ํ•˜์ด์‹œ์—๋ผ) ์ดํ›„ git ๋ช…๋ น์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์—ˆ์Šต๋‹ˆ๋‹ค. (ํŒ์˜ฌ๋ฆผ์„ ์ข€ ๋Šฆ๊ฒŒํ•˜๊ธดํ–ˆ์ฃ ..)

Rails์˜ ๋ผ์šฐํŒ…๊ณผ constraints๋ฅผ ์ด์šฉํ•˜์—ฌ IP๊ธฐ๋ฐ˜ ACL ๋งŒ๋“ค๊ธฐ

2 min read

Rails Application์—์„œ ์ ‘๊ทผ์ œ์–ด๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ „์— ํฌ์ŠคํŒ…ํ•˜๊ธฐ๋„ ํ—€๊ณ , ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด์•ผ๊ธฐ๋˜๋Š” HTTP Auth๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ๋ฐฉ์‹ ๋ถ€ํ„ฐ ์„ธ์…˜, ๋กœ๊ทธ์ธ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊นŒ์ง€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜์ฃ . ์˜ค๋Š˜์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ ‘๊ทผ์ œ์–ด์ธ IP ๊ธฐ๋ฐ˜ ACL์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

Rails development ํ™˜๊ฒฝ์—์„œ error ์ •๋ณด ์ค„์ด๊ธฐ

~1 min read

rails application์€ ๊ธฐ๋ณธ์ ์œผ๋กœ application ์‹คํ–‰ ์‹œ development, test, production์™€ ๊ฐ™์ด ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์‹คํ–‰ ํ™˜๊ฒฝ๋ณ„๋กœ ๋””๋ฒ„๊ทธ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€ ๋“ฑ ํ™˜๊ฒฝ๊ณผ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTPS/HTTP Mixed Content (์„ž์ธ ๋™์  ์ฝ˜ํ…์ธ  [File] ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.)

1 min read

์–ด์ œ ๋ธ”๋กœ๊ทธ๋ฅผ https๋กœ ๋ณ€๊ฒฝ ํ›„ ์†Œ์†Œํ•œ ๋ฌธ์ œ๊ฐ€ ์ฐพ์•„์™”์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ js, css ๋“ฑ ๋ฆฌ์†Œ์Šค๋“ค์˜ ์ฃผ์†Œ๊ฐ€ https๋กœ ๊ฐ•์ œ ์น˜ํ™˜๋˜๊ณ  ๋•๋ถ„์— https๊ฐ€ ์—†๋Š” ๊ณณ์—์„œ ๋ถˆ๋Ÿฌ์˜จ ํŒŒ์ผ๋“ค์€ ๋กœ๋“œ๋˜์ง€ ์•Š์•„ ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์—ˆ์ฃ .

๊ตฌ๊ธ€ ๋ธ”๋กœ๊ฑฐ ๊ฐœ์ธ ๋„๋ฉ”์ธ์— HTTPS ์ œ๊ณต! (HTTPS support to custom domain on google blogger)

~1 min read

๊ตฌ๊ธ€์€ ์˜ˆ์ „์— ์ž์‚ฌ ๋ธ”๋กœ๊ทธ ์„œ๋น„์Šค์ธ Blogger์— https ์ ์šฉ์„ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” .blogspot.com ํ•˜์œ„์˜ ๋„๋ฉ”์ธ๋งŒ ๊ฐ€๋Šฅํ–ˆ์—ˆ๋Š”๋ฐ, ์ตœ๊ทผ ์ปค์Šคํ…€ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด์„œ๋„ https๋ฅผ ์ง€์›ํ•ด์ฃผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Ruby language์—์„œ์˜ Symbol(์‹ฌ๋ณผ)์ด๋ž€?

2 min read

์–ธ์–ด ์ž์ฒด์— ๋Œ€ํ•œ ๊ธ€์„ ์“ฐ๋Š”๊ฑด ๊ต‰์žฅํžˆ ์˜ค๋žœ๋งŒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๋ฃจ๋น„์˜ ์‹ฌ๋ณผ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค.

MITM Proxy server in Ruby (evil-proxy์™€ rails๋ฅผ ์ด์šฉํ•œ WASE ํŠธ๋ž˜ํ”ฝ ์ˆ˜์ง‘ ๊ตฌ๊ฐ„ ๋งŒ๋“ค๊ธฐ)

2 min read

WASE๋ฅผ ๋งŒ๋“ค๋ฉด์„œ MITM Proxy๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์ง‘ํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ์š”, ์ด ๊ณผ์ •์—์„œ ์•Œ์•„๋ดค๋˜๊ฑฐ๋ž‘ ๊ธฐ๋ฐ˜(?)์ด ๋˜์—ˆ๋˜ ์‹ฌํ”Œํ•œ ์ €์˜ ์ฝ”๋“œ ๊ด€๋ จํ•ด์„œ ๊ธ€ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Protocol-relative URL! //๋กœ ์‹œ์ž‘ํ•˜๋Š” URL

1 min read

์›น ์ฝ”๋“œ์—์„œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ double slash(//)๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”? ์š”์ฆ˜์€ ๋Œ€์ฒด๋กœ double slash๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋Ÿฐ ์ƒ๊ฐ์—†์ด ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ •์ž‘ http:// , https:// ์™€ ๊ฐ™์ด ํ”„๋กœํ† ์ฝœ ๋ช…์‹œ๋œ ๊ฒฝ์šฐ์™€ ๋‹จ์ˆœํ•˜๊ฒŒ double slash๋กœ ๊ตฌ์„ฑ๋œ ์ฃผ์†Œ์˜ ์ฐจ์ด์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์„ ๊ฐ€์ง€์ง€ ์•Š์•˜์—ˆ๋„ค์š”.

website capture๋ฅผ ์œ„ํ•œ ruby gem (feat PhantomJS)

~1 min read

์ด๋ฒˆ ์ฃผ๋ง์—” ๋”ฑํžˆ ์“ธ ๊ธ€์ด ์—†๋„ค์š”.. (์‹œ๊ฐ„์ด ใ…œใ…œ) ๊ฐ„๋žตํ•˜๊ฒŒ ruby library๋ฅผ ์ด์šฉํ•œ ์›น ํŽ˜์ด์ง€ ์บก์ณ ๊ด€๋ จํ•ด์„œ ๊ธ€ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

๊ตฌ๊ธ€ ๋ธ”๋กœ๊ฑฐ(Google Blogger) ํŽ˜์ด์ง€, ๊ฒŒ์‹œ๊ธ€(ํฌ์ŠคํŠธ) ๊ด€๋ จ ํƒ€์ž…๋“ค

3 min read

์ด์ „๋ถ€ํ„ฐ ์ฒœ์ฒœํžˆ ์ค€๋น„ํ•ด์˜ค๋˜ ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ์˜ ๋””์ž์ธ๊ณผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ.. ๋“œ๋””์–ด ์ด๋ฒˆ ์ฃผ๋ง์— ๋Œ€๋Œ€์ ์ธ ๊ฐœํŽธ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

[HACKING] Bug Bounty๋ฅผ ์œ„ํ•œ WASE(Web Audit Search Engine) ๋งŒ๋“ค๊ธฐ [1] - Elastic search์™€ ruby-rails

2 min read

์š”์ฆ˜๋“ค์–ด ๋ฒ„๊ทธ๋ฐ”์šดํ‹ฐ์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ์กฐ๊ธˆ ๊นŠ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ผ์„ ํ•˜๋Š” ๊ฒƒ ์ด์™ธ์—๋„ ๋ฌด์–ธ๊ฐ€ ๊ฐ€์น˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ ๋•Œ๋ฌธ์ด์ฃ . (๊ทธ๋ƒฅ ๋ˆ์„ ๋” ๋ฒŒ๊ณ ์‹ถ๋‹ค๊ณ  ๊ทธ๋ž˜ =_=)

[DOCKER] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ, ํ˜ธ์ŠคํŠธ๊ฐ„ ํŒŒ์ผ ์ „์†ก/๋ฐ›๊ธฐ(How to send/recive docker container)

~1 min read

๊ทธ๋ƒฅ ๋ฉ”๋ชจ ์ฐจ์›์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. docker container ์™€ ํ˜ธ์ŠคํŠธ ๊ฐ„ ํŒŒ์ผ ์ด๋™ ์‹œ cp, scp ์™€ ๋™์ผํ•˜๋‹ˆ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

[ROR] Ruby on Rails โ€œcannot load such file โ€“ [package]โ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1 min read

์™œ๊ทธ๋Ÿฐ์ง„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์˜ค๋Š˜ ์—…๋ฐ์ดํŠธ ์ดํ›„์— rails ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์šฉ์„ ๋ณด์ž๋‹ˆ.. mime/types๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜๋„ค์š”.

[RUBY] nokogiri install/update ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ(An error occurred while installing nokogiri (1.8.2), and Bundler cannot continue.)

1 min read

๊ฐ„๋งŒ์— ๋ ˆ์ผ์ฆˆ ๋–”์— ๋ฃจ๋น„ ๊ฐ€์ง€๊ณ  ๋†€๋˜ ์ค‘ nokogiri๊ฐ€ ๊ณ ์žฅ๋‚ฌ์Šต๋‹ˆ๋‹ค. (๋Œ€์ฒด๋กœ ๋ถ€ํŒ…๊ณผ ํ•จ๊ป˜ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ฌธ์ œ์˜€์ฃ ..)

iframe์˜ height:100%๊ฐ€ ์•ˆ๋  ๋•Œ viewport๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๊ธฐ

~1 min read

iframe ํƒœ๊ทธ๋ฅผ ์“ฐ๋‹ค๋ณด๋ฉด ๊ฐ„ํ˜น ๋†’์ด๊ฐ€ 100%๊ฐ€ ์•ˆ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋‹ค๊ฐ€ %์˜ ํฌ๊ธฐ๋กœ ํ™”๋ฉด์„ ๋„˜์–ด๊ฐ€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

[CODING] Backspace,Delete not working in vim insert mode(vim์—์„œ ์‚ญ์ œ๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์„๋•Œ)

~1 min read

๊ฐ„ํ˜น ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ vim์ด ๋ง›์ด๊ฐ‘๋‹ˆ๋‹ค. backspace ํ‚ค๊ฐ€ ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„๋•Œ ๊ต‰์žฅํžˆ ๋‹ต๋‹ตํ•œ๋ฐ์š”.. vimrc์— ํ•œ์ค„ ์ถ”๊ฐ€๋กœ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

Vim์—์„œ์˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ plugin ์„ค์ •

1 min read

๋งค๋ฒˆ ๋Š๋ผ์ง€๋งŒ ๊ธ€๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์€ ๋‚ด์šฉ๋“ค์€ ๋‚˜์ค‘์— ๋‹ค์‹œ ์„ธํŒ…ํ•˜๊ฑฐ๋‚˜, ์ฐธ๊ณ ํ•ด์•ผํ•  ๋•Œ ์ฐธ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ๊ผญ ํ•„์š”ํ•  ๋•Œ ๋ณด๋ฉด ์—†๋‹ค์ฃ . ์ตœ๊ทผ์—๋„ vim ์„ธํŒ…์„ ๋‹ค์‹œ ํ• ์ผ์ด ์žˆ์–ด ํ•˜๋‚˜ํ•˜๋‚˜ ์„ธํŒ…ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ•œ๋ฒˆ์ฏค์€ ๋ฉ”๋ชจํ•ด๋‘๋ฉด ๋‘๊ณ ๋‘๊ณ  ๋ณผ ๊ฒƒ ๊ฐ™๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์งง๊ฒŒ๋‚˜๋งˆ ์‹œ๊ฐ„ ๋‚ด์–ด์„œ ๊ธ€ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

Learning Go Language - Hello world, GoRoutine

2 min read

์š”์ฆ˜ Go langage๋ฅผ ๋ฐฐ์›Œ๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„์ฃผ ์ฒœ์ฒœํžˆ ํ‹ˆ๋‚ ๋•Œ๋งˆ๋‹ค ๋ณด๊ณ ์žˆ๋Š”๋ฐ, ์กฐ๊ธˆ์”ฉ์€ ์ •๋ฆฌํ•ด์„œ ํฌ์ŠคํŒ…ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ ์ต์ˆ™ํ•ด์ง€๋ฉด Ruby์™€ ์„ž์–ด์„œ ์ฝ”๋”ฉํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋„ค์š”.

[RUBY] ํด๋ฆฝ๋ณด๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜์ž! clipboard gem

~1 min read

์˜ˆ์ „์— python์˜ tkinter ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ clipboard ์ œ์–ดํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“œ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. (http://www.hahwul.com/2016/06/python-tkinter-module-clipboard.html )

Bookmarklet์ด๋ž€?

1 min read

์ตœ๊ทผ์— Bookmarklet์˜ ์กด์žฌ๋ฅผ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € AddOn๋งŒ ๊ฐœ๋ฐœํ•ด์„œ ์จ์˜ค๋˜ ์ €์—๊ฒ ๋‚˜๋ฆ„๋Œ€๋กœ ์‹ ์„ธ๊ณ„ ์˜€๋„ค์š”. ์˜ค๋Š˜์€ Bookmarklet์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค.

Rails์—์„œ DB Column ์ถ”๊ฐ€ํ•˜๊ธฐ

~1 min read

rails๋Š” database schema ๋“ฑ์„ migration ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์•ฑ์—์„œ DB Schema๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‰ฝ๊ฒŒ Rollbackํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[EXPLOIT] JAVA SE Web start JNLP XXE ์ทจ์•ฝ์  ๋ถ„์„(CVE-2017-10309, feat Metasploit)

4 min read

์š”์ฆ˜ ์‹œ๊ฐ„๋‚ด๊ธฐ๊ฐ€ ์™œ์ด๋ฆฌ ์–ด๋ ค์šด๊ฑด์ง€.. ๋•๋ถ„์— ์˜ค๋žœ๋งŒ์— ์ทจ์•ฝ์  ๋ถ„์„๊ธ€์„ ์ž‘์„ฑํ•˜๋„ค์š”. ์˜ค๋Š˜์€ ์ง€๋‚œ 10์›” ๋ง ๊ณต๊ฐœ๋œ JAVA SE ๊ด€๋ จ XXE ์ทจ์•ฝ์ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

XCode Simulator์— App(.ipa) ํŒŒ์ผ ์„ค์น˜ํ•˜๊ธฐ

~1 min read

์ทจ์•ฝ์  ํ…Œ์ŠคํŠธ ๊ธฐ๊ธฐ๋กœ ์“ฐ๋Š” iOS ๋””๋ฐ”์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด Simulator๋ฅผ ์•Œ์•„๋ณด๋˜ ์ค‘ ๊ฐ„๋‹จํ•œ ํŒ์ด ์žˆ์–ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Simulator์— Xcode๋กœ ์ปดํŒŒ์ผํ•œ ์•ฑ์ด ์•„๋‹ˆ๋ฉด ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์•ฝ๊ฐ„์˜ ํŠธ๋ฆญ์„ ์“ฐ๋ฉด ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ์š”. ์˜ค๋Š˜์€ app ํŒŒ์ผ์ธ .ipa(app)์œผ๋กœ Xcode Simulator์— ์„ค์น˜ํ•ด ๋ด…์‹œ๋‹ค.

[POWERSHELL] ํŒŒ์›Œ์‰˜์„ ์ด์šฉํ•œ ํŒŒ์ผ ์ •๋ณด ํ™•์ธํ•˜๊ธฐ(Write a get file information script)

5 min read

ํŒŒ์›Œ์‰˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ž ๊น ํ• ๊นŒํ•ฉ๋‹ˆ๋‹ค. ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ ํŒŒ์›Œ์‰˜ ์‚ฌ์šฉ ์‹œ batch ํŒŒ์ผ์— ๋น„ํ•ด ์ƒ์„ธํ•˜๊ฒŒ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ณ  Ruby, Python ๊ณผ ๊ฐ™์€ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์„ค์น˜ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Metasploit API์™€ msfrpcd, ๊ทธ๋ฆฌ๊ณ  NodeJS

5 min read

์š”์ฆ˜ metasploit์˜ rpc์— ๋Œ€ํ•ด ๊ต‰์žฅํžˆ ๊ด€์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋ก  msgrpc plugin ๋ถ€ํ„ฐ msfrpcd ๋ฐ๋ชฌ๊นŒ์ง€ metasploit์—์„œ rpc๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ๋งŽ์ด ์ฐพ์•„๋ณด๊ณ  ์žˆ์ง€์š”.

[METASPLOIT] Writing Custom Plugin for metasploit

3 min read

์ตœ๊ทผ์— a2sv๋ฅผ metasploit plugin์œผ๋กœ ์ง€์›ํ•  ์ƒ๊ฐ์„ ํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์ œ์ž‘์ด ์•„๋‹Œ plugin ์ œ์ž‘์œผ๋ก  ๊ฒฝํ—˜์ด ๊ฑฐ์˜ ์—†๊ธฐ์—.. ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ์•„๋ณด๋ฉด์„œ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ์ฃ .

RUBY์—์„œ RQRCode๋ฅผ ์ด์šฉํ•˜์—ฌ QR์ฝ”๋“œ ์ƒ์„ฑํ•˜๊ธฐ

~1 min read

์˜ค๋Š˜์€ RQRCode์— ๋Œ€ํ•ด ์ž‘์„ฑํ• ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. RQRCode๋Š” Ruby์—์„œ QR์ฝ”๋“œ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์‰ฝ๊ฒŒ QR์ฝ”๋“œ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋–„๋ฌธ์— QR์ฝ”๋“œ ๊ด€๋ จ ์„œ๋น„์Šค๋‚˜ Rails ๋‚ด QR ์ฝ”๋“œ ์‚ฌ์šฉ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฉด์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

PuDB ์ด์šฉํ•˜์—ฌ cli์—์„œ python ๋””๋ฒ„๊น…ํ•˜๊ธฐ

~1 min read

ํŒŒ์ด์ฌ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ๊ตฌ๊ธ๋งํ•˜๋˜ ์ค‘ stackoveflow์—์„œ ์“ธ๋งŒํ•œ python debugger๋ฅผ ํ•˜๋‚˜ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ PuDB python ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

[CODING] Ruby telegram-bot ์„ ์ด์šฉํ•œ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ๋งŒ๋“ค๊ธฐ

1 min read

์•ˆ๋…•ํ•˜์„ธ์š”. ํ•˜ํ›Œ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Ruby๋ฅผ ์ด์šฉํ•œ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋กœ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์งง์€ ๋‚ด์šฉ์ด์ง€๋งŒ.. ์›Œ๋‚™ ์ •์‹ ์—†์ด ์ง€๋‚ธ์ง€๋ผ ์ด์ œ์„œ์•ผ ํฌ์ŠคํŒ…์„ ํ•˜๊ฒŒ๋˜๋„ค์š”.

[WEB HACKING] PHP Comparison Operators Vulnerability for Password Cracking

2 min read

๊ฐœ์ธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฌ๋ฏธ์žˆ๋Š” ์š”์†Œ๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ์—ฐ์‚ฐ์ž๋“ค์ด ๋ชจ์—ฌ ํฐ ํ๋ฆ„์„ ๋งŒ๋“ค๊ณ , ์šฐ๋ฆฌ๊ฐ™์€ ํ•ด์ปค๋Š” ์ด ํ๋ฆ„์„ ํ‹€์–ด ์˜ˆ์ƒ์น˜๋„ ๋ชปํ•œ ํ–‰์œ„๋ฅผ ์ด๋Œ์–ด๋‚ด๋‹ˆ ๊ต‰์žฅํžˆ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์ด์ฃ .

์ด ํŠน์ˆ˜๋ฌธ์ž๋Š” ์–ด๋–ป๊ฒŒ ์ฝ์–ด์•ผ ํ• ๊นŒ์š”?

~1 min read

๋ณด์•ˆ์ „๋ฌธ๊ฐ€๋‚˜ ๊ฐœ๋ฐœ์ž๊ฐ™์ด ์‹ค๋ฌด์ ์ธ IT ์—…๋ฌด๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ํŠน์ˆ˜๋ฌธ์ž์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์•ผํ•  ๋•Œ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ € ๋˜ํ•œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค๋ฒˆ ์„ค๋ช…ํ•ด์•ผํ•˜๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ํŠน์ˆ˜๋ฌธ์ž์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์€ ์ผ๋ถ€๋Ÿฌ ์ฐพ์•„์„œ ์ •๋ฆฌํ•ด๋‘๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ด๋Ÿฐ ๋‚ด์šฉ์€ ๊ณต์œ ๋˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๊ธ€๋กœ ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

SOP(Same-Origin Policy)์™€ Web Security

1 min read

์˜ค๋Š˜์€ ์›น ํ•ดํ‚น ์‹œ ์šฐ๋ฆฌ์˜ ๋ฐœ๋ชฉ์„ ์žก๋Š” ์นœ๊ตฌ์ธ SOP(Same-Origin Policy)์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Form์—์„œ ์ฒดํฌ๋ฐ•์Šค ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ’ ์ „๋‹ฌํ•˜๊ธฐ

~1 min read

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์„ ๋„˜๊ฒจ์•ผ ํ•  ์ƒํ™ฉ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์˜ต์…˜ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์ด์ฃ . form์„ ํ†ตํ•œ ์ „์†ก ์‹œ array ํ˜•ํƒœ๋กœ ๋˜์ง€๊ณ  php์—์„œ array๋กœ ๋ฐ›๋Š”๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[CODING] WebSocket - Overview , Protocol/API and Security

1 min read

WebSocket์ด๋ž€?

WebSocket์€ ์›น ํŽ˜์ด์ง€์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ํ”„๋กœํ† ์ฝœ์ธ HTTP๋Š” Request์™€ Response ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์•ผํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ฟ ํ‚ค๋ผ๋Š” ๊ฐœ๋…๋„ ์‚ฌ์šฉ๋˜๊ฒŒ ๋˜์—ˆ์ง€์š”. (์ธ์ฆ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด)

[RUBY] Cuntom column sort function on Two-dimensional array

1 min read

๋ฃจ๋น„๋กœ ์ฝ”๋”ฉํ•˜๋˜ ์ค‘ ๊ท€์ฐฎ์€ ์ผ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ array์— ๋Œ€ํ•œ ์ •๋ ฌ ์ค‘ 2์ฐจ์› ์ด์ƒ ๋ฐฐ์—ด์—์„œ๋Š” ์ œ๊ฐ€ ์ง€์ •ํ•œ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ์—†๋˜๊ฒƒ์ž…๋‹ˆ๋‹ค..

[DEBIAN] malloc() ์‹œ sysctl vm.swappiness๋ฅผ ์ด์šฉํ•˜์—ฌ Swap ์ ๊ทน ํ™œ์šฉํ•˜๊ธฐ

1 min read

๋ฆฌ๋ˆ…์Šค์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด memory๋ฅผ full ์‹œ์ผœ์•ผํ•  ์ƒํ™ฉ์ด ์˜ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ œ๊ฐ€ ์ด๋Ÿฐ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ๋ณด๋‹จ ํ•„์š”ํ•œ ๋ถ„ ๋„์™€๋“œ๋ฆฌ๋‹ค๋ณด๋‹ˆ ์•„๋ฌด๋ž˜๋„ ์ •๋ฆฌํ•ด๋†“๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๊ฐ€๋ณ๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Ruby nokogiri๋ฅผ ์ด์šฉํ•œ Web Spider ๋งŒ๋“ค๊ธฐ

3 min read

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„  nokogiri๋ฅผ ์ด์šฉํ•œ parsing ์„ ํ–ˆ๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ์กฐ๊ธˆ ๋” ๋ฐœ์ „ ์‹œ์ผœ์„œ ๊ฐ„๋‹จํ•œ Spider๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ›จ์”ฌ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด๋˜๋Š” nokogiri๋ฅผ ์ž˜ ์•ˆ๋‹ค๋ฉด ๋งŽ์€ ๋„์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€์š”.

Ruby Nokogiri๋ฅผ ์ด์šฉํ•œ Web Parsing

2 min read

์›น ์„œ๋น„์Šค๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋„๊ตฌ๋“ค์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ๋งŽ์ด ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ์ž‘์—…์ด ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ HTML, XML ๋“ฑ ๊ตฌ์กฐํ™”๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ์ž‘์—…์ธ๋ฐ์š”. ์˜ค๋Š˜์€ Ruby์˜ ๊ฐ•๋ ฅํ•œ ํŒŒ์‹ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Nokogiri์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ• ๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

[JQUERY] Create wait/loading animation using jquery(addClass,removeClass)

1 min read

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด Ajax ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ ๋ˆˆ์„ ์ฆ๊ฒ๊ฒŒ(?)ํ•˜๋Š” ๋กœ๋”ฉ ๋ฐ”๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

[PYTHON] Tkinter module์„ ์ด์šฉํ•œ Clipboard(ํด๋ฆฝ๋ณด๋“œ) ์ œ์–ด/์ƒ์šฉ๊ตฌ ๋งŒ๋“ค๊ธฐ

1 min read

์ผ์„ ํ•˜๋‹ค๋ณด๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ๋ง์„ ์ž์ฃผ ์จ์•ผํ•  ์ƒํ™ฉ์ด ๋งŽ์ด ์ƒ๊น๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํ‰์†Œ์— ์ œ๊ฐ€ Python ์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ์„ ํ’€์–ด๋ณผ๊นŒํ•ฉ๋‹ˆ๋‹ค.

[RUBY] ๋ฃจ๋น„์—์„œ Process/command ์‹คํ–‰ํ•˜๊ธฐ(Execute Process and command)

2 min read

C์–ธ์–ด๋ถ€ํ„ฐ ruby, python ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํ•ด๋ณด์…จ๋‹ค๋ฉด ์ •๋ง ๋ฐ˜๊ฐ€์šด ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ system() ํ•จ์ˆ˜(C์–ธ์–ด ๊ธฐ์ค€)์ธ๋ฐ์š”, ์ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ด์ง€์š”. ์ด ํ•จ์ˆ˜๋กœ ๋งŽ์€ ๋…ธ๊ฐ€๋‹ค ์ž‘์—…์ด ์ค„๊ฒŒ๋˜์ง€์š”.

Java Applet์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•๋“ค

2 min read

์›น ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋ถ„์„ ์‹œ ์ฃผ์š” ํƒœ๊ทธ๋กœ ์•Œ๋ ค์ง„ ๊ฒƒ๋“ค์€ ๋Œ€๋‹ค์ˆ˜ ํ•„ํ„ฐ๋ง ๋˜์–ด ์žˆ์ง€๋งŒ ๊ฐ„ํ˜น ๋น ์ง€๋Š” ํƒœ๊ทธ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์˜ค๋Š˜์€ applet ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค.

Ruby WEBrick์—์„œ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ฝ”๋“œ ์ฒ˜๋ฆฌํ•˜๊ธฐ

1 min read

WEBRick ๋˜ํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด Static ํŒŒ์ผ๋งŒ ์„œ๋น™ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์‹ค์ œ ์›น ์š”์ฒญ ์‹œ ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋™์ž‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WEBrick์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ Ruby ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

~1 min read

์˜ˆ์ „์— Ruby on Rails๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ์•Œ๊ฒŒ๋œ webrick ์›น์„œ๋ฒ„ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ์ข‹์€ ๋ชจ๋“ˆ์ด์ง€์š”.

JS,CSS๋ฅผ ์ด์šฉํ•ด ํŒ์—… ๋ ˆ์ด์–ด ๋งŒ๋“ค๊ธฐ

1 min read

๋ธ”๋กœ๊ทธ ๋””์ž์ธ ์ˆ˜์ • ์ค‘ ๊ฒ€์ƒ‰ ๋ถ€๋ถ„์— ์žฌ๋ฏธ์žˆ๋Š” ์ƒ๊ฐ์ด ๋‚˜์„œ ์•ฝ๊ฐ„ ์ž‘์—…์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์— ์“ฐ๋˜ ๊ฒ€์ƒ‰์ฐฝ์€ ๋ธ”๋กœ๊ทธ์—์„œ ๋ฐ”๋กœ ๋ณด์ด๊ณ  ์ž…๋ ฅ ํ›„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌ์„ฑํ•˜์˜€๋Š”๋ฐ, ํด๋ฆญํ•˜์—ฌ ๋”ฐ๋กœ ํŒ์—…์„ ๋„์šด ํ›„ ๊ฑฐ๊ธฐ์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์— ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

CSS๋ฅผ ํ†ตํ•ด Body ํƒœ๊ทธ ์—ฌ๋ฐฑ ์—†์• ๊ธฐ

~1 min read

๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€ ๊ฐœํŽธ ์ค‘ ๊ณ„์† ์—ฌ๋ฐฑ์ด ์ƒ๊ฒจ์„œ ํ•˜๋‚˜ํ•˜๋‚˜ css ๋ฅผ ๋’ค์ ธ๊ฐ€๋ฉฐ, ์ž˜๋ชป ์ ์šฉํ•œ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด์•˜์ง€๋งŒ ๋‹ต์€ ๊ฐ€๊นŒ์šด ๊ณณ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. HTML์—์„œ ์—ฌ๋ฐฑ์ด ๋ฐœ์ƒํ•  ๋•Œ CSS๋‚˜ HTML ์†์„ฑ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ด๋ฒˆ์— ์ฝ”๋“œ์— ์ ์šฉํ•œ ๋ถ€๋ถ„์ธ๋ฐ์š”, leftmargin, rightmargin ์„ ํ†ตํ•ด ์ขŒ์šฐ ์—ฌ๋ฐฑ์„ ์ค„์—ฌ์คฌ์—ˆ์Šต๋‹ˆ๋‹ค.

[CODING] HTML/CSS ๊ธ€์ž ํ…Œ๋‘๋ฆฌ ์ ์šฉํ•˜๊ธฐ(Apply text border) / text-shadow

~1 min read

์›น์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ธ€์ž์— ํ…Œ๋‘๋ฆฌ๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. CSS์—์„œ text-shadow ๋ฅผ ํ†ตํ•ด ๊ทธ๋ฆผ์ž๋ฅผ ๋„ฃ๊ณ , ๊ทธ๋ฆผ์ž ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜์—ฌ ํ…Œ๋‘๋ฆฌ์ฒ˜๋Ÿผ ๋ณด์ด๋„๋ก ๊พธ๋ฐ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Javascript ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ Input ํƒœ๊ทธ ์—”ํ„ฐ ์ฒ˜๋ฆฌ Char Codes)

1 min read

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ํ…์ŠคํŠธ ๋ฐ•์Šค์—์„œ submit, button ์„ ๋ˆ„๋ฅด์ง€ ์•Š๊ณ  ์—”ํ„ฐ๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋Š” ๋“ฑ ์•ก์…˜์ด ๋“ค์–ด๊ฐ€์•ผํ•  ๋ถ€๋ถ„๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ž‘ javascript ๋ฅผ ์ด์šฉํ•ด์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ์ฐฝ์—์„œ ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅผ ์‹œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Javascript ์ฝ”๋“œ ๋‚œ๋…ํ™”(Code Obfuscation)์™€ JS Packing

1 min read

์ฝ”๋“œ ๋‚œ๋…ํ™”๋ž€ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด int a = 123 ์ด๋ž€ ์ฝ”๋“œ๋ฅผ int a = ((123+34+350-34-350)*0)+123 ๊ฐ™์ด ์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์œ„์˜ ๋Œ€์ถฉ ์“ด ์ฝ”๋“œ๋Š” ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ escape, unescape ํ•จ์ˆ˜ ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ๋ˆˆ์— ์ž˜ ๋“ค์–ด์˜ค์ง€ ์•Š๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

rvm, rbenv๋ฅผ ํ†ตํ•œ Ruby ๋ฒ„์ „ ๊ด€๋ฆฌ

~1 min read

์˜ค๋žœ๋งŒ์— ๋…ธํŠธ๋ถ์—์„œ Metasploit ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์˜€๋”๋‹ˆ ํŒจํ‚ค์ง€ ํ•˜๋‚˜๊ฐ€ ์˜์กด์„ฑ ๋ฌธ์ œ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. gem ์œผ๋กœ ์„ค์น˜ํ•˜๋ ค ํ–ˆ์œผ๋‚˜, ๋ฐœ์ƒํ•˜๋Š” ๊ฑด ruby 2.1 ์ด์ƒ์—์„œ ์„ค์น˜ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฉ”์‹œ์ง€์˜€์Šต๋‹ˆ๋‹ค.

iOS์—์„œ์˜ Python 2.7 ๋ฒ„์ „ ์„ค์น˜

~1 min read

ํƒˆ์˜ฅ iOS ๊ธฐ๊ธฐ์—์„œ apt ํŒจํ‚ค์ง€๋กœ ํŒŒ์ด์ฌ์„ ๋”ฐ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ฒ„์ „์ด 2.5 ๋ฒ„์ „์ธ ์ƒํƒœ์ธ๋ฐ, ๋งŽ์€ ๋ชจ๋“ˆ์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด 2.7 ์ด์ƒ์˜ ๋””ํŽœ๋˜์‹œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ์ƒํ™ฉ์— ๋”ฐ๋ผ 2.7 ๋ฒ„์ „์„ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.