Skip to content
gluesysPublic

About

Gluesys Technical Blog

Resources

Stars

3 stars

Watchers

5 watching

Forks

Latest commit

ย 

History

214 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Gluesys Tech-blog

๊ฒ€ํ†  ๊ฐœ์š”

  1. ๋ชฉ์ : ์ „๋‹ฌํ•˜๋Š” ์ •๋ณด์˜ ํƒ€๋‹น์„ฑ ๊ฒ€ํ†  ๋ฐ ์งˆ์  ํ–ฅ์ƒ
  2. ์ ์šฉ ๋Œ€์ƒ: GitHub pull request๋กœ ์˜ฌ๋ผ๊ฐ„ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ
  3. ๋ฐฉ๋ฒ•: GitHub pull request ์ฝ”๋ฉ˜ํŠธ ๋˜๋Š” ์‚ฌ๋‚ด ๋ฉ”์‹ ์ €๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ

์ฃผ์š” ๊ฒ€ํ†  ์‚ฌํ•ญ

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

๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ๋ผ์ธ

1. ๊ฐœ์š”

1.1 ๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์†Œ๊ฐœ

๋ชฉํ‘œ

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

  • ์ œ๊ณต ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ๋†’์€ ์ „๋ฌธ์„ฑ ๋ฐ ๊ฐ๊ด€์„ฑ์„ ๋ถ€๊ฐํ•ด ๊ธฐ์—…๊ณผ ์ œํ’ˆ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๋†’์€ ์‹ ๋ขฐ ํ˜•์„ฑ์„ ๋ชฉํ‘œ
  • ๊ด€๋ จ ๋ถ„์•ผ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ด€๋ จ ์—…๊ณ„ ์ข…์‚ฌ์ž, ์ž ์žฌ๊ณ ๊ฐ, ๊ตฌ์ง์ž ๋Œ€์ƒ์œผ๋กœ ์ธ์ง€๋„ ํ™•๋ณด๋ฅผ ๋ชฉํ‘œ

๊ด€๋ฆฌ

๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋Š” ๊นƒํ—ˆ๋ธŒ(GitHub)๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์—ฐ๊ตฌ์†Œ ๊ฐœ๋ฐœ 3ํŒ€์˜ ๊น€์ง€ํ˜„ ์—ฐ๊ตฌ์›์ด ๋‹ด๋‹น์ž์ž…๋‹ˆ๋‹ค.

์—…๋กœ๋“œ ์‹œ๊ธฐ

๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๋Š” ๋งค์›” ์—ฐ๊ตฌ์†Œ์—์„œ 1๊ฑด, ๊ธฐ์ˆ ๋ถ€์™€ ๋งˆ์ผ€ํŒ…ํŒ€์—์„œ 1๊ฑด์œผ๋กœ ๋งค์›” 2๊ฑด์”ฉ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋ฉฐ, ๋งค์›” 3~4์ฃผ ์ฐจ(๋Œ€๋žต 19์ผ~25์ผ ์‚ฌ์ด) ๋งˆ์ผ€ํŒ…ํŒ€์˜ ์™ธ๋ถ€ ๋‰ด์Šค๋ ˆํ„ฐ ์‹œ๊ธฐ์— ๋งž์ถ”์–ด ์—…๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ย 

1.2 ํฌ์ŠคํŠธ ์ž‘์„ฑ ์‹œ ์ธ์„ผํ‹ฐ๋ธŒ

๊ธ€๋ฃจ์‹œ์Šค์—์„œ๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ์ž‘์„ฑ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ์„ผํ‹ฐ๋ธŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๊ธฐ๋ณ„ ํฌ์ƒ ์ œ๋„

  • ์ง€๊ธ‰ ์‹œ๊ธฐ: ๊ธฐ๋ณธ ์ธ์„ผํ‹ฐ๋ธŒ๋Š” ์—…๋กœ๋“œ ์‹œ ์ œ๊ณต, ํฌ์ƒ์€ ์ƒ๋ฐ˜๊ธฐ์™€ ํ•˜๋ฐ˜๊ธฐ ์›Œํฌ์ƒต ๋˜๋Š” ์›”๋ก€ํšŒ์˜ ๋•Œ ์ œ๊ณต
  • ๊ธฐ๋ณธ ์ธ์„ผํ‹ฐ๋ธŒ: ์ž‘์„ฑ ํฌ์ŠคํŠธ ๋‹น ์ƒํ’ˆ๊ถŒ 3๋งŒ ์›
