리눅스 환경에서 개발을 하다 보면 내가 만든 소중한 코드나 방대한 데이터를 다른 곳으로 옮겨야 할 때가 반드시 옵니다. 특히 Flutter 프로젝트처럼 build 폴더 하나에 수천 개의 자잘한 파일이 들어있는 경우, 폴더째로 복사하는 것은 시간 낭비일 뿐만 아니라 네트워크 전송 중에 파일이 깨질 위험도 크죠.
오늘은 리눅스의 고전적인 압축 도구인 **tar**와 윈도우와 호환성이 좋은 **zip**을 사용하며 겪었던 저의 '이삿짐 싸기' 경험담을 공유합니다.
1. 나의 경험담: "수만 개의 파일을 언제 다 옮기지?"
WSL2 리눅스 환경에서 개발하던 프로젝트를 백업해서 클라우드에 올리려던 날이었습니다. 단순하게 윈도우 탐색기에서 폴더를 드래그해서 옮기기 시작했는데, 파일 개수가 너무 많다 보니 예상 시간이 1시간이 넘어가는 것을 보고 경악했습니다.
컴퓨터는 큰 파일 하나를 옮기는 것보다 작은 파일 수만 개를 옮기는 것을 훨씬 힘들어합니다. 이때 선배가 알려준 리눅스의 '압축' 기술은 그야말로 신세계였습니다. 수만 개의 파일을 하나의 보따리에 싸서 옮기니 전송 속도가 수십 배는 빨라졌기 때문입니다.
2. Before: 정리되지 않은 파일들의 습격
압축을 하기 전, 제 프로젝트 폴더는 그야말로 아수라장이었습니다. 수많은 소스 코드, 이미지 에셋, 그리고 빌드 파일들이 뒤섞여 관리조차 힘든 상태였죠.
실험 상황:
my_flutter_app 폴더 전체를 하나의 파일로 묶어서 백업해야 합니다.
비효율적인 상태:
- 폴더 용량: 500MB
- 파일 개수: 12,000개
- 복사 예상 시간: 20분 이상
3. Action: 리눅스의 보따리, tar와 gz
리눅스에서 가장 많이 쓰이는 방식은 **tar**입니다. 엄밀히 말하면 tar는 파일을 하나로 묶는(Archiving) 도구이고, 여기에 압축(Compression) 기능을 더한 것이 tar.gz 방식입니다.
① 하나로 묶고 압축하기 (-cvzf)
이 외우기 힘든 옵션 조합이 리눅스 압축의 핵심입니다.
- c: Create (새로 만들기)
- v: Verbose (진행 과정 보여주기)
- z: Gzip (압축하기)
- f: File (파일명 지정)
실행 코드:
# 'my_project' 폴더를 'backup.tar.gz'라는 이름으로 압축해줘!
tar -cvzf backup.tar.gz my_flutter_app/
② 압축 풀기 (-xvzf)
받은 파일을 다시 풀 때는 'c' 대신 **'x' (Extract)**를 사용합니다.
# 압축된 보따리를 풀어줘!
tar -xvzf backup.tar.gz
4. Action: 윈도우 친구를 위한 배려, zip
만약 리눅스를 모르는 친구에게 파일을 보내거나 윈도우 PC로 바로 옮겨야 한다면 **zip**이 훨씬 편합니다. 리눅스에서는 별도의 설치가 필요할 수도 있지만, 호환성 면에서는 최고입니다.
실행 코드:
# zip 설치 (필요한 경우)
sudo apt install zip unzip
# 폴더를 zip으로 압축 (-r 옵션은 하위 폴더 포함)
zip -r my_backup.zip my_flutter_app/
# zip 압축 풀기
unzip my_backup.zip
5. After: 가볍고 튼튼해진 나의 프로젝트
압축 명령어를 실행하고 난 후, 수만 개의 파일은 단 하나의 파일로 깔끔하게 정리되었습니다.
(▲ After: 500MB가 넘던 폴더가 압축 후 약 150MB로 줄어들었습니다. 무엇보다 파일이 '딱 하나'라서 이메일이나 클라우드에 올리기가 매우 수월해졌습니다.)
6. 실험 요약 및 인사이트
리눅스에서의 압축은 단순한 용량 줄이기를 넘어 **'데이터의 무결성'**을 지키는 행위입니다.
| 도구 | 추천 상황 | 명령어 핵심 옵션 |
| tar.gz | 리눅스 서버 간 전송, 백업 | tar -cvzf (압축), tar -xvzf (해제) |
| zip | 윈도우 사용자와 공유할 때 | zip -r (압축), unzip (해제) |
오늘의 인사이트:
"압축은 시간을 사는 기술이다." 수만 개의 파일을 복사하며 기다리는 시간에 tar 명령어 한 줄을 익히는 것이 여러분의 개발 인생을 훨씬 쾌적하게 만들어 줄 것입니다.
7. 마치며: 이삿짐을 쌌다면, 이제 배달할 차례!
이제 소중한 프로젝트를 하나의 보따리로 묶는 법을 완벽히 익혔습니다. 이렇게 잘 포장된 파일을 이제 어떻게 안전하게 다른 서버나 내 PC로 보낼 수 있을까요?
다음 시간에는 터미널에서 파일을 원격으로 쏘아 올리는 마법의 명령어, **scp**와 **curl**의 활용법에 대해 알아보겠습니다.
'IT' 카테고리의 다른 글
| [리눅스 기초 #11] "내 컴퓨터에선 됐는데?" : 도커(Docker)로 환경 문제 완벽하게 끝내기 (0) | 2026.01.28 |
|---|---|
| [리눅스 기초 #10] 2026년 AI 시대, 우리가 여전히 '검은 화면'에 열광해야 하는 이유 (0) | 2026.01.28 |
| [리눅스 기초 #8] "내 소스 코드 어디 갔니?" : find 명령어로 미로 속 보물 찾기 (1) | 2026.01.27 |
| [리눅스 기초 #7] 수천 줄의 로그에서 보물 찾기: 검색의 끝판왕 grep (0) | 2026.01.27 |
| [리눅스 기초 #6] 터미널에서 파일 읽기: cat으로 쏟아내고 more로 끊어보기 (0) | 2026.01.26 |