Skip to content
safethecodePublic

About

Your terminal, multiplied

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

192 Commits

Folders and files

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

Repository files navigation

Chop ์•ฑ ์•„์ด์ฝ˜

Chop

์›ํ•˜๋Š” ์นธ์— ํ„ฐ๋ฏธ๋„์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋‚˜๋ˆ  ์“ฐ๋Š” macOS ์•ฑ

๋นˆ ์นธ์˜ +๋กœ ์‹œ์ž‘ํ•˜๊ณ ,
ํƒญยท์ขŒ์šฐยท์ƒํ•˜ยท๊ฒฉ์ž๋กœ ์ž‘์—…์— ๋งž๊ฒŒ ํŽผ์นฉ๋‹ˆ๋‹ค.

macOS 14 ์ด์ƒ Swift 6 AppKit libghostty CI

์ฃผ์š” ๊ธฐ๋Šฅ ยท ๋ ˆ์ด์•„์›ƒ ยท ์‹œ์ž‘ํ•˜๊ธฐ ยท ๋‹จ์ถ•ํ‚ค ยท ๊ธฐ์—ฌํ•˜๊ธฐ

macOS ์Šคํƒ€์ผ ๋ฐฐ๊ฒฝ ์œ„์˜ ์‹ค์ œ Chop ์ฐฝ: ์„ธ ํ„ฐ๋ฏธ๋„๊ณผ ์ค‘์•™ +๊ฐ€ ์žˆ๋Š” ๋นˆ ์นธ, ์˜ค๋ฅธ์ชฝ ํŒŒ์ผ ํŠธ๋ฆฌ

์‹ค์ œ Chop ์ฐฝ์„ ์˜ค๋ฆฌ์ง€๋„ ๋ฐฐ๊ฒฝ ์œ„์— ๊ตฌ์„ฑํ•œ ์ด๋ฏธ์ง€ ยท ๋ผ์ดํŠธ / ๋‹คํฌ

Chop์€?

Chop์€ ์—ฌ๋Ÿฌ ์…ธ์„ ํ•œ ์ฐฝ์—์„œ ๋‹ค๋ฃจ๋Š” macOS ๋„ค์ดํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„ ์•ฑ์ž…๋‹ˆ๋‹ค. Swift์™€ AppKit์œผ๋กœ ๋งŒ๋“ค๊ณ , Ghostty์˜ libghostty ์—”์ง„๊ณผ Metal ๋ Œ๋”๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ ์—ด๋ฉด 2ร—2๋กœ ๋‚˜๋ˆˆ ๋„ค ์นธ ์ค‘ ํ„ฐ๋ฏธ๋„ 1์ด ๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์นธ์€ ์ค‘์•™์˜ +๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ๋” ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์น˜๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ๊ฐ ์นธ์—์„œ ์ž‘์—…์„ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„๊ณผ ํŒŒ์ผ ํŠธ๋ฆฌ ์‚ฌ์ด์˜ ์„ธ๋กœ ์˜์—ญ์— ์žˆ๋Š” + ๋˜๋Š” โŒ˜T๋กœ ๊ณ„์† ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นˆ ์นธ์„ ์ˆœ์„œ๋Œ€๋กœ ์ฑ„์šด ๋’ค, ๋ชจ๋‘ ์ฐจ๋ฉด ์•„๋ž˜์— ๋‘ ์นธ์งœ๋ฆฌ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ฒซ ์นธ์„ ์—ฝ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ถ”๊ฐ€๋Š” ์˜†์˜ ๋นˆ ์นธ์„ ์ฑ„์›๋‹ˆ๋‹ค. ์ด ๋ฒ„ํŠผ์€ ์Šคํฌ๋กคํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ ํŠธ๋ฆฌ๋ฅผ ์ˆจ๊ฒจ๋„ ๋‚จ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์€ ๋ฒ„๊ธฐ์˜ ๋™๊ฐ•๋™๊ฐ• ์—ด๋งค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ฐฝ์„ ๋™๊ฐ•๋™๊ฐ• ๋‚˜๋ˆ  ์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„๋กœ ์“ฐ๋Š” ๋ชจ์Šต์—์„œ ์ถœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

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