ํฌ์ƒ ๋‚ด์šฉ ๊ธˆ์•ก
์ธ๊ธฐ ํฌ์ŠคํŠธ์ƒ ์‹ ๊ทœ ํฌ์ŠคํŠธ ์ค‘ ๊ธฐ๊ฐ„ ๋‚ด ๋ฐฉ๋ฌธ ์ˆ˜ ๋ฐ ์žฌ๋ฐฉ๋ฌธ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํฌ์ŠคํŠธ ๋Œ€์ƒ 10๋งŒ ์›
์šฐ์ˆ˜ ํฌ์ŠคํŠธ์ƒ ์‹ ๊ทœ ํฌ์ŠคํŠธ ์ค‘ ๊ธฐ๊ฐ„ ๋‚ด ํ‰๊ท  ์ฒด๋ฅ˜์‹œ๊ฐ„์ด ์˜ˆ์ƒ ์ˆ˜์น˜์™€ ๊ทผ์ ‘, ์ดํƒˆ๋ฅ  ๋ฐ ์ข…๋ฃŒ์œจ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ํฌ์ŠคํŠธ ๋Œ€์ƒ 10๋งŒ ์›
๋…ธ๋ ฅ์ƒ ๊ธฐ๊ฐ„ ๋‚ด ํฌ์ŠคํŠธ ์ž‘์„ฑ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์‚ฌ์› ๋Œ€์ƒ (๋™๋ฅ  ๋ฐœ์ƒ ์‹œ ๋ถ„ํ•  ์ง€๊ธ‰) 10๋งŒ ์›
  • ํฌ์ŠคํŠธ ์—…๋กœ๋“œ ํ›„ 2๋‹ฌ ํ›„์— ์ธก์ •. ์‹ค์งˆ์ ์œผ๋กœ ์ƒ๋ฐ˜๊ธฐ๋Š” ์ „๋…„๋„ 12์›”~5์›”, ํ•˜๋ฐ˜๊ธฐ๋Š” 6์›”~11์›”์— ์ž‘์„ฑ๋œ ํฌ์ŠคํŠธ๋งŒ ์ธก์ • ๊ฐ€๋Šฅ.
  • ์›ํ™œํ•œ ํ†ต๊ณ„ ์ง‘๊ณ„๋ฅผ ์œ„ํ•ด์„œ๋Š” ์›”์ดˆ ์—…๋กœ๋“œ๋ฅผ ์ง€ํ–ฅ.
  • ํฌ์ŠคํŠธ ์—…๋กœ๋“œ๋Š” ๋งค์›” 1๋ฒˆ๊นŒ์ง€๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์—ฐ์† ์—…๋กœ๋“œ๋Š” 2๋ฒˆ๊นŒ์ง€๋งŒ ๊ฐ€๋Šฅ.

ย 

2. ์ž‘์„ฑ ์ „ ์ค€๋น„์‚ฌํ•ญ

2.1 ํฌ์ŠคํŠธ ์œ ํ˜•์—์„œ ์ฃผ์ œ ์ •ํ•˜๊ธฐ

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

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

ย 

2.2 ์ž‘์„ฑ ์ผ์ • ๊ณต์œ ํ•˜๊ธฐ

๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ์˜ ์ฃผ์ œ๊ฐ€ ์„ ์ •๋˜์—ˆ๋‹ค๋ฉด, ํฌ์ŠคํŠธ์˜ ์ฃผ์ œ์™€ ์ž‘์„ฑ ์ง„ํ–‰ ์ผ์ •์„ ๋งคํ„ฐ๋ชจ์ŠคํŠธ๋‚˜ ์ด๋ฉ”์ผ๋กœ ํŒ€ ๋‚ด๋ถ€์™€ ๋งˆ์ผ€ํŒ…ํŒ€์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์ผ€ํŒ…ํŒ€์— ์ผ์ •์„ ๊ณต์œ ํ•˜๋Š” ์ด์œ ๋Š” ๋งˆ์ผ€ํŒ…ํŒ€์˜ ๋‰ด์Šค๋ ˆํ„ฐ ๋ฐฐํฌ ์ผ์ • ์ „์— ์™„์„ฑ์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ž‘์„ฑ๋œ ํฌ์ŠคํŠธ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋ธ”๋กœ๊ทธ์— ์—…๋กœ๋“œ๋˜๋Š”๋ฐ๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋‹ˆ, ์ฐธ๊ณ  ํ›„ ์ผ์ •์„ ์กฐ์ •ํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  1. ํฌ์ŠคํŠธ ์ž‘์„ฑ
  2. ์ž‘์„ฑ๋œ ํฌ์ŠคํŠธ๋ฅผ ๊นƒํ—ˆ๋ธŒ์— ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์˜ฌ๋ฆฐ ํ›„ ํ”ผ๋“œ๋ฐฑ ๋Œ€๊ธฐ
  3. ํ”ผ๋“œ๋ฐฑ ๋Œ€์‘

