본문 바로가기

회고/스파르타 코딩클럽

[노드 기초반] 5주차 개발일지

1. 배운 내용

크롤링

AWS EC2 인스턴스 이용해서 코드 배포

도메인 연결

 

 

2. 새로 알게 된 내용

(1) 크롤링

- axios로 크롤링할 페이지 접속, iconv-lite로 HTML 데이터 한글 깨짐 방지

# 한글 깨짐 방지 코드
const content = iconv.decode(html.data, "EUC-KR").toString();

- cheerio로 특정 태그를 가르켜 데이터 가져오기

const $ = cheerio.load(content);
const list = $("ol li");
await list.each( async (i, tag) => {
	let desc = $(tag).find("p.copy a").text() 
	let image = $(tag).find("p.image a img").attr("src")
	let title = $(tag).find("p.image a img").attr("alt")
	let price = $(tag).find("p.price strong").text()
})

 

(2) AWS EC2 서버

- 현재 내 사양
mac os big sur 11.6 intel

- EC2 인스턴스 생성 (ubuntu 18 64, arm)
* 키페어생성하고 pem이나 cer 인증서 다운받아두기 *

- EC2 인스턴스 중지해야함
중지하고 다시 시작하면 퍼블릭 IP 바뀜

- 보안그룹 설정
27017, HTTP(88), TCP 열어주기

- EC2 접속 및 nodejs, mongodb 설치

// EC2 접속
// 1. 키페어 접근권한 변경
sudo chmod 400 받은키페어끌어다놓기
// 2. ssh로 접속하기
ssh -i 받은키페어끌어다놓고 ubuntu@퍼블릭IP


// nodejs 설치
// 1. 설치 파일 다운로드
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
// 2. 설치 명령어
sudo apt-get install -y nodejs
// 3. 설치 확인
node -v
npm -v


// mongodb 설치
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org

// mongodb 실행
sudo service mongod start
// 끄기
sudo service mongod stop
// 재시작
sudo service mongod restart

// mongodb 접속 계정 생성하기
mongo
// admin으로 데이터베이스 바꾸기
use admin;
// 지금 사용하는 데이터베이스 조회하기 (결과는 admin이라고 나와야 함)
db;
// 계정 생성하기
db.createUser({user: "test", pwd: "test", roles:["root"]});
// 계정 생성된 거 확인하기 (배열처럼 보이는 놈 출력되어야 함)
db.getUsers();
// 나오기
exit;
// 변경했으면 항상 재시작해주기

 

- mongodb 외부에서 열기

// mongodb 설정 파일 vi 에디터로 열기
sudo vi /etc/mongd.conf
// 내용 중 다음을 찾아서 변경해준다.
// bindIp는 어디서든지 접속할 수 있다는 뜻으로 0.0.0.0으로 지정
bindIp: 127.0.0.1
-> bindIp: 0.0.0.0
// security는 보안상 문제로 user 못 건드리게 설정해줌
# security:
-> security:
	authorization: "enabled"
    
// 입력은 i, 다했으면 esc 누르고 :wq로 저장하고 나온다.
// 변경했으니까 재시작해주기
// robo 3t에서도 접속 안되면 제대로 서비스가 시작되었는지 확인한다.
sudo services mongod status

 

- PM2 이용해서 프로세스 관리

// EC2 인스턴스 관리자 권한 취득
sudo -s
sudo su
// EC2 인스턴스 관리자 권한 취득 해제
exit

// PM2 설치
npm install -g pm2
// 스키마 이름에 대문자인지, 소문자인지 확인한 후
// 서버 실행
pm2 start index.js
// 프로세스 목록 조회
pm2 list
// 서버 끄기
pm2 stop index
pm2 delete index
pm2 kill

 

 

3. 느낀 점

생각보다 내용이 많아서 좀 놀랐고, 이제 정말 AWS로 배포하는 방법을 익힌 것 같다. 그리고 EC2 에서 자동 시작이나 스케줄링 할 수 있게 프로세스 관리하는 방법도 배워서 좋았다. 그런데 mongodb가 약간 문제를 발생시켜서 (순서대로 했는데도) 삭제하고 재설치 하니까 괜찮았다. 이걸 조금 더 활용해서 포트폴리오 사이트도 만들 수 있을 것 같다는 생각이 들었다. 그리고 자바스크립트로는 크롤링 해본 적이 없었는데 이렇게 배울 수 있어서 좋았다. 그런데 마지막 수업이라 그런지 만약에 내가 전공자가 아니고 비전공자였으면 좀 어려웠을 것 같다. 그리고 슬랙에서 매번 멘토들이 다 답장해주던데 대단하다고 느꼈다. 드디어 7, 8주만에 수료한 게 웃기지만 그래도 수료해서 다행이다 !

 

 

반응형