ํ•œ๊ธ€ ์ž…๋ ฅ, ํ…์ŠคํŠธ ์„ ํƒ, ์Šคํฌ๋กค๋ฐฑ, ๋ณต์‚ฌยท๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋‹ซ์„ ๋•Œ๋Š” ํ™•์ธํ•˜๋ฉฐ, ์…ธ์ด ์ข…๋ฃŒ๋œ ์นธ์€ ๋‹ค์‹œ +๋กœ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ—ค๋”์˜ ์ด๋ฆ„์ด๋‚˜ ์—ฐํ•„ ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด ํ„ฐ๋ฏธ๋„ ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ƒ๋‹จ ํƒญ ๋ณด๊ธฐ์—์„œ๋Š” ํƒญ์„ ์šฐํด๋ฆญํ•ด **์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐโ€ฆ**๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. โŒ˜โ‡งR๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐ”๊พผ ์ด๋ฆ„์€ ๋‹ค์Œ ์‹คํ–‰์—๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ

์ƒ๋‹จ ์™ผ์ชฝ์˜ ๋„ค ์•„์ด์ฝ˜์œผ๋กœ ๋ณด๊ธฐ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋ณด๊ธฐ ๋ฐฐ์น˜
ํƒญ ๋ชจ๋“  ์นธ์„ ์ƒ๋‹จ ํƒญ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์„ ํƒํ•œ ํ„ฐ๋ฏธ๋„ ํ•˜๋‚˜๋ฅผ ํฌ๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ขŒ์šฐ ์—ด๋ฆฐ ์นธ์„ ๊ฐ€๋กœ๋กœ ๋‚˜๋ž€ํžˆ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
์ƒํ•˜ ์—ด๋ฆฐ ์นธ์„ ์„ธ๋กœ๋กœ ์Œ“์Šต๋‹ˆ๋‹ค.
๊ฒฉ์ž ๊ธฐ๋ณธ 2ร—2์—์„œ ๋‘ ์—ด์„ ์œ ์ง€ํ•˜๋ฉฐ ์•„๋ž˜๋กœ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์ด ๋งŽ์•„๋„ ๋ณด๊ธฐ ์ „ํ™˜ ๋•Œ๋ฌธ์— ์…ธ์„ ๋‹ซ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์นธ์€ ์ตœ๋Œ€ 16๊ฐœ๊นŒ์ง€ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ , ์ตœ์†Œ ํฌ๊ธฐ์ธ 280ร—180pt๋ฅผ ๋„˜๋Š” ๋ฐฐ์น˜๋Š” ๊ฐ€๋กœยท์„ธ๋กœ ์Šคํฌ๋กค๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋ณด๋“œ๋กœ ํฌ์ปค์Šค๋ฅผ ์˜ฎ๊ธฐ๋ฉด ํ•ด๋‹น ์นธ์ด ๋ณด์ด๋„๋ก ์Šคํฌ๋กคํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘์„ ์ผœ๋ฉด ์‹คํ–‰ ์ค‘์ธ ์นธ ์ค‘์•™์—๋„ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ํ—ค๋”์˜ ์ด๋™ ์†์žก์ด๋ฅผ ๋‹ค๋ฅธ ์นธ์œผ๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ์นธ ์ „์ฒด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ๋”ฐ๋ผ์˜ค๊ณ , ๋†“์€ ์ž๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์…ธ๊ณผ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋นˆ ์นธ์„ ๋‹ซ์œผ๋ฉด ์ธ์ ‘ ์นธ๊ณผ ํ•ฉ์ณ์ง€๋ฉฐ ๋งˆ์ง€๋ง‰ ํ•œ ์นธ์€ ๋‚จ์Šต๋‹ˆ๋‹ค.

