문서 읽는 데 40분 · A6

A-6: 편집기 생존 가이드

목차 25
전체 12강 중 6강 · 리눅스
난이도 · 입문

ℹ️서버·배포에서 쓰는 리눅스 셸과 명령어 기본기. 백엔드·인프라로 가기 전에 익혀두면 든든해요.

안녕하세요, 홍순구입니다. 지난 시간엔 sedawk로 텍스트를 "자동으로, 한꺼번에" 바꾸고 집계했어요. 옛 도메인을 새 도메인으로 한 방에 치환하고, 로그를 받아 에러 IP를 awk 한 줄로 세는 것까지요. 텍스트를 흐름으로 가공하는 건 이제 제법 손에 익었을 거예요.

그런데 지난 시간 끝에 제가 욕심 하나를 슬쩍 흘려뒀죠. "파일 하나를 열어 두세 줄만 직접 고치고 싶을 땐?" 설정 파일에 새 항목을 한 줄 추가하거나, 오타 한 글자를 바꾸려고 파일 안으로 들어가야 할 때요. 이건 sed로 자동화하기엔 오히려 번거롭고, 그냥 파일을 열어 손으로 고치는 게 빠릅니다. 그게 오늘의 주제, 편집기예요.

그리고 제가 예고한 그 장면 — 현업 신입이 서버에서 한 번씩 꼭 겪는 순간을 오늘 정면으로 풀어드릴게요. ssh로 운영 서버에 들어가 설정 파일을 고치려고 vim을 열었는데, 글자도 안 써지고 빠져나갈 수도 없어서 식은땀을 흘리는 그 상황이요. 저도 신입 때 그랬고, 여러분 동기들도 한 번씩 다 겪어요. 근데 걱정 마세요. 오늘은 갇혔을 때 무사히 빠져나오는 법부터 배웁니다. :q! 하나만 손에 쥐면 vim이 하나도 안 무서워져요.

오늘 걸어갈 길을 한눈에 그려둘게요.

텍스트
  오늘의 여정 — 공포 탈출부터 도구 고르기까지
  ──────────────────────────────────────────
  Step 1   갇혀도 괜찮다 — Esc  :q! 로 무사 탈출
  Step 2   vim이 이상한 이유 — 노멀 / 입력 / 명령 3모드
  Step 3   쓰고, 저장하고, 빠져나오기 — i 로 입력 · :wq 로 저장
  Step 4   손이 키보드를 안 떠난다 — x · dd · yy · p · u
  Step 5   찾고, 바꾸기 — /패턴 · :%s (vim 안의 sed)
  Step 6   vim이 버거우면 nano — ^O · ^X, 그리고 도구 고르기

오늘 실습은 새로 만드는 작은 설정 파일 하나로 충분해요. 시작할 때 같이 만들 테니, 지금은 빈손으로 따라오시면 됩니다.

💡 오늘 수업의 핵심 — "vim은 갇혀도 :q! 로 빠져나온다 — 3개의 모드만 알면 서버 어디서든 파일을 직접 열어 고친다"

sed·awk가 "자동으로 일괄 처리"였다면, 편집기는 "파일을 열어 직접 손으로 고치기"예요. 그중 vim은 거의 모든 리눅스 서버에 깔려 있어서, 어느 서버에 들어가도 쓸 수 있다는 게 가장 큰 무기죠. 대신 처음엔 낯섭니다. 그래서 오늘은 탈출법부터 쥐고, 모드를 이해하고, 기본 편집과 검색·치환까지 차근차근 손에 익혀요. vim이 버거운 분을 위한 더 쉬운 대안 nano도 함께 봅니다.

🎯 학습 목표

  • vim에 갇혔을 때 Esc:q! 로 언제든 저장 없이 무사히 빠져나온다
  • vim의 3모드(노멀·입력·명령)를 구분하고, 입력·저장·종료·편집·검색·치환을 손에 익힌다
  • 더 쉬운 대안 nano를 알고, 자동(sed/awk)과 대화형(vim/nano) 중 상황에 맞는 도구를 고른다

Step 1: "갇혀도 괜찮다 — 탈출부터 배운다"

보통 새 도구는 "여는 법"부터 배우죠. vim은 거꾸로 갈게요. 빠져나오는 법부터 배웁니다. 이유가 있어요. vim에서 신입이 겪는 공포의 9할은 "들어갔는데 못 나오겠다"거든요. 나오는 법을 먼저 쥐고 있으면, 안에서 뭘 하든 마음이 편해집니다.

그 전에 딱 한 가지, "왜 하필 vim이냐"부터요. 여러분 컴퓨터엔 예쁜 그래픽 편집기가 많죠. 그런데 현업에서 ssh로 운영 서버에 들어가면 화면이 없어요. 검은 터미널에 셸 하나뿐입니다. 그 안에서 설정 파일 한 줄을 고치려면, 셸 안에서 도는 편집기가 필요해요. 그리고 vim(정확히는 그 조상 vi)은 거의 모든 리눅스에 기본으로 깔려 있습니다. 다른 편집기는 없을 수 있어도 vim은 거의 항상 있어요. 그래서 "어느 서버에 들어가도 통하는" 생존 기술인 거죠.

자, 파일을 하나 열어볼게요. 실습용 설정 파일을 만들고 vim으로 엽니다.

Bash
mkdir -p ~/practice/edit && cd ~/practice/edit
echo "port = 8080" > config.txt   # 한 줄짜리 설정 파일을 미리 만들어두고
vim config.txt                    # vim 으로 연다

화면에 port = 8080이 보일 거예요. 여기서 평소 버릇대로 글자를 타이핑하면? 글자가 안 써지거나, 화면이 이상하게 움직이거나, 알 수 없는 일이 벌어집니다. 바로 이 순간이 신입이 식은땀 흘리는 그 지점이에요. 당황하지 말고, 우리가 먼저 배운 탈출을 합니다.

텍스트
  무슨 일이 벌어지든, 막혔을 때:

  ① Esc 키를 한 번 누른다         일단 "노멀 모드"로 돌아간다
        │
  ② : q ! 를 입력하고 Enter       저장하지 않고 강제로 종료
        │
        
  셸 프롬프트로 무사 귀환