ย 

3. ํฌ์ŠคํŠธ ์ž‘์„ฑํ•˜๊ธฐ

3.1 ์ž‘์„ฑ ํˆด ์ค€๋น„ํ•˜๊ธฐ

๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๋Š” ๋งˆํฌ๋‹ค์šด(.md) ํŒŒ์ผ๋กœ ์—…๋กœ๋“œ๋˜๋ฉฐ, ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์„ ํ™œ์šฉํ•ด ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์–ด๋–ค ํˆด์„ ์จ์•ผํ• ์ง€ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์—๊ฒŒ๋Š” Notepad++๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. Notepad++๋Š” ํ•ด๋‹น ๋งํฌ ์—์„œ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย 

3.2 ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ• ์ˆ™์ง€ํ•˜๊ธฐ

๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์˜ ํฌ์ŠคํŠธ๋Š” ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, HTML๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•๊ณผ ๊ด€๋ จํ•ด์„œ๋Š” ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค: https://gist.github.com/ihoneymon/652be052a0727ad59601

ย 

3.3 ๊ธฐ์กด ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋‚ด์šฉ ์ž‘์„ฑํ•˜๊ธฐ

๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๊นƒํ—ˆ๋ธŒ์— ๊ธฐ์กด์— ์ž‘์„ฑ๋œ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ๋“ค์„ ํ…œํ”Œ๋ฆฟ ์‚ผ์•„ ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํฌ์ŠคํŠธ ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์–‘์‹์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ํŒŒ์ผ๋ช…: ํŒŒ์ผ๋ช…์€ ๋‚ ์งœ์™€ ํฌ์ŠคํŠธ ์ฃผ์ œ ์š”์•ฝ(์˜๋ฌธ)์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: 2022-09-21-TrueNAS).
  • ๋ฌธ์„œ ์ •๋ณด: ๋ฌธ์„œ ์ •๋ณด๋Š” ํฌ์ŠคํŠธ ๋‚ด์šฉ์˜ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๋ฉฐ, layout, title, date, categories, author, tags, cover, main์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • layout: ๋ฌธ์„œ์˜ ์œ ํ˜•์„ ํ‘œ์‹œํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ˆ ํ…œํ”Œ๋ฆฟ๋Œ€๋กœ ๋†”๋‘๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
    • title: ํฌ์ŠคํŠธ์˜ ์ œ๋ชฉ์„ ์ ๋Š” ๋ถ€๋ถ„์œผ๋กœ, ํฐ๋”ฐ์˜ดํ‘œ("") ์•ˆ์— ๋‚ด์šฉ์„ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • date: ํฌ์ŠคํŠธ ์—…๋กœ๋“œ ๋‚ ์งœ๋ฅผ ์ ๋Š” ๋ถ€๋ถ„์œผ๋กœ, ํŒŒ์ผ๋ช…์˜ ๋‚ ์งœ์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ ํฌ๋งท์€ yyyy-mm-dd ์ž…๋‹ˆ๋‹ค.
    • categories: ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ์˜ ์ƒ๋‹จ ์นดํ…Œ๊ณ ๋ฆฌ ๋ถ€๋ถ„์œผ๋กœ, ํ˜„์žฌ๋กœ๋Š” ํ…œํ”Œ๋ฆฟ๋Œ€๋กœ ๋†”๋‘๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
    • author: ์ž‘์„ฑ์ž๋ฅผ ๋งํ•˜๋ฉฐ, ํฌ๋งท์€ ์ด๋ฆ„ (์ด๋ฉ”์ผ ์ฃผ์†Œ) ์ž…๋‹ˆ๋‹ค.
    • tags: ํฌ์ŠคํŠธ ๋‚ด์šฉ๊ณผ ๊ด€๋ จ๋œ ํƒœ๊ทธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ๋Š” ํ•œ๊ตญ์–ด์™€ ์˜์–ด๋ฅผ ๋ณ‘ํ–‰ํ•ด ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ํฌ๋งท์€ [ํƒœ๊ทธ1, tag1, ํƒœ๊ทธ2, tag2, ...] ์ž…๋‹ˆ๋‹ค. ์˜์–ด ํƒœ๊ทธ๋Š” ๋ณดํ†ต๋ช…์‚ฌ๋ผ๋„ ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • cover: ํฌ์ŠคํŠธ ์ƒ๋‹จ์˜ ๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งํ•˜๋ฉฐ, ํฐ๋”ฐ์˜ดํ‘œ("") ์•ˆ์— ์ด๋ฏธ์ง€์˜ ์œ„์น˜๋ฅผ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: "/assets/SPDK_maincover.jpg"). ๋ฐฐ๋„ˆ๋Š” ํ™”๋ฉด ํญ ์ „์ฒด๋กœ ์ž˜๋ ค ํ‘œ์‹œ๋˜๊ณ  ๊ทธ ์œ„์— ๋‚จ์ƒ‰ ๋ง‰๊ณผ ์ œ๋ชฉ์ด ์˜ฌ๋ผ๊ฐ€๋ฏ€๋กœ, ๊ฐ€๋กœ๋กœ ๊ธด ์‚ฌ์ง„์ด๋‚˜ ์ถ”์ƒ ์ด๋ฏธ์ง€๊ฐ€ ์ž˜ ์–ด์šธ๋ฆฝ๋‹ˆ๋‹ค. ๋งํฌ ๊ณต์œ  ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€๋กœ๋„ ์“ฐ์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŠธ์— ์“ฐ์ผ ์ด๋ฏธ์ง€ ์œ„์น˜๋Š” static/assets ํด๋”์— ๋„ฃ์–ด์•ผ ํ•˜๋‹ˆ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๋ฐฐ๋„ˆ ์—†์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • main: ๊ธ€ ๋ชฉ๋ก๊ณผ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํ‘œ์‹œ๋˜๋Š” ์ธ๋„ค์ผ ์ด๋ฏธ์ง€๋ฅผ ๋งํ•˜๋ฉฐ, ํฐ๋”ฐ์˜ดํ‘œ("") ์•ˆ์— ์ด๋ฏธ์ง€์˜ ์œ„์น˜๋ฅผ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: "/assets/SPDK_maincover.jpg"). cover์™€๋Š” ๋ณ„๊ฐœ์ด๋ฉฐ, ๋„ฃ์ง€ ์•Š์œผ๋ฉด ์ธ๋„ค์ผ ์—†์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ์จ๋„ ๋˜์ง€๋งŒ, ๋ฐฐ๋„ˆ์šฉ ์ด๋ฏธ์ง€๊ฐ€ ์ธ๋„ค์ผ๋กœ ์“ฐ๊ธฐ์— ๋„ˆ๋ฌด ๋„“๊ฑฐ๋‚˜ ๋ณต์žกํ•˜๋ฉด ๋”ฐ๋กœ ์ž˜๋ผ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.
  • ํฌ์ŠคํŠธ ๋ณธ๋ฌธ: ํฌ์ŠคํŠธ์˜ ์ฃผ ๋‚ด์šฉ์„ ๋งํ•˜๋ฉฐ, ๋ฌธ์„œ ์ •๋ณด ์•„๋ž˜์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ŠคํŠธ ๋ณธ๋ฌธ์€ ํฌ๊ฒŒ ์ œ๋ชฉ, ๋‚ด์šฉ, ์ฒจ๋ถ€ ์ด๋ฏธ์ง€, ์ฐธ๊ณ ๋ฌธํ—Œ, ๊ฐ์ฃผ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์ œ๋ชฉ: ๊ฐ ์ œ๋ชฉ์€ ๊ณ ์œ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด์ƒ ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ์ œ๋ชฉ์€ ##์˜ ๋ށ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ, ํŠน์ˆ˜๋ฌธ์ž ์‚ฌ์šฉ ์‹œ HTML ํŠน์ˆ˜๋ฌธ์ž ๋ฅผ ์จ์•ผ ํ•˜๋‹ˆ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • ๋‚ด์šฉ: ํฌ์ŠคํŠธ์˜ ๋‚ด์šฉ์€ ๊ตฌ์–ด์ฒด๋กœ ์ž‘์„ฑํ•˜๋˜, ๊ฒฉ์‹์ฒด๋ฅผ ์œ ์ง€ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค(์˜ˆ: ~์ž…๋‹ˆ๋‹ค, ~์Šต๋‹ˆ๋‹ค ๋“ฑ). ์˜์–ด ์•ฝ์–ด๋‚˜ ๋‚ด์šฉ์— ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ณ ์œ ๋ช…์‚ฌ์—๋Š” ์•ฝ์–ด ๋˜๋Š” ํ•œ๊ตญ์–ด ํ‘œ๊ธฐ ๋‹จ์–ด ๋’ค์— ๊ด„ํ˜ธ ์•ˆ์— ์ •์‹ ์˜์–ด ํ‘œ๊ธฐ๋ฅผ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์˜์–ด ์•ฝ์–ด๋ฅผ ํ™œ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ๊ด„ํ˜ธ ์•ˆ์— ์ดํ•˜ '์˜์–ด ์•ฝ์–ด'๋ฅผ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์†Œํ”„ํŠธ์›จ์–ด ์ •์˜ ์Šคํ† ๋ฆฌ์ง€(Software Defined Storage, ์ดํ•˜ SDS)).
    • ์ฒจ๋ถ€ ์ด๋ฏธ์ง€: ๋‚ด์šฉ ์„ค๋ช…์„ ๋ณด์กฐํ•  ์ฒจ๋ถ€ ์ด๋ฏธ์ง€๋Š” ์ค‘๊ฐ„ ์ •๋ ฌ ๋ฐ ๋„“์ด๋ฅผ 700์—์„œ 800ํ”ฝ์…€๋กœ ๋งž์ถ”๊ณ , ํ•˜๋‹จ์— ์บก์…˜์„ ๋„ฃ์–ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ž‘์„ฑ ๋ฐฉ๋ฒ•์€ ํ…œํ”Œ๋ฆฟ์„ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • ์ฐธ๊ณ  ์ž๋ฃŒ: ํ•ด๋‹น ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ฐธ๊ณ ํ•œ ์ž๋ฃŒ์˜ ๋งํฌ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ถˆ๋ฆฟ ํ˜•์‹์œผ๋กœ ๋ณธ๋ฌธ ๋ฐ”๋กœ ๋’ค์— ๊ธฐ์žฌํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • ๊ฐ์ฃผ: ๋‚ด์šฉ ์ค‘ ๋ณด์ถฉ ์„ค๋ช…์ด ํ•„์š”ํ•œ ๊ธฐ์ˆ  ๊ฐœ๋…์ด๋‚˜ ์ฐธ์กฐ ๋งํฌ๋ฅผ ์ฐธ๊ณ  ์ž๋ฃŒ ๋’ค์— ๊ธฐ์žฌํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ์ฃผ ํ™œ์šฉ ๋ฐฉ๋ฒ•์€ ํ…œํ”Œ๋ฆฟ์„ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ย 

