규도자 개발 블로그

m1 맥미니를 홈서버로 구성하면서 본문

잡설

m1 맥미니를 홈서버로 구성하면서

규도자 (gyudoza) 2022. 8. 21. 19:04

셋탑과 사이즈가 비슷해서 그 주변에 두면 잘 녹아든다.

전에 https://this-programmer.tistory.com/521 이런 글을 썼었는데 글에 써진 대로 원래 계획상으로는 월급이 나오려면 사려고 했었다. 근데 조금 생각해보니 그럴 필요까진 없었어가지고 그냥 쇠뿔도 단김에 금요일에 당근에서 물건을 찾고 사서 토요일에 집에 와서 바로 설치를 마쳤다. 내 퀀트 프로그램 서버의 여정이 여기서 마무리되길 바라는 바이다.ㅠ

 

m1 맥미니 + 본가에 설치를 하게 된 여정은 아래와 같다.

 

1. macbook에 수집과 거래프로그램을 전부 설치

-> 개인용도로 맥북을 여기저기 가지고다닐 일이 많아서 그때마다 수집이 끊기고,

무선으로 연결할 때마다 ip가 바뀌어서 포트포워딩을 항상 바꿔줘야 했다.

 

2. microserver에 수집과 거래프로그램을 모두 마이그레이션

-> 수집은 이상없으나 거래때 cpu사양이 딸려서 손해를 봤다.

 

3. microserver로 수집, macbook으로 거래

-> 2번보단 나아졌으나 1번때와 마찬가지로 개인 맥북을 가지고 다닐 일이 많았으므로

역시나 완전한 해결책은 안 됐다. 심지어 거래 api는 ip를 등록해줘야 정상적으로 거래가 돼서

맥북을 들고 외출해야하는 날이면 그냥 그날의 거래는 쉬는 셈이 됐다.

 

4. aws로 수집, 거래프로그램 마이그레이션

-> 굉장히 문제가 많았다. 예전부터 데이터를 수집할 때마다 거래 플랫폼은 트래픽이 급증하는 순간에 웹소켓을 끊고는 하는데 그걸 방지하기 위해 이러저러한 시행착오 끝에 수집프로그램은 일부러 supervisor를 통해서 프로세스를 관리하면서 인위적으로 연결을 특정 시간마다 끊고 갱신하는 형태로 만들어서 안정적인 수집 체제를 구축해놨는데 거래를 할때는 그때그때 내가 입력하는 값들을 갖고 celery가 장시간(최소 몇시간 부터 몇 달까지) 프로그램을 실행하게 되는데 이 썩을놈의 aws는 지멋대로 프로세스를 관리해서 나도 모르는 새에 프로세스가 죽어있고 했던 경우가 굉장히 많았다.

 위에도 말했다시피 수집서버는 supervisor와 함께 내가 프로그램 그 자체에 인위적으로 종료하고 연결을 갱신하는 방법을 채택해서 어차피 스스로 종료됐다 재실행되고, aws에서 프로세스를 중단시키더라도 supervisor를 통해서 다시 켜지기 때문에 몇 개월동안 관리를 해주지 않아도 아주 안정적으로 데이터들을 수집했다. 하지만 내가 특정 값을 입력해서 시장을 관찰하면서 거래하는 프로그램은 외부 연결이 끊겼을 때 갱신되지 않은 값으로 퀀트 거래가 이뤄지면 어마무시한 손실을 볼 수 있으므로 웹소켓이 꺼지면 모든 프로세스를 종료 + 내게 슬랙 메시지를 보내는 식으로 구축해놨다. 웹소켓이 꺼졌다는건 거래량이 폭증했다는 의미이고, 이런 때는 직접 지표들을 보면서 대응하는 게 좋기 때문에. 그리고 서버에 접속해서 다시 그 프로세스를 실행시키기 위해.

 근데 이상하게 aws에서 돌리고 나서는 거래 프로그램의 프로세스가 깨졌다는 슬랙메시지가 한 번도 오질 않았다. 멀쩡히 동작하는 수집서버에서 각종 지표를 보면서 분명히 거래가 될 시점인데 왜 안되지 하고 서버에 접속해보면 항상 쥐도새도 모르게 거래 프로세스가 없어져있었다. 애초에 깨질 프로세스가 없으니 내게 슬랙 메시지도 오지 않은 것이었다. 로그를 보니 멀쩡히 돌아가던 프로세스를 os레벨에서 죽이고 있더라. 그때의 그 배신감이란.

 

5. aws로 수집. macbook으로 거래.

-> 다시 3번과 비슷한 체제로 갔다.

 

6. m1 mac mini에 정착.

-> 이러한 고민들을 직장동료에게 토로한 결과 동료가 완벽한 대체제를 제시해주었다. 바로 사진속의 m1 맥미니.

 

생각해보니 서버로 쓰기에 너무 좋다. 아니 왜 이생각을 못했지 싶을 정도로 마이크로서버로 쓰기에 최적의 조건이다.

 

1. 무소음

2. 무발열

3. 압도적인 성능.

4. 저렴한 가격.

5. 콤팩트한 사이즈.

+ 본가에는 인터넷을 그렇게 열심히 쓰는 사람이 없어서 네트워크자원이 아주 넉넉하다.

 

m1 맥미니처럼 8코어 cpu면 vCPU16 + 16GB Memory이상 달린 ec2머신을 써야하는데 일반인 입장으로서 AWS Saving plan option적용 없이 온디멘드 요금으로 비슷한 사양의 머신을 고르면 한달에 300USD가 훌쩍 넘어버린다. 3달만 써도 중고 m1 맥미니의 값이 나온다. (네트워크 트래픽비용 + storage요금을 합하면 더 커진다)

 

 

 

아무튼 이렇게 정착을 했고, 전에는 자원이나 환경의 제한때문에 새로운 전략 적용이나 jupyter, redash등을 설치해서 데이터를 분석하는 등의 부가적인 활동은 어려웠는데 지금은 위 서버를 통해 좀 더 능동적인 활동이 가능할 것 같다. 수집 주기 때마다 cpu의 수십퍼센트를 점유했다가 내려갔다가 널뛰기하는 메트릭들을 보다가 모든 프로그램을 다 켜놓고 수시로 작업을 해도 3%미만의 cpu점유를 보여주는 서버를 보니 마음이 굉장히 편하다.

 

 

역시 개발고민이 있다면 동료들에게 자문을 구하는 것이 최고라는 생각이 들었다. 그리고 항상 했던 ubuntu가 아니라 맥북에 nginx, supervisor, grafana등등을 설치하고 ssh서버 구성하는 것도 처음 해보는 것이어서 재밌었고. influxDB migration하는 건 이제 너무 많이해서 더이상 안하고 싶다.

 

 

+ 보면 알겠지만 항상 모니터와의 연결이 필요한 것은 아니라서(ssh를 열어뒀으니) TV에다가 연결해놓고서 필요할 때만 TV화면을 참조하고 있고, 그마저도 TeamViewer를 켜놓고 원격으로 가능하다. TV에 연결하는 건 다름아니라 Netflix나 Desney+처럼 OTT를 볼 때 엄청난 강점이 있다. 정말 사랑하지 않을 수 없는 물건이다.

2 Comments
댓글쓰기 폼