Esc를 누르면 지금이 어떤 상황이든 "노멀 모드"라는 기준점으로 돌아옵니다. 그 상태에서 콜론(:)을 누르면 화면 맨 아래에 :이 뜨고, 거기에 q!를 치고 Enter를 누르면 vim이 닫혀요. q는 quit(종료), !는 "묻지 말고 그냥 해"라는 뜻이에요. 그래서 :q!는 "고친 게 있든 없든 저장 안 하고 그냥 나간다"가 됩니다.

이 세 동작 — Esc:q! → Enter — 을 손가락이 기억할 때까지 몇 번 쳐보세요. 열고(vim config.txt), 바로 Esc:q!로 나오고, 다시 열고 또 나오고. 이걸 반복하면 "언제든 빠져나올 수 있다"는 안심이 생겨요. 그 안심이 오늘 수업의 진짜 출발점입니다.

현업에서도 이게 진짜 자주 쓰여요. 서버 설정 파일을 vim으로 열었다가 "어, 이거 잘못 건드렸는데 저장하기 싫다" 싶을 때, 고민 없이 Esc:q!로 빠져나오면 원본이 그대로 보존됩니다.

💡 한 줄 정리

어떤 상황에서 막혀도 Esc:q! → Enter 면 저장 없이 무사히 빠져나온다. 탈출법을 먼저 쥐고 있으면 vim이 안 무섭다.

🙋 학생 질문 — "튜터님, :q:q! 는 뭐가 달라요?"

좋은 질문이에요. :q는 "종료"인데, 저장하지 않은 변경이 있으면 vim이 "저장 안 했는데 정말 나갈 거예요?"라며 거부하고 안 닫혀요. 반면 :q!!는 "경고 무시하고 강제로"라는 뜻이라, 고친 내용을 버리고 그냥 닫습니다.

처음엔 그냥 :q!만 외워두세요. 어떤 경우든 무조건 빠져나오니까요. 익숙해지면 상황에 맞게 골라 쓰면 됩니다 — 아무것도 안 고쳤으면 :q, 고친 걸 저장하고 나가려면 :wq(다음 Step에서 배워요), 고친 걸 버리고 나가려면 :q!. 지금은 "막히면 :q!" 하나면 충분합니다.


Step 2: "vim이 이상한 이유 — 3개의 모드"

Step 1에서 글자가 안 써졌던 그 황당함, 사실 vim이 고장 난 게 아니에요. vim이 원래 그렇게 생겼습니다. 이걸 이해하면 vim의 모든 게 갑자기 말이 돼요.

우리가 쓰던 메모장이나 그래픽 편집기는 모드가 하나예요. 열면 바로 글자가 써지고, 화살표로 옮겨 다니죠. 그런데 vim은 모드라는 걸 나눠 씁니다. 같은 키보드라도 지금 어떤 모드냐에 따라 키가 전혀 다른 일을 해요. 그래서 처음엔 헷갈리지만, 익으면 손이 키보드 가운데를 안 떠나고도 빠르게 편집할 수 있어 강력합니다.

모드는 셋이에요.

텍스트
  [노멀 모드]  ── vim을 열면 처음 여기. 키가 "명령"으로 동작(이동·삭제·복사). 글자는 안 써짐
      │   
 i/a/o│   │ Esc
         │
  [입력 모드]  ── 여기서만 글자가 써진다. 메모장처럼 타이핑

  [노멀 모드] 에서 콜론( : )을 누르면
      │
      
  [명령 모드]  ── 화면 맨 아래 줄에 명령 입력. :w 저장 · :wq 저장 후 종료 · :q! 강제 종료
  • 노멀 모드(Normal) — vim을 열면 처음 이 상태예요. 여기서 키보드는 글자 입력이 아니라 "명령"으로 동작해요. x는 글자 삭제, dd는 줄 삭제처럼요. Step 1에서 글자가 안 써졌던 건, 노멀 모드라서 여러분이 친 글자가 전부 명령으로 해석됐기 때문이에요.
  • 입력 모드(Insert) — i 같은 키로 들어가는 모드. 여기서만 메모장처럼 글자가 그대로 써집니다. 다 쓰면 Esc로 노멀 모드로 돌아와요.
  • 명령 모드(Command-line) — 노멀 모드에서 콜론(:)을 누르면 진입. 화면 맨 아래에 :이 뜨고, 저장(:w)·종료(:q)·치환(:%s) 같은 줄 명령을 칩니다. Enter로 실행돼요.

핵심 감각은 이거예요. 글자가 안 써지면 입력 모드가 아니라는 뜻이에요. i를 눌러 입력 모드로 들어가면 됩니다. 반대로 명령을 하고 싶은데 글자만 끼어들면, 입력 모드에 있는 거예요. Esc로 노멀 모드로 돌아오세요. 그래서 vim을 쓸 때 헷갈리면 일단 Esc — 노멀 모드라는 기준점으로 돌아오는 게 모든 길의 시작입니다.

💡 한 줄 정리

vim은 노멀(명령)·입력(타이핑)·명령(: 줄 명령) 3모드로 나뉜다. 글자가 안 써지면 i로 입력 모드에 들어가고, 헷갈리면 Esc로 노멀 모드로 돌아온다.

🙋 학생 질문 — "튜터님, 모드를 왜 이렇게 나눠요? 그냥 메모장처럼 바로 쓰면 안 되나요?"

vim은 마우스 없이 키보드만으로 빠르게 편집하려고 만들어진 편집기예요. 모드를 나누면, 같은 알파벳 키를 입력 모드에선 글자로 쓰고 노멀 모드에선 명령(삭제·이동·복사)으로 쓸 수 있어요. 그 덕에 편집하는 동안 손이 키보드 가운데를 떠나 화살표나 마우스로 갈 일이 없어서, 익숙해진 사람은 굉장히 빠릅니다.

물론 입문 단계에선 이 장점이 잘 안 와닿고 번거롭기만 하죠. 그래서 지금은 딱 두 가지만 기억하세요 — "글자 쓰려면 i, 명령하려면 Esc." 이 둘만 자유로워져도 오늘 배울 건 다 따라옵니다.


Step 3: "쓰고, 저장하고, 빠져나오기"

