[내일배움캠프] 웹 프로그래밍 A-Z 기초 3주차(2)

재명·2021년 12월 20일
0

Web

목록 보기
5/6

1. DB개괄

  • 저장 해둔 데이터를 '선택적으로 잘 사용하기 위해서'

  • DB에 저장된 데이터들은 Index라는 순서대로 정렬되어 있다

  • DB는 정보 저장 형태에 따라 크게 두가지로 분류된다

    #NoSQL은 SQL에 반한다는 뜻이 아니라, Not only SQL 이라고 한다

  • SQL형식은 좀 더 정형화 되어있기 때문에 관리가 용이하고 데이터 요청시 이를 찾는 속도도 빠르다는 장점이 있지만, 확장성이 부족하고 변화에 유연하게 대처하기가 힘들다는 약점도 동시에 가지고있어 스타트업 비즈니스와 같이 급변하는 분야에서는 힘을 발휘하기 어렵다

  • DB를 실제 컴퓨터에서 구축하고 운영하는 경우(특히 규모가 커지면 커질수록) 해당 컴퓨터를 다른용도로 사용하기 어렵기 때문에, 대부분은 클라우드 형태로 사용하곤 한다





2. MongoDB 사용해보기

#회원가입이나 기본적인 클러스터 생성/연결부분은 생략

2-1) 우선 파이참 내에서도 mongoDB 데이터에 접근 할 수 있게끔 도와주는 pymongo와 dnspython 패키지를 설치해 준다


2-2) Cluster에서 생성된 접근 url을 복사하여 다음과 같이 코드를 작성한다

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:{password}@cluster0.qjo3f.mongodb.net/{Cluster name}?retryWrites=true&w=majority')

#password / cluster name(처음엔 아마 다 Cluster0 인듯) 부분은, 본인이 설정한대로 바꿔 써주어야 함

2-3) 간단한 데이터를 만들어 DB에 업로드해 보자

#db명과 딕셔너리 형태의 자료를 선언한 후 해당 코드를 실행해 보면

#이와같이 users라는 테이블에 방금 만든 데이터가 저장되었음을 확인할 수 있다


#마찬가지의 방법대로 bobby, john, ann에 관한 정보도 DB에 넣어준다





3.pymongo로 DB조작하기

3-1) DB에 저장된 데이터를 조회하는 find

  • 여러개의 데이터를 조회하는 것이 아니라 단일 데이터를 조회하고 싶다면 find대신 find_one을 쓰면된다

  • 기본적으로 DB에 데이터가 저장될 때엔 저마다의 고유 ID값이 같이 생성되므로, 조회시에 이를 빼고 가져오고 싶다면 위와같이 {'_id':False}를 추가해주면 된다

3-2) DB에 저장된 데이터를 수정하는 update

  • 업데이트란 메서드 명에서도 알 수 있듯이, 지정된 데이터의 target value를 새롭게 바꿔준다


3-3) DB에 저장된 데이터를 삭제하는 delete


  • delete는 잘 쓰이지는 않지만 그래도 CRUD의 한 축을 담당하는 만큼 반드시 알고는 있어야 겠다





4. 웹 스크래핑 결과 저장해보기

  • 지난번에 다뤄봤었던 영화 순위 크롤링 데이터를 DB에 저장시켜보도록 하자
  • 이전에 비해 달라진 것은 DB를 좀 더 편리하게 이용하기위한 pymongo를 import하고 저장시킬 db collection을 설정해준 것 뿐이다
  • 크롤링 결과를 터미널에 보여주던 print부분을 삭제하고, 그 대신 DB에 보내줄 data form을 doc란 변수에 담아 반복문내에 정의해 준다
  • 좀전까지 다루던 users와는 속성이 다른 자료들이므로, db.movies.insert_one(doc) 구문을 추가해 DB에 담아준다






5. Quiz_웹 스크래핑 결과 이용하기

5-1) 저장했던 movies collection을 가지고 '가버나움'의 평점 가져오기

  • find_one 메서드로 테이블에서 'title':'가버나움'항목을 가져온 다음 ['point'] 부분을 불러와 출력해 주면 끝

5-2) '가버나움'의 평점과 같은 평점의 영화 제목들을 가져오기

  • find메서드로 모든 영화목록을 불러오고, 기준이 될 '가버나움'의 데이터를 target에 저장한다
  • for문을 통해 movies에 있는 각 자료를 돌며 '가버나움'의 평점 즉, target['point']와 평점이 같으면 (if movie['point'] == target['point']:) 해당 영화의 제목을 출력한다(print(movie['title']))

5-3) '가버나움'의 평점을 0점으로 만들기

  • update_one 메서드를 사용하면 매우 간단하게 평점 변경이 가능하다
  • 다만 기존에 저장되어있던 DB상의 평점들이 전부 문자열의 형태로 저장되어 있었으므로 변경시에 이를 유념해야한다





6. 지니뮤직 사이트 크롤링해보기

  • 지니뮤직 사이트의 순위차트에서 순위/곡 제목/아티스트 정보를 크롤링 해보자
  • 방식의 큰 변화는 없지만, 각 데이터의 text값에 공백이 많이 포함되어 있고 필요없는 정보가 함께 담겨있기 때문에 직접 하나씩 찍어보면서 어떻게 데이터를 다듬을지 고민해 보아야 한다
  • 공백은 strip() 메서드로 없애고, 순위정보에서 숫자만을 취하기 위해 [:2]까지 슬라이싱하여 불필요한 값들을 제거했다
  • 다행(?)인지 이번엔 영화순위때 처럼 아예 공백인 tr라인이 없었기 때문에 예외처리는 굳이 하지 않아도 필요한 결과값을 얻어낼 수 있었다
profile
개발자가 되고싶은 늦깎이 코린이

0개의 댓글