[스나이퍼팩토리] 한컴AI아카데미 61~63일차 : 25.04.28(월)~30(수)

2025. 4. 30. 17:36·HANCOM

본격적으로 FastAPI 강의가 시작된 주였다. 해당 내용에 대해 시작하기 전 기본 내용인 DB에 대해서 다시 복기한 후 본격적으로 실습을 시작하였다.

 

첫날 실습은 무난(?)하게 잘 마무리하였지만, 어제 실습에서는 FastAPI에 MongoDB를 접목해서 해야하는 것이었다.
DB연결하는 것도 문제였고, 전날 크롤링 한 Data를 제대로 도출해내지도 못하고,, 등등 코드 작성 자체가 어려운 것은 아니었음에도 오류가 발생하고 코드의 진행방식이 머리속에 들어오질 않았어서 정말 스트레스를 받았었다.

 

정말 실습시간 내내 과제에만 매달렸다.

 

 

 

 


강의 내용 및 요약 정리

 

MongoDB 소개

  • MongoDB란?: MongoDB는 오픈소스 NoSQL 데이터베이스 시스템이다.
  • 특징:
    전통적인 관계형 데이터베이스(RDBMS)와는 다르게, 문서(document) 기반의 유연한 구조를 가지고 있다.
    예시로는 MySQL, PostgreSQL 등이 있다.

전통적 데이터베이스와의 차이

  • 관계형 데이터베이스(RDBMS):
    데이터가 테이블 형태로 저장됨.
    정형 데이터에 적합함.
  • MongoDB의 장점:
    비정형 데이터를 처리하는 데 유리함.
    데이터 구조가 유연하여 다양한 형태의 데이터를 저장할 수 있다.

MongoDB.com 가입 및 사용

  • 가입 절차:
    MongoDB.com에 가입하는 방법에 대한 설명이 포함되어 있음.
    사용자는 계정 생성 후 다양한 기능을 이용할 수 있다.
  • 사용 방법: MongoDB의 다양한 기능을 활용하여 데이터베이스를 생성하고 관리하는 방법을 안내함.

웹크롤링 개요

  • 웹페이지의 내용을 자동으로 수집하는 작업이다.
  • 웹크롤러는 HTML 코드에서 원하는 데이터를 수집하는 역할을 한다.
  • 수집할 수 있는 데이터의 예로는 글, 이미지 등이 있다.
  • 웹크롤링은 데이터 분석, 정보 수집 등 다양한 분야에서 활용된다.

웹크롤링의 기본 개념

  • 우리가 브라우저에서 보는 웹페이지는 HTML 코드로 구성되어 있다.
  • 웹크롤러는 이 HTML 코드에서 필요한 정보를 자동으로 수집한다.
  • 웹크롤링의 목적은 효율적인 데이터 수집과 정보의 자동화이다.
  • 웹페이지의 구조를 이해하는 것이 웹크롤링의 기초가 된다.

기본 크롤링 방법

  • requests + BeautifulSoup을 이용한 기본 크롤링 방법이 있다.
  • 이 방법은 웹페이지의 HTML을 요청하고, 그 결과를 파싱하여 필요한 데이터를 추출하는 방식이다.
  • BeautifulSoup은 HTML과 XML 문서를 파싱하는 파이썬 라이브러리로, 웹크롤링에 매우 유용하다.
  • 기본적인 크롤링 과정은 다음과 같다:
    1. 웹페이지 요청
    2. HTML 코드 수신
    3. BeautifulSoup을 이용한 데이터 파싱
    4. 필요한 데이터 추출

이미지 크롤링 기법

  • 웹에서 이미지를 수집하는 방법이다.
  • 이미지 크롤링의 주요 단계는 다음과 같다:
    이미지가 포함된 웹페이지의 URL 수집
    해당 페이지의 HTML 코드에서 이미지 URL 추출
    추출한 이미지 URL을 통해 이미지를 다운로드
  • 이미지 크롤링은 정적 페이지에서 주로 이루어지며, 동적 페이지에서는 추가적인 기술이 필요할 수 있다.
  • 이미지 크롤링의 예시로는 Wikimedia Commons와 같은 사이트에서 이미지를 수집하는 방법이 있다.

