ํฌ์ŠคํŠธ

๐ŸŒ€ tmux โ€” ํ„ฐ๋ฏธ๋„ ์—ด ๋•Œ๋งˆ๋‹ค ์ƒˆ ์„ธ์…˜์ด ์ƒ๊ธฐ๋Š” ์ด์œ  (attach -t ํ•จ์ •)

์…ธ ์‹œ์ž‘ ์‹œ tmux ์ž๋™ attach ์Šค๋‹ˆํŽซ์ด ๋งค๋ฒˆ ๋นˆ ์„ธ์…˜์„ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ. `attach -t <์ด๋ฆ„>` ํ•˜๋“œ์ฝ”๋”ฉ๊ณผ ์„ธ์…˜ ์ด๋ฆ„ ๋ถˆ์ผ์น˜๊ฐ€ ์›์ธ์ด๊ณ , ํƒ€๊นƒ ์—†๋Š” attach ํ•œ ์ค„๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. JetBrains IDE ํ„ฐ๋ฏธ๋„์—์„œ tmux๊ฐ€ ์ž๋™ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€.

๐ŸŒ€ tmux โ€” ํ„ฐ๋ฏธ๋„ ์—ด ๋•Œ๋งˆ๋‹ค ์ƒˆ ์„ธ์…˜์ด ์ƒ๊ธฐ๋Š” ์ด์œ  (attach -t ํ•จ์ •)

์ด ๊ธ€์€ tmux ๋กœ๋“œ๋งต์˜ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ํŽธ์ด๋‹ค. ์ž…๋ฌธยท์„ค์ •ยทํ”Œ๋Ÿฌ๊ทธ์ธยท๋ถ€ํŠธ์ŠคํŠธ๋žฉ๊นŒ์ง€ ์ „์ฒด ๊ฒฝ๋กœ๋Š” ๋กœ๋“œ๋งต์—์„œ.

์ฆ์ƒ

.zshrc(๋˜๋Š” .bashrc)์— โ€œํ„ฐ๋ฏธ๋„์„ ์—ด๋ฉด ์ž๋™์œผ๋กœ tmux ์„ธ์…˜์— ๋ถ™๋Š”โ€ ์Šค๋‹ˆํŽซ์„ ๋„ฃ์–ด ๋‘๊ณ  ์“ฐ๋‹ค ๋ณด๋ฉด, ์–ด๋А ์ˆœ๊ฐ„ ์ด๋Ÿฐ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

1
2
3
4
$ tmux ls
0-default:   2 windows (attached)
1-workspace: 2 windows
default:     1 windows        # โ† ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๋Š˜์–ด๋‚˜๋Š” ๋นˆ ์„ธ์…˜

์ •์ž‘ ์ž‘์—…ํ•˜๋˜ ์„ธ์…˜(0-default)์€ ๋”ฐ๋กœ ์žˆ๋Š”๋ฐ, ์ƒˆ ํ„ฐ๋ฏธ๋„์„ ์—ด ๋•Œ๋งˆ๋‹ค ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” default ์„ธ์…˜์ด ๊ณ„์† ์ƒˆ๋กœ ์ƒ๊ธด๋‹ค. ๋ถ™๊ธด ๋ถ™๋Š”๋ฐ ๋งค๋ฒˆ ๋นˆ ์ฐฝ์— ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ์˜ ์Šค๋‹ˆํŽซ

์…ธ ์‹œ์ž‘ ์‹œ ์ž๋™ attach๋Š” ๋ณดํ†ต ์ด๋Ÿฐ ํ˜•ํƒœ๋‹ค.

1
2
3
4
# tmux ์ž๋™ ์‹คํ–‰ (์ด๋ฏธ tmux ์•ˆ์ด ์•„๋‹ ๋•Œ๋งŒ, IDE ๋‚ด์žฅ ํ„ฐ๋ฏธ๋„ ์ œ์™ธ)
if command -v tmux &>/dev/null && [[ -z "$TMUX" ]] && [[ "$TERMINAL_EMULATOR" != "JetBrains-JediTerm" ]]; then
  tmux attach -t default || tmux new -s default
fi