3.4 ์ž‘์„ฑ๋œ ๋‚ด์šฉ ์Šค์Šค๋กœ ๊ฒ€ํ† ํ•˜๊ธฐ

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

ย 

4. ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ฆฌ๊ธฐ

4.1 ์˜ฌ๋ฆฌ๊ธฐ ์ „ ๊ธฐ๋ณธ ์„ธํŒ…

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

  • ๊นƒ(Git) ์„ค์น˜: ์‚ฌ์šฉํ•˜๋Š” PC์— ๊นƒ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊นƒ ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ์ ์ธ ํ™œ์šฉ ๋ฐฉ๋ฒ•์€ ๋งํฌ ๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • ๊นƒํ—ˆ๋ธŒ ๊ณ„์ • ๋งŒ๋“ค๊ธฐ: ๊นƒํ—ˆ๋ธŒ ๊ณ„์ •์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋งํฌ ์—์„œ ๊ณ„์ • ์ƒ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์ €์žฅ์†Œ ํฌํฌํ•˜๊ธฐ: ๊ธ€๋ฃจ์‹œ์Šค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๊นƒํ—ˆ๋ธŒ ํŽ˜์ด์ง€์˜ ์šฐ์ธก ์ƒ๋‹จ์— Fork๋ฅผ ํด๋ฆญํ•ด ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ: ์ž‘์„ฑ์ž PC์— ์œ„ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งํฌ ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • ์ตœ์‹  ๋‚ด์šฉ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๊ธฐ: ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์ตœ์‹ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ €์žฅ์†Œ๊ฐ€ ํ˜„์žฌ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์ €์žฅ์†Œ์™€ ๋‚ด์šฉ์ด ๊ฐ™๊ฑฐ๋‚˜ ์ˆ˜์ •๋œ ๋ถ€๋ถ„์ด ์—†์–ด์•ผ ์ถฉ๋Œ ์—†์ด ๋จธ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ: ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๋งŒ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์™€ ๊ตฌ๋ถ„ํ•ด ๋†“์•„์•ผ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ย 

