virtual machine은 이름 그대로 가상머신이다.
컴퓨터 위에서 또다른 컴퓨터를 에뮬레이션 하는것 이라고도 할수있을것같다.
온프레미스 환경에서 가상머신을 쓰는이유는 두개 이상의 운영체제를 실행시켜야 해서 일거다.
근데 클라우드 환경에선 보안을 강화하고 상호간섭을 막기위해 가상화를 시킨다.
네트워크, 하드, 램 등등.. 모든 하드웨어 자원을 가상화 할 수 있다.
오늘은 vmware를 깔아서 에뮬레이션 하는 방법의 가상머신을 설치했다.
그런데 여기서 3시간을 잡아먹어 버렸다...
이유는 우분투 서버 환경에서 한글을 입출력 하려고 했기 때문이다.
결국 안돼서 우분투 데스크탑을 추가로 설치하고 출력을 하니 한글이 바로 나와버렸다 ㅋㅋㅋㅋㅋ
리눅스는 정말 명령어가 많다.
자주 쓰는 ls, mkdir, cat, touch와 같은 명령어는 이제 눈감고도 쓸 수 있을정도로 익숙해졌다.
하지만 쉘스크립트, crontab은 자세히 공부해본적이 없었다.
이번에도 구현하며 시간에 쫓겨서 제대로 공부를 하지 못했다.
구현과 학습의 시간을 잘 조율하는 방법을 배우는게 중요할것같다.
그리고 새롭게 배운 개념이 있는데 리다이렉션이다.
명령어와 함께 >
<
를 쓰면 각각 파일에 입력하고, 파일에서 입력한다.
이 개념을 리다이렉션이라 하고 입력과 출력의 방향을 바꾸는 명령어다.
여기엔 추가로 세가지가 더 있다.
그리고 숫자 1, 2는 터미널과 터미널 화면을 뜻한다.
크롤링도 한번도 해본적이 없어서 꽤 애를 먹었다.
크롤링을 하기위한 진행순서는 아래와 같았다.
이번에 여기서 시간을 많이 쏟은 부분은 2.
디코딩 하는 부분이다.
axios로 데이터를 받아왔을 때 한글이 깨져있으니 당연히 인코딩이 다르게 돼있다는건 짐작이 됐다.
그런데 axios로 받아올 때 responseType을 arraybuffer로 설정해야 한다는걸 몰랐다.
버퍼는 데이터를 조금씩 채우고 비우고 처리하는 메모리를 말한다.
js에서 버퍼는 특정 크기 메모리에 바이너리 데이터를 저장한걸 의미한다.
여기에 개발자는 직접!!!!! 메모리 크기를 지정해 저장을 할 수 있다.
버퍼가 생긴 이유는 음성, 비디오등 큰 파일의 바이너리 데이터를 처리할 수 있도록 하기 위해서다.
js에서 버퍼의 종류는 세가지인데 array, audio, source가 있다.
여기서 arraybuffer는 배열용도로 사용되는 버퍼다.
간단하다!
iconv-lite에서 decode할 때 buffer를 사용하기 때문이다.
이것도 순서부터 말하면 아래와 같다.
1. 1시간 이내의 데이터를 고른다.
2. 중복된 링크를 처리한다.
이것역시 말로만 써두니까 간단해 보이지만 사실 간단하다.
1시간 이내의 데이터를 고르는 부분은 처음에 크롤링후 데이터를 저장할 때
파일 이름을 시간과 관련지어서 지었기에 파일이름을 수집 후 filter 메소드를 사용해 걸렀다.
중복된 링크 처리는 object 를 사용해 key값을 기반으로 같은 키값은 걸러지도록 했다.
가장 간단할거라 생각했지만 가장 말썽을 부린 녀석이다.
크론탭을 사용하는 방법은 이렇다.
* * * * * 명령어
의 형식이다.
- 첫번째 *: 분
- 두번째 *: 시간
- 세번째 *: 일
- 네번째 *: 월
- 다섯째 *: 요일
예를들어 매 시각 30분에 실행시키려면 이렇게 적는다
* 30 * * * 명령어
그런데 30분마다 실행시키고 싶으면 아래처럼 적는다
* */30 * * * 명령어
4시에 10분마다 실행시키려면?
*/10 4 * * * 명령어
그럼 4시 ~ 4시 30분까지만 실행시키려면?
0-30 4 * * * 명령어
마지막으로 조금 복잡하게 3~4일까지 5,6,7시에 20분마다 실행하려면?
*/20 5,6,7 3~4 * * 명령어
* 는 아무값이나
, 는 지정해서
- 는 범위
라고 생각하면 된다.
PATH 경로가 제대로 인식되지 않아서 문제가 됐다.
nvm을 사용하므로 node 경로가 원래와는 달랐다.
그런데 node를 실행하면 nvm이 가리키는 경로가 아니라 node가 가리키는 경로를 봐버려서 실행이 안됐다...
정말 오랜시간 방황하다가 스택오버플로우에서 정답을 찾았을 때 정말정말 사막의 오아시스를 찾은것같이 기뻣다.
결국 cron을 실행하며 path가 export되어 있지 않은게 원인이다.
그래서 node 경로를 제대로 찾지 못해서 제대로 실행을 못하고 있었다.
해결법은 정말 간단했다!
# 현재 계정의 PATH를 가져온다
# PATH: home~~~~~
$ set |egrep '^PATH'
$ crontab -e
# 열린 crontab 파일 맨 위에 위에서 얻은 PATH를 적어준다.
PATH=home~~~~~
오늘은 정말 많은 삽질과 뻘짓을 하며 시간을 다 버렸다.
그래서 제한시간 내에 해야할 일을 성공하지 못했다.
지금 생각해보면 학습 <-> 구현 사이의 밸런스를 찾지 못해서 그런것같다.
앞으로 남은 기간동안 이 사이의 황금 밸런스를 찾아 나가는 여행이 될것같다.