NAS 구축기 2부 — Docker를 시작한 이유는 AI였다

1부에서는 DS224+를 처음 구입하고 NAS를 사용하기 시작했던 이야기를 적었다.

처음 NAS를 샀을 때만 해도 계획은 단순했다.

파일을 저장하고,

노트북과 파일을 동기화하고,

휴대폰 사진을 백업하는 것.

그 정도면 충분하다고 생각했다.

그런데 NAS를 조금 사용하다 보니 욕심이 생기기 시작했다.

“이 NAS에서 내가 필요한 프로그램도 직접 돌려볼 수 있지 않을까?”

그때부터 Docker를 찾아보기 시작했다.

그런데 사실 고백하자면,

나는 처음부터 Docker를 잘 알고 시작한 사람이 아니었다.

오히려 그 반대였다.

Docker를 시작할 수 있었던 가장 큰 이유는 AI였다.

nas docker

예전 같았으면 Docker를 쉽게 시작하지 못했을 것 같다

몇 년 전만 생각해보면 새로운 기술을 하나 공부한다는 것은 꽤 큰 일이었다.

Docker를 공부하려면 책을 찾아보고,

블로그 글을 검색하고,

구글에서 비슷한 사례를 찾아보고,

영문 문서도 읽어보고,

다른 사람이 올려놓은 설정 파일을 하나씩 비교해봐야 했다.

그리고 겨우 따라 했는데 오류가 발생하면 또 처음부터 검색해야 했다.

특히 Docker처럼 처음 보는 용어가 많은 기술은 더 그랬다.

이미지가 무엇인지,

컨테이너는 무엇인지,

볼륨은 왜 필요한지,

네트워크는 어떻게 연결하는지.

하나를 이해하려면 또 다른 개념을 알아야 했다.

그래서 예전의 나라면 아마

“Docker는 너무 어려운데?”

하고 중간에 포기했을지도 모른다.


그런데 AI가 있으니 일단 만들어볼 수 있었다

지금은 상황이 많이 달라졌다.

Docker를 잘 몰라도 일단 내가 하고 싶은 것을 설명할 수 있었다.

예를 들어

“NAS에서 WordPress를 돌리고 싶은데 어떻게 해야 하지?”

라고 물어보면,

필요한 구성부터 하나씩 설명을 받을 수 있었다.

그대로 따라 하다가 오류가 나오면

오류 메시지를 다시 보여주면 됐다.

그러면 왜 문제가 생겼는지 다시 설명을 받고,

설정을 수정하고,

다시 실행해보고,

또 문제가 생기면 다시 물어봤다.

예전에는

검색 → 읽기 → 이해 → 적용 → 오류 → 다시 검색

이었다면,

지금은

질문 → 실행 → 오류 → AI에게 확인 → 수정 → 다시 실행

이라는 방식으로 바뀌었다.

이 차이가 생각보다 굉장히 컸다.


그래서 Docker를 ‘공부한 다음’ 시작한 것이 아니었다

이게 내가 Docker를 시작하면서 가장 크게 느낀 부분이다.

예전에는 보통

  1. 기술을 공부한다.
  2. 이해한다.
  3. 직접 사용해본다.

순서였다.

그런데 AI를 활용하면서는 순서가 조금 달라졌다.

일단 해본다
   ↓
모르는 부분이 나온다
   ↓
AI에게 질문한다
   ↓
설명을 듣는다
   ↓
다시 해본다
   ↓
문제가 생긴다
   ↓
다시 해결한다

그러다 보니 사용하면서 배우는 방식이 가능해졌다.

Docker를 처음부터 완벽하게 이해한 상태에서 시작한 것이 아니다.

필요한 서비스를 하나 만들면서 Docker를 배웠고,

그 서비스를 운영하면서 또 새로운 것을 배웠다.


첫 번째 목표는 WordPress였다

Docker를 시작하면서 가장 먼저 해보고 싶었던 것은 WordPress였다.

내가 직접 관리하는 웹사이트를 NAS에서 운영해보고 싶었다.

그래서 AI에게 내가 원하는 조건을 설명하고 하나씩 만들어봤다.

WordPress 컨테이너가 필요했고,

데이터베이스도 필요했다.