4.2 ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ ค ๊ฒ€ํ†  ์š”์ฒญํ•˜๊ธฐ

์œ„์˜ ๊ธฐ๋ณธ ์„ธํŒ…์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ ค ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค:

  1. ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ ์ˆ˜์ • ๋ฐ ์—…๋ฐ์ดํŠธ: ์ž‘์„ฑํ•œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์„ ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ _posts/blog ๊ฒฝ๋กœ์— ์˜ฌ๋ ค ์ €์žฅํ•˜๊ณ , static/assets/<ํฌ์ŠคํŠธ๋ช…>/ ํด๋”์— ์ปค๋ฒ„ ๋ฐ ์ตœ์ƒ๋‹จ ์ด๋ฏธ์ง€, ์ฒจ๋ถ€ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  2. ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ˆ˜์ • ๋‚ด์šฉ ํ‘ธ์‹œ: ํŒŒ์ผ์„ ์ปค๋ฐ‹ ํ›„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ํ‘ธ์‹œํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ ์˜๋ฌธ์œผ๋กœ ์ปค๋ฐ‹ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งํฌ ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  3. ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์ €์žฅ์†Œ์— ํ’€๋ฆฌํ€˜์ŠคํŠธ ์ž‘์„ฑ: ์›๊ฒฉ ์ €์žฅ์†Œ์— ํ‘ธ์‹œ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ์›๊ฒฉ ์ €์žฅ์†Œ ํŽ˜์ด์ง€์— ๋‚˜ํƒ€๋‚œ Create pull request ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ํ’€๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์ŠคํŠธ ์ œ๋ชฉ๊ณผ ์š”์•ฝ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ด์„œ ํ’€๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์˜ฌ๋ ค ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  4. ํ”ผ๋“œ๋ฐฑ ์š”์ฒญ: ๋งคํ„ฐ๋ชจ์ŠคํŠธ์˜ ์‹œ์Šคํ…œ > ๋ฆฌ๋ทฐ ์— ํ’€๋ฆฌํ€˜์ŠคํŠธ ํŽ˜์ด์ง€์˜ URL๊ณผ ํ•จ๊ป˜ ๋ฆฌ๋ทฐ๋ฅผ ์š”์ฒญํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ย 

