인턴일기 - 12일차(웹데이터 수집, API호출, 데이터정제 및 가공, PostgreSQL저장, pg_dump, 쿼리,Fiddler)

2025. 4. 15. 22:41데이터분석 인턴일기

📋 오늘 작업 요약

🟡 1. 웹 데이터 수집 (웹 크롤링 & API 호출)

  • Fiddler를 이용해 웹사이트 요청 분석
  • Request Header와 API URL을 분석해서 requests 라이브러리로 자동 호출
  • certiMst 리스트 API → seqNo로 상세 API 호출
  • 총 67페이지(=670건)의 게시글 상세 정보 수집
  • 결과: 전체 데이터를 자동으로 수집하는 Python 코드 작성 완료

💼 분석 업무 분류:

🔍 데이터 수집(ETL)
→ 웹에서 비정형 API 데이터를 분석 목적으로 정형화


🟡 2. 데이터 정제 및 가공

  • 상세 API에서 필요한 필드만 추출하는 함수 extract_data 작성
  • 결과를 리스트로 모은 후 pandas.DataFrame으로 변환
  • 열 순서 바꾸기, 인덱스 재설정, 모든 컬럼을 소문자·snake_case로 변환
  • <BR> HTML 태그 제거 등 텍스트 전처리

💼 분석 업무 분류:

🧼 데이터 전처리(Data Cleaning)
→ 분석 및 DB저장을 위한 구조 정리, 불필요 텍스트 제거, 컬럼 명 표준화


🟡 3. PostgreSQL 연동 및 저장

  • SQLAlchemy를 사용해 데이터프레임을 PostgreSQL 테이블로 저장
  • 테이블 존재 시 replace, 컬럼은 모두 Text로 저장
  • 테이블 이름은 global_certi_info, 저장 완료

💼 분석 업무 분류:

🛢️ 데이터 저장 및 관리
→ 추출한 데이터를 RDBMS(PostgreSQL)에 적재하여 지속 활용 가능하게 함


🟡 4. SQL 및 서버 작업

  • psql, pg_dump, pg_restore 명령어 학습 및 사용
  • SQL 백업 파일을 새 DB 또는 테이블로 복원
  • transaction_timeout, owner 관련 오류 디버깅 및 해결
  • 현재 테이블 소유자 확인, ALTER TABLE OWNER 명령 이해

💼 분석 업무 분류:

🔧 데이터베이스 운영 이해
→ 분석 데이터를 DB에 넣고 백업/복원할 수 있는 수준의 SQL 활용


🟡 5. 데이터 확인 및 쿼리 실습

  • 특정 조건 (seq_no == 619) 데이터 조회
  • 테이블 존재 여부, row 수, null 값 처리 확인
  • pg_tables로 테이블 및 owner 조회

💼 분석 업무 분류:

🔍 데이터 탐색(EDA)
→ 수집된 데이터를 확인하고 의미 있는 구조로 분석 준비

 

오늘은 원래 어제에 이어서 통합크롤러를 만지작 거려야 했으나 

손이 부족하다는 일이 있어서 그일을 하기로 하였다

 

일단 Fiddler를 깔아야한다고 하시는데

Fiddler란?

Fiddler는 HTTP/HTTPS 트래픽을 가로채고 분석할 수 있는 프록시(proxy) 기반의 디버깅 툴

 

🔧 Fiddler의 주요 기능

기능                                                 설명
🔍 요청/응답 트래픽 분석 브라우저 또는 앱이 서버와 주고받는 HTTP, HTTPS 요청을 볼 수 있음
🛠️ 헤더, 파라미터 확인 요청에 포함된 헤더, 쿼리 스트링, POST 데이터 확인 가능
💾 요청 복제 및 재전송 특정 요청을 다시 보내보며 테스트 가능 (Composer 기능)
📦 JSON, XML 보기 응답 데이터를 자동 포맷팅해서 보기 쉽게 표시
🔐 HTTPS 복호화 지원 SSL 암호화된 트래픽도 확인 가능 (인증서 설치 필요)
🎯 필터링 및 검색 특정 도메인, 상태코드, 요청 URL 등으로 필터링 가능

웹에서 가져오고 싶은 정보가 있는데 공개된 API문서가 없을때

Fiddler를 실행해서 브라우저 트래픽을 가로채고 그요청을  Fiddler에서 실시간으로 확인한다음에

필요한 API요청을 복사해서 파이썬의 requests로 복제해서 자동화 할 수있다

 

 

Fiddler의 기본구조

렌즈 같은 개념이다 볼수없는것을 볼수있게 해주는

처음 써보느라 아직도 잘 모르지만 요즘 SPA사이트에서 백엔드 API호출이 숨어있어서

Fiddler가 있으면 매우매우 편하다고한다

 

Fiddler를 이용해서 header를 보고 APIURL을 분석해 페이지 번호를 추출하고 그걸 URL로 넣어서

상세 내용 페이지를 열어 거기에서 text를 가져왔다

실행화면

 

2) 수집된 정보를 가공할 차례다

 

열순서가 크게 상관은 없지만 앞에 있으면 좋을 것 같은 seq_no, certi_nm을 앞으로빼주고