그리고 데이터가 컨테이너에 묶이지 않도록 저장공간도 따로 연결해야 했다.

처음에는 이것들이 왜 필요한지 잘 몰랐다.

하지만 직접 구성하면서 하나씩 이해하게 됐다.

NAS
 │
 └─ Docker
     │
     ├─ WordPress
     │
     └─ Database

처음에는 그냥 “WordPress를 실행한다”라고 생각했는데,

실제로는 여러 구성요소가 같이 움직이고 있었다.


오류가 나오면 오히려 공부가 됐다

Docker를 사용하면서 재미있었던 것은 오류가 발생했을 때였다.

물론 오류가 발생하는 순간에는 재미있지 않았다.

컨테이너가 실행되지 않거나,

웹사이트가 접속되지 않거나,

데이터베이스 연결이 되지 않으면 당황했다.

그런데 예전 같았으면 오류 메시지를 그대로 검색해서 비슷한 사례를 찾았을 것이다.

지금은 오류 화면이나 로그를 그대로 AI에게 보여주면 됐다.

그러면

“이 오류는 이런 이유로 발생했을 가능성이 높다.”

라고 설명해주고,

현재 설정에서 어떤 부분을 확인해야 하는지도 알려줬다.

나는 그 내용을 보고 하나씩 확인했다.

이 과정을 반복하다 보니 자연스럽게 Docker의 구조를 이해하게 됐다.


컨테이너를 실행하는 것보다 구조를 이해하는 것이 중요했다

처음에는 Docker 컨테이너 하나를 실행하는 것 자체가 목표였다.

그런데 서비스를 하나씩 추가하면서 생각이 바뀌었다.

컨테이너가 어떻게 실행되는지,

데이터는 어디에 저장되는지,

다른 컨테이너와 어떻게 연결되는지,

외부에서 접속할 때 어떤 구조를 거치는지.

이런 것들이 연결되기 시작했다.

예를 들어 웹서비스 하나를 실행하면서도

인터넷
   ↓
NAS
   ↓
Docker
   ↓
Web Service
   ↓
Database

처럼 여러 요소가 연결되어 있다는 것을 알게 됐다.

처음에는 각각 별개의 개념이었다.

그런데 직접 만들어보니 하나의 구조로 보이기 시작했다.


포트도 처음에는 그냥 숫자일 뿐이었다

Docker를 사용하다 보면 포트라는 숫자를 계속 만나게 된다.

처음에는 단순히

“여기에 숫자를 입력하면 되는구나.”

정도로 생각했다.

예를 들어 설명할 때는

WordPress → 18080
WordPress2 → 18081
Vaultwarden → 18888
Jellyfin → 18096

처럼 임의의 숫자를 사용해도 된다.

처음에는 이 숫자가 왜 필요한지도 잘 몰랐다.

하지만 서비스를 하나씩 추가하면서

하나의 NAS 안에서 여러 서비스를 구분해 연결하기 위해 포트를 사용한다

는 개념을 자연스럽게 이해하게 됐다.

처음부터 책에서 개념을 외운 것이 아니라,

직접 서비스를 만들면서 필요해서 알게 된 것이다.


WordPress를 하나 만들고 나니 또 하나 만들어보고 싶었다

사람이 참 이상하다.

하나가 되면 하나 더 해보고 싶어진다.

WordPress 하나를 정상적으로 실행하고 나니

“그럼 WordPress를 하나 더 만들어도 되나?”

라는 생각이 들었다.

결국 두 번째 WordPress도 만들었다.

이번에는 첫 번째 WordPress와 서로 영향을 주지 않도록 별도로 구성했다.

이 과정에서

“서비스를 분리한다.”

는 개념을 조금 더 이해하게 됐다.

나중에는 두 개의 WordPress가 서로 다른 도메인으로 연결되도록 구성했고,

각각 별도의 서비스처럼 운영하게 됐다.


그러면서 NAS 안에 서비스가 하나씩 늘어났다

WordPress에서 끝나지 않았다.

비밀번호 관리가 필요해서 Vaultwarden을 구성했고,

영상 감상을 위해 Jellyfin도 추가했다.

DNS 관리를 위해 AdGuard Home도 사용했고,