4.3 ํ”ผ๋“œ๋ฐฑ ๋Œ€์‘ํ•˜๊ธฐ

ํ’€๋ฆฌํ€˜์ŠคํŠธ์™€ ํ”ผ๋“œ๋ฐฑ ์š”์ฒญ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๊ด€๊ณ„์ž๋“ค๋กœ๋ถ€ํ„ฐ ํ’€๋ฆฌํ€˜์ŠคํŠธ ํŽ˜์ด์ง€์— ๋Œ“๊ธ€๋กœ ํ”ผ๋“œ๋ฐฑ์ด ์˜ฌ๋ผ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ”ผ๋“œ๋ฐฑ ๋Œ€์‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค:

  1. ํ”ผ๋“œ๋ฐฑ ์ฝ”๋ฉ˜ํŠธ์˜ ๋‚ด์šฉ ๊ฒ€ํ† ํ•˜๊ธฐ.
  2. ํ”ผ๋“œ๋ฐฑ ๋‚ด์šฉ์„ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ˆ˜์ • ํ›„ ์˜๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋œ ์ปค๋ฐ‹ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ํ‘ธ์‹œํ•˜๊ธฐ.
  3. ํ”ผ๋“œ๋ฐฑ ์ฝ”๋ฉ˜ํŠธ์— ์ˆ˜์ • ๋‚ด์šฉ์„ ๋Œ“๊ธ€๋กœ ๋‹ฌ๊ณ , ๋งคํ„ฐ๋ชจ์ŠคํŠธ ๋ฆฌ๋ทฐ ์ฑ„๋„์—๋„ ์•Œ๋ฆฌ๊ธฐ.
  4. ํ”ผ๋“œ๋ฐฑ์„ ์ค€ ์‚ฌ๋žŒ์€ ์ˆ˜์ • ๋‚ด์šฉ ํ™•์ธ ํ›„ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋ฆฌ์กธ๋ธŒ(resolve)ํ•˜๊ณ , ์ „๋ถ€ ํ•ด๊ฒฐ๋˜๋ฉด ์–ดํ”„๋ฃจ๋ธŒ(approve)ํ•˜๊ธฐ.
  5. ์–ดํ”„๋ฃจ๋ธŒ๋ฅผ 3๋ฒˆ ์ด์ƒ ๋ฐ›์œผ๋ฉด, ์ตœ๊ณ  ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋จธ์ง€ ์š”์ฒญํ•˜๊ธฐ.
  6. ๋จธ์ง€๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์—…๋กœ๋“œ๋œ ํฌ์ŠคํŠธ๋ฅผ ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€์—์„œ ์ตœ์ข…์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ.

ย 

์ด์ƒ์œผ๋กœ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ์ž‘์„ฑ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ถ๊ธˆํ•˜์‹  ์ ์ด๋‚˜ ์ถ”๊ฐ€ ์˜๊ฒฌ์ด ์žˆ์œผ์‹  ๋ถ„์€ ์ƒ๊ธฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋‹ด๋‹น์ž๋‚˜ ๊ฐ€์ด๋“œ๋ผ์ธ ์ž‘์„ฑ์ž์— ๋ฌธ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค.


Development

The site is built with Hugo (extended) and searched with Pagefind. No JavaScript package manager is used anywhere in this repository or its CI.

Tools and local preview

tools/install_tools.sh .bin     # downloads pinned Hugo and Pagefind into .bin/, verifies SHA-256
.bin/hugo server                # live preview at http://localhost:1313/
node --test assets/ts/tests/*_test.ts   # TypeScript tests (Node 22.18+ runs .ts directly)

Versions and checksums live in tools/versions.env. Search needs the index, so for the search page run .bin/hugo --minify --environment development && .bin/pagefind --site build and serve build/. A plain hugo build is the production build and emits the Google Analytics snippet, so use --environment development for local builds to keep test visits out of the production property.

Writing a post

Until the cutover is verified, new posts still go to _posts/blog/ in the Jekyll format described above and are converted with tools/convert_posts.py. That script regenerates content/blog/ from _posts/ and fails on any .md there that has no source, so do not hand-add files to content/blog/ yet.

After _posts/ is deleted, author posts directly as content/blog/YYYY-MM-DD-slug.md:

---
title: "..."
author: "์ด๋ฆ„ (name@gluesys.com)"
tags: ["NVMe", "์Šคํ† ๋ฆฌ์ง€"]
cover: "/assets/slug/cover.jpg"
main: "/assets/slug/cover.jpg"
summary: "one sentence (optional)"
series: "NVMe"        # optional, see below
---
  • Normally do not set url, slug or date. The date and the URL slug come from the file name: content/blog/2026-12-01-new-post.md is built as /blog/2026/12/01/new-post.html (a plain file, like Jekyll). If date is set, Hugo keeps the date prefix in the slug and tools/verify_site.py fails ("slug keeps the date prefix"); slug or url can override the slug when needed. Converted posts keep their explicit url and date.
  • Authors: data/authors.yaml holds one entry per email (name spelling, optional avatar, github, gravatar: false, former: true for people who have left). The picture is the first of: avatar in the personal page (a site path, or an image file next to it in a page bundle), avatar in authors.yaml, the GitHub picture of github: <account> (in either place), the author's Gravatar (not for former colleagues), else the first letter of the name. GitHub and Gravatar pictures are downloaded while the site builds and served from the site itself, so readers never contact those services; a change of picture shows up with the next deploy. Every author has a page at /authors/<name>/ (picture, name, all their posts), generated by content/authors/_content.gotmpl; the about page cards and bylines link to it. A personal introduction is optional: create content/authors/<name>.md (use the same name so the address stays), set email, and write Markdown. It replaces the generated page, and its first paragraph also appears on the about page.
  • Use canonical tags from data/tag_aliases.yaml. python3 tools/check_tags.py content/blog warns about unknown or non-canonical tags.
  • A series is defined by data/series.yaml: add the post slug (file name without the date prefix) to the series list in reading order. Membership and order come from that file; series_order is not required. Also set series: "<series name>" in front matter so the post shows its series box.
  • Images go under static/assets/ and are referenced as /assets/.... Images never grow past the 720px body column; one shown smaller than its file gets a magnifier on mouse hover and opens full-window on click. To align a Markdown image, end its path with #left, #center or #right (![alt](/assets/x.png#center)); an image alone in its paragraph is centred by default, while one inside running text or sharing a paragraph with another image stays inline. For diagrams with text, export at 1440px wide with text at least 28px tall so it stays readable (about 14px on screen).
  • Diagrams and math need no images:
    • A ```mermaid code block is drawn by pele (Mermaid syntax) in the site colours, light and dark. The script loads only on posts that have one. pele is vendored as a single file in static/third-party/pele-<version>/ (no npm); to upgrade, take dist/pele.global.js from the npm tarball after checking its dist.integrity, and update the path in layouts/_default/baseof.html.
    • A ```plantuml code block is drawn as SVG by the public PlantUML server (www.plantuml.com), so its source leaves the site; do not put anything confidential in it.
    • Math goes between $...$ or \(...\) inline and $$...$$ on its own lines. Hugo renders it to MathML at build time (KaTeX), so readers load nothing extra. A math error fails the build and names the file. Write a literal dollar sign as \$.
  • Code blocks can show line numbers: ```bash {linenos=true} numbers from 1, and ```bash {linenos=true linenostart=120} starts at 120. Numbers are off by default, and the copy button never copies them.
  • Do not add a hand-written table of contents: every post gets one from its h2/h3 headings (the sidebar on wide screens, a collapsed ๋ชฉ์ฐจ block on phones).

CI (.github/workflows/pages.yml)

On pull requests and pushes to master the workflow installs the pinned tools, runs the Python tests (unittest) and the TypeScript tests (node --test, Node 26 runs .ts directly; no npm packages), builds with hugo --minify --environment production, builds the Pagefind index, then runs verify_migration.py, verify_site.py and check_tags.py. verify_search.py is a non-blocking report. verify_migration.py and the snapshot-based part of verify_site.py run only while migration/snapshot exists. Pull requests upload build/ as an artifact; pushes to master and manual workflow_dispatch runs on master deploy to GitHub Pages.

Editing a migrated post

Until the cutover, verify_migration.py compares the body text and headings of every migrated post with the live-site snapshot in migration/snapshot, so a typo fix in a migrated post fails CI. Add a narrow entry with a reason to migration/allowlist.yaml (see the existing entries) instead of loosening the checker. Such edits live only in content/blog/: tools/convert_posts.py pairs headings with the snapshot, so do not re-run it over an edited post (the allowlist entries would then go unused and the verifier fails, which is how CI catches it). New posts are not affected: the feed check only requires the 10 newest posts and unchanged links for the migrated items still in the feed.

After the cutover

The snapshot and everything that depends on it are removed together: delete migration/snapshot/, and the workflow then skips the "Verify migration" step and runs "Verify site (snapshot absent)" by itself (both are conditioned on migration/snapshot/urls.txt). Delete tools/verify_migration.py, its tests and the snapshot steps from pages.yml in the same change. The remaining checks (aliases, feed, post files, static files, tag map, links, images) do not need the snapshot.

Converter and verifiers

  • tools/convert_posts.py: Jekyll _posts/blog to content/blog (kramdown to Goldmark, front matter rewrite, tag canonicalization).
  • tools/verify_migration.py: compares each built post against the live-site snapshot in migration/snapshot.
  • tools/verify_site.py: checks URLs, feeds, redirects, sitemap and page structure of the built site.
  • tools/verify_search.py: runs the acceptance queries in tools/search_cases.txt against the index.
  • tools/check_tags.py: warns about tags missing from data/tag_aliases.yaml.

About

Gluesys Technical Blog

Resources

Stars

3 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages