DigitalOcean(디지털오션) 사용법: 서버 만들고 삭제하는 방법
DigitalOcean은 서버 호스팅을 제공하는 Virtual Private Server(VPS) 서비스의 하나입니다.
이 서비스를 사용하면 손쉽게 서버를 실행할 수 있으며, 가장 저렴한 서버의 경우 월 $5 정도 비용으로 사용할 수 있습니다. 또한 클라우드 서비스로 시간 단위로 요금이 계산 된다는 장점이 있습니다. DigitalOcean은 계속해서 서비스를 확장하고 있으며 다양한 서버 타입과 서비스들을 제공하고 있으니 더 자세한 내용은 다음 페이지를 참고해주세요.

DigitalOcean은 공식 CLI 도구 doctl을 사용해서 서버를 생성하고 삭제하는 것도 가능합니다. 이 글에서는 doctl을 설치하고 서버를 생성 및 삭제하는 방법을 소개합니다.
주의: DigitalOcean은 유료 서비스이므로 서버(droplet)을 생성하면 비용이 발생할 수 있습니다. 불필요한 비용이 발생하지 않도록 사용하지 않는 서버는 반드시 종료해주세요.
DigitalOcean CLI 도구 doctl 설치하는 방법
먼저 운영체제 별로 doctl 설치하는 방법을 소개합니다.
macOS에서 doctl 명령어 설치하는 방법
macOS에서는 Homebrew를 사용해 손쉽게 doctl을 설치할 수 있습니다.
$ brew install doctl
doctl version
명령어로 설치가 잘 되었는지 확인해봅니다.
$ doctl version
doctl version 1.61.0-release
Git commit hash: c46d9619
Linux에서 doctl 명령어 설치하는 방법
Ubuntu에서는 snap
패키지 매니저로 doctl을 설치할 수 있습니다.
$ sudo snap install doctl
그 외의 리눅스에서는 릴리스 페이지에서 바이너리를 다운로드 받아 doctl을 설치할 수 있습니다. 릴리스 페이지에서 doctl-x.xx.0-linux-amd64.tar.gz
형식의 파일을 다운로드 받아 압축을 풀고 /usr/local/bin
디렉터리에 복사해줍니다.
$ cd /tmp
$ wget https://github.com/digitalocean/doctl/releases/download/v1.61.0/doctl-1.61.0-linux-amd64.tar.gz
$ tar xf ~/doctl-1.61.0-linux-amd64.tar.gz
$ sudo mv ~/doctl /usr/local/bin
doctl version
명령어로 설치가 잘 되었는지 확인해봅니다.
$ doctl version
doctl version 1.61.0-release
Git commit hash: c46d9619
Windows 10에서 doctl 명령어 설치하는 방법
윈도우에서는 릴리스 페이지의 바이너리를 다운로드 받아 설치합니다. 파워셸에서 다음 내용을 실행해 압축 파일을 다운로드 받고, 압축을 풀어줍니다.
$ Invoke-WebRequest https://github.com/digitalocean/doctl/releases/download/v1.61.0/doctl-1.61.0-windows-amd64.zip -OutFile ~\doctl-1.61.0-windows-amd64.zip
$ Expand-Archive -Path ~\doctl-1.61.0-windows-amd64.zip
파워셸을 관리자 모드로 실행해 다음 내용을 실행합니다.
$ New-Item -ItemType Directory $env:ProgramFiles\doctl\
$ Move-Item -Path ~\doctl-1.60.0-windows-amd64\doctl.exe -Destination $env:ProgramFiles\doctl\
$ [Environment]::SetEnvironmentVariable(
"Path",
[Environment]::GetEnvironmentVariable("Path",
[EnvironmentVariableTarget]::Machine) + ";$env:ProgramFiles\doctl\",
[EnvironmentVariableTarget]::Machine)
$ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
doctl이 잘 설치되었는지 확인해봅니다.
$ doctl version
doctl version 1.61.0-release
Git commit hash: c46d961
doctl 사용을 위한 API 토큰 만들기
doctl을 사용하기 위해서는 먼저 DigitalOcean 사이트에서 API Token을 생성해야합니다. 먼저 DigitalOcean 사이트에 접속합니다.

왼쪽 사이트 바의 스크롤을 내려보면 API 메뉴를 찾을 수 있습니다. 이를 클릭하거나 아래 주소로 직접 이동합니다.

Generate New Token 버튼을 클릭하고, 토큰 이름을 입력합니다. 서버(Droplet)를 생성할 것이므로, Read와 추가적으로 Write 권한 모두 체크해줍니다. Generate Token 버튼을 클릭합니다.