컨테이너 상태를 보기 위해 Portainer를 사용했다.

서비스 상태를 확인하려고 Uptime Kuma도 추가했다.

나중에는 컨테이너 업데이트를 위해 Watchtower도 사용하게 됐다.

그러고 나서 NAS를 다시 바라보니 처음과 완전히 달라져 있었다.

처음에는

NAS = 파일 저장장치

였는데,

어느 순간

NAS
 │
 └─ Docker
      ├─ WordPress
      ├─ WordPress2
      ├─ Vaultwarden
      ├─ Jellyfin
      ├─ AdGuard Home
      ├─ Portainer
      ├─ Uptime Kuma
      └─ Watchtower

가 되어 있었다.

NAS 한 대 안에 내가 필요한 작은 서버들이 하나씩 들어오기 시작한 것이다.


서비스가 늘어나니 관리하는 방법도 필요했다

처음에는 컨테이너를 몇 개 실행하는 정도였기 때문에 크게 어렵지 않았다.

하지만 서비스가 계속 늘어나니까 관리가 필요해졌다.

어떤 컨테이너가 어떤 역할을 하는지,

데이터는 어디에 있는지,

어떤 설정으로 실행되는지,

문제가 생겼을 때 어디부터 봐야 하는지를 알아야 했다.

그래서 Docker Compose도 사용하게 됐다.

서비스의 설정을 파일로 정리해두니 나중에 다시 확인하기도 편했고,

구성을 수정하기도 쉬웠다.

이 역시 Docker를 먼저 완벽하게 공부한 뒤 사용한 것이 아니었다.

필요해지니까 그때그때 배우게 됐다.


자동화도 AI와 함께 하나씩 만들어갔다

서비스가 많아지자 업데이트도 문제였다.

컨테이너가 하나둘이면 직접 업데이트할 수 있지만,

계속 늘어나면 매번 확인하는 것도 일이었다.

그래서 Watchtower를 사용해봤다.

처음에는 자동으로 업데이트되니 편했다.

그런데 자동화하다 보니 또 문제가 생겼다.

모든 컨테이너를 똑같이 자동으로 관리하면 안 되는 경우가 있었다.

특히 데이터베이스처럼 다른 서비스와 연결된 컨테이너는 더 신경 써야 했다.

그래서 특정 컨테이너를 Watchtower의 자동 업데이트 대상에서 제외하는 방법도 찾아 적용했다.

이 과정 역시

문제가 발생하면 AI에게 물어보고, 이해한 뒤 직접 적용하는 방식

으로 진행했다.


AI를 사용하면서 가장 많이 바뀐 것은 ‘겁’이었다

사실 기술을 몰라서 못 하는 경우도 많지만,

해보고 싶은데 잘못 건드릴까 봐 못 하는 경우도 많다.

Docker도 처음에는 그랬다.

무언가를 잘못 입력하면 NAS 전체가 망가지는 것은 아닐까 걱정됐다.

그런데 AI에게

“이 설정은 무엇을 의미하는지”,

“이걸 변경하면 어떤 영향이 있는지”,

“지금 상태에서 어떻게 수정해야 하는지”

하나씩 물어볼 수 있으니 조금씩 자신감이 생겼다.

물론 AI가 알려준다고 무조건 아무 설정이나 적용한 것은 아니다.

실제 NAS에서 실행하기 전에 현재 구조를 확인하고,

오류가 생기면 다시 상태를 확인하면서 하나씩 바꿨다.

그렇게 하다 보니 어느 순간부터 새로운 서비스를 추가하는 것이 두렵지 않게 됐다.


예전에는 검색이 시작이었다면 지금은 대화가 시작이었다

이 차이가 이번 NAS 구축에서 가장 인상 깊었던 부분이다.

예전에는 새로운 프로그램을 설치하려고 하면 검색부터 했다.

“Synology Docker WordPress 설치”

“MariaDB 설정”

“Reverse Proxy 설정”

같은 검색어를 넣고,

여러 글을 읽고,

서로 다른 방법을 비교하고,

내 환경에 맞게 다시 적용해야 했다.

지금은 먼저 내 환경을 설명한다.

“나는 Synology DS224+를 사용하고 있고,

