개발공부 & 부트캠프/[부트캠프] 회고

[데이터 엔지니어링 부트캠프]8월 3주차 회고

포리셔 2023. 8. 20. 11:04

좋았던 점

  • 웹 프로그래밍에만 집중하는 것이 아니라, 그 이전 과정에서 저작권 문제나 데이터의 질(quality) 문제로 다루지 않았던 데이터 크롤링(data crawling) 부분도 함께 알려주셨습니다. 솔직한 심정으로, 지금까지 배운 것 중 가장 유용한 부분이지만 동시에 가장 조심해서 써야 할 부분이라고 생각됩니다. 너무 자주 들어가면 디도스 공격으로 오인할 여지가 있다나...
  • 머신러닝/딥러닝을 주력으로 배우기는 했다만, 구슬이 서 말이라도 꿰어야 보배라고 기껏 훈련한 모델을 배포하고 서빙(serving)하지 않으면 의미가 없음을 강조해주신 것도 좋았습니다. 솔직히 제대로 배우지도 못했잖아 과거에 streamlit을 이용하는 것이 포트폴리오를 눈에 보이게끔 만들어주는 것이라는 것과 같은 맥락에서, 이제 정말 내가 배운 것을 만들고 배포까지 할 수 있다는 것을 강조하는 포트폴리오를 만들어야 한다는 점을 알려주셔서 좋았습니다.

아쉬웠던 점

  • 진도가... 너무 빠릅니다... Zoom도 켜놓고 중간중간에 질문도 하면서 따라가려고 노력하는데 너무 빨라요...! 누구보다 빠르게 남들과는 다르게
  • 한 주 간 수업을 들으니, 이번 주 수업에 대한 아쉬운 점이 아니라, 지금까지의 교육 과정 중 총체적으로(특히 머신러닝과 자바 기초에서) 아쉬웠던 점이 떠올랐습니다. 지나치게 이론 위주고, 지나치게 정석적인 이야기만 했습니다. 실무에서 그게 어떻게 이용되는지, 전체적인 서버에서 그게 어떤 식으로 작동되는지 큰그림을 짚어주지 않았습니다.
    자바 기초 강의해주신 강사님은 그나마 그런 큰그림을 조금이라도 짚어주신 점에서 개인적으로는 어느 정도 도움이 되었다고 생각합니다. 하지만, 머신러닝 파트는 강의 순서도 종래의 머신러닝/딥러닝 서적들과는 완전히 딴판이었던 데다가, 막상 가장 중요하다고 볼 수 있는 인공신경망 파트를 (지금 다시 생각해보니) 너무 얕게 설명해준 것 같습니다. 그나마 모델 저장을 알려준 게 다행이었다고 해야 하나? 아무튼 같은 반에서도 머신러닝 파트 스터디를 조직해서 다시 공부하려는 움직임이 있을 뿐더러, 가장 중요한 배포와 관련된 부분을 이번 강사님이 보충 설명해주시는 판이니... 아주 단단히 헛배웠다는 감상이 나오기에 부족함이 없었습니다.

배운 점

웹에서의 데이터 크롤링, 서빙을 할 웹 플랫폼 구축을 위해 스프링 부트, 장고 등을 이용한 API 실습을 진행했습니다.

데이터 크롤링

데이터 크롤링은 웹에서 필요한 데이터를 긁어오는 과정이기 때문에 html을 비롯한 웹에 대한 기초 지식, 그리고 데이터의 양식 중 하나인 xml과 json에 대한 이해가 어느 정도 필요합니다.
파이썬의 requests 라이브러리를 이용합니다. requests.post() 메서드에 원하는 url로부터 payload라는 양식의 데이터를 불러 읽어오도록 설정합니다. 불러 읽어온 데이터를 (예를 들어) 판다스의 데이터프레임 등에 저장하는 데 성공했다면, 미리 설정해놓은 SQL 계정에 들어가 CREATE TABLE을 한 후에 판다스의 to_sql() 메서드를 이용해 SQL 테이블로 저장할 수 있습니다.
혹은 pymysql 라이브러리를 설치한 후에 SQL 쿼리문을 문자열 형태로 만들어서 넘겨주는 형식으로 사용할 수도 있습니다. 이 경우 예시 코드는 아래와 같습니다.

import pymysql

con = pymysql.connect(host='127.0.0.1', user='root', password='****', db='{database_name}', charset='utf8')
cur = con.cursor()
table_text = """CREATE TABLE song_data (
    artist VARCHAR(255),
    title VARCHAR(255),
    lyrics TEXT,
    album VARCHAR(255),
    open_dt DATE,
    genre VARCHAR(255)
);"""
cur.execute(table_text)