토큰이 생성되었습니다. 토큰은 생성 시점에만 확인할 수 있으므로 안전한 곳에 저장해둡니다. 토큰을 클릭하면 복사됩니다.
이제 이 토큰을 doctl 명령어에 등록해야합니다.
doctl에 토큰 셋업하는 방법
doctl auth init
명령어로 토큰을 셋업할 수 있습니다. context로 여러 계정을 사용할 수 있습니다. context는 로컬 환경에서만 사용하는 이름이므로 적절한 이름을 붙여 토큰 등록을 진행합니다.
$ doctl auth init --context lainyzine
Please authenticate doctl for use with your DigitalOcean account. You can generate a token in the control panel at https://cloud.digitalocean.com/account/api/tokens
Enter your access token:
Validating token... OK
doctl auth list
해보면 default 컨텍스트를 사용중입니다.
$ doctl auth list
default (current)
lainyzine
doctl auth switch
명령어로 토큰을 등록한 lainyzine 컨텍스트로 변경해줍니다.
$ doctl auth switch --context lainyzine
Now using context [lainyzine] by default
$ doctl auth list
default
lainyzine (current)
이제 lainyzine 컨텍스트가 사용중입니다.
doctl로 DigitalOcean 서버(droplet) 생성하는 방법
DigitalOcean에서는 서버를 droplet이라고 부릅니다. droplet을 생성하기에 앞서 서버에서 사용할 SSH 키를 등록해야합니다. 등록에 앞서 이미 등록되어있는 키가 있는지 확인해봅니다.
$ doctl compute ssh-key list
ID Name FingerPrint
등록되어있는 키가 있고, 로컬에 개인키를 가지고 있다면 그 키를 사용해도 무방합니다. 등록되어있지 않거나 키를 가지고 있지 않다면 키를 등록해주어야합니다. 로컬에 이미 ~/.ssh/id_ed25519
키를 가지고 있고, 이 키를 DigitalOcean 서버에 접속하기 위해서 사용하려면 다음 명령어를 실행해줍니다.
$ doctl compute ssh-key import lainyzine --public-key-file ~/.ssh/id_ed25519.pub
ID Name FingerPrint
30557310 lainyzine a9:00:61:12:68:5c:2e:5d:c5:53:47:c5:77:f0:b6:8d
키가 정상적으로 등록되면, 키 목록과 FingerPrint가 출력됩니다. 서버를 생성할 때 이 FingerPrint를 사용하니 복사해주세요.
먼저 서버를 생성하는 명령어를 실행해보겠습니다.
$ doctl compute droplet create \
--region sgp1 \
--image ubuntu-21-04-x64 \
--size s-1vcpu-1gb \
--ssh-keys a9:00:61:12:68:5c:2e:5d:c5:53:47:c5:77:f0:b6:8d \
lainyzine
옵션이 많죠? 옵션에서 사용할 수 있는 값에 대해서는 뒤에서 좀 더 자세히 알아보겠습니다. 우선 ssh-keys
옵션에 앞서 등록한 SSH 키의 FingerPrint를 넣어줍니다. 마지막 lainyzine은 서버(droplet)의 이름입니다. 이렇게 실행하면 서버를 실행해볼 수 있습니다.
다음 명령어를 실행해보면 서버 목록을 확인할 수 있습니다. 처음에는 Public IPv4 값이 없을 수도 있습니다. 서버 초기화에는 시간이 조금 걸립니다. 이 값이 나올 때까지 기다립니다.
$ doctl compute droplet list
ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image VPC UUID Status Tags Features Volumes
250231551 lainyzine - 10.104.0.2 1024 1 25 sgp1 Ubuntu 21.04 x64 85e7a708-8ce7-43cf-abb4-62a3206fe482 new private_networking
웹사이트에서도 서버가 생성된 것을 확인할 수 있습니다.

