Python15 CORS 에러와 Cookie 문제 해결기 / FastAPI, next.js 연동 이번에 새로운 프로젝트를 진행하며 Auth 로그인 기능을 구현했다.로그인 시 인증을 위해 토큰 값을 쿠키에 저장해야 했는데, 예상치 못한 문제가 발생했다. 백엔드 서버를 배포한 뒤 프론트엔드 팀에게 Endpoint를 제공했는데,프론트엔드의 로컬 개발 URL과 백엔드 서버 주소가 서로 달라서쿠키에 토큰 값이 제대로 저장되지 않는 현상이 생겼다. 이 문제는 CORS(Cross-Origin Resource Sharing)와 관련된 전형적인 이슈였다.서버 간 출처(Origin)가 다를 경우, 브라우저가 보안을 위해 쿠키를 차단하기 때문이다. 처음에는 프록시 서버를 구성하는 방법으로 접근하려 했지만,로컬 환경에서는 복잡한 설정 없이도 간단히 해결할 수 있었다.결국 hosts 파일을 수정해 로컬 URL을 맞추는 방.. 2025. 10. 8. AI 모델 비교하기 GPT, Deepseek, Mistralai AI 모델 선택하기적합한 AI 모델 선택교수안 제작을 위해 적합한 AI 모델을 적용해야 했으며, 원하는 답변을 얻기위해 AI를 학습시킬 필요가 있었다. Deepseek과 Mistralai를 검토했지만, 한국어 지원이 부족한 부분이 있었고, 로컬 환경에서의 성능과 학습 시간 등을 고려했을 때 적합하지 않았다.이에 따라 로컬환경의 제약 없이 파인튜닝이 가능한 OpenAI를 선택하게 되었다.AI 모델 선택 비교 표모델 이름 한국어 지원 성능 로컬 환경에서의 성능 적합성skt/kogpt2-base-v2탁월한 한국어 지원다소 느림 (GPU 필요)질문 응답, 문장 완성, 챗봇 등에 적합하지만 교수안 제작에는 미흡mistralai/Mistral-7B-Instruct-v0.3영어 지원에 최적화로컬 환경에서 비효율적 (.. 2025. 4. 4. FastAPI와 Django 비교 테스트 공모전 프로젝트에서 백엔드 서버는 Django / Flask / Fast API 중에서 하나를 선택해서 사용을 해야 했다.처음에는 Django를 사용하려 했다. 기존에 자주 사용해 익숙하고 빠르게 구현할 자신이 있었기 때문이다. 하지만 AI 응답 서비스에서는 빠른 응답 속도와 동시 작업 처리 능력이 핵심이라고 판단했다. 이에 따라 Django와 FastAPI의 성능을 비교한 후 선택하기로 했다. FastAPI 코드 작성Fastapi 설치pip install fastapiUvicorn 설치 pip install uvicornFastAPI를 실행하려면 비동기 호출을 지원하는 Python 웹 서버인 Uvicorn이 필요하므로 함께 설치했다. main.py 파일 생성 및 코드 작성from fastapi impo.. 2025. 3. 13. 데이터분석 이해 : Pandas 기초 새로운 프로젝트를 시작하면서 머신러닝 기능을 구현해야 했습니다. 정확한 결과를 도출하기 위해 데이터 분석과 가공이 필수적이었고, 이를 위해 데이터 분석 기초와 Pandas 사용법을 정리했다. '혼자 공부하는 데이터분석 with 파이썬'과 코랩을 사용해서 공부했습니다. 데이터분석 유용한 정보를 발견하고 결론을 유추하거나, 의사 결정을 돕기 위해 데이터를 조사, 정제, 변환, 모델링하는 과정으로 비즈니스 결정을 과학적으로 내리기 위한 도구로 사용된다. CSV 한 줄이 레코드이며, 콤마(,)로 구분된 텍스트 파일이다. CSV 파일 읽기 한글로 된 CSV파일일 경우 글자가 깨져서 나오는 경우가 있다. 이 경우는 인코딩이 비트값으로 16진수로 되어 있어 발생하는 문제이다.해당 파일의 인코딩 형식을 확인하.. 2025. 1. 23. Python GC 가비지 컬렉터: 메모리 관리의 이해 Python의 가비지 컬렉터 우리가 쓰고 있는 대부분의 언어는 매니지드 코드로 런타임 환경이 더해진 언어이다. 이는 런타임 환경에 의존적인 코드인데 개발자를 위해 많은 서비스를 제공한다. 대표적으로 가비지 콜렉터(GC)가 있다. 언매니지드 언어는 하드웨어에서 직접 실행될 수 있지만 직접 개발자를 위한 서비스를 만들어야 한다. 가비지 컬렉터는 프로그램이 동적으로 할당한 메모리 영역 중에서 더 이상 사용되지 않는 영역을 자동으로 찾아서 해제하는 프로세스이다. 왜냐하면 파이썬은 개발자가 직접 메모리를 관리하지 않고, 가비지 컬렉터가 메모리 일부를 자동화하여 관리한다. 이는 메모리 누수를 방지하고 프로그램의 안정성을 높이는 데 도움을 줍니다.가비지 컬렉터를 알아야 하는 이유 개발자 자신이 작성한 코드가 메모리.. 2025. 1. 15. Python asyncio 비동기 처리 async/await 평소 Celery를 활용한 비동기 처리를 해왔지만, 이번에는 Python에서 기본으로 지원하는 asyncio 비동기 처리에 대해 학습한 내용을 정리한다. asyncio란?asyncio는 Python에서 기본적으로 지원하는 비동기 처리 라이브러리로, 비동기 작업을 효율적으로 처리할 수 있도록 도와준다.동기 방식: 한 가지 작업이 완료된 후에야 다음 작업을 시작하는 방식.비동기 방식: 한 작업이 끝나지 않았더라도 다른 작업을 동시에 처리하는 방식으로 병렬 처리가 가능하다. 다음 Python코드를 통해 알아보자 동기 방식과 비동기 방식 비교동기 방식 다음은 서로 다른 입력 값으로 factorial(팩토이얼) 함수를 2번 실행시켜 출력하는 코드이다. import timedef factorial_sync(num.. 2025. 1. 9. Django에서 MySQL 연동하기 Django를 이용하며 SQLite는 개발 환경에서 간편하게 사용할 수 있는 파일 기반 데이터베이스로, 추가 설정 없이 바로 사용할 수 있다. 하지만, 프로덕션 환경에서는 대량의 데이터를 다룰 때 한계가 있습니다. 이에 따라 더 안정적인 MySQL을 적용해 보겠습니다.MySQL 소개 및 설치MySQL 이란? MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 테이블 형태로 저장하고 관리한다. GUI 도구인 MySQL Workbench를 통해 편리하게 관리할 수도 있다.설치하기 1. 공식 사이트에서 다운로드 MySQL 다운로드 사이트 로 들어가서 MySQL를 다운로드 한다. ( 다운로드는 MySQL설치 안내 이 블로그를 참고 했습니다. ) 2. Hombrew를 이용하는 방.. 2025. 1. 7. Django 실시간 채팅 : 이미지 전송 구현 요즘 사용하는 채팅어플은 단순히 텍스트 전송을 넘어 이미지나 파일을 공유하는 기능이 필수이다. 그래서 Django와 React를 사용하여 이미지 전송 기능을 구현했다. 이 글에서는 이미지 전송 방법에 대해 고민하고 구현하는 과정을 담았다.이미지 전송 로직처음에는 웹소켓(WebSocket)으로 직접 이미지 파일을 전송하려고 했다.웹소켓으로 이미지 파일 전송이미지 파일 저장이미지 URL 반환하지만, 웹소켓은 텍스트 기반 통신이므로 이미지 파일을 Base64로 인코딩해야 했다. 이 과정에서 파일 크기가 커지면 서버 부하와 연결 지연 문제가 발생할 수 있다는 점을 발견했다. 이러한 문제를 해결하기 위해 HTTP 요청을 통해 이미지를 업로드하고, 저장된 이미지의 URL을 반환한 뒤 이를 웹소켓으로 전송하는 방.. 2025. 1. 5. Redis-Py : ZSet(Sorted Set) 랭킹 구현 활용 ZSET은 Sorted Set으로 세트와 정렬된 목록의 기능을 결합한 Redis의 강력한 데이터 구조이다. 요소를 추가, 제거 또는 업데이트할 수 있으며, 항상 점수 또는 순위로 정렬된 순서를 유지한다. 이러한 특성 덕분에 쉽게 랭킹 시스템 구현이 가능하며 관리가 간편하다. 여기서는 ZSET의 대표적인 함수 몇 가지를 정리하려고 한다. 1. ZINCRBY : 점수 증가 및 감소특정 멤버의 점수를 증가시키거나 감소시키는 데 사용한다. 멤버가 존재하지 않으면 자동으로 추가된다.redis_client.zincrby(key, increment, member)#점수 증가 redis_client.zincrby('ranking', 10, 'player1')#점수 감소redis_client.zincrby('ranki.. 2024. 12. 8. 이전 1 2 다음