It's Ward

리눅스 기반 홈 서버를 구축해보았다. 본문

백엔드

리눅스 기반 홈 서버를 구축해보았다.

I'm ward 2022. 7. 13. 18:03

얼마 전까지만해도 거의 리눅스에 대해서 몰랐었다가 스프링 스터디원들과 

스프링 부트와 AWS로 혼자 구현하는 웹서비스를 5주에 거쳐 책을 완료하면서 AWS EC2, 깃허브 액션 등을 다루다 보니 리눅스 서버에 대해 궁금증이 생겼다.

 

특히 배포 부분인 9장과 10장을 진행하면서, 밤도 새고, 특히 유료화 된 CI 애플리케이션을 GitHub 액션 독학하면서 구현 - 디버깅 - 구현 - 디버깅하면서 나만의 서버를 너무나도 가지고 싶어졌다.

1. EC2가 가끔씩 렉이 걸리는게 너무 싫었다.
많은 렉은 아니였지만 정말 가끔.. 가끔 렉이 걸릴때 네트워크 문제일지도 모르겠지만, 인스턴스를 재부팅(한번하는데 10분씩 잡아먹는다) 을 몇번 하게되면 내 아까운 공부시간이 날아갔던 것이다.

2. 백엔드 개발자로서 스스로 해봐야하는 과제라고 생각했다. 
주위 현업 개발자 친구가 혼자 서버를 구축해보고, 배포를 해보면서 고민하는 것이 전체 구조를 이해하는데 도움이 된다고 하였다. 마지막 무중단 배포까지 끝낸 지금, 나는 기초에 아직까지 허덕이고 있고 여기서 멈추면 안될 것 같다.
더 시야를 넓히고 싶지만 책의 내용으로는 조금 부족했다.

3. 무엇보다 재미있을 것 같았다.
새로운 것을 도전해보고 나만의 것으로 익히는것이야 말로 진짜 재미라고 생각한다. 그래서 개발자를 하는 것이 너무도 즐겁다. 물론 겨우 기초 부분들을 하고있는 것이지만, 그렇기 때문에 별거 아니라고 생각하고 새로운 것들에 익숙해지고 더 깊이 파고들고 싶어졌다. 

4. 새로운 분야를 도전해 보고 싶었다.
곧 스프링 부트의 기초부분을 마치고, 내 자신을 점검하면서 기초를 탄탄하게 쌓아줄 프로젝트를 진행해야 한다. 프로젝트에 대해 고민을 많이 하던 중 MSA(마이크로 서비스 아키텍처)에 대해서 찾아보게 되었고, 그렇게 진행하려면 분산 서버가 있어야 했다. 물론 지금의 지식도 부족할 뿐더러 노트북 한개 서버로는 턱도없는 이야기다. 그렇지만, 작은 서비스는 가능하지 않을까? 라는 생각으로 일단 만들어 보자! 라는 생각으로 도전해 보았다.

그래서 이전에 사용하던 노트북을 리눅스 서버로 만들어 보도록 하였다.
군대 다녀와서 열심히 노가다 뛰어서 구매한 노트북아 안녕

 i7-5500U CPU @ 2.40GHz
8g RAM
256g m.2 ssd

EC2와 비교한다면 개인 서버로 사용하기엔 엄청난 성능을 뽑아 낼 수 있을 것 같다.. 저전력이긴 해도 프로세서가 i7이기 떄문에 어쩌면 작은 시스템은 분산 서비스가 가능하지않을까? 라는 희망을 아직까지는 가지고있다. 

1. 우선 구매한지 5년이 넘었기 때문에,  쿨링성능을 위해서라도 청소도 진행할 겸 히트파이프와 CPU, GPU쪽의 서멀을 재도포 해주었다. 도포하다 중간에 찍은 사진이라 덕지덕지 바른것 처럼 보이지만.. 다시 싹 밀고 재도포 하였다..

 