탈출법(Step 1)과 모드(Step 2)를 알았으니, 이제 진짜로 글자를 써볼 차례예요. 편집 한 바퀴 — 입력 모드로 들어가 글자를 쓰고, 빠져나와 저장하고 종료하기 — 를 처음부터 끝까지 돌려봅니다.

먼저 입력 모드로 들어가는 키부터요. 세 가지가 있는데, 셋 다 "입력 모드로 들어간다"는 똑같고 커서를 기준으로 어디에 쓰기 시작하느냐만 달라요.

  • i — 커서 에 입력 (insert)
  • a — 커서 에 입력 (append)
  • o — 커서 아래에 새 줄을 열고 입력 (open)

이제 Step 1에서 만든 config.txt를 열어 한 줄을 추가해볼게요.

Bash
cd ~/practice/edit
vim config.txt          # port = 8080 한 줄이 보인다

화면에 port = 8080이 떠 있을 거예요. 노멀 모드 상태죠. 아래에 새 줄을 하나 추가해 봅니다.

텍스트
  vim 안에서 (config.txt 가 열린 상태):

  o              새 줄을 아래에 열고 입력 모드로 들어간다(왼쪽 아래 -- INSERT -- 표시)
  timeout = 30   한 줄 타이핑한다
  Esc            입력을 마치고 노멀 모드로 돌아온다
  : w q  Enter   저장하고 종료한다

화면 왼쪽 아래에 -- INSERT --라고 뜨면 입력 모드에 잘 들어온 거예요. 글자를 다 쓰고 Esc를 누르면 그 표시가 사라지면서 노멀 모드로 돌아옵니다. 그 상태에서 :wq를 치고 Enter를 누르면 저장하고 닫혀요. 잘 됐는지 셸에서 확인해 봅시다.

Bash
cat config.txt
# port = 8080
# timeout = 30

두 줄이 보이면 성공이에요. 방금 여러분은 서버 설정 파일에 항목을 한 줄 추가한 거예요. 현업에서 ssh로 서버에 들어가 설정을 손보는 일이 정확히 이 흐름입니다.

저장과 종료 명령은 정리하면 이래요. 전부 노멀 모드에서 콜론(:)으로 시작합니다(ZZ만 예외).

  • :w — 저장만 하고 계속 편집 (write)
  • :wq — 저장하고 종료 (가장 자주 씀)
  • ZZ — 노멀 모드에서 Shift를 누른 채 z를 두 번. :wq와 똑같이 저장하고 종료(콜론 없이 빠르게)
  • :q! — 저장하지 않고 버리고 종료 (Step 1에서 배운 탈출)

💡 한 줄 정리

i/a/o로 입력 모드에 들어가 글자를 쓰고, Esc로 빠져나온 뒤 :wq로 저장하고 종료한다. 고친 걸 버리려면 :q!.

🙋 학생 질문 — "튜터님, i·a·o 중에 뭘 써야 할지 모르겠어요"

셋 다 입력 모드로 들어가는 건 똑같으니 너무 고민 안 하셔도 돼요. 차이는 커서를 기준으로 어디서부터 쓰기 시작하느냐뿐이에요 — i는 커서 앞, a는 커서 뒤, o는 커서 아래에 새 줄.

처음엔 i 하나만 써도 다 됩니다. 쓰고 싶은 위치로 커서를 옮긴 다음 i로 들어가면 되니까요. 익숙해지면 줄 맨 끝에 덧붙일 땐 a, 새 줄을 추가할 땐 o가 손이 덜 가서 편해져요. 그때 가서 자연스럽게 손에 붙습니다.


Step 4: "손이 키보드를 안 떠난다 — 노멀 모드 편집"

Step 3에선 글자를 쓰려고 입력 모드로 들어갔죠. 그런데 이미 있는 글자를 지우거나, 줄을 통째로 옮기거나, 복사하는 일은 입력 모드로 안 가도 돼요. 노멀 모드에서 키 한두 개로 바로 합니다. 이게 vim이 빠른 진짜 이유예요 — 손이 키보드를 떠나 마우스나 방향키로 갈 일이 없거든요.

자주 쓰는 다섯 개만 손에 익히면 충분해요. 전부 노멀 모드에서 누릅니다.

  • x — 커서 위의 글자 한 개 삭제
  • dd — 커서가 놓인 줄을 통째로 삭제 (d를 두 번)
  • yy — 커서가 놓인 줄을 복사 (yank, y를 두 번)
  • p — 복사하거나 잘라낸 것을 커서 아래(또는 뒤)에 붙여넣기 (paste)
  • u — 방금 한 동작을 되돌리기 (undo)

config.txt를 다시 열어 직접 만져볼게요.

텍스트
  vim 안에서 (노멀 모드, config.txt):

  dd     커서가 놓인 줄을 통째로 삭제한다
  u      방금 삭제를 되돌린다(지운 줄이 다시 돌아온다)
  yy     커서가 놓인 줄을 복사한다
  p      복사한 줄을 커서 아래에 붙여넣는다(줄이 하나 복제된다)
  x      커서 위의 글자 한 개를 삭제한다

여기서 가장 든든한 건 u예요. 지난 시간들에서 rm으로 파일을 지우면 휴지통이 없어 되돌릴 수 없다고 했죠(A-3). 그래서 삭제는 늘 조심하라고요. 그런데 vim 안에서의 편집 실수는 달라요. dd로 줄을 잘못 지웠어도 u 한 번이면 돌아옵니다. 그것도 여러 단계를요. 그래서 파일을 직접 고칠 때 "잘못 건드리면 어쩌지" 하는 부담이 훨씬 가벼워져요.

다만 한 가지 — u로 되돌릴 수 있는 건 vim을 열어둔 동안이에요. :wq로 저장하고 닫아버리면 그 편집은 확정됩니다. 그러니 큰 변경을 했을 땐 닫기 전에 u로 되돌릴 수 있을 때 한 번 더 확인하는 습관을 들이세요. 영 자신이 없으면 Step 1의 :q!로 통째로 버리고 원본부터 다시 여는 것도 안전한 방법이에요.

💡 한 줄 정리

노멀 모드에서 x(글자)·dd(줄)로 지우고, yy·p로 복사·붙여넣기 하며, 실수하면 u로 되돌린다. 손이 키보드를 안 떠나고 편집한다.

🙋 학생 질문 — "튜터님, 실수로 dd를 여러 번 눌러 줄을 다 지웠어요!"