정적 페이지와 동적 페이지

  • 정적 페이지는 고정된 내용을 가진 웹페이지로, 사용자가 요청할 때마다 동일한 내용을 보여준다.
  • 동적 페이지는 사용자의 요청에 따라 내용이 변경되는 웹페이지로, 서버에서 실시간으로 데이터를 생성한다.
  • 정적 페이지와 동적 페이지를 구분하는 방법은 다음과 같다:
    페이지의 URL 구조
    페이지의 로딩 방식
    페이지의 HTML 코드 분석
  • 웹크롤링 시, 정적 페이지는 상대적으로 수월하게 크롤링할 수 있지만, 동적 페이지는 Selenium과 같은 도구가 필요하다.

Selenium을 이용한 크롤링

  • Selenium은 웹 브라우저를 자동으로 제어할 수 있는 도구이다.
  • Selenium을 이용할 때는 크롬 드라이버를 확인해야 한다.
  • Selenium의 주요 기능은 다음과 같다:
    웹페이지 자동화
    동적 콘텐츠 로딩 처리
    사용자 인터페이스와의 상호작용
  • Selenium을 사용하여 여러 인물 이름으로 구글 이미지 검색 및 다운로드를 수행할 수 있다.

구글 이미지 검색 자동화

  • Selenium을 활용하여 여러 인물의 이미지를 자동으로 검색하고 다운로드하는 방법이 있다.
  • 이 과정은 다음과 같은 단계로 이루어진다:
    검색할 인물의 이름 리스트 작성
    Selenium을 통해 구글 이미지 검색 페이지 접근
    각 인물 이름으로 검색 수행
    검색 결과에서 이미지 URL 추출 및 다운로드
  • 이 방법은 대량의 이미지를 효율적으로 수집할 수 있는 장점이 있다.

FastAPI 개요

  • FastAPI는 Python 기반의 웹 프레임워크로, 빠르고 쉽게 REST API를 만들 수 있도록 도와주는 도구이다.
  • 이 프레임워크는 비동기 프로그래밍을 지원하여 높은 성능을 제공한다.
  • FastAPI는 타입 힌트를 활용하여 코드의 가독성을 높이고, 자동으로 API 문서를 생성하는 기능을 제공한다.
  • REST API는 Representational State Transfer의 약자로, 웹에서 자원을 정의하고 자원에 대한 주소를 지정하는 아키텍처 스타일이다.

FastAPI의 주요 특징

  • FastAPI의 주요 특징은 다음과 같다:
    빠른 성능: FastAPI는 Starlette와 Pydantic을 기반으로 하여 높은 성능을 자랑한다.
    자동 문서화: Swagger UI와 ReDoc을 통해 API 문서를 자동으로 생성할 수 있다.
    유효성 검사: 데이터 유효성 검사를 자동으로 수행하여 오류를 줄인다.
    비동기 지원: 비동기 프로그래밍을 지원하여 효율적인 요청 처리가 가능하다.

설치 방법

  • FastAPI를 설치하는 방법은 다음과 같다:
    pip를 사용하여 FastAPI와 Uvicorn을 설치한다.
    명령어: pip install fastapi uvicorn
    설치 후, FastAPI 애플리케이션을 실행하기 위해 Uvicorn을 사용한다.
    예시 명령어: uvicorn hello_fastapi:app --reload
  • 주의사항: Uvicorn 명령어는 hello_fastapi라는 파일이 있는 곳으로 터미널 위치를 옮기고 동작시켜야 한다.

데이터 받는 방식 요약

  • FastAPI에서 데이터를 받는 방식은 다음과 같이 요약할 수 있다:
    쿼리 매개변수: URL의 쿼리 문자열을 통해 데이터를 전달받는다.
    경로 매개변수: URL 경로의 일부로 데이터를 전달받는다.
    본문 데이터: POST 요청의 본문에 JSON 형식으로 데이터를 전달받는다.
  • 이러한 방식들은 API의 유연성을 높이고 다양한 클라이언트 요청을 처리할 수 있도록 돕는다.

주의 사항

  • FastAPI를 사용할 때 주의해야 할 점은 다음과 같다:
    명령어 실행 위치: Uvicorn 명령어는 반드시 hello_fastapi 파일이 있는 디렉토리에서 실행해야 한다.
    파일 경로: 파일 경로가 올바르지 않으면 애플리케이션이 실행되지 않을 수 있다.
    환경 설정: 개발 환경에 따라 필요한 라이브러리와 패키지를 사전에 설치해야 한다.

