학습 정리 - Day 02

Coding-Luizy·2023년 7월 11일
0
post-thumbnail

가상머신

vmware fusion

우분투 다운받기

64-bit ARM (ARMv8/AArch64) desktop image

VS code 설치

Download Visual Studio Code

에서 우분투 버전의 Arm64로 선택

ip 확인하기

맥북

ifconfig | grep inet
ipconfig getifaddr en0

우분투

ip addr

유저 새로 생성하기

sudo adduser luizyformac

ssh 설정하기

$ sudo -s // root 전환
$ apt-get install ssh // ssh 설치
$ service ssh start // 서버 시작
$ service ssh status // 현재 상태 확인 가능

ssh 접속하기

로컬에서

$ ssh [username]@[host ip] -p [호스트 포트 번호]

파일 권한

자리수1333
의미디렉터리 파일소유자그룹그 외 사용자

ex)
drwsrw-r--

d : 디렉터리
r : 읽기
w : 쓰기
x : 실행

8진수 모드로 파일 권한 수정하기

rwx 3개를 한자리수 8진수로 표현 가능하다
0o111 = 8 : rwx
0o110 = 7 : rw-
0o101 = 6 : r-x
.
.
.
0o000 = 0 : ---

chmod 764 file

위 명령은 file을
rw-r-xr-- 접근권한으로 설정한다는 뜻

NTP

Network Time Protocol 이란
네트워크에서 시간 동기화를 위해 사용되는 프로토콜

설치

sudo apt-get install ntp

요것은 ntp서버에 있는 시간으로 동기화해주는 과정이다.

rotate

$ apt-get install rdate # rdate설치

$ rdate -s [ntp서버url] # rdate 명령어수행

$ date # 변경된 시간 확인

curl 설치하기

CURL은 서버와 통신할 수 있는 커맨드 명령어 툴이자 웹개발에 매우 많이 사용되고 있는 무료 오픈소스이다.

sudo apt-get install -y curl

노드 설치하기

nvm(Node Version Manager)
https://github.com/nvm-sh/nvm

깃헙 가이드에 따라서 명령어들로 node 20을 설치했다.

luizyformac@luizy-virtual-machine:~$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

luizyformac@luizy-virtual-machine:~$ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

luizyformac@luizy-virtual-machine:~$ nvm install 20

luizyformac@luizy-virtual-machine:~$ nvm -v
0.39.3
luizyformac@luizy-virtual-machine:~$ node -v
v20.4.0
luizyformac@luizy-virtual-machine:~$ npm -v
9.7.2

모두 다 설치되었다.

vi편집기로 파일 만들기

vi main.js

코드 복사 붙여넣기

^c
:wq

파일 확인하기

알림보내기

curl -X POST -H 'Content-type: application/json' --data [데이터] [목적지]

Axios

Axios란?

Axios는 node.js와 브라우저를 위한 Promise 기반 HTTP 클라이언트 입니다. 그것은 동형 입니다(동일한 코드베이스로 브라우저와 node.js에서 실행할 수 있습니다). 서버 사이드에서는 네이티브 node.js의 http 모듈을 사용하고, 클라이언트(브라우저)에서는 XMLHttpRequests를 사용합니다.

기능

  • 브라우저를 위해 XMLHttpRequests 생성
  • node.js를 위해 http 요청 생성
  • Promise API를 지원
  • 요청 및 응답 인터셉트
  • 요청 및 응답 데이터 변환
  • 요청 취소
  • JSON 데이터 자동 변환
  • XSRF를 막기위한 클라이언트 사이드 지원

기사 제목을 가져오기위해 Axios로 뉴스 링크에 get요청을 보내자!

const axios = require('axios').default;
const link = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105';
const data = axios.get(link);

Axois는 Promise 객체를 활용하기때문에 실행문을 따로 작성해줘야한다.

Promise

Promise객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다.

기본 예제