당황하지 마세요. u를 그만큼 다시 누르면 돼요. vim은 되돌리기를 여러 단계 기억하고 있어서, 누른 만큼 거슬러 올라가며 복구됩니다. 반대로 되돌렸다가 "아, 아까 그게 맞았네" 싶으면 Ctrl+r(redo)로 다시 실행할 수 있어요.

정말 엉망이 돼서 손쓰기 어렵다 싶으면, 가장 확실한 건 Step 1의 :q!예요. 저장하지 않고 통째로 빠져나오면 파일은 열기 전 원본 그대로 남아 있으니, 깨끗한 상태에서 다시 시작하면 됩니다.


Step 5: "찾고, 바꾸기 — vim 안의 sed"

설정 파일이 길어지면 원하는 부분을 눈으로 스크롤해 찾기 힘들어요. 그리고 같은 값이 여러 군데 흩어져 있으면 하나씩 고치는 것도 번거롭죠. vim은 이 둘 — 빠르게 이동하고, 찾고, 한 번에 바꾸기 — 을 노멀 모드 명령으로 해결해요. 그리고 마지막 치환은 지난 시간 sed를 그대로 닮았습니다.

먼저 이동과 검색이에요. 전부 노멀 모드에서 누릅니다.

  • gg — 파일 맨 윗줄로 점프
  • G — 파일 맨 아랫줄로 점프 (Shift+g)
  • /패턴 + Enter — 패턴을 앞으로 검색해 다음 일치로 커서 이동
  • n — 그다음 일치로 이동 (next)

그리고 치환이에요. 이게 오늘의 회수 포인트예요.

  • :s/old/new/ — 현재 줄에서 처음 나오는 것 하나만 치환
  • :%s/old/new/g — 파일 전체(%)에서 모든(g) oldnew로 치환

지난 시간 sed에서 s/old/new/g로 흐름에서 글자를 바꿨던 것 기억하시죠? vim 안에서도 똑같은 문법으로 :%s/old/new/g를 씁니다. 정규식 치환이라는 같은 도구를, sed는 파일을 안 열고 자동으로, vim은 파일을 연 채로 직접 쓰는 것뿐이에요.

같은 포트 번호가 여러 줄에 흩어진 파일을 만들어 한 번에 바꿔볼게요.

Bash
cd ~/practice/edit
printf 'port = 8080\nbackup_port = 8080\nadmin_port = 8080\n' > ports.txt
vim ports.txt
텍스트
  vim 안에서 (노멀 모드, ports.txt):

  gg                   맨 윗줄로 이동
  G                    맨 아랫줄로 이동
  /8080  Enter         8080 을 검색(다음 일치로 커서가 점프)
  n                    그다음 8080 으로 이동
  :%s/8080/9090/g  Enter   파일 전체의 8080 을 9090 으로 한 번에 치환
  :wq  Enter           저장하고 종료

치환을 실행하면 화면 맨 아래에 "3 substitutions on 3 lines"처럼 몇 군데를 바꿨는지 알려줘요. 셸에서 확인해 봅시다.

Bash
cat ports.txt
# port = 9090
# backup_port = 9090
# admin_port = 9090

세 줄의 8080이 전부 9090으로 바뀌었죠. 운영 서버 설정 파일에서 옛 포트나 옛 도메인을 새것으로 한 번에 바꿀 때 정확히 이렇게 씁니다.

💡 한 줄 정리

gg/G로 파일 처음·끝으로 점프하고, /패턴 + n으로 찾으며, :%s/old/new/g로 파일 전체를 한 번에 치환한다. 지난 시간 seds/old/new/g를 vim 안에서 그대로 쓰는 것이다.

🙋 학생 질문 — "튜터님, sed가 있는데 왜 vim 안에서 또 치환해요?"

쓰는 상황이 달라서예요. sed는 파일을 열지 않고 자동으로 — 여러 파일이나 스크립트 안에서 한꺼번에 — 바꿀 때 좋아요. 반대로 vim의 :%s는 파일을 눈으로 보면서 편집하는 도중에 쓰는 거예요.

예를 들어 설정 파일을 열어 한 줄 추가하다가 "아, 이 포트도 다 바꿔야겠네" 싶으면, 굳이 닫고 sed를 칠 것 없이 그 화면에서 바로 :%s로 바꾸고 마저 편집하면 되죠. 그리고 바꾸기 전에 하나씩 확인하고 싶으면 :%s/old/new/gc처럼 끝에 c(confirm)를 붙이세요. 그러면 바꿀 때마다 "이거 바꿀까요?"라고 물어봐서, 실수로 엉뚱한 것까지 바꾸는 일을 막아줍니다.


Step 6: "vim이 버거우면 nano — 그리고 도구 고르기"

여기까지 따라오느라 고생 많으셨어요. 솔직히 vim은 처음엔 손에 안 붙어요. 그래서 더 쉬운 대안 하나를 꼭 알려드리고 싶어요. nano예요.

nano는 vim과 정반대로 친절해요. 열면 바로 글자가 써집니다. 모드가 없거든요. 그리고 화면 맨 아래에 자주 쓰는 단축키가 늘 보여서 외울 필요가 거의 없어요. 한번 열어볼게요.

Bash
cd ~/practice/edit
nano config.txt

화면 아래에 ^G 도움말, ^O 저장, ^X 종료, ^W 검색 같은 안내가 줄지어 보일 거예요. 여기서 ^Ctrl 키를 뜻해요. 그러니 ^OCtrl+O죠. 자주 쓰는 셋만 기억하면 돼요.

  • ^O — 저장 (Write Out). 누르면 "파일명 확인"이 떠서 Enter 한 번 더
  • ^X — 종료 (Exit). 저장 안 한 변경이 있으면 저장할지 물어봄
  • ^W — 검색 (Where Is). 찾을 단어를 입력하고 Enter

vim의 Esc:q! 같은 긴장이 없죠. 그럼 "vim 안 배우고 nano만 쓰면 안 되나?" 싶을 텐데, 한 가지 이유로 vim도 최소한은 알아둬야 해요. nano는 안 깔린 서버가 더러 있지만, vim(또는 그 조상 vi)은 거의 모든 리눅스에 기본으로 있거든요. 그래서 "평소엔 nano로 편하게, 낯선 서버에선 vim으로 최소 생존(열고·고치고·:q!로 탈출)"이 가장 든든한 조합이에요.