데코레이터 이해하기

  • 데코레이터는 Python에서 함수나 메서드의 기능을 확장하는 방법이다.
  • FastAPI에서는 다음과 같은 데코레이터를 사용하여 API 엔드포인트를 정의한다:
    @app.get(): GET 요청을 처리하는 엔드포인트를 정의한다.
    @app.post(): POST 요청을 처리하는 엔드포인트를 정의한다.
  • 데코레이터를 사용하면 코드의 재사용성을 높이고, API의 구조를 명확하게 할 수 있다.

POST 요청 개요

  • POST 요청은 클라이언트가 서버에 데이터를 전송하는 HTTP 메서드 중 하나이다.
  • 요청 바디를 통해 데이터를 전송하며, 주로 데이터 생성이나 업데이트에 사용된다.
  • POST 요청은 GET 요청과 달리 요청 URL에 데이터가 포함되지 않으며, 보안상 더 안전한 방법으로 간주된다.
  • 이 장에서는 POST 요청의 기본 개념과 처리 방법에 대해 다룰 것이다.

학습 목표 및 내용

  • 학습 목표는 POST 요청에 대한 이해를 높이는 것이다.
  • 이 과정에서는 POST 요청의 사용 사례와 그 중요성을 강조할 것이다.
  • 학습자는 POST 요청을 통해 서버와의 상호작용을 이해하고, 이를 활용할 수 있는 능력을 기르게 될 것이다.
  • 목표는 실습을 통해 POST 요청을 실제로 구현해보는 것이다.

POST 요청 이해하기

  • POST 요청에 대해 익숙해지는 것이 중요하다.
  • 요청을 통해 서버에 데이터를 전송하는 과정은 웹 애플리케이션에서 필수적인 기능이다.
  • POST 요청은 RESTful API 설계에서 중요한 역할을 하며, 클라이언트와 서버 간의 데이터 전송을 원활하게 한다.
  • 이 장에서는 POST 요청의 기본적인 사용법과 그에 따른 결과를 학습할 것이다.

모델 생성하기

  • pydantic 라이브러리를 사용하여 모델을 생성하는 방법에 대해 알아본다.
  • pydantic은 데이터 유효성 검사를 위한 Python 라이브러리로, 데이터 모델을 정의하고 검증하는 데 유용하다.
  • 모델 생성 과정은 다음과 같다:
    pydantic 라이브러리 설치
    데이터 모델 정의
    모델 인스턴스 생성 및 데이터 검증
  • 이 과정은 POST 요청을 통해 수신한 데이터를 처리하는 데 필수적이다.

FastAPI 예제 소개

  • FastAPI는 Python으로 작성된 현대적인 웹 프레임워크로, 빠르고 효율적인 API 개발을 지원한다.
  • 이 예제에서는 POST 요청을 통해 사용자 정보를 받는 방법을 설명한다.
  • FastAPI의 주요 특징은 다음과 같다:
    자동 문서화: API 문서가 자동으로 생성된다.
    비동기 지원: 비동기 프로그래밍을 지원하여 성능을 극대화한다.
    유효성 검사: pydantic을 통해 데이터 유효성을 자동으로 검사한다.

사용자 정보 받기 예제

  • 예제1에서는 POST 요청을 통해 사용자 정보를 받는 방법을 다룬다.
  • 이 예제는 다음과 같은 단계로 진행된다:
    사용자 정보 모델 정의
    POST 요청 처리 함수 작성
    클라이언트에서 데이터 전송
    서버에서 데이터 수신 및 처리
  • 각 단계에서 발생할 수 있는 오류와 그 해결 방법도 함께 설명된다.

경로파라미터 개요

  • **경로파라미터(Path Parameter)**는 URL 경로의 일부를 변수처럼 받아오는 방식이다.
  • 예를 들어, /users/3와 같은 요청을 하면 3을 추출할 수 있다.
  • 경로파라미터는 URL 경로 내에서 값을 동적으로 받을 수 있는 방법이다.
  • 특징: 함수 매개변수와 @app.get()의 경로 내부 이름이 일치해야 한다.

