시간에 쫒겨서 아쉬움이 가득했던 2차 프로젝트가 끝났다.
분명 2차 팀플을 시작할 때만 해도 팀원들 모두
"JS로 구현 먼저 하고 TS로 마이그레이션 해봅시다~!"
라며.. 의욕을 불태웠는데ㅠㅠ
기획했던 기능들을 만들기 급급해서 아쉬움이 많이 남았다ㅠㅠ
그해서!!!
이번에는 꼭 TS를 써보겠다고 다짐하며 개인프로젝트를 시작했다.
나의 첫 번째 개인 프로젝트는 바로!
블로그 만들기!!!
카카오 먹통 사태를 겪으면서 티스토리가 없으면 얼마나 힘든지 경험하게 되었다.
팀플 때 막히는 건 대부분 티스토리에서 답을 얻었는데, 이제보니 부트캠프 하시면서 기록해주신 분들이 아닐까 싶다ㅎㅎ
아무튼,
내 티스토리에도 접근이 안되서 큰 충격을 받았다!!!
그리하여 나온 블로그 만들기 프로젝트의 명분!
"내 기록은 내가 직접 보유할 목적으로 블로그 만들기!"
이건 명분일 뿐이고,
진짜 목적은 명분을 핑계로 홈서버 구축해서 트래픽 많이 받아서
"서버가 뻗는다" 혹은 "서버가 죽었다"
라고 표현하는 상황을 겪어보고 대처해보기!
벌써부터 흥분이 된다ㅎㅎㅎ
프로젝트: 홈서버 블로그 만들기
- 준비물:
1) 서버로 사용할 M1 Mac mini
2) 도메인
3) 요즘은 누구나 갖고있는 인터넷 공유기와 인터넷!
- 계획:
m1 mac mini > DDclient > 공유기 > ISP > google domains(Dynamic DNS) > myDomain
위의 순서로 연결하여 홈서버를 사용하고자 함.
(m1 mac mini와 domain은 이미 구입하여 DDclient 세팅만 하면 되는 상태)
- 현실 === 삽질:
1) 삽질 1: debug 방법이 없어서 해결못한 사항
1. DDclient.conf 파일 경로
Q. m1 mac에서는 /opt/homebrew/etc/ddclient.conf' 이 경로에서만 config 파일을 수정하는 것이 맞는지 모르겠습니다.
DDclient 설치시 아래와 같이 안내되었습니다.
For ddclient to work, you will need to customise the configuration
file at /opt/homebrew/etc/ddclient.conf.
그래서 '/opt/homebrew/etc/ddclient.conf' 파일에 구글에서 제공하는 폼에 설치된 DDclient의 README.md에 서 언급된 내용을 추가하여 수정하였으나 연결이 되지않습니다.
구글링하여 '/etc/ddclient/ddclient.conf' 경로에도 만들어보고,
'/usr/local/etc/ddclient/ddclient.conf' 이 경로에도 만들어보고,
'/usr/sbin/ddclient'이 경로는 csrutil disable 하고 mount -uw / 에서 오류가 발생해서 직접 하나하나 마운트 하려다 일이 커지는 것같은 싸한 기분이 들어서 롤백했습니다.
2. syntax for ddclient.conf
Q. ddclient.conf 파일을 수정할 때 문법이 맞는지 모르겠습니다.
a) 구글링 하여 다른 분들의 사례를 찾아보니 login과 password는 " ' "으로 감싸서 string 처리를 하신 분이 있는가하면 아닌분도 있습니다.
b) ddclient.conf에 주석처리된 예시의 경우 protocol과 login만 줄바꿈시 " , "를 사용합니다. 하지만 아닌 예시도 있습니다. google domains에서 제공하는 예시에는 줄바꿈시 " , "를 사용하지 않습니다. 구글링한 사례들도 다양합니다.
3. 실행 및 디버깅
Q. 정상적으로 실행되었는지 확인이 어려우며 디버깅 방법도 궁금합니다.
a) 구글링시 확인되는 실행 및 디버깅 명령어는 m1 mac용이 아니여서 단순 적용이 안되는 문제가 있습니다.
brew services start ddclient로 실행하고 'brew services list | grep ddclient'로 확인하면 결과는 아래와 같습니다.
'ddclient scheduled root ~/Library/LaunchAgents/homebrew.mxcl.ddclient.plist'
잘 실행되고 있는 것 같으나 여전히 google domains에서는 연결이 되지않은 것으로 확인 됩니다.
b) 'brew services restart ddclient -d -v'를 사용하는 경우 아래와 같은 결과가 나옵니다.
/opt/homebrew/Library/Homebrew/brew.rb (Formulary::FormulaLoader): loading /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/ddclient.rb
Stopping ddclient... (might take a while)
==> Successfully stopped ddclient (label: homebrew.mxcl.ddclient)
Warning: ddclient must be run as root to start at system startup!
/bin/launchctl enable gui/501/homebrew.mxcl.ddclient
/bin/launchctl bootstrap gui/501 /Users/ryan/Library/LaunchAgents/homebrew.mxcl.ddclient.plist
==> Successfully started ddclient (label: homebrew.mxcl.ddclient)
ddclient 가 실행되었는지만 나오고 연결 관련 로그는 확인되지않습니다.
ddclient의 README.md에서 안내하는 디버깅 명령어 'ddclient -daemon=0 -debug -verbose -noquiet'를 사용하면 연결 시도관련 로그를 볼 수 있는 것으로 보이나 brew로 설치한 제 환경에서는 명령어가 호환되지않아 어떻게 명령어를 수정해야하는지 모르겠습니다.
2) 삽질의 후기: 그래도 배운게 있다 다행이다.
- debugging에 어려움이 있어 노가다가 필요했으며, 하루종일 삽질만 함.
- google domains에 문의 했더니 연결 시도는 확인도 안하고, id/pw가 정상 발급되고 구글에서 제공한 양식은 문제가 없다는 말만하며 Apple과 DDclient에 문의하라는 답변을 받음. 캡쳐를 보내도 사진에서 확인되는 사항을 계속 물어보는 걸 보면 상담원이 ddclient에 대한 이해도가 낮은 것으로 추정.
- 하루종일 삽질하고 자기 전에 화장실 가서 고민하다가 docker ddclient 이미지를 언급한 글을 확인하고 docker의 가상환경에서는 가능할까? 라는 상상을 함
- 다음날, 도커는 공부가 필요하여 도커 없이 삽질만 하다가 서버포럼이라는 곳을 알게됨
- 지푸라기를 잡는 심정으로 서버포럼에 질문글을 올림
- 생각보다 빠르게 관리자님의 답변을 받았다. 결론은 도커를 사용하는 방법을 제안해 주셔서 도커 공부다 시급해졌다.
- 서버포럼 내 글을 보던 중 보안과 관련된 아주 유용한 글을 보았다. 도커 해결하면 적용해야겠다.
3) 해결: 역시 코치님이 옳았다.
ddclient로 DDNS 설정이 쉽지않아서 github에 가보니 다른 mac 사용자도 최신 버전에서 문제가 발생했다.
그래서 이전 버전을 설치하려 했더니 m1에는 적용하기가 많이 까다로웠다.
하지만 ddclient를 쓸 방법을 찾겠다고 docker까지 공부하고 있었다.
이런 내가 안쓰러웠는지 유튜브 라이브를 보시던 현업 개발자분께서 docker에서 너무 힘 빼지 말고 코드에 집중하라고 조언해주셨다.
알려주신분! 너무너무 감사합니다.
그 조언을 듣고 docker를 작정하고 적용하려던 내 계획을 수정하여 필요한 부분 정도만 이해하고 적용하기로 결정했다!
역시 예상대로 도커에 올리니 디버깅이 너무 쉬웠다!
문제는..
역시 안된다ㅋㅋㅋㅋㅋㅋ
이유를 모르고 안되는 거랑 이유를 알고 안되는 거랑 뭐 똑같다ㅠㅠ
내 코드가 아니라 코딩 잘하시는 어떤 대단한 분이 열심히 짜놓은 코드에서 문제가 있는 것이니까...
왜 최신 기기나 소프트웨어를 피하게 되는지 알게되었다ㅎㅎ
바로 이때, 머리에 스치는 백앤드 코치님의 한마디,
"간단한 기능은 라이브러리를 쓰지말고 직접 구현하세요!"
백앤드 코치님이 자주하시던 말인데 라이브러리를 많이 쓰다보면 논리를 모르고 쓰기 쉽고 버전 호환 문제가 발생했을 때 대처가 어렵기 때문이다.
지금 내가 버전 문제를 겪고 있으니.. 이정도면 코치님의 예언이었다...
그래서 생각을 해보니 어려운 기능은 아닌거 같았다.
api 호출만 주기적으로 하면 되는거니까ㅎ
생각을 바꿔서 다른 방법으로 접근하여 검색을 시도하니 똑똑한 분들이 명령어를 .sh 파일로 만들어 주셨다.
.sh 문법은 어딘가 익숙했다ㅎ
그리고 이거 좀만 익숙해지면 많은 일들을 자동화로 할 수 있겠다 싶어졌다.
일단 마음이 급하니 바로 실행해보니!!!
이번주 내내 삽질했던 기능이 바로 구현되었다ㅎ
허탈..
진작 이렇게 할껄..
이게 버전 신경도 안쓰고 코딩 실력도 늘고 좋은데ㅎㅎㅎ
그리고 다짐했다.
"마법같은 라이브러리 사용을 최소화 하자!"
아니면 내가 직접 만들자:)
ㄴ 이건 시간좀 걸릴듯
이제 코딩을 위한 사전 준비가 끝났으니,
내일부터는 TS를 적용한 코딩을 시작해야겠다!!!
빡코딩 가즈아!!!!!
'타입스크립트' 카테고리의 다른 글
Typescript 공부하기 13일차 (2022.10.30) (0) | 2022.10.31 |
---|---|
Typescript 공부하기 12일차 (2022.10.28) (1) | 2022.10.29 |
Typescript 공부하기 10일차 (2022.10.25) (0) | 2022.10.26 |
Typescript 공부하기 9일차 (2022.10.24) (0) | 2022.10.25 |
Typescript 공부하기 8일차 (2022.10.02) (0) | 2022.10.02 |