마지막으로 오늘 배운 편집기와 지난 시간 sed/awk를 나란히 놓고, 언제 무엇을 쓸지 정리할게요.

텍스트
  텍스트를 바꿔야 한다 — 어떤 도구를 고를까?

  규칙이 명확하고, 여러 파일·수천 줄을 한꺼번에     sed / awk   (자동·일괄, 스크립트에 넣어 반복)
  파일 하나를 열어 눈으로 보며 두세 줄을 직접        vim / nano  (대화형, 사람이 판단하며 손으로)

같은 "텍스트 바꾸기"라도 쓰는 상황이 달라요. 정해진 규칙을 여러 곳에 자동으로 적용하는 일은 sed/awk가 빠르고, 한 번뿐이거나 사람의 판단이 필요한 수정은 vim/nano로 직접 하는 게 안전해요. 둘 다 도구함에 두고 상황에 맞게 꺼내 쓰는 게 현업 개발자의 방식입니다.

💡 한 줄 정리

nano는 모드가 없고 단축키가 화면에 보여 쉽다(^O 저장·^X 종료·^W 검색). 규칙이 명확한 일괄 작업은 sed/awk(자동), 눈으로 보며 직접 고치는 건 vim/nano(대화형)로 골라 쓴다.

🙋 학생 질문 — "튜터님, 그럼 그냥 nano만 쓰면 안 되나요?"

nano가 편한 건 분명 맞아요. 평소 작업은 nano로 하셔도 좋습니다. 다만 nano는 최소로 설치된 서버나 오래된 시스템엔 없을 수 있어요. 그런 곳에 ssh로 들어가 설정 파일을 급히 고쳐야 하는데 nano가 없으면, 결국 vim(또는 vi)으로 해야 하거든요.

그래서 "전부 다 vim으로 능숙하게"까지는 지금 필요 없지만, 어느 서버에 들어가도 vim으로 열어 고치고 :q!로 빠져나올 수 있는 생존 수준은 갖춰두시길 권해요. 오늘 배운 정도면 그 생존선은 이미 넘었습니다.


마무리

오늘은 "자동으로 바꾸기"에서 "직접 열어 고치기"로 넘어왔어요. 무엇보다, 서버에서 vim에 갇혀 식은땀 흘리던 그 공포를 :q! 하나로 풀어버렸죠. 이제 낯선 서버에 들어가 설정 파일을 열어도 당황하지 않을 거예요. 핵심을 세 가지로 정리할게요.

오늘 배운 핵심 세 가지

💡 하나 — vim은 갇혀도 Esc:q! 면 저장 없이 빠져나온다. 탈출법을 먼저 쥐고 있으면 vim이 안 무섭다. 그리고 vim은 노멀(명령)·입력(타이핑)·명령(: 줄 명령) 3모드로 동작한다 — 글자가 안 써지면 i, 헷갈리면 Esc.

💡 i/a/o로 써서 :wq로 저장하고, 노멀 모드에서 x·dd로 지우고 yy·p로 복사·붙여넣기 하며 u로 되돌린다. gg/G·/패턴으로 찾고, :%s/old/new/g로 파일 전체를 한 번에 치환한다(지난 시간 sed와 같은 문법).

💡 nano는 모드 없이 쉽고 단축키가 화면에 보인다(^O·^X·^W). 규칙이 명확한 일괄 변경은 sed/awk(자동), 눈으로 보며 직접 고치는 건 vim/nano(대화형)로 상황에 맞게 고른다.

다음 시간 예고

오늘까지 파일을 만들고, 옮기고, 권한을 주고, 텍스트를 찾고 바꾸고 직접 편집하는 것까지 — 파일과 텍스트는 이제 자유자재가 됐어요. 그런데 지금까지 다룬 건 전부 가만히 멈춰 있는 파일이었죠.

다음 시간엔 살아 움직이는 시스템을 들여다봅니다. 지금 이 순간에도 서버 안에서 돌고 있는 프로세스를 ps·top으로 살펴보고, 말 안 듣는 프로세스를 kill로 멈추며, 무거운 작업을 백그라운드로 돌리는 잡 제어까지 다뤄요. 현업 신입이 또 한 번 깨지는 순간 — "포트를 이미 잡고 있는 프로세스를 못 죽여서 서버를 못 띄우는" 그 상황도 다음 시간에 풀어드릴게요. 그리고 그다음엔 그렇게 들여다본 서비스를 systemd로 띄우고 cron으로 예약하는 데까지 이어집니다. 그럼 다음 시간에 만나요.


과제

오늘 과제도 전부 여러분 자신의 리눅스 환경(WSL2·맥 터미널·VM)에서 직접 쳐보는 실습이에요. 편집기는 눈으로 보면 다 아는 것 같다가도 막상 손이 안 따라가요. 한 동작씩 천천히, 그리고 무엇보다 막히면 Esc:q!로 언제든 빠져나올 수 있다는 걸 기억하며 편하게 해보세요. 실습 디렉토리는 ~/practice/edit를 쓰면 됩니다.

[기초] vim 생존 한 바퀴 돌기

vim을 열고, 쓰고, 저장하고, 빠져나오는 전체 흐름을 손에 익혀보세요.

  • ~/practice/edit 안에 memo.txt를 vim으로 새로 연다(vim memo.txt)
  • i로 입력 모드에 들어가 아무 문장이나 두세 줄 적고, Esc로 노멀 모드로 나온다
  • :wq로 저장하고 종료한 뒤, cat memo.txt로 내용이 잘 저장됐는지 확인한다
  • 다시 vim memo.txt로 열어 o로 새 줄을 추가하고, 이번엔 저장하지 말고 Esc:q!로 빠져나온다. cat으로 추가한 줄이 저장되지 않았는지(:q!의 효과) 확인한다

[응용] 노멀 모드 편집 + 검색·치환, 그리고 nano로도