경로파라미터 설명

  • 설명: URL 경로의 일부를 변수처럼 받아오는 방식이다.
  • 예시: /items/{item_id}와 같이 경로 중 일부를 변수로 처리하는 방식이다.
  • 경로파라미터는 RESTful API 설계에서 자주 사용되며, 클라이언트가 특정 자원에 접근할 수 있도록 한다.
  • 중요성: 경로파라미터를 통해 API의 유연성과 가독성을 높일 수 있다.

쿼리파라미터 개요

  • **쿼리파라미터(Query Parameters)**는 URL 뒤에 ?key=value 형태로 전달되는 값이다.
  • 쿼리파라미터는 함수 매개변수에 직접 대응된다.
  • 기본값을 지정할 수 있으며, 선택적으로 사용할 수 있다.
  • 용도: 클라이언트가 요청할 때 추가적인 정보를 제공할 수 있는 방법이다.

쿼리파라미터 설명

  • 개념: 쿼리파라미터는 URL의 끝에 추가되는 정보로, 여러 개의 쿼리파라미터를 &로 구분하여 사용할 수 있다.
  • 예시: /items?category=books&sort=asc와 같은 형태로 여러 개의 파라미터를 전달할 수 있다.
  • 쿼리파라미터는 필수적이지 않으며, 필요에 따라 선택적으로 사용할 수 있다.
  • 장점: API의 유연성을 높이고, 클라이언트가 원하는 데이터를 필터링할 수 있도록 돕는다.

 

 

 


실습 내용

 

04.28

 

1. 실습 목표

  • 네이버 금융의 KOSPI 일별 시세를 5페이지 분량 크롤링하여 MongoDB에 저장하는 실습입니다.
  • MongoDB에서 상승장(등락률이 플러스)인 날만 조회, 특정 날짜의 시가총액 수정, 전체 거래대금 합산 등 데이터 조작 및 집계 실습이 포함됩니다.

2. 주요 실습 단계

  • 패키지 설치 및 환경 준비: pymongo 설치 및 MongoDB Atlas 클러스터 연결
  • 크롤링:
  • MongoDB 저장:
  • MongoDB 데이터 조작/조회:
    1. 상승장 데이터만 조회: 등락률이 플러스인 데이터만 조회해 DataFrame으로 출력
    2. 특정 날짜(2024.04.25)의 시가총액 수정: 해당 날짜 문서의 market_cap 필드를 "9억조"로 업데이트
    3. 총 거래대금 합산: 모든 데이터의 trade_amount 필드를 합산해 출력

3. 결과 예시

  • 크롤링 및 저장된 데이터 수, 상승장 데이터 수, 수정된 문서 수, 총 거래대금 합계 등 단계별로 출력
  • 데이터 구조: 날짜, 종가, 전일비, 등락률, 거래량, 거래대금, 상승장 여부 등 필드 포함

4. 실습 의의

  • 실시간 웹 데이터 크롤링, MongoDB NoSQL 데이터베이스 활용, 데이터 집계 및 수정 등 데이터 엔지니어링의 기본기를 실습할 수 있습니다.

04.29

 

1. 실습 목표

  • MongoDB에 저장된 KOSPI 일별 시세 데이터를 FastAPI 기반 RESTful API로 제공하는 실습입니다.
  • 주식 데이터의 날짜별 조회 등 간단한 API 설계와 MongoDB-API 연동을 경험합니다.

2. 주요 실습 단계

  • 패키지 설치: fastapi, uvicorn, pymongo 등 필수 패키지 설치
  • MongoDB 연결: Atlas 클러스터의 finance.kospi 컬렉션에 연결
  • FastAPI 앱 구현:
  • 서버 실행: Jupyter 환경에서 nest_asyncio와 uvicorn을 활용해 비동기 FastAPI 서버 실행
  • API 사용 예시:

3. 실습 의의

  • 크롤링·저장된 데이터를 RESTful API로 외부에 제공하는 백엔드 실무 흐름을 경험할 수 있습니다.
  • FastAPI의 경로 파라미터, MongoDB 쿼리, JSON 직렬화 등 실무에 필요한 핵심 기술을 익힙니다.

04.30

 

실습 목적