Chop์˜ ์ƒ๋‹จ ํƒญ ๋ณด๊ธฐ: ๋„ค ์นธ์„ ํƒญ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์„ ํƒํ•œ ํ„ฐ๋ฏธ๋„์„ ํฌ๊ฒŒ ํ‘œ์‹œํ•œ ๋ผ์ดํŠธ ๋ชจ๋“œ ํ™”๋ฉด
๋„“๊ฒŒ ๋ณผ ๋•Œ๋Š” ํƒญ์œผ๋กœ. ๋‹ค์‹œ ๋‚˜๋ˆŒ ๋•Œ๋„ ๊ธฐ์กด ํ„ฐ๋ฏธ๋„์€ ๊ทธ๋Œ€๋กœ.

GitHub ํ”„๋กœ์ ํŠธ ํด๋ก 

ํ„ฐ๋ฏธ๋„ ์ถ”๊ฐ€ ์˜์—ญ ํ•˜๋‹จ์˜ ๋‹ค์šด๋กœ๋“œ ์•„์ด์ฝ˜ ๋˜๋Š” ํŒŒ์ผ โ†’ GitHub ํ”„๋กœ์ ํŠธ ํด๋ก โ€ฆ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. GitHub ์ €์žฅ์†Œ์˜ HTTPSยทSSH ์ฃผ์†Œ๋‚˜ owner/repo๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ์ €์žฅ ์œ„์น˜์™€ ํด๋” ์ด๋ฆ„์„ ์ •ํ•œ ๋’ค ํด๋ก ํ•˜๊ณ  ์—ด๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ƒˆ ํ”„๋กœ์ ํŠธ ์ฐฝ์—์„œ ํ„ฐ๋ฏธ๋„์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ํŠธ๋ฆฌ๋„ ๊ฐ™์€ ํด๋”์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ง„ํ–‰ ์ค‘์—๋Š” ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹คํŒจํ•˜๋ฉด ์ž…๋ ฅ์„ ์œ ์ง€ํ•ด ์ˆ˜์ •ํ•œ ๋’ค ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด๋ฆ„์˜ ํด๋”๋‚˜ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ๋Š” ์ด Mac์— ์„ค์ •๋œ Git credential helper๋‚˜ SSH agent๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์„ค์ •์ด ์—†๊ฑฐ๋‚˜ SSH ํ˜ธ์ŠคํŠธ๋ฅผ ์•„์ง ํ™•์ธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋จผ์ € ํ„ฐ๋ฏธ๋„์—์„œ Git ์ธ์ฆ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GitHub ๊ณ„์ • ์—ฐ๊ฒฐยท์ €์žฅ์†Œ ๋ชฉ๋ก ํƒ์ƒ‰ยท์ƒˆ ์›๊ฒฉ ์ €์žฅ์†Œ ์ƒ์„ฑ์€ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋ก  ํ›„ ์˜์กด์„ฑ ์„ค์น˜๋‚˜ ์ €์žฅ์†Œ์˜ ๋ช…๋ น์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ ์„œ๋ฒ„ ์ฃผ์†Œ

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