스프링 부트

Visual Studio Code에 스프링 부트 개발 환경 세팅하기

VS Code를 기준으로 스프링 부트 개발 환경을 세팅했습니다. 방법은 아래와 같습니다.

  1. Extension 탭에서 spring boot tools, Spring Initializr Java Support, Spring Boot Dashboard, lombok, Maven for java를 설치해줍니다.
  2. 설치가 끝났다면 F1키를 눌러서 Spring Initializer: Create a Maven project를 선택합니다.
  3. 다음 창에서 버전 선택을 합니다. 버전은 2.7.14를 선택합니다.
  4. 다음으로 뜨는 창에서 프로젝트 언어를 선택합니다. 우리는 자바를 기반으로 하기 때문에 Java를 클릭하면 되지만, Kotlin 등의 언어를 선택할 수도 있습니다.
  5. 프로젝트의 그룹 ID를 원하는 대로 입력합니다.
  6. Artifact ID를 입력합니다.
  7. 패키지 타입을 Jar로 선택합니다.
  8. 프로젝트를 생성할 폴더를 원하는 곳으로 지정해 프로젝트 폴더 생성까지 마칩니다. 이제 스프링 개발 환경 세팅이 끝났습니다.

Talend API Tester를 통한 테스트

크롬(Chrome) 웹 브라우저의 확장 프로그램인 Talend API Tester를 이용하면 테스트를 진행할 수 있습니다. HTTP 통신을 테스트하는 프로그램으로, 다양한 메서드를 설정하고 쿼리, 파라미터를 담아 요청을 보낼 수도 있습니다.

장고(Django) 기초

또다른 웹 관련 API인 장고는 파이썬 라이브러리로 구동합니다. pip install django로 먼저 설치를 한 뒤, django-admin startproject {프로젝트 이름}을 입력해 장고 프로젝트 폴더를 생성합니다. 이렇게 생성된 파일에는 자동으로 manage.py 파일이 생성되는데, 이 파일을 구동시키면 웹을 구현할 수 있습니다. python manage.py runserver 명령어로 실행할 수 있습니다.

셀레늄(Selenium) 기초

셀레늄 라이브러리도 별도의 설치가 필요합니다. pip install selenium으로 설치하고 진행합니다.
driver = webdriver.Chrome()로 드라이버 객체를 생성합니다. 이때, 드라이버는 이용하고자 하는 브라우저의 종류에 맞게 넣어주시면 됩니다. 저는 크롬을 사용해서 Chrome()을 썼지만 들어보니 사파리, 파이어폭스, 엣지 등도 지원한다고 합니다.

셀레늄 동작

image
셀레늄으로 열린 창에 링크를 타고 들어가 개발자 도구(F12)를 눌러 들어가면 좌측 상단에 위 아이콘과 같이 생긴 버튼이 있습니다. 이걸 클릭하고(또는 Ctrl + Shift + C를 누르고) 웹사이트의 원하는 부분을 클릭하면 해당 부분에 맞는 html 태그를 개발자 도구에서 표시해줍니다. 이 태그를 우클릭하고 Copy > Copy selector를 클릭해 우리가 원하는 동작을 얻어옵니다.
from selenium.webdriver.common.by import By를 불러온 뒤 아까 복사한 selector 부분을 아래 예시와 같이 넣어주면 원하는 동작을 수행할 수 있습니다.
driver.find_element(By.CSS_SELECTOR, "#gnb_menu > ul:nth-child(1) > li.nth2 > a > span.menu_bg.menu02").click()
해당 코드는 웹 페이지 내의 selector가 가리키는 부분을 클릭하라는 명령어입니다.

SQL DB 백업과 복원

데이터 크롤링 중 지나치게 사이트 접속량이 많아진 탓에... 아예 강사님이 만들어주신 DB를 받아오는 식으로 진행했습니다. 이 과정에서 SQL DB를 백업하고 복원하는 방법도 배웠습니다.

  • SQL DB 백업: mysqldump -uroot -p encore > ./backup.sql
  • SQL DB 복원: mysql -uroot -p encore < ./backup.sql

앞으로 바라는 점

  • 토요일에 ADsP를 보고 왔습니다. 이제 당분간 한 큐에 붙었다는 가정 하에... 수업과 프로젝트에만 집중할 수 있을 것 같으니 시간과 체력 배분에 조금은 여유가 생길 것 같습니다.