MongoDB에 저장된 학원 학생 정보를 대상으로 FastAPI 기반 RESTful API를 구축하는 실습입니다.
학생 등록, 반별/과목별/수강료별 조회 등 다양한 데이터 필터링 및 응답 구조를 경험할 수 있습니다.

핵심 데이터 구조

  • 학생 정보 예시:
  • MongoDB 컬렉션명: students

주요 실습 내용 및 구현 API

1. 학생 등록 (POST /students/register)

  • 신규 학생 정보를 POST 방식으로 등록
  • 입력값 검증: Pydantic 모델 활용, 주민등록번호·수강료 등 필드 유효성 검사
  • 이미 등록된 student_id 중복 시 400 에러 반환
  • 등록 성공 시 민감정보(주민번호, 수강료) 제외 후 반환

2. 반별 학생 목록 조회 (GET /students/class/{class_name})

  • URL 경로 파라미터로 반 이름 입력
  • 해당 반 소속 학생의 이름, 나이 등 정보 리스트 반환
  • 해당 반이 없으면 404 에러

3. 과목별 학생 목록 조회 (GET /students/subject?subject=수학)

  • 쿼리 파라미터로 과목명 입력
  • 해당 과목을 수강하는 학생 리스트 반환
  • 없으면 404 에러

4. 수강료 기준 학생 필터링 (GET /students/tuition?min_fee=400000)

  • 쿼리 파라미터로 최소 수강료 입력
  • 해당 금액 이상 수강료 납부 학생만 반환
  • 없으면 404 에러

기타 구현 요소

  • MongoDB 연결 및 데이터 입력 예시 포함
  • Pydantic 모델로 입력/출력 데이터 구조 명확화
  • ObjectId 변환 등 JSON 직렬화 헬퍼 함수 사용
  • FastAPI 서버 실행 및 Jupyter 환경에서 비동기 패치(nest_asyncio) 적용

실행 및 출력 예시

  • 각 API 요청/응답 결과를 스크린샷으로 첨부
  • 등록/조회/필터 결과를 JSON 형태로 반환

 

 

내일은 근로자의 날, 내일 모레는 휴가로 인해 이번주는 오늘로써 마무리 한다. 주말내내 행사나 개인일정으로 쉬지를 못하고 신경쓸 게 많아서 그랬는지 월욜날 코피도 쏟고 그래서 내일은 수액도 맞으러 갈 생각이다..그러고 연휴동안 푹쉬어야지..

 

 

 

 

 

 

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.

저작자표시 비영리 변경금지 (새창열림)

'HANCOM' 카테고리의 다른 글

[스나이퍼팩토리] 한컴AI아카데미 67~71일차 : 25.05.12(월)~16(금)  (3) 2025.05.16
[스나이퍼팩토리] 한컴AI아카데미 65~66일차 : 25.05.07(수)~09(금)  (2) 2025.05.09
[스나이퍼팩토리] 한컴AI아카데미 60일차 : 25.04.25(금)  (3) 2025.04.25
[스나이퍼팩토리] 한컴AI아카데미 58~59일차 : 25.04.23(수)~22(목)  (6) 2025.04.24
[스나이퍼팩토리] 한컴AI아카데미 56~57일차 : 25.04.21(월)~22(화)  (0) 2025.04.22
'HANCOM' 카테고리의 다른 글
  • [스나이퍼팩토리] 한컴AI아카데미 67~71일차 : 25.05.12(월)~16(금)
  • [스나이퍼팩토리] 한컴AI아카데미 65~66일차 : 25.05.07(수)~09(금)
  • [스나이퍼팩토리] 한컴AI아카데미 60일차 : 25.04.25(금)
  • [스나이퍼팩토리] 한컴AI아카데미 58~59일차 : 25.04.23(수)~22(목)
DS벨르
DS벨르
  • DS벨르
    Adamas
    DS벨르
  • 전체
    오늘
    어제
    • 전체 글 (50)
      • HANCOM (46)
      • React (2)
      • React Native (2)
      • Project (0)
        • Ddudda (0)
        • AI Coding Assistant (0)
  • 링크

  • 공지사항

  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
DS벨르
[스나이퍼팩토리] 한컴AI아카데미 61~63일차 : 25.04.28(월)~30(수)
상단으로

티스토리툴바