Chop์ด ์—ฐ ์…ธ๊ณผ ๊ทธ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ์‹ค์ œ TCP listener๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํ”„๋ฐฑ ๋˜๋Š” ์ „์ฒด ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ”์ธ๋”ฉํ•œ ํฌํŠธ๊ฐ€ ๋Œ€์ƒ์ด๋ฉฐ, ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„ยท์™ธ๋ถ€ ์•ฑ์˜ ์„œ๋ฒ„๋Š” ์„ž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ„๋„ ๊ถŒํ•œ ์š”์ฒญ์ด๋‚˜ ์„œ๋ฒ„ ์ž๋™ ์ ‘์†์€ ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ฃผ์†Œ๋Š” ๊ธฐ๋ณธ HTTP๋กœ ์—ฝ๋‹ˆ๋‹ค. ํ˜„์žฌ ํ™”๋ฉด์— ๊ฐ™์€ ํฌํŠธ์˜ ๋กœ์ปฌ ์ฃผ์†Œ(localhostยท๋ฃจํ”„๋ฐฑยท์ „์ฒด ์ธํ„ฐํŽ˜์ด์Šค)๊ฐ€ ์žˆ์œผ๋ฉด ํ™”๋ฉด์ƒ ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ์˜ HTTP/HTTPS๋ฅผ ๋ฐ˜์˜ํ•˜๋ฏ€๋กœ, ๋’ค์— ๋‚˜์˜จ HTTP ์ฃผ์†Œ๊ฐ€ ์•ž์„  HTTPS๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธํ•œ ๋ฐฉ์‹์€ ํ™”๋ฉด์—์„œ ํžŒํŠธ๊ฐ€ ์‚ฌ๋ผ์ ธ๋„ ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. TCP ํฌํŠธ๋งŒ์œผ๋กœ HTTP ์„œ๋น„์Šค ์—ฌ๋ถ€๊นŒ์ง€ ํŒ๋ณ„ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Docker/๋ณ„๋„ ๋ฐ๋ชฌ์ด ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ์…ธ์—์„œ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ ์„œ๋ฒ„, ์›๊ฒฉ SSH ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋Š” ์ž๋™ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌ์‹คํ–‰ ๋•Œ ์ด์ „ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•ด ๋ณด์—ฌ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์›น์‚ฌ์ดํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

์˜ค๋ฅธ์ชฝ ์ถ”๊ฐ€ ์˜์—ญ ํ•˜๋‹จ์˜ ์ง€๊ตฌ๋ณธ ์•„์ด์ฝ˜ ๋˜๋Š” โŒ˜โ‡งB๋กœ ์›น ์นธ์„ ์—ฝ๋‹ˆ๋‹ค. ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. localhost:3000์€ HTTP, ๋„๋ฉ”์ธ๋งŒ ์ž…๋ ฅํ•˜๋ฉด HTTPS๋กœ ์—ฝ๋‹ˆ๋‹ค. ๋นˆ ์นธ๋ถ€ํ„ฐ ์ฑ„์šฐ๊ณ , ๋ชจ๋‘ ์ฐจ๋ฉด ์•„๋ž˜์— ํ–‰์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„๊ณผ ์›น ์นธ์„ ํ•ฉํ•ด ์ตœ๋Œ€ 16๊ฐœ๊นŒ์ง€ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

ํŒŒ์ผ ํŠธ๋ฆฌ

ํŒŒ์ผ ํŠธ๋ฆฌ๋Š” ๊ณตํ†ต ํˆด๋ฐ” ์•„๋ž˜, ํ„ฐ๋ฏธ๋„ ์˜ค๋ฅธ์ชฝ์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค. โŒ˜โ‡งE๋กœ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์ˆจ๊ธฐ๊ณ , ๊ฒฝ๊ณ„๋ฅผ ๋“œ๋ž˜๊ทธํ•ด ํญ์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•œ ๋’ค Enter๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ โŒ˜O๋กœ macOS ํด๋” ์„ ํƒ๊ธฐ๋ฅผ ์—ด์–ด ํƒ์ƒ‰ํ•  ํด๋”๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

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

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

๊ฒ€์ƒ‰ ์ค‘์—๋„ ์ฐพ์€ ํ•ญ๋ชฉ๋ถ€ํ„ฐ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์–ด๋ฅผ ๋ฐ”๊พธ๋Š” ๋™์•ˆ ์ฝ์€ ํด๋” ๋ชฉ๋ก์„ ์ตœ๋Œ€ 10์ดˆ ๋™์•ˆ ์žฌ์‚ฌ์šฉํ•˜๋ฉฐ, ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ํด๋” ์ด๋™ ์‹œ ์บ์‹œ๋ฅผ ๋น„์›Œ ์ƒˆ ํŒŒ์ผ๊ณผ ์‚ญ์ œ๋œ ํŒŒ์ผ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

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

์‹œ์ž‘ํ•˜๊ธฐ