vim의 편집·검색·치환을 연습하고, 같은 일을 nano로도 해보세요.

  • printf 'host = old.example.com\nbackup = old.example.com\n' > hosts.txt로 파일을 만든다
  • vim hosts.txt로 열어 dd로 한 줄을 지웠다가 u로 되돌리고, yy+p로 한 줄을 복제해본다
  • /old로 검색해 n으로 일치하는 곳들을 옮겨 다녀본 뒤, :%s/old.example.com/new.example.com/g로 전체를 한 번에 바꾸고 :wq로 저장한다. cat으로 결과를 확인한다
  • 이번엔 같은 파일을 nano hosts.txt로 열어, 화면 아래 단축키를 보며 한 줄을 추가하고 ^O로 저장, ^X로 종료해본다. vim과 nano 중 어느 쪽이 손에 더 편했는지 한 문장으로 적어본다

[심화] 도구를 고르는 판단 (서버 상황 상상)

서버 상황을 상상해봅시다. "운영 서버의 설정 파일 하나에 옛 포트 8080이 여러 줄 흩어져 있다. 새 포트 9090으로 바꿔야 한다."

  • printf 'app_port = 8080\nmetrics_port = 8080\nhealth_port = 8080\n' > server.conf로 파일을 만든다
  • vim으로 열어 :%s/8080/9090/g로 한 번에 바꾸고 저장한다. 화면 아래에 몇 군데를 바꿨다고 나오는지 확인한다
  • 이제 생각해보자. 만약 똑같은 변경을 이런 설정 파일 50개에 해야 한다면, vim을 50번 열겠는가, 아니면 지난 시간 배운 sed를 쓰겠는가? 그리고 단 한 파일을, 그것도 바꾸기 전에 한 줄씩 눈으로 확인하며 고쳐야 한다면 어느 쪽이 나은가? 각각 어떤 도구가 맞는지와 그 이유를 두세 문장으로 적어본다

생각해볼 주제

1. vim은 왜 이렇게 안 친절하게 만들어졌을까

오늘 우리는 vim 때문에 한 번씩 당황했죠. 열면 글자도 안 써지고, 빠져나오는 것조차 따로 배워야 했으니까요. 그런데 vim은 수십 년째 거의 모든 리눅스 서버에 살아남아 현업 개발자들이 매일 씁니다. 불친절한데 안 사라진 거예요. 모드를 나눠 손이 키보드를 안 떠나게 한 그 설계가, 처음엔 진입장벽이지만 익으면 왜 강력한 무기가 되는지 생각해보세요. 그리고 "처음 쓰기 쉬운 도구"와 "오래 쓸수록 빨라지는 도구"가 늘 같지는 않다는 점도요. 여러분이 아는 다른 도구 중에도 이런 "배우긴 어렵지만 익으면 빠른" 짝이 있는지 떠올려보면 재밌을 거예요.

2. "한 번 고칠 일"과 "반복될 일"의 경계

오늘 마지막에 자동(sed/awk)과 대화형(vim/nano)을 나눠봤어요. 그런데 막상 현업에선 "이게 한 번뿐인 일인지, 앞으로 반복될 일인지"가 애매할 때가 많습니다. 지금은 파일 하나만 고치면 되지만, 다음 주에 또, 그다음 달에 또 같은 수정을 하게 될 수도 있죠. 한 번뿐이라 생각해 vim으로 직접 고쳤는데 그 일이 매주 돌아온다면, 어느 시점에 "이건 sed 스크립트로 자동화하자"로 넘어가는 게 맞을까요? 반대로, 한 번뿐인 일을 자동화 스크립트로 만드느라 시간을 더 쓰는 건 어떤 손해일까요? 도구를 고르는 판단이 단순히 "지금 편한 것"이 아니라 "앞으로를 내다보는 것"이기도 하다는 점을 생각해보세요.

3. 왜 "탈출법부터" 배웠을까

오늘 vim을 여는 법이 아니라 빠져나오는 법(:q!)부터 배웠어요. 그리고 편집에선 u(되돌리기)가 가장 든든한 명령이었죠. 지난 시간들에서도 rm 전에 ls로 확인하고 백업하는 습관, sed -i.bak로 백업부터 만드는 습관을 강조했고요. 이걸 한데 모아 보면, 새로운 도구나 위험한 작업을 만났을 때 "어떻게 하지"보다 "잘못되면 어떻게 되돌리지 / 어떻게 빠져나오지"를 먼저 확보하는 태도가 보여요. 왜 이 "안전망부터" 태도가 실수를 줄일 뿐 아니라 오히려 더 과감하게 시도하게 만드는지 생각해보세요. 되돌릴 수 있다는 확신이 있으면, 사람은 더 자유롭게 도전하거든요.

✅ 예시 답안정답 보기

과제와 생각해볼 주제의 예시답안입니다. 편집기는 눈으로 읽으면 다 아는 것 같다가도 손이 안 따라가요. 그러니 직접 열어서 한 동작씩 쳐보는 게 가장 중요합니다. 그리고 무엇보다, 어디서 막히든 Esc:q!로 빠져나올 수 있다는 걸 기억하면 마음 편히 연습할 수 있어요. 파일 내용이 책과 조금 달라도 정상이니, 흐름이 맞는지를 보면 됩니다.


🎯 [과제 1 예시답안] vim 생존 한 바퀴 돌기

채점 포인트

확인 항목 무엇을 보면 되는가
입력 모드 i로 입력 모드에 들어가 글자를 쓰고 Esc로 빠져나왔는가
저장·종료 :wq로 저장하고 종료한 뒤 cat으로 내용이 남았는지 확인했는가
:q!의 효과 o로 추가한 줄을 :q!로 버렸을 때, cat에 그 줄이 없는 걸 확인했는가
모드 감각 글자가 안 써질 때 i, 막힐 때 Esc라는 흐름이 익숙해졌는가

풀이 예시

Bash
$ cd ~/practice/edit
$ vim memo.txt
텍스트
  vim 안에서 (새 파일, 노멀 모드로 시작):

  i                              입력 모드로 들어간다(-- INSERT -- 표시)
  오늘 vim을 처음 배웠다          두 줄을 타이핑한다
  :q! 로 빠져나오는 법부터 익혔다
  Esc                            입력을 마치고 노멀 모드로
  : w q  Enter                   저장하고 종료
Bash
$ cat memo.txt
오늘 vim을 처음 배웠다
:q! 로 빠져나오는 법부터 익혔다

이제 다시 열어, 이번엔 줄을 추가하고도 저장하지 않고 빠져나와 봅니다.