현재 이런 컨테이너가 실행되고 있고,

이런 서비스를 만들고 싶은데,

지금 이 오류가 나온다.”

그러면 그 상황에 맞는 해결 방법을 바로 질문할 수 있다.

나에게는 이것이 상당히 큰 변화였다.


그래서 Docker는 ‘공부하고 시작하는 기술’이 아니라 ‘만들면서 배우는 기술’이 됐다

물론 Docker 자체를 제대로 공부하는 것도 중요하다.

하지만 처음부터 모든 내용을 알고 시작할 필요는 없었다.

나에게는

필요한 것을 하나 만들면서 배우는 방법

이 훨씬 잘 맞았다.

WordPress를 만들면서 컨테이너를 배웠고,

MariaDB를 연결하면서 네트워크를 배웠고,

볼륨을 사용하면서 데이터 저장 구조를 배웠고,

여러 서비스를 연결하면서 포트를 배웠다.

그리고 문제가 생길 때마다 AI에게 질문하면서 부족한 개념을 채워갔다.


NAS가 재미있어진 이유도 여기에 있었다

만약 Docker를 책으로만 공부했다면 어땠을까?

아마 개념은 이해했을지도 모른다.

하지만 지금처럼 NAS 안에 실제로 여러 서비스를 만들어놓고 사용하면서 배우지는 못했을 것 같다.

내가 만든 WordPress가 실제로 인터넷에서 열리고,

내가 만든 Vaultwarden에 접속하고,

Jellyfin에서 영상을 보고,

AdGuard Home이 실제 네트워크의 DNS 역할을 하고,

Uptime Kuma에서 서비스 상태를 확인하는 것을 직접 경험했다.

그렇다 보니 공부가 아니라 내가 필요한 환경을 직접 만들어가는 느낌이 들었다.


결국 AI가 NAS 구축의 진입장벽을 낮춰줬다

내가 Docker를 처음부터 잘 알아서 시작한 것은 아니다.

오히려 Docker를 잘 몰랐기 때문에 AI의 도움을 많이 받았다.

모르는 개념이 나오면 바로 물어보고,

설정이 이해되지 않으면 설명을 다시 듣고,

오류가 나오면 로그를 보여주고,

수정한 뒤 다시 실행했다.

이 과정을 반복하면서

어느 순간부터 Docker 자체가 조금씩 익숙해졌다.

예전이었다면 책 몇 권을 읽고도 시작하지 못했을 일을,

지금은 일단 만들어보고 문제가 생기면 해결하면서 배울 수 있게 된 것이다.


지금 생각해보면 Docker를 시작한 것은 작은 결정이었다

처음에는 단순히

“WordPress 하나 돌려볼까?”

라는 생각에서 시작했다.

그런데 그 작은 결정 때문에

Docker를 알게 됐고,

컨테이너를 알게 됐고,

네트워크를 알게 됐고,

볼륨을 알게 됐고,

여러 서비스를 직접 운영하게 됐다.

그리고 NAS는 단순한 저장장치에서

내가 직접 관리하는 작은 서버

로 변해갔다.


다음에는 NAS를 인터넷에 연결해야 했다

Docker로 서비스를 만드는 것까지는 생각보다 재미있었다.

문제는 그다음이었다.

집 안에서는 NAS에 쉽게 접속할 수 있었지만,

밖에서는 내가 만든 WordPress를 볼 수 없었다.

그렇다면 외부에서 NAS 안의 서비스를 어떻게 연결해야 할까?

가장 먼저 찾게 된 방법은 공유기의 포트포워딩이었다.

그리고 그다음에는 Reverse Proxy를 사용하게 됐다.

당시에는 이것이 최종 구성인 줄 알았다.

하지만 나중에 Cloudflare Tunnel을 알게 되면서 NAS의 네트워크 구조를 다시 바꾸게 된다.

다음 글에서는 바로 그 이야기,

“NAS를 인터넷에 연결하면서 처음 사용했던 포트포워딩과 Reverse Proxy”

에 대해 적어보려고 한다.

처음에는 단순히 밖에서도 내 사이트에 접속하고 싶었을 뿐이었다.

그런데 이때부터 NAS가 진짜 서버처럼 느껴지기 시작했다.