일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 12기
- one-shot
- 소스코드
- sk네트웍스family
- 중복인클루드
- 최종프로젝트
- 회고록
- 임베딩
- zero-shot
- 컴파일
- few-shot
- AWS
- sk네트웍스ai캠프
- sk네트웍스familyai캠프
- ai캠프
- Langchain
- 헤더가드
- FastAPI
- 배포
- Docker
- 링크
- 주간회고
- Fine-tuning
- 전처리
- sk네트웍스familyai캠프12기
- C++
- 어셈블
- #include
- Rag
- openai
- Today
- Total
ansir 님의 블로그
SK 네트웍스 family AI 캠프 3주차 회고( 2025-03-10 ~ 2025-03-14 ) 본문
SK 네트웍스 family AI 캠프 3주차 회고( 2025-03-10 ~ 2025-03-14 )
ansir 2025. 3. 18. 19:39이번 주는 MySQL을 활용하여 데이터베이스를 다루는 법을 배우고 파이썬으로 웹 크롤링을 하는 법을 배웠습니다. 자동으로 데이터가 수집되고 있는 모습을 보고 있으면 재밌고 설레지만 왠지 허탈한 기분도 드는 것 같습니다.
지난 일주일 동안 가장 인상 깊었던 배움은
가장 인상 깊은 배움은 MySQL과 파이썬의 연동, 관계형 데이터베이스 구축, 동적 크롤링을 통한 데이터 수집 자동화 입니다. 이번 주에 배운 내용은 크게 MySQL과 웹 크롤링으로 나눌 수 있는데, 기존에도 대용량의 정보를 구축하고 관리하는 것에 관심이 많았기 때문에 정말 흥미롭고 재미있었습니다.
MySQL
- 쿼리를 이용한 데이터베이스 구축 및 조회
- MySQL과 파이썬 연동
- 외래키를 이용한 관계형 데이터베이스 구축
- 프로시저 및 뷰 기능 활용
- ERD 활용
웹 크롤링
- 정적 크롤링
- 동적 크롤링
- 자동화
- streamlit을 통한 시각화
그 배움까지 어떤 어려움이 있었는지
연동 과정의 이해
파이썬과 MySQL을 연동할 때나 파이썬으로 웹 페이지를 열 때 비슷한 사이클로 동작합니다. 이를 익히기 위해 시간을 많이 들였습니다. 예제를 많이 따라해보면서 해당 사이클에 맞게 코드를 작성하는 것을 연습하였습니다.
프로그램 간의 연동 과정은 다음과 같습니다.
연결 객체 생성 -> 객체를 통한 동작 -> 작업 후 연결 해제
하단 코드는 파이썬 + MySQL, 파이썬 + 웹페이지 간의 연동을 코드로 구현한 것입니다. 코드 흐름을 보면 작업 사이클이 유사합니다.
MySQL과 파이썬 연동
connector에 먼저 연결 후 cursor를 연결하고 cursor를 통해 MySQL에서 쿼리를 실행하여 데이터베이스 제어를 하고 모든 작업이 끝나면 cursor -> connector 순으로 연결을 닫아줍니다.
from mysql import connector # mysql 패키지에 있는 connector를 임포트
print(connector.__version__)
# MySQL 접속 정보
args = {
'host': 'localhost',
'user': 'root',
'password': 'root1234',
'port': 3306,
# 'database': 'student_db' # 접속할 때 활성화할 database( 스키마 )명
}
try:
conn = connector = connector.connect(**args) # localhost에 접속해서 접속 객체를 생성
cursor = conn.cursor() # 실제 db에 명령( SQL )을 전달하는 커서 객체 생성
print(f'db success connection connector: {conn}')
# 데이터베이스 student_db 생성
cursor.execute('create database if not exists student_db')
print('데이터베이스 생성')
# 명령 실행
cursor.execute(
'''
create table if not exists student_db.students(
id int auto_increment primary key,
name varchar(100) not null,
age int not null,
scores json
)
''')
print('students 테이블 생성')
# 테이블 구조 확인
cursor.execute('desc student_db.students');
# cursor.fetchall(): sql 명령어를 통해 조회한 데이터를 객체로 가져오기
print(f'테이블 구조: {cursor.fetchall()}')
world_cities = []
for id, name, countrycode, district, population in cursor.fetchall():
city_dict = {'id': id, 'name': name, 'country code': countrycode, 'district': district, 'population': population}
world_cities.append(city_dict)
except Exception as e:
print(e)
finally:
if conn:
cursor.close()
conn.close()
print('연결 종료')
파이썬으로 웹 크롤링
드라이버를 실행 후 url 주소를 통해 웹 페이지를 열고 해당 페이지에서 작업을 한 후 브라우저를 종료해줍니다.
from selenium import webdriver
# 웹드라이버 실행
driver = webdriver.Chrome()
# 웹페이지 열기
driver.get("https://www.google.com")
# 현재 페이지의 HTML 가져오기
html = driver.page_source
# 출력 확인
print(html)
# 브라우저 종료
driver.quit()
html&CSS 구조 파악
웹 크롤링을 할 때 웹 페이지에서 원하는 정보를 가져오기 위해서는 개발자 도구를 열고 html과 css 로 작성된 코드를 보고 태그나 속성명으로 데이터를 찾아야 합니다. html과 css이 익숙하지 않다보니 크롤링을 배우고 연습할 때 시행착오가 많았습니다.
.py 파일 실행
streamlit 모듈을 통해 크롤링한 데이터를 시각화해보았습니다. Colab과 jupyter lab으로 코드를 작성하던 때와는 달리 streamlit을 위한 코드를 .py 확장자의 파일에 저장하였고, 터미널에서 ' streamlit run 파일명.py ' 코드를 작성하여 출력 결과를 확인하였습니다. 노트북 환경의 셀을 실행시키는 것이 아닌 파일을 실행한다는 점이 달랐기에 익숙해지는 데 까지 시간이 걸렸습니다.
무엇을 깨달았고, 어떤 감정/생각이 들었는지
MySQL과 크롤링은 크롤링의 접근성이 더 높지만 두 가지 모두 연결을 열고 닫는 일련의 과정이 있다는 것을 알게 된 후부터 코드 작성을 매끄럽게 할 수 있었습니다.
웹 사이트의 html과 css 코드를 살펴보는 것도 어색하긴 하지만 웹 페이지가 어떻게 구성되어 있는지도 살펴볼 수 있어서 좋았습니다. 마치 자주 사용하던 물건을 분해해보는 듯한 느낌을 받았습니다.
크롤링과 웹 페이지 시각화는 지금까지 배운 내용을 꽃피울 수 있는 기술이라는 느낌을 받았습니다. 인터넷 상에 제공되는 많은 데이터를 수집할 수 있고 그것을 보여줄 수 있게 되었으니 조만간 작은 프로젝트를 기획해서 구현해보는 작업을 해보고 싶습니다.
결과적으로, 현재 나의 상태는?
파이썬 코드를 무리없이 읽고 작성할 수 있고, 기본적인 데이터베이스 관리를 할 수 있게 되었습니다. 하지만 짧은 시간동안 많은 내용을 배운 만큼 지금 가진 지식도 금방 흩어질 거라 생각합니다. 많이 활용해보고 제 것으로 만들기 위해 노력해야 겠습니다.
Keep, Problem, Try
Keep
노션에 수업 내용 다시 정리하기
노션에 수업 내용을 다시 정리하는 것은 시간이 많이 들지만 그만큼 복습도 되고 저의 생각으로 다시 정리하는 작업이기 때문에 기억에 오래남는 것 같습니다.
Problem
코딩 문제 풀이..
매일 한 문제씩 풀기로 했지만 지키지 못했습니다. 저번주에 개설된 코딩 스터디도 참여하기로 했으니 부지런히 문제를 풀어야겠습니다.
Try
매일 코딩 한 문제씩 풀기
노션 정리 꾸준히 하기
배운 개념으로 예제 및 작은 단위 프로젝트 따라 만들어보기
'SK 네트웍스 family AI 캠프 > 주간 회고' 카테고리의 다른 글
SK 네트웍스 family AI 캠프 6주차 회고( 2025-03-31 ~ 2025-04-04 ) (0) | 2025.04.08 |
---|---|
SK 네트웍스 family AI 캠프 5주차 회고( 2025-03-24 ~ 2025-03-28 ) (0) | 2025.03.31 |
SK 네트웍스 family AI 캠프 4주차 회고( 2025-03-17 ~ 2025-03-21 ) (0) | 2025.03.24 |
SK 네트웍스 family AI 캠프 2주차 회고( 2025-03-04 ~ 2025-03-07 ) (0) | 2025.03.09 |
SK 네트웍스 family AI 캠프 1주차 회고( 2025-02-26 ~ 2025-02-28 ) (0) | 2025.03.03 |