Bash
$ vim memo.txt
텍스트
  vim 안에서:

  o                          새 줄을 아래에 열고 입력 모드로
  이 줄은 저장하지 않을 것이다   한 줄 타이핑한다
  Esc                        노멀 모드로
  : q !  Enter               저장하지 않고 빠져나온다
Bash
$ cat memo.txt
오늘 vim을 처음 배웠다
:q! 로 빠져나오는 법부터 익혔다

셋째 줄이 안 보이죠. :q!로 빠져나왔으니 추가한 내용이 저장되지 않고, 파일은 열기 전 그대로 남은 거예요.

💡 튜터의 한마디 — 이 과제의 진짜 목표는 "글자를 잘 쓰는 것"이 아니라 "막혀도 빠져나올 수 있다"는 안심을 손에 쥐는 거예요. 열고 → i로 쓰고 → Esc:wq 또는 :q!, 이 한 바퀴를 몇 번만 돌려보면 vim이 더는 무섭지 않아요. 현업에서 서버 설정을 고치다 "이건 저장하기 싫다" 싶을 때 망설임 없이 :q!로 나오는 그 여유가, 오늘 연습에서 나옵니다.

🎯 [과제 2 예시답안] 노멀 모드 편집 + 검색·치환, 그리고 nano로도

채점 포인트

확인 항목 무엇을 보면 되는가
노멀 모드 편집 dd로 줄을 지웠다가 u로 되돌리고, yy+p로 줄을 복제해봤는가
검색 /old로 검색하고 n으로 일치 지점을 옮겨 다녔는가
전체 치환 :%s/old.example.com/new.example.com/g로 한 번에 바꾸고 cat으로 확인했는가
nano 대비 같은 파일을 nano로 열어 ^O 저장·^X 종료를 써보고, 두 편집기를 비교했는가

풀이 예시

Bash
$ printf 'host = old.example.com\nbackup = old.example.com\n' > hosts.txt
$ vim hosts.txt
텍스트
  vim 안에서 (노멀 모드):

  dd          한 줄을 통째로 삭제
  u           되돌리기 — 지운 줄이 돌아온다
  yy  p       한 줄을 복사해 아래에 붙여 복제(연습용)
  u           복제도 되돌려 원래 두 줄로
  /old  Enter old 를 검색(일치 지점으로 커서 점프)
  n           그다음 일치로 이동
  :%s/old.example.com/new.example.com/g  Enter   전체를 한 번에 치환
  : w q  Enter   저장하고 종료
Bash
$ cat hosts.txt
host = new.example.com
backup = new.example.com

이제 같은 파일을 nano로 열어, 화면 아래 단축키를 보며 편집해 봅니다.

Bash
$ nano hosts.txt

화면 맨 아래에 ^O 저장, ^X 종료가 보일 거예요. 줄 끝에 커서를 두고 바로 글자를 타이핑(모드 전환 없이)한 뒤, Ctrl+O를 누르고 Enter로 저장, Ctrl+X로 종료하면 됩니다. 비교를 한 문장으로 적어보면 이런 식이에요.

"nano는 열자마자 바로 글자가 써져서 처음엔 훨씬 편했다. 대신 vim은 dd·yy 같은 명령으로 줄을 빠르게 다루는 게 손에 붙으면 더 빠를 것 같았다."

💡 튜터의 한마디:%s/.../.../g를 처음 쳤을 때 화면 아래에 "2 substitutions on 2 lines" 같은 메시지가 뜨는 걸 보셨을 거예요. 몇 군데를 바꿨는지 알려주는 거라, 의도한 만큼 바뀌었는지 확인하는 좋은 습관이 됩니다. 그리고 두 편집기 중 뭐가 정답이라는 건 없어요. nano로 편하게 시작하고, vim은 어느 서버에서든 살아남는 생존 기술로 쥐고 가면 충분합니다.

🎯 [과제 3 예시답안] 도구를 고르는 판단

채점 포인트

확인 항목 무엇을 보면 되는가
전체 치환 :%s/8080/9090/g로 한 번에 바꾸고 치환 건수 메시지를 확인했는가
결과 확인 cat으로 세 줄 모두 바뀐 걸 확인했는가
50개 파일 판단 같은 변경을 여러 파일에 할 땐 sed(자동)가 낫다는 이유를 적었는가
한 줄씩 확인 판단 눈으로 확인하며 고칠 땐 vim(대화형)이 낫다는 이유를 적었는가

풀이 예시

Bash
$ printf 'app_port = 8080\nmetrics_port = 8080\nhealth_port = 8080\n' > server.conf
$ vim server.conf
텍스트
  vim 안에서 (노멀 모드):

  :%s/8080/9090/g  Enter    화면 아래에 "3 substitutions on 3 lines"
  : w q  Enter             저장하고 종료
Bash
$ cat server.conf
app_port = 9090
metrics_port = 9090
health_port = 9090

도구 선택의 판단을 적어보면 이런 식이에요.

"같은 변경을 설정 파일 50개에 해야 한다면, vim을 50번 열고 닫는 건 비효율적이다. 지난 시간 배운 sed -ised -i.bak 's/8080/9090/g' *.conf 한 줄이면 50개를 한꺼번에 바꿀 수 있다. 정해진 규칙을 여러 파일에 자동으로 적용하는 일은 sed가 맞다. 반대로 단 한 파일을, 그것도 바꾸기 전에 한 줄씩 눈으로 확인하며 고쳐야 한다면 vim이 낫다. :%s/old/new/gc처럼 끝에 c를 붙이면 바꿀 때마다 물어봐서, 사람이 보며 판단할 수 있기 때문이다."

💡 튜터의 한마디 — 핵심은 "반복되고 규칙이 명확하면 자동(sed), 한 번뿐이거나 판단이 필요하면 대화형(vim)"이에요. 그런데 둘은 칼처럼 갈리지 않고 가운데가 있어요. vim의 :%s는 "파일을 보면서 자동 치환"이라 둘의 중간쯤이고, gc 옵션은 거기에 "사람의 확인"을 한 겹 더 얹은 거죠. 도구를 많이 알수록 이 중간 지점을 잘 골라 쓰게 됩니다.