서버 초기화를 기다리는 동안 서버 실행 옵션에 대해서 한 번 알아보겠습니다.
서버 실행 옵션에 대해서 알아보기: region, image, size
서버를 생성하기 위해 앞서 실행한 명령어를 다시 한 번 살펴보겠습니다.
$ doctl compute droplet create \
--region sgp1 \
--image ubuntu-21-04-x64 \
--size s-1vcpu-1gb \
--ssh-keys a9:00:61:12:68:5c:2e:5d:c5:53:47:c5:77:f0:b6:8d \
lainyzine
DigitalOcean 서버(droplet)을 생성할 때 지정할 수 있는 모든 옵션에 대해서는 doctl compute droplet create --help
명령어로 확인할 수 있습니다. 그 중에서 필수적으로 지정해야하는 옵션이 region
, image
, size
입니다.
먼저 region은 서버가 실행되는 위치를 지정합니다. 현재 DigitalOcean에서는 7개 리전에서 서버를 생성할 수 있습니다. 사용 가능한 값은 doctl compute region list
명령어를 실행해 확인할 수 있습니다. 서버를 생성할 때 사용한 값은 sgp1
로 싱가폴 1번 리전을 의미하며, 뉴욕 1번 리전을 사용하고 싶다면 nyc1
을 지정해줍니다.
$ doctl compute region list
Slug Name Available
nyc1 New York 1 true
sfo1 San Francisco 1 false
nyc2 New York 2 false
ams2 Amsterdam 2 false
sgp1 Singapore 1 true
lon1 London 1 true
nyc3 New York 3 true
ams3 Amsterdam 3 true
fra1 Frankfurt 1 true
tor1 Toronto 1 true
sfo2 San Francisco 2 true
blr1 Bangalore 1 true
sfo3 San Francisco 3 true
다음으로 size에는 서버의 크기를 지정합니다. s-1vcpu-1gb
은 1 vpu, 1GB 메모리를 가진 가상 서버로 디지털 오션에서 가장 저렴한 서버입니다. doctl compute size list
명령어를 실행해보면 사용가능한 모든 서버 사이즈 옵션을 확인할 수 있습니다. 다른 서버 사이즈를 사용하고 싶다면 해당 서버의 slug를 size
값의 옵션으로 지정해주면 됩니다.
$ doctl compute size list
Slug Memory VCPUs Disk Price Monthly Price Hourly
s-1vcpu-1gb 1024 1 25 5.00 0.007440
s-1vcpu-1gb-amd 1024 1 25 6.00 0.008930
s-1vcpu-1gb-intel 1024 1 25 6.00 0.008930
s-1vcpu-2gb 2048 1 50 10.00 0.014880
s-1vcpu-2gb-amd 2048 1 50 12.00 0.017860
s-1vcpu-2gb-intel 2048 1 50 12.00 0.017860
...
마지막으로 서버 실행에 사용할 이미지를 지정해야합니다. 별도로 저장해둔 이미지가 없다면 --pubilc
옵션을 붙여서 DigitalOcean에서 제공하는 이미지 목록을 확인할 수 있습니다. 기본 리눅스 OS는 물론 Wordpress, Ghost 등 애플리케이션이 설치된 이미지도 제공하고 있습니다.
$ doctl compute image list --public
ID Name Type Distribution Slug Public Min Disk
69452245 11.4 zfs x64 snapshot FreeBSD freebsd-11-x64-zfs true 15
69500386 11.4 ufs x64 snapshot FreeBSD freebsd-11-x64-ufs true 15
...
이미지가 많기 때문에 grep
을 사용해 이미지를 검색하는 것을 추천합니다. 예를 들어 ubuntu
가 들어간 이미지를 검색하려면 다음 명령어를 실행합니다. 이때 대소문자를 구분하지 않으려면 grep
에 -i
옵션을 사용합니다.
$ doctl compute image list --public | grep ubuntu
84780478 20.04 (LTS) x64 snapshot Ubuntu ubuntu-20-04-x64 true 15
85779928 18.04 (LTS) x64 snapshot Ubuntu ubuntu-18-04-x64 true 15
85781040 21.04 x64 snapshot Ubuntu ubuntu-21-04-x64 true 15
85785636 20.10 x64 snapshot Ubuntu ubuntu-20-10-x64 true 15
예를 들어 토론토 1번 리전에 우분투에 워드프레스가 설치된 이미지를 1 vcpu, 2GB 메모리 서버로 실행하고 싶다면 다음과 같이 실행합니다.
$ doctl compute droplet create \
--region tor1 \
--image wordpress-20-04 \
--size s-1vcpu-2gb-intel \
--ssh-keys <SSH_KEY_FINGERPRINT> \
<DROPLET_NAME>
Ubuntu 서버에 접속하는 방법
doctl compute droplet list
명령어로 앞서 실행한 서버의 상태를 확인해봅니다.
$ doctl compute droplet list
ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image VPC UUID Status Tags Features Volumes
250231551 lainyzine 178.128.113.62 10.104.0.2 1024 1 25 sgp1 Ubuntu 21.04 x64 85e7a708-8ce7-43cf-abb4-62a3206fe482 new private_networking
서버는 ssh
명령어로 접속합니다. 처음 접속하려고 하면 정말 접속할 건지 물어보는데 yes를 입력합니다.
$ ssh root@178.128.113.62
The authenticity of host '178.128.113.62 (178.128.113.62)' can't be established.
ECDSA key fingerprint is SHA256:u3cwoF6nUdVaGgAVZjKBKzpUy99g9adWTR3JceNVcXY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
...
root@lainyzine:~#
서버에 성공적으로 접속하였습니다.
서버 접속에 실패하는 경우 아래 내용을 참고해보세요.
ssh 명령을 실행해도 반응이 없다면, 아직 서버가 초기화중일 수 있습니다. 조금 더 기다렸다가 다시 접속을 시도해봅니다.
인증에 실패하는 경우 SSH 키가 제대로 등록되지 않았거나, SSH 키가 제대로 셋업되어있지 않을 수 있습니다. 이 경우는 -i
옵션을 사용해 로컬에 있는 개인키의 정확한 위치를 지정해봅니다.
$ ssh -i ~/.ssh/id_ed25519 root@128.199.91.27
서버 삭제하는 방법
사용하지 않는 서버는 꼭 삭제해주세요. 다음 명령어로 서버를 삭제할 수 있습니다. lainyzine
위치에는 서버 이름을 지정해줍니다. 서버 이름을 모른다면 doctl compute droplet list
을 실행해서 확인해줍니다.
$ doctl compute droplet delete lainyzine
서버를 삭제하고 doctl compute droplet list
를 실행해보면 서버가 없는 것을 확인할 수 있습니다.
$ doctl compute droplet list
ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image VPC UUID Status Tags Features Volumes