
저번 최종 프로젝트를 진행할 때에는 AWS 를 이용해 서버를 배포하였습니다.
하지만 AWS 가 대게 그렇듯 RDS, VPC 와 관련해 종종 과금이 책정되었습니다.
뭐만 하면 돈 내라 그래...
때문에 프로젝트를 진행하면서도 항상 노심초사하게 과금을 신경써야 했고 이는 큰 불편함으로 느껴졌습니다.
그래서 이번에는 AWS 대신 저희 집에서 테스트, 배포할 수 있는 서버를 직접 만들어보고자 합니다.
구축하고자 하는 서버의 목표는 다음과 같습니다.
- Docker, Nginx, k8s 등 다양한 소프트웨어를 적용, 실습할 수 있어야 한다.
- 구축한 서버는 Local, Remote network 어디서든 접속 가능해야 한다. (SSH, Github Action CD 등)
- 서버는 추후 프로젝트 팀원들도 사용할 수 있어야 하므로, AWS IAM 처럼 새로운 유저 생성 후, 그 유저의 권한을 손쉽게 지정할 수 있어야 한다.
- 직접적인 IP 주소 대신 Domain Name 으로 서버에 접속 가능해야 한다.
- 서버 하드웨어 상태를 손쉽게 모니터링 할 수 있어야 한다. (CPU, RAM, DISK IO 등)
우선 서버를 만들려면 그 하드웨어가 필요합니다. 저는 그 중 라즈베리 파이와 Synology NAS 를 후보군으로 골랐습니다.
사실 Synology 의 경우 30 만원 이상의 고가의 제품이며 storage server 용도의 제품입니다.
사실 대부분 DSM OS 값
그런데 집 구석을 뒤져보니 정말 오래전에 사뒀던 Synology NAS 를 발견해 후보군에 두었습니다.
이 둘의 정보를 나열해 보자면 다음과 같습니다.
Raspberry Pi | Synology NAS | |
|---|---|---|
| 제품 | Raspberry Pi 4 or 5 | DS214play |
| RAM | 4 - 8 GB | 2 GB |
| 가격 | 8 만원 내외 | 집에 있으니까 공짜 |
| 하드웨어 확장성 | 중, 확장은 가능하나 라즈베리 보드에 맞는 제품을 구매해야 함. | 중, storage 확장성은 높으나 그 외의 확장성은 매우 낮음. (단종되서 부품 구하기 어려움) |
| 소프트웨어 확장성 | 상, Raspbian OS 외에도 Ubuntu, Alpine 등의 linux 기반 OS 지원. 그래서 거의 뭐든지 가능. | 하, DS214play 는 Docker, Java 등의 소프트웨어를 지원하지 않음. Apache HTTP server, php 등 한정적으로 지원함. |
| 장점 | 높은 소프트웨어 확장성, 이전 사용한 경험 존재 | 집에 있어서 공짜, Synology 가 NAS 도메인 주소를 제공해줌. (별도 도메인 구매 필요 X + 도메인 HTTPS 인증서 자동 생성 & 갱신), RAID 설정 • User group 등 DSM OS 가 제공하는 다양한 편의 기능 존재 |
| 단점 | 8 + ɑ (HDMI 케이블, 쿨러, 도메인 주소 등) 만원의 초기 비용, 모든 서버 세팅을 직접 해야함. | 사용 경험 전무, Docker • Java 를 못 씀. |
Synology NAS 는 매력적인 장점이 많았습니다. 애초에 패키징된 제품이기 때문에 OS 에서 지원하는 기능들이 압도적이었고, 또한 각 NAS 제품 별 고유한 도메인 주소를 제공해 public 서버 구축에 매우 용이하였습니다.
하지만 이들을 압도하는 엄청난 단점이 존재했는데, 바로 소프트웨어 확장성입니다.
Synology NAS 가 사용하는 DSM OS 는 linux 커널 기반 OS 입니다. (Ubuntu 와 동일) 그래서 최근 발매된 Synology 제품은 여느 linux 기반 OS 가 그러하듯 높은 소프트웨어 확정성을 제공합니다.
Docker 사용할 수 있다는 애기...
하지만 집에서 발견한 DS214play 은 거의 10 년전 발매된 제품이고, 그 때문인지 Docker, Nginx 등 linux 에서 당연히 생각할 수 있는 소프트웨어를 사용할 수 없었습니다.
사실 Docker 만 쓸 수 있으면 다 되는건데... ㅠ
이 부분이 큰 단점으로 다가왔고 때문에 결국 Raspberry Pi 를 선택하였습니다.
당근에서 산 Raspberry Pi 4B 8GB model
Raspberry Pi 는 다양한 OS 를 지원합니다.
라즈베리 파이 기본 OS 인 Raspbian, 무료 라이선스 기반의 Ubuntu, 아주 가벼운 Alpine 등을 제공합니다.
| Raspbian | Ubuntu | Alpine linux |
|---|---|---|
![]() | ![]() | ![]() |
저는 이중 Ubuntu 를 선택했는데, 그 이유는 다음과 같습니다.
Ubuntu 사용 경험이 많다.Ubuntu 이용자가 많아 문제 발생시 빠른 해결이 가능하다. (에러 검색하면 잘 나온다)(Long Term Support) 버전이 존재해 안정적이다.Raspbian, Alpine 에 적합하지 않은 소프트웨어를 사용할 수도 있다. (k8s, Tensorflow 등)이제 직접 만들어볼 차례입니다.
먼저 미리 구매해둔 쿨링 케이스에 라즈베리 파이를 잘 조립해 줍니다.
원래 라즈베리 파이는 Micro SD 카드로만 부팅 가능했지만, 이제는 SSD 또는 USB 를 통해서도 가능합니다.
라떼는 안됐었는데 말이야,,,
마침 집에 굴러다니던 SATA SSD 가 보여 storage 로 사용하기로 했습니다.
참고로 SSD 같은 외장 디스크를 사용할 시, 기본 라즈베리 파이 전원만으로는 전력이 부족해 부팅에 실패할 수 있습니다. 옛날에 직접 격어본...
그래서 저는 유전원 USB 허브를 통해 SSD 전력을 충당했습니다.
하드웨어 세팅을 마쳤으니 이제 SSD 에 OS 이미지를 넣을 차례입니다.
우리가 직접 Boot image 를 넣어 파티션을 짤 수도 있지만, 라즈베리 파이의 경우 Raspberry Pi Imager 를 지원합니다.
Imager 를 통해 라즈베리 파이 모델별 OS 를 선택할 수 있고, 귀찮은 Boot 파티션도 알아서 진행해 줍니다.
저는 Ubuntu 중 Server 22.04.01 LTS 64-bit 을 선택해 진행하였습니다.
Ubuntu 24.04 LTS ?
참고로 현
Ubuntu중 가장 최신 LTS 는24.04.01버전입니다.그래서 설치해 보려 하였으나 아래 그림처럼 부트에 실패하는 것을 확인했습니다.
![]()
(모두 OK 되며 boot 되야 정상)찾아보니
24.04.01이미지를 라즈베리 파이의 USB port 를 통해 boot 하는 경우 위 에러가 발생하는 것을 알게 되었습니다.[1]좀 더 시간을 들이면
24.04LTS 를 사용할 수 있을 것 같았지만22.04버전도 충분히 유용하고, OS 선택에 더이상 시간을 소비하고 싶지 않아22.04LTS 로 설치하였습니다.
Raspberry Pi Imager 를 통해 라즈베리 파이 이름, root 계정 설정, ssh 를 설정할 수 있지만, 이들은 매우 간단해 설명은 생략하겠습니다.
Ubuntu 이미지를 SSD 에 넣고 라즈베리 파이에 연결, 전원까지 연결하면 아래처럼 자동으로 boot 되기 시작합니다.
저 같은 경우 OS 설치에 약 5 분 정도 걸린 것 같습니다.
OS 설치가 완료되었으니 SSH 설정을 진행할 차례입니다.
SSH 는 네트워크 프로토콜의 일종으로, 로컬 또는 원격 네트워크에 존재하는 서버 접속에 많이 사용됩니다. [2]
물론 라즈베리 파이에 직접 모니터, 키보드 연결 후 사용할 순 있지만, 저는 편하게 데스크탑에서 작업하고 싶어 SSH 를 구성하기로 했습니다.
불편하게 누가 그래요 그죠?
앞서 말했듯 SSH 자체는 local, remote 네트워크에 상관 없는 프로토콜입니다.
다만 remote 네트워크 접속은 라즈베리 파이 <--> Router <--> Public IP Address 간 Port forwarding 이 필요하므로, 일단 local 네트워크에서만 접속 가능토록 하겠습니다.
SSH 접속을 확인하기 위해선 크게 2 가지가 필요합니다.
openssh-client (접속 기기에서) & openssh-server (라즈베리파이에서)openssh-client, openssh-server 의 경우 간단히 아래 명령어로 apt 저장소에서 가져올 수 있습니다.
$ sudo apt install ssh
IP 주소의 경우 확인할 수 있는 방법이 2 가지인데, 첫째는 ifconfig 명령어를 통해서 입니다.
$ sudo ifconfig
# ifconfig 명령어가 없을시 apt 에서 다운로드
$ sudo apt install net-tools
두번째 방법은 Router 관리자 페이지에서 기기별 할당된 IP 주소를 확인하는 방법입니다.
이 경우 사용하는 공유기에 따라 확인하는 방법이 다양합니다.
저희 집의 경우 SK Telecom 공유기를 사용하고 있습니다.
관리자 페이지 접속 방법을 검색한 후, 조금 뒤적여 보니 아래처럼 라즈베리 파이에 할당된 IP 주소를 확인할 수 있었습니다.
참고로 위 IP 주소 192.168.35. ... 는 router 가 라즈베리에게 부여한 사설 IP 주소로 (Private IP Address), 로컬 네트워크가 아닌 이상 위 주소로 라즈베리 파이에 접속은 불가능합니다.
언젠가 IP 주소도 전부 공부해서 정리해야지...
하지만 우리는 일단 로컬 네트워크에서 접속하는 것이므로 큰 상관이 없습니다.
이제 SSH 접속을 위한 모든 준비물이 갖춰졌으니 직접 테스트할 차례입니다.
openssh-client 가 설치된 기기에서 아래 형식대로 명령어를 입력해 줍니다.
$ ssh [라즈베리 파이 계정 이름]@[사설 IP 주소]
EX)
$ ssh ubuntu-account-name@192.168.35.109
참고로 ssh 포트 설정은 기본 22 로, 위 명령어는 아래의 것과 동치합니다.
$ ssh -p 22 ubuntu-account-name@192.168.35.109
명령어 입력 후, 계정 비밀번호를 입력하면 아래처럼 성공적으로 연결이 완료됩니다.
지금까지 자체 홈 서버를 위해 라즈베리 파이 설정을 진행하였습니다.
다음에는 Port forwarding 을 통한 원격 네트워크 접속, User group 설정 을 진행할 것 같으며, 앞으로 공부하다 시간날 때 짬짬이 서버 구축을 진행할 것 같습니다.
긴 글 읽어주셔서 감사하고 다음 글로 뵙겠습니다.
오늘 한거
- 라즈베리 파이 기본 setup (Hardware, OS)
- Local Network SSH 접속 확인
- SK Telecom 관리자 페이지 구경
앞으로 남은거
- Docker, Nginx 등 설치
- Remote Network 접속 활성화
- User group setup
- 도메인 통해 접속 활성화
- 모니터링 추가