let myFirstPromise = new Promise((resolve, reject) => {
  // 우리가 수행한 비동기 작업이 성공한 경우 resolve(...)를 호출하고, 실패한 경우 reject(...)를 호출합니다.
  // 이 예제에서는 setTimeout()을 사용해 비동기 코드를 흉내냅니다.
  // 실제로는 여기서 XHR이나 HTML5 API를 사용할 것입니다.
  setTimeout( function() {
    resolve("성공!")  // 와! 문제 없음!
  }, 250)
})

myFirstPromise
    .then((successMessage) => {
    // successMessage는 위에서 resolve(...) 호출에 제공한 값입니다.
    // 문자열이어야 하는 법은 없지만, 위에서 문자열을 줬으니 아마 문자열일 것입니다.
    console.log("와! " + successMessage)
    })
    .catch((error) => {
    console.log("에러!" + successMessage)
    })
    .finally((error) => {
    console.log("무조건 실행!" + successMessage)
    });
const axios = require('axios').default;
const link = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105';
const data = axios.get(link);

cheerio

cheerio

DOM 객체를 반환해주기 때문에 변수면 $으로 명명

const cheerio = require('cheerio');
const $ = cheerio.load(data);

한글깨짐 방지

decoder 사용하기

const decoder = new TextDecoder('euc-kr');
const content = decoder.decode(response.data);

쉘 스크립트

[Linux] 쉘 스크립트(Shell script) 기초

쉘 스크립트란 간단히 말하자면 Unix커맨드등을 나열해서 실행하는 것이다. 언제 어떤 조건으로 어떠한 명령을 실행시킬 것인가, 파일을 컨텐츠를 읽어 들일 것인가, 로그 파일을 작성하는 것 등을 할 수 있다.

예시

test.sh

#!/bin/sh

echo "Hello, World!"

zsh

> sehll test.sh
> Hello, World!

입력

#!/bin/sh

read NAME
echo "Hello, $NAME!"

request

request

axios처럼 http 요청을 날리는 npm모듈이지만, 2020 부터 Deprecated 예정으로 사라질 예정이라고 한다. request 를 이용한 성공적인 크롤링 예제를 봤었지만, axios를 활용하는 방법을 고민해봐야겠다.

text encoding

디코딩하고싶은 디코더 객체를 만든다.

const decoder = new TextDecoder('euc-kr');

인코딩하고싶은 내용을 binary형태로 가져와 인코딩한다.

axios.get(url, { responseType: 'arraybuffer', responseEncoding: 'binary' })
  .then(response => {
    if (response.status === 200) {
      const html = decoder.decode(response.data);
      const $ = cheerio.load(html);
    });

크롤링에 성공장면

const decoder = new TextDecoder('euc-kr');

const axios = require('axios').default;
const cheerio = require('cheerio');
const { Script } = require('domelementtype');

const url = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105';

//버퍼를 주고, 바이너리로 받아와야 원하는 형태로 인코딩 할 수 있다.
axios.get(url, { responseType: 'arraybuffer', responseEncoding: 'binary' })
  .then(response => {
    if (response.status === 200) {
      const html = decoder.decode(response.data);
      const $ = cheerio.load(html);

      // 기사 제목을 선택하는 CSS 선택자를 사용하여 크롤링합니다.
      const newsTitles = $('.sh_text_headline');

      // 각 기사 제목을 출력합니다.
      newsTitles.each((index, element) => {
        console.log($(element).text());
      });
    }
  })
  .catch(error => {
    console.log(error);
  })
  .finally(response => {
    console.log("axois end");
  });

출력

정부, 5G 신규 사업자에 26.5~27.3㎓ 800㎒폭 할당
넥슨 '데이브 더 다이버' 누적 판매량 100만장 돌파
포스코DX, 佛 물류자동화 기업 엑소텍과 맞손
지하갱도 통신망 구축…작업자 안전 ‘실시간 관리’
카카오엔터, 반년간 웹툰·웹소설 불법물 1420만건 차단
 "주머니에 들어가는 양자 컴퓨터 시대 올 것" 꿈의 컴퓨터 만드는 김정상 아이온큐 공동 창업자[스타트업 리포트]
axois end
profile
Better Tomorrow

0개의 댓글