์š”๊ตฌ ์‚ฌํ•ญ

  • macOS 14 ์ด์ƒ
  • Xcode 16 ์ด์ƒ / Swift 6 ์ด์ƒ
  • Xcode Command Line Tools (xcode-select -p๋กœ ํ™•์ธ)

์†Œ์Šค์—์„œ ์‹คํ–‰

git clone https://github.com/safethecode/chop.git
cd chop
./scripts/run.sh

์ฒซ ๋นŒ๋“œ๋Š” ๊ณต์‹ Ghostty ์†Œ์Šค์™€ Zig 0.14.1์„ ๋‚ด๋ ค๋ฐ›์•„ libghostty๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. Metal ๋„๊ตฌ๊ฐ€ ์—†์œผ๋ฉด Xcode์˜ ๊ณต์‹ MetalToolchain ๊ตฌ์„ฑ ์š”์†Œ๋„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์—๋Š” ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์ • ๋ฒ„์ „๊ณผ ๋นŒ๋“œ ํ™˜๊ฒฝ ์•ˆ๋‚ด๋Š” ์˜์กด์„ฑ ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊ทธ ์•ฑ์€ build/debug/Chop.app์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ Chop์ด ์‹คํ–‰ ์ค‘์ด๋ฉด ๊ธฐ์กด ์•ฑ์„ ํ™œ์„ฑํ™”ํ•˜๋ฏ€๋กœ, ๋ณ€๊ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € ์•ฑ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ์•ฑ ๋งŒ๋“ค๊ธฐ

./scripts/build-app.sh release

build/release/Chop.app์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ํ›„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด ./scripts/run.sh release๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ๊ฐœ๋ฐœ์šฉ ์ž„์‹œ ์„œ๋ช…์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์™ธ๋ถ€ ๋ฐฐํฌ์šฉ Developer ID ์„œ๋ช…๊ณผ ๊ณต์ฆ์€ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹จ์ถ•ํ‚ค

๋™์ž‘ ๋‹จ์ถ•ํ‚ค
์ƒˆ ์œˆ๋„์šฐ / ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ์ƒˆ ์œˆ๋„์šฐ โŒ˜N / โŒ˜โ‡งN
ํ„ฐ๋ฏธ๋„ ์ถ”๊ฐ€ / ํ˜„์žฌ ์นธ ๋‹ซ๊ธฐ โŒ˜T / โŒ˜W
์›น์‚ฌ์ดํŠธ ์ถ”๊ฐ€ / ์›น ์ฃผ์†Œ ์ž…๋ ฅ โŒ˜โ‡งB / โŒ˜L
์›น ์ƒˆ๋กœ๊ณ ์นจ / ๋’ค๋กœ / ์•ž์œผ๋กœ โŒ˜R / โŒ˜[ / โŒ˜]
์›นํŽ˜์ด์ง€ ํ™•๋Œ€ / ์ถ•์†Œ / ์›๋ž˜ ํฌ๊ธฐ โŒ˜= / โŒ˜- / โŒ˜0
์˜ค๋ฅธ์ชฝ / ์•„๋ž˜๋กœ ๋‚˜๋ˆ„๊ธฐ โŒ˜D / โŒ˜โ‡งD
๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘ โŒ˜โ‡งL
ํŒŒ์ผ ํŠธ๋ฆฌ ๋ณด๊ธฐ / ์ˆจ๊ธฐ๊ธฐ โŒ˜โ‡งE
ํŒŒ์ผ ํŠธ๋ฆฌ์˜ ํด๋” ์„ ํƒ โŒ˜O
์ธ์ ‘ ์นธ์œผ๋กœ ์ด๋™ โŒ˜โŒฅ๋ฐฉํ–ฅํ‚ค
ํŽธ์ง‘ ์ค‘ ์ธ์ ‘ ์นธ๊ณผ ์ž๋ฆฌ ๋ฐ”๊พธ๊ธฐ โŒ˜โŒฅโ‡ง๋ฐฉํ–ฅํ‚ค
ํ˜„์žฌ ์นธ ํ™•๋Œ€ / ์ „์ฒด ๋ฐฐ์น˜ ๋ณต๊ท€ โŒ˜โ‡งEnter
ํ˜„์žฌ ์นธ ์ด๋ฆ„ ๋ณ€๊ฒฝ โŒ˜โ‡งR
์Šคํฌ๋กค๋ฐฑ ๋งจ ์œ„ / ๋งจ ์•„๋ž˜ โŒ˜โ†‘ / โŒ˜โ†“
ํ•œ ํŽ˜์ด์ง€ ์œ„ / ์•„๋ž˜ โ‡งPage Up / โ‡งPage Down
์œˆ๋„์šฐ ๋‹ซ๊ธฐ โŒ˜โ‡งW

