curl
과 wget
을 사용한 파일 다운로드
1. curl
과의 첫 만남
인터뷰에서 누군가 당신에게 터미널을 통해 인터넷에서 파일을 다운로드하라고 했을 때, 순간적으로 멍해져서 그 방법을 잊어버린 적 있니? 오늘 우리는 curl
과 wget
을 사용하는 방법을 배울 거야. 이 도구들은 네트워크 데이터를 다루는 데 아주 유용한 친구가 될 거야.
이 유틸리티들은 웹 페이지를 다운로드하거나, 파일을 다운로드하고, HTTP 요청을 보내고, API 작업을 처리하며, 심지어 자동화 스크립트를 실행할 수 있어. 그 기능, 장점, 일반적인 사용 시나리오를 알아보자.
curl
은 네트워크 프로토콜을 통해 데이터를 전송하기 위한 명령줄 도구야. curl
의 가장 큰 장점은 유연성인데, 20개 이상의 프로토콜(HTTP, HTTPS, FTP, SCP, SMTP 등)을 지원해. 개발자들에 따르면, 인터넷 작업을 위한 "스위스 군용 칼" 같은 도구야.
curl
의 기본 문법
curl [옵션] URL
간단히 말해서, curl
명령어를 입력하고 필요한 주소를 지정하면 결과를 확인할 수 있어. 어떻게 작동하는지 알아보자.
웹 페이지 다운로드
예를 들어, Google 메인 페이지를 다운로드하고 싶다고 해보자. 이렇게 하면 돼:
curl http://www.google.com
화면에 페이지의 HTML 코드가 나타나게 될 거야. 사이트의 구조를 조사하거나 관련 작업을 자동화하고 싶을 때 꽤 유용해.
내용을 파일에 저장하기
이 모든 텍스트 흐름이 방해가 된다면, 결과를 파일에 저장할 수도 있어:
curl -o google.html http://www.google.com
-o
(output) 플래그는 curl
에게 출력을 파일로 리디렉션하라고 말해. 이제 페이지의 HTML 코드는 google.html
에 저장돼 있어. 농담처럼 친구에게 파일을 주고 "인터넷 전체를 다운로드했다"고 말해봐.
파일 다운로드
인터넷에서 파일(.zip
같은)을 다운로드해야 한다고 상상해봐. curl
이 이 작업을 완벽하게 처리해:
curl -O http://example.com/file.zip
-o
와 달리 -O
플래그는 파일을 URL에서 지정된 원래 이름으로 저장해. 하나의 소스에서 여러 파일을 다운로드할 때 유용해.
HTTP 인증
가끔씩 파일이나 API 리소스에 로그인과 비밀번호로 보호되는 경우가 있어. 그럴 때는 -u
플래그와 함께 curl
을 사용하면 돼:
curl -u username:password http://example.com/private-data
특히 GitHub나 Docker Registry 같은 비공개 API를 다룰 때 유용해.
API를 통한 다운로드
curl
의 가장 멋진 기능 중 하나는 API 작업이야. 서버에 요청을 보내고 JSON 형식의 데이터를 반환한다고 가정해봐:
curl -X GET "https://api.exchangerate-api.com/v4/latest/USD"
여기서 -X
플래그는 HTTP 요청 메소드(GET, POST, DELETE 등)를 지정해. 외부 서비스와의 통합을 자동화할 때 정말 유용해.
2. wget
란?
curl
이 스위스 아미 나이프라면, wget
은 불도저야. 주된 작업은 파일 다운로드지. curl
과의 가장 큰 차이점은 wget
이 대용량 파일의 신뢰성 있는 다운로드를 위해 설계되었고, 다운로드 재개를 지원한다는 거야. 이건 특히 인터넷 연결이 불안정할 때 편리해.
wget
기본 구문
wget [옵션] URL
파일 간단히 다운로드하기
wget http://example.com/file.zip
이 명령어는 파일을 다운로드하고 현재 디렉토리에 원래 이름으로 저장할 거야. 간단하고 효율적이지.
다른 이름으로 저장
원래 파일 이름이 마음에 들지 않으면, 원하는 이름으로 저장할 수 있어:
wget -O newfile.zip http://example.com/file.zip
다운로드 재개
예를 들어, 커다란 파일을 다운로드하는 중에 연결이 끊겼을 때. 문제없어: -c
(continue) 플래그를 사용하면 돼:
wget -c http://example.com/largefile.iso
wget
은 중단된 지점부터 다운로드를 계속해. 심지어 며칠이 지나도 서버가 해당 모드를 지원한다면 작동해.
전체 사이트 다운로드
맞아, wget
을 사용하면 전체 사이트(또는 복사본)을 다운로드할 수 있어. --mirror
옵션을 사용해봐:
wget --mirror http://example.com
이 명령어는 디렉토리 구조를 유지하면서 사이트를 다운로드할 거야. 이제 오프라인 모드에서 사용할 수 있는 사이트 "미러"가 생긴 거지.
3. curl
과 wget
비교
기능 | curl | wget |
---|---|---|
다양한 프로토콜 지원 | 네 | HTTP/HTTPS 및 FTP만 |
자동 다운로드 재개 | 아니요 (스크립팅 필요) | 네 |
API 작업 | 네 | 아니요 |
파일 관리의 간편함 | 중간 | 최고 |
전체 사이트 다운로드 | 아니요 | 네 |
결론적으로, API 작업이나 특정한 작업이 필요하다면 curl
을 사용하고, 파일 다운로드가 주된 목적이라면 wget
이 더 나은 선택이에요.
4. 실용적인 적용
파일 다운로드 및 처리
wget
과 텍스트 작업 기술을 결합해보자:
wget -O data.txt http://example.com/data.txt
cat data.txt | grep "keyword" | awk '{print $2, $4}'
여기서 우리는 파일을 다운로드하고, 키워드를 기준으로 줄을 필터링하고 필요한 열을 추출했어.
API 작업
curl
을 사용해 환율을 다운로드하고 필요한 통화를 찾아보자:
curl -s "https://api.exchangerate-api.com/v4/latest/USD" | grep "EUR"
이건 자동화된 환율 변환 시스템을 구축하려고 할 때 유용해.
업데이트 자동화
매일 파일 업데이트를 다운로드해야 한다고 상상해봐. 여기 간단한 스크립트 예시가 있어:
#!/bin/bash
wget -O updates.zip http://example.com/daily-updates.zip
unzip -o updates.zip -d /path/to/updates
스크립트를 저장하고 cron
에 추가해. 이제 이 스크립트는 자동으로 실행될 거야 — 좋지 않아?
5. 일반적인 오류와 특이사항
403 오류 (금지됨):
서버가 추가적인 헤더 (예: User-Agent)를 요구할 때 발생할 수 있어. 이렇게 해결하면 돼:
curl -A "Mozilla/5.0" http://example.com
리다이렉션:
서버가 다른 URL로 리다이렉션할 경우, curl
에 -L
플래그를 추가하면 돼:
curl -L http://example.com
SSL 오류:
가끔 wget
이나 curl
이 SSL 관련 경고를 할 수 있어. 인증서 검사를 비활성화할 수 있지만 (안전한 방법은 아님):
wget --no-check-certificate https://example.com
curl -k https://example.com
이 강력한 도구들로 네트워크를 정복할 준비 완료. 이제 어떤 파일이나 API도 너에게서 벗어날 수 없어 — 다운로드하고, 처리하고, 자동화하는 시간이다!
GO TO FULL VERSION