2. 우분투 서버를 설치하였다. (Ubuntu 20.04 LTS)
집에서 남는 USB를 하나 찾아서 부트로더를 통해 설치파일을 만들었고, 이전 노트북을 포멧하면서 서버를 구축하였다.

CentOS와 Ubuntu 22.04 , Ubuntu 20.04 이 세가지 OS중 고민을 하였는데, 전세계 리눅스 시장에서 Ubuntu 가 CentOS보다 많이 사용되고 있으며 (출처 : https://coconuts.tistory.com/175 ) Ubuntu 22.04의 경우, 아직 나온지 얼마 되지 않아, 한국에서는 20.04 LTS 버전 - 심지어 10년을 지원하기 때문에 해당 OS를 선택하였다.

노트북이 XPS 종류여서, 바이오스 환경을 건들이기 굉장히 빡빡하였다.. 한 10번정도 환경을 바꾸면서 시도하다가, 겨우 성공하였다. 설치가 다 된것 같은데 이놈의 Dell BIOS에서는 부팅할 수 있는게 없으니 컴퓨터를 끄겠다고 계속 협박했다..

 

3. 서버 최적화에 대해서 고민하였다.
사실 이부분에 대해선 작성할 포스트가 엄청 많다. 내가 리눅스를 전혀 모른 상태로 진행하였기 때문에 서버에 무엇이 필요한지는 몰랐으나, 보안! 만큼은 철저하게 진행해야한다. 속도 최적화가 있지않을까? 정도로만 생각하고 검색하였으나 단편적인 내용들이 대다수였다.
windows 기반 GUI 환경에 익숙해져 있었던 나는 책을보며 나와있는 내용들만 어느정도 이해하였지, 서버를 구축하려면 많은 노력이 필요하다는 것을 깨달았다

하나씩 실용성 있는 작업들을 진행하였는데, 그러면서 나와 같은고민을 하셨던 분들에게 많은 키워드를 얻을 수 있었다.
서버를 구축한날은 하루 밤을 꼬박 새웠다. 고민하고 설정한 부분들은 다음과 같다.

1) 리눅스 서버 인터넷 연결
2) 서버 시간 설정
3) SSH (22) 인증 키 및 원격 접속 보안 설정
4) 방화벽 설정
5) nginx 기반 웹 서버 설치
6) 노트북을 닫아도 서버 유지
7) 나만의 도메인 발급 및 DDNS 설정
8) HTTPS (443) SSL 발급, 설정 및 스프링 부트 적용 방법 확인
9) 리눅스 버퍼 캐시 관리
10) 해외 IP 차단
11) root 계정 삭제
12) 리눅스 서버 모니터링 연동

사실 리눅스를 조금만이라도 다룰 수 있는 분들이라면, 너무나도 쉽게 적용할 수 있는 것들 이지만, 해당 내용을 모두 적용하는데 굉장히 오랜 시간이 걸렸다. 
리눅스에 익숙하지도 않을 뿐더러, 뭔가 더 해야한다는 생각과 더 좋은 방법이 없을까? 라는 생각이 계속 들어서 쉽게 마무리 하지 못했던 것 같다. 위의 설정을 모두 해서 뿌듯하긴 하지만, 조금 더 손봐야할 부분들이 남아있고
실제 서버를 운영해보면서 데브옵스 부분에 대한 이해도도 함께 높힐 수 있도록 하는 것이 목표이다.

분명 생각지도 못한 오류들이 계속해서 발목을 잡겠지만, 언젠가 있을 일인데 지금 기본기를 다지자는 마인드로 하도록 하겠다. 

남아있는 목표는 
DB 설치 및 운영, 도커를 이용한 자동 배포, 무중단 배포, 보안 설정이다. 

어제 나만의 도메인을 만들고 싶어, ward.run 도메인을 구매했다. 앞으로의 프로젝트는 해당 도메인에 진행할 예정이다.

 

 

 

Comments