ํƒญ ๋ณด๊ธฐ์—์„œ๋Š” ํƒญ์˜ +๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  โŒ˜W๋กœ ์„ ํƒํ•œ ํƒญ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. ๋ถ„ํ•  ๋ณด๊ธฐ์˜ ๋นˆ ์นธ์—์„œ โŒ˜W๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ทธ ์นธ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

**ํŒŒ์ผ โ†’ ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ์ƒˆ ์œˆ๋„์šฐโ€ฆ**์—์„œ ํด๋”๋ฅผ ๊ณ ๋ฅด๋ฉด ํ•ด๋‹น ํด๋”๋ฅผ ์…ธ๊ณผ ํŒŒ์ผ ํŠธ๋ฆฌ์˜ ์‹œ์ž‘ ๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์œˆ๋„์šฐ๋Š” ํ˜„์žฌ ์„ ํƒํ•œ ํ„ฐ๋ฏธ๋„์˜ ์ž‘์—… ํด๋”์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์—ด๋ฆฐ ์ฐฝ์€ macOS ์œˆ๋„์šฐ ๋ฉ”๋‰ด์—์„œ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฐฝ์„ ๋‹ซ์•„๋„ ํŒŒ์ผยทDock ๋ฉ”๋‰ด์—์„œ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ๋ณต์›

ํŒŒ์ผ โ†’ ์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์—์„œ ์ตœ๊ทผ์— ์—ฐ ํด๋”12๊ฐœ๋ฅผ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก ์ง€์šฐ๊ธฐ๋Š” ์ตœ๊ทผ ์ด๋ ฅ๋งŒ ์ง€์›๋‹ˆ๋‹ค. ํŒŒ์ผ โ†’ ์ž‘์—… ๊ตฌ์„ฑ โ†’ ํ˜„์žฌ ๊ตฌ์„ฑ ์ €์žฅโ€ฆ(โŒ˜โ‡งS)์—์„œ ํ˜„์žฌ ๋ฐฐ์น˜ยท์นธ ์ด๋ฆ„ยท์ž‘์—… ๊ฒฝ๋กœยท์›น ์ฃผ์†Œ์™€ ํŒŒ์ผ ํŠธ๋ฆฌ ์„ค์ •์„ ์ด๋ฆ„ ๋ถ™์—ฌ ์ €์žฅํ•˜์„ธ์š”. ๊ฐ™์€ ๋ฉ”๋‰ด์—์„œ ๊ตฌ์„ฑ์„ ๊ณ ๋ฅด๋ฉด ์ƒˆ ์ฐฝ์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฐฝ์˜ ์ž‘์—…์€ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์€ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค20๊ฐœ, ์ „์ฒด100๊ฐœ๊นŒ์ง€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ  ๊ตฌ์„ฑ ์‚ญ์ œโ€ฆ์—์„œ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋ชฉ๋ก๊ณผ ๊ตฌ์„ฑ์€ ~/Library/Application Support/Chop/projects.json์— ์„ธ์…˜๊ณผ ๋ณ„๋„๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ๊ฒ€์ฆํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ๋ช…๋ น๊ณผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ๊ตฌ์„ฑ์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๊ณต๊ฐ„์€ Mac ์•ˆ์— JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

