[Python] Selenium으로 네이버 플레이스 크롤링: 부산 해운대 맛집 정보 수집하기
·
Python
약 한 달 반 전, 팀 프로젝트에서 가장 먼저 시도했던 네이버 지도 크롤러 개발 과정을 공유하려 한다. 당시 내가 맡은 부분은 맛집 추천 에이전트였다. 한국에서는 네이버 플레이스가 가장 많은 정보를 보유하고 있지만 공식 API가 없었기 때문에, 초기에는 셀레니움을 활용한 동적 크롤링을 시도했다. 솔직히 동적 크롤링은 처음 해보는 거라 신기하고 흥미로웠다. 결과적으로 1박 2일 일정에 하루 3끼, 최소 15개 이상의 식당 데이터가 필요했고 크롤링 속도 문제로 인해 구글 플레이스 API로 방향을 전환했지만, 오늘은 당시 개발했던 크롤러를 다시 살펴보려 한다.개발 목표네이버 지도에서 "부산 해운대 음식점" 검색 결과 수집하기각 음식점의 이름, 카테고리, 평점, 주소 정보 추출하기자동으로 모든 검색 결과를 스크..
[Python] FastAPI JWT 인증 미들웨어 분석 – 어떻게 동작할까?
·
Python
팀원이 개발한 JWT 인증 미들웨어(jwt_auth_middleware)를 분석하면서, 미들웨어가 어떻게 동작하는지, 그리고 어떤 역할을 수행하는지 살펴보겠다.이 미들웨어는 요청과 응답을 사전에 조작 가능하도록 설계되었으며, 보안 강화를 위해 사용되었다.즉, 클라이언트가 서버로 요청을 보낼 때 미들웨어가 이를 가로채어 검증을 수행하고, 응답을 반환하기 전에 필요한 작업을 처리하는 방식으로 구현되었다.  미들웨어(Middleware)란?미들웨어(Middleware)는 요청(Request)과 응답(Response) 사이에서 특정 작업을 수행하는 소프트웨어 계층이다. 클라이언트가 서버에 요청을 보낼 때와 서버가 클라이언트에 응답을 반환할 때, 미들웨어는 중간에서 데이터를 가공하거나 검증하는 역할을 한다.Fas..
[Python] 1:1 문의 답변 이메일 전송하기(smtplib + Gmail)
·
Python
백오피스 기능 중 1:1 문의 관련 기능을 맡게 되었다. 사용자가 문의를 남기면 관리자가 관리자 페이지에서 확인할 수 있고, 답변을 달면 사용자의 이메일로 알림이 전송되도록 구현하는 작업이다. "파이썬으로 이메일 보내기"를 검색해보니 이미 많은 사람들이 관련 글을 작성해둬서 비교적 쉽게 진행할 수 있었다.특히 Gmail을 활용하는 방법이 가장 많이 소개되어 있어, smtplib를 사용해 개발을 진행했다. Gmail을 이용한 SMTP 설정 방법1. Google 계정 보안 설정에서 ‘앱 비밀번호’ 검색 2. 앱 이름을 입력하여 새로운 비밀번호 생성 3. 발급된 비밀번호를 복사하여 SMTP 설정에 사용 완성 코드from sqlmodel.ext.asyncio.session import AsyncSessionfr..
[Python] Redis를 활용한 중복 추천 방지 로직 상세 분석
·
Python
이전 글: [Python] Redis를 활용한 중복 추천 방지 캐싱 서비스 개발이전 포스팅에서는 Redis를 활용한 장소 캐싱 시스템(SpotRedisService)을 설계한 이유와 개요를 설명했다.이번 글에서는 추천 시스템에서 Redis를 활용하는 구체적인 코드를 살펴보겠다.여기서는 create_recommendation_restaurant 함수를 중심으로 Redis와 DB를 활용한 중복 추천 방지 로직을 분석하고, 각 부분별로 어떤 역할을 하는지 설명하겠다. create_recommendation_restaurant 함수 개요이 함수는 에이전트가 사용자에게 추천할 식당 목록을 생성하는 핵심 로직을 담당한다. Redis 조회 흐름도 DB 조회 흐름도 주요 기능사용자 정보 및 기존 추천 데이터 확인..
[Python] Redis를 활용한 중복 추천 방지 캐싱 서비스 개발
·
Python
중복 추천을 해결하기 위해 Redis 기반의 장소 캐싱 기능을 서비스 클래스로 설계하였고, 다른 팀원들도 쉽게 활용할 수 있도록 프로젝트 내에서 재사용할 수 있도록 공유했다. 이번 글에서는 Redis를 활용한 장소 추천 데이터 캐싱 및 중복 추천 방지 방법을 코드와 함께 자세히 설명하려고 한다. SpotRedisService: Redis 기반 장소 관리 서비스SpotRedisService 클래스는 Redis를 활용하여 사용자의 추천 장소 데이터를 관리하는 기능을 제공한다.이 클래스는 장소 데이터를 저장, 조회, 삭제하는 기능을 제공하며, Redis의 Hash 자료구조를 활용하여 효율적으로 데이터를 관리한다. 먼저 완성된 코드는 다음과 같다. 콘솔 로그에 출력되는 정보가 많아 가독성을 높이기 위해 logg..
[Python] print와 logging, 디버깅할 때 무엇을 쓸까?
·
Python
개발을 하면서 버그를 잡아야 할 때 가장 먼저 떠오르는 방법이 있다. 바로 print()를 사용하는 것이다. 나는 자바에서도 주로 print()를 사용했기 때문에 파이썬에서도 자연스럽게 print()만 활용하게 되었다. 하지만 점점 코드가 복잡해지고 유지보수가 필요한 프로젝트에서는 logging이 더 유용한 경우가 많다는 것을 알게 되었다. 오늘은 print와 logging의 개념, 장단점, 그리고 실제 사용 예시를 다뤄보려고 한다. print()의 개념과 특징print()는 파이썬에서 콘솔에 값을 출력하는 가장 기본적인 함수다. 간단한 코드에서 디버깅을 할 때 자주 사용한다. 사용 방법이 쉽고 직관적이라 개발 초반에 많이 활용된다.장점간단하고 빠르다 - 별도의 설정 없이 즉시 출력 가능하다.모든 타입을..
[Python] 동기 vs 비동기, 언제 그리고 어떻게 사용해야 할까?
·
Python
CrewAI로 에이전트를 만들던 중, 실행 속도가 느려지는 문제가 발생했다. 이에 한 팀원이 실행 성능을 개선하기 위해 각 에이전트의 실행을 비동기 처리하는 방안을 제안했다. 하지만 해당 로직은 본질적으로 비동기 처리로 해결할 수 있는 문제가 아니었고, 오히려 불필요한 구조 변경이 될 가능성이 있었다.그럼에도 불구하고 팀원 간 논의가 이어졌고, 멘토링 시간에 멘토님께서 해당 팀원의 접근 방식에 대해 피드백을 주셨다. 비동기를 모든 경우에 적용할 수 있는 것은 아니며, 상황에 따라 적절한 방식이 필요하다는 점을 강조하셨다. 또한, 우리 팀에게도 비동기의 개념과 적절한 활용법을 명확히 이해하는 것이 중요하다는 조언을 해주셨다. 이번 글에서는 동기와 비동기의 개념, 코드 예제, 실행 흐름, 관련 라이브러리, ..
[Python] FastAPI와 React 연동 및 데이터 흐름과 처리 과정
·
Python
프론트엔드와 백엔드 간 데이터 교환을 위해 FastAPI와 React를 연동해야 했다.사용자는 여행 지역, 날짜, 연령대, 동행 인원, 그리고 여행 목적을 입력한 뒤, '완료' 버튼을 누른다. 그러면 AI 에이전트가 입력된 데이터를 분석하여 최적의 여행 경로를 생성한다. 프론트엔드에서 백엔드로 데이터 전달 및 처리 과정1. React 상태 관리 - 여행 계획 입력 폼이 코드는 React의 useState 훅을 사용하여 여행 계획 입력 폼에서 필요한 상태를 관리하는 부분이다. 사용자가 입력하는 지역, 날짜, 연령대, 목적 등의 정보를 저장하고 조작할 수 있도록 설정되어 있다.지역 리스트(allRegions)는 데이터베이스(DB)에서 가져오며, 사용자가 입력한 값에 따라 필터링된 지역 리스트(filtered..
[Python] Google Maps & SerpAPI를 활용한 맛집 추천 개발기
·
Python
처음에는 LangChain을 활용해 에이전트 방식으로 구현하려 했는데, 생각처럼 잘되지 않았다. 정확한 데이터를 가져오는 데 어려움이 있었다. 그래서 일단 기본적인 API 호출로 정확한 데이터를 수집하고 리스트를 가져오는 테스트부터 하는 방향으로 전략을 바꿨다.💡테스트 목표✔ 여행 계획에 맞춘 맞춤형 맛집 추천을 제공하는 것✔ 리뷰 수와 평점이 높은 곳만 필터링하는 것✔ 최대한 정확한 데이터를 가져오는 것 현재 Google Geocoding API를 이용해 사용자가 입력한 지역의 좌표를 가져오고, SerpAPI를 활용해 그 지역에서 평점이 높은 맛집을 자동으로 검색하는 기능을 구현했다. SerpAPI란?Google 검색 결과를 API로 제공하는 서비스로, Google Maps, 뉴스, 이미지 등 다양한..
[Python] SQLAlchemy와 SQLModel의 모든 것: 데이터베이스 작업의 핵심 도구
·
Python
이전글과 이어지는 내용이다. SQLAlchemy과 SQLModel에 대하여 알아보자.이전글 - Pydantic으로 안전하고 효율적인 데이터 검증하기 SQLAlchemy란?Python에서 가장 널리 사용되는 데이터베이스 ORM(Object Relational Mapper) 및 SQL 툴킷이다. SQLAlchemy는 Python 코드와 데이터베이스 간의 상호작용을 단순화하고, SQLAlchemy Core와 ORM(Object Relational Mapping)이라는 두 가지 주요 컴포넌트를 제공한다. ORM이란?객체 지향 프로그래밍 언어의 객체를 데이터베이스의 테이블과 매핑하여, SQL을 직접 작성하지 않고도 데이터베이스를 조작할 수 있게 해주는 도구나 기술이다. 1. SQLAlchemy의 주요 컴포넌트SQ..