🤔 [생각해볼 주제 1] vim은 왜 이렇게 안 친절하게 만들어졌을까

문제 상황 요약

vim은 열면 글자도 안 써지고, 빠져나오는 것조차 따로 배워야 한다. 이렇게 불친절한데도 수십 년째 거의 모든 리눅스 서버에 살아남아 현업에서 매일 쓰인다. 불친절함과 끈질긴 생존, 이 둘은 어떻게 같이 가는 걸까.

튜터의 가이드 및 해설

vim의 불친절함은 사실 "설계의 대가"예요. vim은 마우스도 없고 그래픽도 없던 시절, 키보드만으로 최대한 빠르게 편집하려고 만들어졌어요. 모드를 나눈 덕에, 같은 알파벳 키를 입력할 땐 글자로, 명령할 땐 삭제·이동·복사로 쓸 수 있죠. 그래서 익숙해진 사람은 손이 키보드 가운데를 떠나지 않고 굉장히 빠르게 편집해요. 처음의 진입장벽이, 익으면 속도라는 보상으로 돌아오는 구조예요.

여기서 중요한 건 "처음 쓰기 쉬운 도구"와 "오래 쓸수록 빨라지는 도구"가 늘 같지 않다는 점이에요. nano는 배우기 쉽지만 빠르기엔 한계가 있고, vim은 배우기 어렵지만 천장이 높죠. 둘 다 맞는 자기 쓸모가 있어요. 다만 "어렵다 = 나쁘다"로 단정하면, 익혔을 때의 큰 보상을 놓치게 됩니다.

여러분이 앞으로 만날 도구들 중에도 이런 짝이 많아요. 단축키·정규식·셸 자체도 그렇고요. 처음 어렵다고 피하기보다, "이건 익히면 평생 빨라지는 종류인가"를 한 번 따져보는 눈을 가지면 좋겠어요.

💡 핵심을 한마디로

"vim의 불친절함은 빠른 편집을 위한 설계의 대가다. 처음 쉬운 도구와 오래 쓸수록 빨라지는 도구는 다르며, '어렵다'는 이유만으로 천장 높은 도구를 버리면 손해다."

🤔 [생각해볼 주제 2] "한 번 고칠 일"과 "반복될 일"의 경계

문제 상황 요약

자동(sed/awk)과 대화형(vim/nano)을 나눠봤지만, 현업에선 "이게 한 번뿐인 일인지, 반복될 일인지"가 애매할 때가 많다. 지금은 파일 하나만 고치면 되지만, 다음 주에 또 같은 수정을 하게 될 수도 있다. 어느 시점에 자동화로 넘어가는 게 맞을까.

튜터의 가이드 및 해설

판단의 출발점은 "이 일이 몇 번 반복될 것 같은가"예요. 딱 한 번이면 vim으로 직접 고치는 게 빠르고, 자동화 스크립트를 짜는 시간이 오히려 낭비죠. 그런데 같은 일이 두 번, 세 번 돌아오기 시작하면 얘기가 달라져요. 매번 손으로 하면 그때마다 실수할 위험도 같이 쌓이거든요.

현업에 "세 번째엔 자동화하라"는 경험칙이 있어요. 한 번은 직접, 두 번째도 직접(혹시 몰라서), 세 번째 같은 일이 오면 그땐 sed 스크립트로 만들어 둔다는 거죠. 한 번뿐인 일을 굳이 자동화하느라 시간을 더 쓰는 것도, 반복될 일을 매번 손으로 하느라 실수를 쌓는 것도 둘 다 손해라서, 그 사이의 균형점을 잡는 감각이에요.

그래서 도구를 고르는 건 "지금 뭐가 편한가"만이 아니라 "앞으로 이 일이 어떻게 될까"를 내다보는 일이기도 해요. 당장은 vim이 빨라도, 반복이 보이면 한 번 멈춰 "이거 스크립트로 둘까?"를 떠올리는 습관, 그게 일을 줄여줍니다.

💡 핵심을 한마디로

"한 번뿐이면 직접(vim), 반복되면 자동(sed). 같은 일이 세 번째 돌아오면 자동화를 떠올려라 — 도구 선택은 지금의 편함이 아니라 앞으로의 반복을 내다보는 일이다."

🤔 [생각해볼 주제 3] 왜 "탈출법부터" 배웠을까

문제 상황 요약

오늘은 vim을 여는 법이 아니라 빠져나오는 법(:q!)부터 배웠다. 편집에선 u(되돌리기)가 가장 든든했고, 지난 시간들에도 rmls 확인, sed -i.bak 백업 습관을 강조했다. 이 "안전망부터" 태도는 어떤 의미일까.

튜터의 가이드 및 해설

:q!, u, -i.bak, rmls — 따로 보면 제각각이지만, 한데 모으면 하나의 태도예요. 새 도구나 위험한 작업을 만났을 때 "어떻게 하지"보다 "잘못되면 어떻게 되돌리지, 어떻게 빠져나오지"를 먼저 확보하는 거죠.

얼핏 소심해 보이지만, 사실은 정반대예요. 되돌릴 수 있다는 확신이 있으면 사람은 오히려 더 과감해집니다. u로 언제든 되돌릴 수 있으니 vim에서 마음껏 편집을 시도하고, :q!로 빠져나올 수 있으니 낯선 설정 파일도 겁 없이 열어보죠. 안전망이 있으면 더 자유롭게 도전하게 되는 거예요. 반대로 되돌릴 방법을 모르면, 무서워서 아무것도 못 건드리거나, 모르고 건드렸다가 사고를 냅니다.

그래서 실력 있는 엔지니어일수록 새 도구를 만나면 "되돌리기·취소·빠져나오기"부터 찾아요. 겁이 많아서가 아니라, 그게 있어야 본격적으로 과감하게 쓸 수 있다는 걸 알기 때문이에요. 여러분도 앞으로 새 도구를 만나면 "이거 잘못하면 어떻게 되돌리지?"를 가장 먼저 물어보는 습관을 들이면, 더 빠르고 더 대담하게 배울 수 있어요.

💡 핵심을 한마디로

"새 도구를 만나면 '되돌리기·빠져나오기'부터 확보하라. 안전망은 사람을 소심하게 만드는 게 아니라, 오히려 더 과감하게 시도하게 만든다."

전체 목록 리눅스