컬럼명이 현재 대소문자 모두 들어가있으므로 DB에 넣기좋게 snake_case로 변경해준다

 <BR> 같은 HTML태그가 있어서 이런건 그냥 삭제해줬다

가공 완료!

 

이제 파이썬에서 Postgre로 넣을 차례다

기존에 정해놨던 조건대로 타입은 text로맞춰주고 넣어주었다

삽입완료!

 

근데 내가 체크하지 않았던 문제를 지적 받았다

데이터의 총개수와 누락여부를 꼼꼼히 확인해봤어야했는데 그부분을 놓쳤다

 

수집해야할 정보는 총 666개 였는데 666개가 맞는지 한번 봤어야했는데 개수를 세지않았다

잘못한점 ㅎㅎ

 

누락여부랑 개수를 파악해봤는데 다 맞아서 다행이었다

 

이제 pg_dump 파일백업/리스토어 기능을 이용해서 다른 DB로 삽입하는 것을 하기로 했다

그러려면 cmd를 써야하는데 cmd는 리눅스 명령어를 알아야하고 이건 매우매우 중요하다고 하셨다

해보라 하셔서 혼자서 여기저기 찾아보고 gpt에게 물어가면서 대강이해하고 프롬프트를 작성했다

 

pg_dump란?

pg_dump는 PostgreSQL 데이터베이스 또는 테이블을 SQL 파일 또는 바이너리 형식으로 백업하는 커맨드라인 도구

읽기전용(백업전용) 도구로 절대 DB를 변경하지 않아서 안전!

 

아래는 중요 특징

항목                                                              설명

단일 테이블 백업 특정 테이블만 추출 가능 (-t 옵션)
전체 DB 백업 전체 스키마 + 데이터 백업
포맷 다양 SQL, custom, directory 형식 등 선택 가능
인덱스, 제약조건 포함 외래키, 제약조건, 인덱스도 함께 백업됨
안전한 복원 psql, pg_restore로 손쉽게 복원 가능

 

기본사용법 : pg_dump -h [host] -p [port] -U [user] -d [database] > backup.sql

특정테이블만 백업 : pg_dump -h 호스트 -U 유저명 -d DB명 -p 포트번호 -t 테이블이름 > 저장할 위치\파일명.sql

 

기본 plain 형식은 SQL문장으로 백업하는 것이고 psql로 복원 가능하다

directory(-Fd)는 폴더로 나눠서 백업하는 것으로 pg_restore로 복원할 수 있다

 

 

Window에서는 CMD전에 환경변수를 설정해서 Password를 미리 입력해놓으면 비밀번호로 인해서 오류날일이 없다

 

그리고 복원할때는 미리 연결이 되는지 확인해보고 들어가는게 좋은데

psql -h 호스트 -U 사용자명 -d 데이터베이스명 -p 포트

이렇게 입력해보면 

 

psql (16.1)
Type "help" for help.

table name=>

 

이런식으로 나온다 그럼 연결 성공!

그상태에서

 

\dt 테이블목록보기

\conninfo 현재 DB이름, 유저, 호스트 확인

SELECT * FROM global_certi_info LIMIT 5; 특정테이블 내용 확인

\q psql 나가기

이 가능함

 

나간다음에

복원 기본사용 : psql -h 호스트 -U 유저이름 -d 데이터베이스명 -p 포트번호 -f  "폴더위치\폴더명.sql"

해주면 DB에 리스토어 된다

 

근데 이때 주의할점

백업한 SQL파일을 열어보면 username이 써있는데 이동을 목적으로 사용할 거라면 이이름을 바꿔줘야 에러가 나지않는다

나는 바꾸지 않아서 에러가 났는데 이름의 경우 에러가 나더라도 저장은 된다! 그래도 언제 안될수도 있으니 바꾸면 좋을 것 같다

테이블명 같은 경우도 넣기전에 바꾸면 더 편하게 입력 할 수 있겠다

 

그리고 나는 하나 오류가 계속 뜨던데

🧨 1. ERROR: unrecognized configuration parameter "transaction_timeout"

bash
복사편집
psql:...:11: ERROR: unrecognized configuration parameter "transaction_timeout"

❌ 이유:

  • transaction_timeout은 PostgreSQL에는 없는 설정 파라미터
  • 아마 pgAdmin이나 다른 클라이언트에서 자동으로 설정문을 넣은 걸 백업하면서 따라간 것.

데이터를 복원하는데에는 영향이 없지만 sql파일을 vscode로 열고 해당하는 줄을 삭제하면 사라진다고 한다

근데 일단 복원하는데 영향이 없어서 에러메세지는 그냥 두었다

 

이런식으로 COPY 데이터개수 뜨면 잘 된것이다

 

오늘은 Fiddler와 pg_dump를 처음 써본 날이었다

그리고 데이터베이스에 연결하고 데이터를 삽입하는 과정에서 내 평소 급한 성격은 좀 죽이고 천천히 넣어서

에러를 해결하는 일이 발생하지 않도록 하는 것이 좋다고 깨달았다

 

그래도 오늘 이거 다했으니까 내일은 다시.... 통합 크롤러를 뚝딱뚝딱 해보러간다