๊ฐ ์กฐ๊ฑด์˜ ์˜๋ฏธ๋ถ€ํ„ฐ ์งš์œผ๋ฉด:

  • command -v tmux โ€” tmux๊ฐ€ ์„ค์น˜๋ผ ์žˆ์„ ๋•Œ๋งŒ ์‹คํ–‰.
  • [[ -z "$TMUX" ]] โ€” ์ด๋ฏธ tmux ์„ธ์…˜ ์•ˆ์ด๋ฉด $TMUX์— ์†Œ์ผ“ ๊ฒฝ๋กœ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค. ์•ˆ์—์„œ ๋˜ attachํ•˜๋ฉด ์„ธ์…˜์ด ์ค‘์ฒฉ๋˜๋ฏ€๋กœ ๋ฐ–์— ์žˆ์„ ๋•Œ๋งŒ ์‹คํ–‰.
  • [[ "$TERMINAL_EMULATOR" != "JetBrains-JediTerm" ]] โ€” JetBrains IDE ๋‚ด์žฅ ํ„ฐ๋ฏธ๋„์ผ ๋•Œ๋Š” tmux ์ž๋™ ์‹คํ–‰์„ ๊ฑด๋„ˆ๋›ด๋‹ค. IntelliJยทPyCharm ๋“ฑ JetBrains IDE๋Š” ๋‚ด์žฅ ํ„ฐ๋ฏธ๋„์„ ๋„์šธ ๋•Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ TERMINAL_EMULATOR=JetBrains-JediTerm์„ ๋„ฃ์–ด ์ค€๋‹ค. ์ด ๊ฐ’์œผ๋กœ โ€œ์ง€๊ธˆ IDE ๋‚ด์žฅ ํ„ฐ๋ฏธ๋„์ธ๊ฐ€โ€๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.

IDE ํ„ฐ๋ฏธ๋„์—์„œ tmux๊ฐ€ ์ œ๋ฉ‹๋Œ€๋กœ ๋œฌ๋‹ค๋ฉด ์ด ์กฐ๊ฑด์ด ๋ฐ”๋กœ ๊ทธ ๋ฌธ์ œ๋ฅผ ๋ง‰๋Š” ์žฅ์น˜๋‹ค. .zshrc์— tmux ์ž๋™ ์‹คํ–‰์„ ๋„ฃ์œผ๋ฉด JetBrains ๋‚ด์žฅ ํ„ฐ๋ฏธ๋„์„ ์—ด ๋•Œ๋งˆ๋‹ค tmux๊ฐ€ ์ž๋™์œผ๋กœ ๋– ์„œ, IDE๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ˆœ์ˆ˜ ์…ธ ๋Œ€์‹  tmux ์„ธ์…˜ ์•ˆ์— ๊ฐ‡ํžŒ๋‹ค. IDE์˜ ํ„ฐ๋ฏธ๋„ ์ œ์–ด(์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์—ฐ๋™, ๋‹จ์ถ•ํ‚ค ๋“ฑ)์™€๋„ ์ถฉ๋Œํ•œ๋‹ค. $TERMINAL_EMULATOR๋กœ IDE ํ„ฐ๋ฏธ๋„์„ ๊ฐ์ง€ํ•ด ๊ทธ๋•Œ๋งŒ ์ž๋™ ์‹คํ–‰์„ ๋นผ๋ฉด ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ๋œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ •์ƒ์ด๋‹ค. ๋ฌธ์ œ๋Š” ๋งˆ์ง€๋ง‰ ์ค„์ด๋‹ค.

1
tmux attach -t default || tmux new -s default

์˜๋„๋Š” โ€œdefault ์„ธ์…˜์ด ์žˆ์œผ๋ฉด ๋ถ™๊ณ , ์—†์œผ๋ฉด ๋งŒ๋“ค์–ด๋ผโ€์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ ์„ธ์…˜ ์ด๋ฆ„์ด default๊ฐ€ ์•„๋‹ˆ๋ผ 0-default๋ผ๋ฉด?

์›์ธ โ€” attach -t๋Š” ์ด๋ฆ„์„ (๊ฑฐ์˜) ์ •ํ™•ํžˆ ๋งž์ถฐ์•ผ ํ•œ๋‹ค

tmux attach -t default๋Š” default๋ผ๋Š” ํƒ€๊นƒ ์„ธ์…˜์„ ์ฐพ๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‚ด์•„์žˆ๋Š” ์„ธ์…˜์€ 0-default๋‹ค. default๋กœ๋Š” ์ด ์„ธ์…˜์„ ๋ชป ์ฐพ๋Š”๋‹ค.

-t์˜ ๋งค์นญ ๊ทœ์น™์„ ์ •ํ™•ํžˆ ๋ณด๋ฉด tmux๋Š” ํƒ€๊นƒ ์„ธ์…˜์„ ์ ‘๋‘์–ด(prefix)๋กœ ๋งค์นญํ•œ๋‹ค. ์ฆ‰ tmux attach -t work๋Š” workspace ์„ธ์…˜์— ๋ถ™์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ 0-default๋Š” default๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ -t default๋กœ๋Š” ์ ˆ๋Œ€ ๋งค์นญ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ ‘๋‘์–ด ๋งค์นญ์€ ์•ž์—์„œ๋ถ€ํ„ฐ ๋งž์•„์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ํ๋ฆ„์€ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