~/Library/Application Support/Chop/
โ””โ”€โ”€ session.json

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

  • ์ž‘์—… ํด๋”๊ฐ€ ์—†๊ฑฐ๋‚˜ ์—ด ์ˆ˜ ์—†์œผ๋ฉด ์•Œ๋ฆผ ํ›„ ํ™ˆ ํด๋”๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ์†์ƒ๋˜๊ฑฐ๋‚˜ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ €์žฅ ํŒŒ์ผ์€ session-unreadable-<UUID>.json์œผ๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
  • ์ €์žฅ ์‹คํŒจ ์‹œ ํ„ฐ๋ฏธ๋„ ๋ฉ”๋‰ด์˜ ๋ ˆ์ด์•„์›ƒ ๋‹ค์‹œ ์ €์žฅ์œผ๋กœ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ์ข…๋ฃŒํ•˜๋ ค๋ฉด ํ™•์ธ์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.
  • ์ฐฝ์„ ์ง์ ‘ ๋‹ซ์œผ๋ฉด ๊ทธ ์ฐฝ์˜ ํ„ฐ๋ฏธ๋„๋งŒ ์ข…๋ฃŒํ•˜๊ณ  ๋ณต์› ๋ชฉ๋ก์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ์ข…๋ฃŒ๋Š” ์—ด๋ ค ์žˆ๋Š” ๋ชจ๋“  ์ฐฝ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ ๋’ค ์…ธ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ๊ตฌ์„ฑ

์˜์—ญ ์‚ฌ์šฉ ๊ธฐ์ˆ 
์•ฑ๊ณผ UI Swift 6, AppKit, SF Symbols
ํ„ฐ๋ฏธ๋„ ์—”์ง„ libghostty, Metal
์›น์‚ฌ์ดํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ WebKit, WKWebView
๋ ˆ์ด์•„์›ƒ๊ณผ ์ €์žฅ ๋ถ„ํ•  ํŠธ๋ฆฌ, Codable, ๋กœ์ปฌ JSON ํŒŒ์ผ
๋นŒ๋“œ Swift Package Manager, ์…ธ ์Šคํฌ๋ฆฝํŠธ
๊ฒ€์ฆ swift-format, Swift Testing, ์‹ค์ œ ์…ธ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
CI GitHub Actions ยท macOS

libghostty๋Š” Ghostty v1.2.3์˜ ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์—”์ง„๊ณผ ์ž…๋ ฅ ์–ด๋Œ‘ํ„ฐ์˜ ์—ฐ๊ฒฐ ๋ฐฉ์‹, ํŒจ์น˜์™€ ๋ผ์ด์„ ์Šค ๊ณ ์ง€๋Š” Dependencies/README.md์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๊ณผ ๊ฒ€์ฆ

./scripts/check.sh

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

