본문 바로가기

Python/Django6

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.
[Django]WebSocket을 활용한 실시간 랭킹 구현 목표실시간 접속자 수를 표시하고 이를 바탕으로 채팅방 랭킹을 제공하고 싶었다. 구현 목표1. 실시간 접소자 표시 : 홈 화면의 각 채팅방마다 접속자 수를 표시2. 접속자 수에 따른 랭킹 제공 : 접속자가 많은 순서대로 랭킹을 실시간으로 표시 홈 화면에서 채팅방 리스트에 실시간으로 채팅방의 접속자 수를 표시하고 또 접속자 수에 따라 랭킹이 기능을 구현하고 싶었다. 하지만 채팅방 접속/퇴장 시마다 서버에 요청을 보내야 했는데, 이는 서버 부화를 유발할 가능성이 있다고 생각했다.  이를 해결하기 위해 WebSocket을 활용해 API 요청을 줄이고 실시간 데이터를 주고받는 방식으로 구현하기로 했다. 구현 방법  1. WebSocket Consumers 구조-myProj -app -consumers -ch.. 2024. 12. 7.
[Django] ORM N+1 문제 해결 : 지연로딩 문제  채팅방 리스트를 조회할 때, 채팅방 수에 비례해 쿼리 수도 함께 증가하는 문제가 발생했다. 이로 인해 요청 처리시간도 증가했다. 원인 : N+1 문제 #views.py ...chat_rooms = ChatRoom.objects.all()rooms=[]for room in chat_rooms: data ={ "name": room.name, "id":room.id, "users": room.users.count(), "add_date" : room.add_date, } rooms.append(data) ... 채팅방 목록을 조회하는 코드이다. 여기서 모든 채팅방을 조회하고 반복문을 통해 데이터를 저장하는데 채팅방에 접속한 유저를.. 2024. 12. 1.
[Django]데이터베이스 vs Redis: 실시간 접속자 관리 성능 비교와 최적화 문제 채팅 프로젝트를 진행하며 문제가 발생했다. 접속자 API 데이터를 불러오지 못함.기존 접속자는 새로운 사용자가 들어와도 접속자 목록에 반영되지 않음. 실시간 사용자가 많은 경우 채팅방 연결마다 DB 요청이 증가해 병목현상이난 쿼리 처리 속도가 느려질 가능성이 있어 개선할 필요성을 느꼈다.원인기존의 데이터 흐름채팅방 입장 → 사용자 정보 저장  → 웹소켓 접속 → 접속자 리스트 전송 → 데이터 수신  처음엔 데이터베이스에 즉각적으로 저장된 값을 가져오는 방식이 문제라고 생각했으나, 웹소켓 종료 시 사용자 데이터를 제거하는 과정에서 예상치 못한 문제가 있었다. 그리고 React의 안정성을 위한 중복 요청으로 인해 웹소켓이 두 번 연결되며 데이터가 누락되거나 저장되지 않는 경우가 있음을 확인했다.또한, .. 2024. 11. 30.
Django와 React 연결 시 발생하는 CORS 문제 해결 방법 문제 Django와 React를 연결하는 도중 아래와 같은 문제가 발생했다.이 문제는 React에서 Django 서버로 요청하는 과정에서 발생한 CORS(Cross-Origin Resource Sharing) 문제다. 이는 프런트엔드와 백엔드의 도메인이 다를 경우 브라우저가 요청을 차단하며 발생한다. 브라우저는 기본적으로 동일 출처 정책(Same-Origin Policy)을 강제하기 때문이다. 동일 출처 정책동일 출처 정책은 보안을 강화하기 위해 클라이언트와 서버 간 출처(origin)가 다르면 요청을 차단하도록 설계된 보안 메커니즘이다. 이는 잠재적인 악성 문서를 격리하여 공격 벡터를 줄이는 데 도움을 준다. 예를 들어:Django 서버: http://127.0.0.1:8000React 클라이언트: h.. 2024. 11. 24.