1
2
3
tmux attach -t default   # ์‹คํŒจ โ€” 'default'๋ผ๋Š” ์ด๋ฆ„์˜ ์„ธ์…˜์ด ์—†์Œ
||                       # ๊ทธ๋ž˜์„œ ๋’ท๋ถ€๋ถ„์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ 
tmux new -s default      # ๋งค๋ฒˆ ์ƒˆ 'default' ์„ธ์…˜์„ ์ƒ์„ฑ

์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค attach๊ฐ€ ํ—›๋‹ค์ด๋น™ํ•˜๊ณ  new๋กœ ๋น ์ง€๋Š” ๊ฒƒ. ์ด๊ฒŒ ๋นˆ ์„ธ์…˜์ด ๊ณ„์† ์Œ“์ด๋Š” ์ด์œ ๋‹ค.

์™œ ์„ธ์…˜ ์ด๋ฆ„์— 0-, 1- ๊ฐ™์€ ์ ‘๋‘์–ด๊ฐ€ ๋ถ™๋‚˜

์ด ํ•จ์ •์— ๋น ์ง€๋Š” ์ „ํ˜•์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์„ธ์…˜ ์ •๋ ฌ์„ ์œ„ํ•ด ์ด๋ฆ„์— ์ˆซ์ž ์ ‘๋‘์–ด๋ฅผ ๋ถ™์ด๋Š” ์Šต๊ด€์ด๋‹ค.

tmux ls์™€ ์„ธ์…˜ ์„ ํƒ๊ธฐ(prefix + s)๋Š” ์„ธ์…˜์„ ์ด๋ฆ„ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ˆœ์„œ๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์ด๋ฆ„ ์•ž์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋Š” ๊ฒŒ ํ”ํ•œ ๊ธฐ๋ฒ•์ด๋‹ค.

1
2
3
0-default     # ํ•ญ์ƒ ๋งจ ์œ„
1-workspace   # ๊ทธ๋‹ค์Œ
2-logs

์ •๋ ฌ์šฉ์œผ๋กœ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ์ ‘๋‘์–ด๋ฅผ ์ž๋™ attach ์Šค๋‹ˆํŽซ์ด ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ์Šค๋‹ˆํŽซ์€ ์—ฌ์ „ํžˆ ์ ‘๋‘์–ด ์—†๋Š” default๋ฅผ ์ฐพ๊ณ  ์žˆ๋‹ค.

ํ•ด๊ฒฐ โ€” ํƒ€๊นƒ์„ ์•„์˜ˆ ๋–ผ์–ด๋‚ธ๋‹ค

ํ•ต์‹ฌ์€ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, attachํ•  ๋•Œ ์ด๋ฆ„์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

1
tmux attach || tmux new -s default

tmux attach๋ฅผ ํƒ€๊นƒ ์—†์ด ๋ถ€๋ฅด๋ฉด tmux๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ์“ฐ๋˜ ์„ธ์…˜์— ์ž๋™์œผ๋กœ ๋ถ™๋Š”๋‹ค. ์ด๋ฆ„์ด 0-default๋“  1-workspace๋“  ์ƒ๊ด€์—†๋‹ค. tmux ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ์—†์„ ๋•Œ(๋ถ€ํŒ… ์งํ›„ ์ฒซ ์‹คํ–‰ ๋“ฑ)๋งŒ attach๊ฐ€ ์‹คํŒจํ•˜๊ณ , ๊ทธ๋•Œ ๋น„๋กœ์†Œ tmux new -s default๋กœ ์ƒˆ ์„ธ์…˜์„ ๋งŒ๋“ ๋‹ค.

์ฆ‰ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋…๋ฆฝ๋œ ๊ด€์‹ฌ์‚ฌ๋กœ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ๋‹ค.

๊ด€์‹ฌ์‚ฌ๋‹ด๋‹น
์„ธ์…˜ ์ •๋ ฌ ์ˆœ์„œ์„ธ์…˜ ์ด๋ฆ„์˜ ์ˆซ์ž ์ ‘๋‘์–ด (๊ทธ๋Œ€๋กœ ์œ ์ง€)
์„ธ์…˜ ์ ‘์†tmux attach (ํƒ€๊นƒ ์—†์Œ)

์ •๋ ฌ์šฉ ์ ‘๋‘์–ด๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , โ€œ๋งค๋ฒˆ ์ƒˆ ์„ธ์…˜ ์ƒ์„ฑโ€ ๋ฌธ์ œ๋งŒ ์‚ฌ๋ผ์ง„๋‹ค. ์ด๋ฆ„์„ ํ•˜๋“œ์ฝ”๋”ฉํ•œ -t default๊ฐ€ ์œ ์ผํ•œ ๋ฒ„๊ทธ์˜€๋‹ค.

ํŠน์ • ์„ธ์…˜์— ํ•ญ์ƒ ์ฐฉ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

โ€œ์ตœ๊ทผ ์„ธ์…˜โ€์ด ์•„๋‹ˆ๋ผ ํ•ญ์ƒ ๊ฐ™์€ ์„ธ์…˜์— ๋–จ์–ด์ง€๊ณ  ์‹ถ๋‹ค๋ฉด ๋‘ ๊ฐ€์ง€ ์„ ํƒ์ง€๊ฐ€ ์žˆ๋‹ค.

์ •ํ™•ํ•œ ์ด๋ฆ„์œผ๋กœ ๋ถ™์ด๊ธฐ โ€” ๋‹จ, ์ ‘๋‘์–ด ๋ฒˆํ˜ธ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋‹ค์‹œ ๊นจ์ง„๋‹ค.

1
tmux attach -t 0-default

๋˜๋Š” new-session -A๋กœ โ€œ์žˆ์œผ๋ฉด ๋ถ™๊ณ  ์—†์œผ๋ฉด ๋งŒ๋“ค๊ธฐโ€๋ฅผ ํ•œ ์ค„๋กœ ํ•ฉ์น˜๊ธฐ. -A๋Š” ๋Œ€์ƒ ์„ธ์…˜์ด ์ด๋ฏธ ์žˆ์œผ๋ฉด new ๋Œ€์‹  attach์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

1
tmux new-session -A -s default

์ด ๋ฐฉ์‹์€ ํ•ญ์ƒ default๋ผ๋Š” ๊ณ ์ • ์ด๋ฆ„์˜ ์„ธ์…˜ ํ•˜๋‚˜๋ฅผ ์˜ค๊ฐ„๋‹ค. ๋ฐ˜๋Œ€๋กœ ์—ฌ๋Ÿฌ ์„ธ์…˜์„ ์œ ๋™์ ์œผ๋กœ ์˜ค๊ฐ€๋ฉฐ โ€œ๊ทธ๋ƒฅ ๋งˆ์ง€๋ง‰์— ์“ฐ๋˜ ๊ณณโ€์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด ํƒ€๊นƒ ์—†๋Š” tmux attach๊ฐ€ ๋งž๋‹ค.

๊ฒ€์ฆ

๋ฐ”๊พผ ๋’ค์—๋Š” ์‹ค์ œ๋กœ ํ™•์ธํ•ด ๋ณธ๋‹ค.

  1. ์ƒˆ ํ„ฐ๋ฏธ๋„ ์ฐฝ์„ ์—ฐ๋‹ค โ†’ ๊ธฐ์กด ์„ธ์…˜(0-default ๋“ฑ)์— ๊ทธ๋Œ€๋กœ ๋ถ™๋Š”๊ฐ€?
  2. tmux ls๋กœ ๋นˆ ์„ธ์…˜์ด ๋” ์ด์ƒ ์Œ“์ด์ง€ ์•Š๋Š”์ง€ ํ™•์ธ.
  3. ๋ชจ๋“  tmux๋ฅผ ๋„๊ณ (๋˜๋Š” ์žฌ๋ถ€ํŒ… ํ›„) ์ฒ˜์Œ ์—ด์—ˆ์„ ๋•Œ๋งŒ ์ƒˆ ์„ธ์…˜์ด ๋งŒ๋“ค์–ด์ง€๋Š”์ง€ ํ™•์ธ.

์ •๋ฆฌ

  • ์…ธ ์‹œ์ž‘ ์ž๋™ attach์—์„œ attach -t <์ด๋ฆ„>์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋ฉด, ์‹ค์ œ ์„ธ์…˜ ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๋•Œ ๋งค๋ฒˆ ์ƒˆ ์„ธ์…˜์ด ์ƒ๊ธด๋‹ค.
  • -t๋Š” ์ ‘๋‘์–ด ๋งค์นญ์ด๋ผ 0-default๋Š” default๋กœ ๋ชป ์ฐพ๋Š”๋‹ค. ์ •๋ ฌ์šฉ ์ˆซ์ž ์ ‘๋‘์–ด๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€ํ‘œ์  ํ•จ์ •.
  • tmux attach (ํƒ€๊นƒ ์—†์Œ) = ๊ฐ€์žฅ ์ตœ๊ทผ ์„ธ์…˜์— ๋ถ™๊ธฐ. ์„œ๋ฒ„๊ฐ€ ์—†์„ ๋•Œ๋งŒ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. ์ •๋ ฌ ์ ‘๋‘์–ด ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ณ ์ • ์„ธ์…˜ ํ•˜๋‚˜๋งŒ ์›ํ•˜๋ฉด tmux new-session -A -s <์ด๋ฆ„> ํ•œ ์ค„์ด ๋” ๋ช…ํ™•ํ•˜๋‹ค.

๊ด€๋ จ ๊ธ€

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.