Xcode์—์„œ ํŽธ์ง‘ํ•˜๋ ค๋ฉด ./scripts/prepare-ghostty.sh๋ฅผ ์‹คํ–‰ํ•œ ๋’ค Package.swift๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ๊ณผ PR ์ ˆ์ฐจ๋Š” CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”. ๊ฒ€์ฆ ํ™˜๊ฒฝ๊ณผ ๋ฏธํ™•์ธ ๋ฒ”์œ„๋Š” ๊ฒ€์ฆ ๊ธฐ๋ก์— ๋‚จ๊น๋‹ˆ๋‹ค. macOS 14 ์‹ค๊ธฐ๊ธฐ์™€ ์ „์ฒด VoiceOver ํƒ์ƒ‰, ๋งˆ์šฐ์Šค ํœ ์˜ ์‹ค๊ธฐ ๋™์ž‘์€ ์•„์ง ๊ฒ€์ฆํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Sources/
โ”œโ”€โ”€ Chop/             # ์•ฑ, ์ฐฝ, ํ„ฐ๋ฏธ๋„ ์ž…๋ ฅ๊ณผ ๋ Œ๋”๋ง, ํŒŒ์ผ ํŠธ๋ฆฌ
โ””โ”€โ”€ ChopCore/         # ๋ถ„ํ•  ๋ชจ๋ธ, ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ, ์ž‘์—… ๊ณต๊ฐ„ ์ €์žฅ
Tests/
โ”œโ”€โ”€ ChopTests/        # ์‹ค์ œ ์…ธ๊ณผ AppKit ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
โ””โ”€โ”€ ChopCoreTests/    # ๋ ˆ์ด์•„์›ƒ๊ณผ ์ €์žฅยท๋ณต๊ตฌ ํ…Œ์ŠคํŠธ
Resources/            # ์•ฑ ์•„์ด์ฝ˜, macOS ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ํ„ฐ๋ฏธ๋„ ํ…Œ๋งˆ
Dependencies/         # Ghostty ๊ณ ์ • ๋ฒ„์ „, ํŒจ์น˜์™€ ๋นŒ๋“œ ๊ฒฐ๊ณผ
scripts/              # ์˜์กด์„ฑ ์ค€๋น„, ๋นŒ๋“œ, ์‹คํ–‰, ๊ฒ€์ฆ
.github/              # CI์™€ PR ํ…œํ”Œ๋ฆฟ
docs/images/          # README ์•ฑ ์ด๋ฏธ์ง€
docs/showcase/        # ์‹ค์ œ ์บก์ฒ˜ยท๋ฐฐ๊ฒฝยท์‚ฌ์ง„ ๊ตฌ์„ฑ ์›๋ณธ
design/               # ๋””์ž์ธ ๊ธฐ์ค€๊ณผ ๊ฒ€์ฆ ๊ธฐ๋ก

๊ธฐ์—ฌํ•˜๊ธฐ

๋ฒ„๊ทธ ์ œ๋ณด์™€ ๊ธฐ๋Šฅ ์ œ์•ˆ์€ Issues์— ๋‚จ๊ฒจ ์ฃผ์„ธ์š”. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด macOS ๋ฒ„์ „, ์žฌํ˜„ ์ˆœ์„œ์™€ ๊ธฐ๋Œ€ํ•œ ๋™์ž‘์„ ํ•จ๊ป˜ ์ ์–ด ์ฃผ์‹œ๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

PR์€ ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ์ˆ˜์ • ๋‹จ์œ„๋กœ ์ž‘๊ฒŒ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฒ€์ฆ์€ ./scripts/check.sh์ด๋ฉฐ, UI๋ฅผ ๋ฐ”๊ฟจ๋‹ค๋ฉด ์‹ค์ œ ์•ฑ์—์„œ ํ™•์ธํ•œ ํ™”๋ฉด๊ณผ ๋™์ž‘์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ ˆ์ฐจ๋Š” ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ„ฐ๋ฏธ๋„ยท๋ ˆ์ด์•„์›ƒยทํŒŒ์ผ ํŠธ๋ฆฌยทํ™”๋ฉด ๋ชจ๋“œยท๋ณต์›์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•Œ๋ฆผ, Git ๋ธŒ๋žœ์น˜ ํ‘œ์‹œ, CLI์™€ ๋ธŒ๋ผ์šฐ์ €ยท์—์ด์ „ํŠธ ์—ฐ๋™์€ ํ›„์† ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.

๋ฐ”ํƒ•์ด ๋œ ํ”„๋กœ์ ํŠธ

  • Ghostty โ€” libghostty ํ„ฐ๋ฏธ๋„ ์—”์ง„๊ณผ macOS ์ž…๋ ฅ ์ฒ˜๋ฆฌ์˜ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค ๊ณ ์ง€๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
  • cmux โ€” ์ž‘์—… ๊ณต๊ฐ„๊ณผ ๊ธฐ๋Šฅ ๊ตฌ์„ฑ์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

์•ฑ ์•„์ด์ฝ˜์˜ ์›๋ณธ๊ณผ ์žฌ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ AppIcon ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค.


์›ํ•˜๋Š” ๋งŒํผ ๋‚˜๋ˆ„๊ณ , ํ•œ ์ฐฝ์—์„œ ์ด์–ด์„œ.

About

Your terminal, multiplied

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages