django5 Django 실시간 채팅 : 이미지 전송 구현 요즘 사용하는 채팅어플은 단순히 텍스트 전송을 넘어 이미지나 파일을 공유하는 기능이 필수이다. 그래서 Django와 React를 사용하여 이미지 전송 기능을 구현했다. 이 글에서는 이미지 전송 방법에 대해 고민하고 구현하는 과정을 담았다.이미지 전송 로직처음에는 웹소켓(WebSocket)으로 직접 이미지 파일을 전송하려고 했다.웹소켓으로 이미지 파일 전송이미지 파일 저장이미지 URL 반환하지만, 웹소켓은 텍스트 기반 통신이므로 이미지 파일을 Base64로 인코딩해야 했다. 이 과정에서 파일 크기가 커지면 서버 부하와 연결 지연 문제가 발생할 수 있다는 점을 발견했다. 이러한 문제를 해결하기 위해 HTTP 요청을 통해 이미지를 업로드하고, 저장된 이미지의 URL을 반환한 뒤 이를 웹소켓으로 전송하는 방.. 2025. 1. 5. Docker를 활용한 서버 배포 (4) : Docker-Compose로 Django 배포하기 AWS EC2의 Ubuntu환경에서 Django 백앤드 서버를 Docker기반으로 배포해 보겠습니다. 지금 까지는 개발환경(runserver)에서 Docker를 통해 작동시켰다면 배포환경에서는 Gunicorn과 Nginx를 이용해야 한다. GunicornWSGI (Web Server Gateway Interface) 서버로, Django와 같은 Python 웹 애플리케이션을 실행하는 역할.Django가 클라이언트 요청을 처리할 수 있도록 돕는다.프로덕션 환경에서의 안정성 상승. Nginx 도메인 라우팅을 관리(리버스 프록시).CSS, JS, 이미지와 같은 정적 파일을 빠르게 제공.여러 Gunicorn 워커 프로세스 또는 서버에 요청을 분산.SSL/TLS 인증서를 통해 HTTPS를 지원하고, 클라이언트.. 2024. 12. 31. [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 Cache 따닥 중복 요청 방지 문제 게시물이나 댓글을 생성하는 버튼을 화면 전환 전에 여러 번 클릭하면 동일한 요청이 중복으로 발생하는 문제가 나타났다.이로 인해 데이터베이스에는 의도와 상관없이 중복된 값이 저장되었고, 서버로 필요 없는 API 요청이 여러 번 전달되었다. 특히 결제 시스템처럼 중요한 트랜잭션이 처리되는 경우, 동일한 결제가 중복으로 발생할 가능성이 있다. 이는 금전적 손실과 사용자 불만으로 이어질 수 있으며, 심각한 신뢰도 문제 생길 수 있다. 단순히 프런트엔드에서만 처리할 경우, 개발자 도구를 이용한 요청 조작이나 네트워크 지연 등으로 인해 중복 요청이 발생할 수 있다. 이를 방지하기 위해 서버에서도 확실한 검증과 처리가 필요하다. 프런트엔드와 백엔드 모두에서 중복 요청 방지를 구현함으로써 시스템 안정성을 높.. 2024. 11. 18. 이전 1 다음