본문 바로가기

전체 글101

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.
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.
Docker를 활용한 서버 배포 (3) : Dockerfile로 이미지 빌드 직접 Dockerfile을 사용하여 토커 이미지를 생성하고 컨테이너를 실행하여 배포과정을 실습해 보려 한다. Dockerfile  Dockerfile은 Docker 이미지를 생성하기 위한 설정 파일로, 애플리케이션 실행에 필요한 종속성, 설정, 명령어 등을 명시합니다. 이를 통해 애플리케이션을 컨테이너 화하여 어디서나 일관된 환경에서 실행할 수 있습니다.Dockerfile 명령어 FROM : 베이스 이미지를 지정.RUN : 이미지를 생성하는 동안 실행할 명령어를 입력.CMD : 컨테이너를 생성할 때, 실행할 명령어를 입력.ENTRYPOINT : 컨테이너 시작할 때, 실행할 명령어를 입력, CMD와 함께 사용하여 유연성 제공.COPY : 로컬 파일 또는 디렉토리를 컨테이너 이미지로 복사.WORKDIR : .. 2024. 12. 30.
Docker를 활용한 서버 배포 (2) : 이미지와 컨테이너 다루기 Docker 이미지는 컨테이너 내에서 애플리케이션을 실행하는 데 필요한 라이브러리 및 설정 값 등을 포함하고 있다. 이미지를 통해 만들어진 Container는 소프트웨어가 패키징 되어 있어 다른 운영 체제 환경에서도 동일하게 실행될 수 있으며, 여러 컨테이너가 동일한 이미지를 기반으로 동시에 작동할 수 있다. Docker Hub에서 이미 만들어진 이미지를 다운로드할 수도 있고, Dockerfile을 사용해 직접 이미지를 만들 수도 있다. 만들어진 이미지는 AWS EC2와 같은 클라우드 환경에서도 다운로드하여 소스 코드 없이 쉽게 배포할 수 있다.Docker 이미지를 다운로드하고, 컨테이너를 만들고 실행하는 방법을 실습을 통해 알아보자.Docker 이미지 다운로드docker pull ubuntu#출력 내용.. 2024. 12. 21.
Docker를 활용한 서버 배포 (1) : Docker 이해 Docker는 컨테이너화 기술을 제공하며, 애플리케이션과 그 실생 환경을 패키징하고 배포할 수 있게 해 준다. 이를 통해 일관된 실행 환경과 빠른 배포 및 확장 등이 가능하다. Docker 사용 이유 과거 소프트웨어 개발 주기: 폭포수 모형 과거에는 소프트웨어 개발 주기에서 폭포수 모형을 사용했다. 이 방식은 개발 과정의 한 단계가 끝나야 다음 단계로 넘어갈 수 있는 구조이다. 하지만 다음과 같은 문제점이 있었다:문제가 발생하면 이전 단계로 돌아가는 데 많은 시간과 비용이 소요된다.과정이 병행 수행되지 않아 비효율적이다.배포 후 문제가 발생하면 롤백과 수정을 반복해야 하며, 여러 서버에 수동으로 하나하나 배포해야 했다. 현대 소프트웨어 개발 주기: 애자일 모형 현재는 애자일 모형을 주로 사용한다. 이 방.. 2024. 12. 18.
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.
[Django]WebSocket을 활용한 실시간 랭킹 구현 목표실시간 접속자 수를 표시하고 이를 바탕으로 채팅방 랭킹을 제공하고 싶었다. 구현 목표1. 실시간 접소자 표시 : 홈 화면의 각 채팅방마다 접속자 수를 표시2. 접속자 수에 따른 랭킹 제공 : 접속자가 많은 순서대로 랭킹을 실시간으로 표시 홈 화면에서 채팅방 리스트에 실시간으로 채팅방의 접속자 수를 표시하고 또 접속자 수에 따라 랭킹이 기능을 구현하고 싶었다. 하지만 채팅방 접속/퇴장 시마다 서버에 요청을 보내야 했는데, 이는 서버 부화를 유발할 가능성이 있다고 생각했다.  이를 해결하기 위해 WebSocket을 활용해 API 요청을 줄이고 실시간 데이터를 주고받는 방식으로 구현하기로 했다. 구현 방법  1. WebSocket Consumers 구조-myProj -app -consumers -ch.. 2024. 12. 7.