분류 전체보기
Django Channels - 채팅 기능 구현하기 - 1
채팅 기록을 저장하는 부분에서 고민이 있었다. DB 에 insert 하기에는 RDB에 자꾸 hit 하면 성능 문제가 있을 거 같았다. 그래서 redis 에 저장하는 것으로 결정했다. 우선 채팅룸은 sender 의 id 와 receiver 의 id 로 만들었다. id 의 크기를 비교해서 id 가 작은 쪽으로 채팅방을 만들었다. 그리고 chat room 을 들어갔을 때 redis 에서 history 를 가져오도록 했다. redis 에서 채팅 기록을 저장할 때 json 형식으로 저장하는데 이를 파이썬 객체로 load 시켰다. 그리고 프론트에서 풀어서 보여주었다. 이제 고민은 읽은 사람 표시를 어떻게 보여주냐인데, 당장 떠오르는 건 실시간 채팅에서는 채팅방에 접속한 인원수를 빼면 될 거 같은데, 이전 기록에서는..
Django Channels - Consumer 살펴보기
채팅 기능을 구현하려고 찾아보다 Django channels 라는 라이브러리를 보았다. 구현도 tutorial을 보고 따라가면 무리없이 구현할 수 있을 정도로 잘 정리되어 있었다. 그래서 구현에 대한 글을 쓰기보단 consumer, routing 등을 자세하게 살펴보고자 한다. Django Channel Introduction Channels는 Django의 기본 비동기 뷰 지원을 래핑하여, HTTP뿐만 아니라 장기 실행 연결이 필요한 프로토콜 - WebSockets, MQTT, 챗봇, 아마추어 라디오 등을 처리할 수 있도록 합니다. 이를 위해 Django의 동기 및 사용하기 쉬운 특성을 유지하면서, 동기식 Django 뷰와 유사한 스타일로 동기식으로, 완전히 비동기식으로 또는 둘 다의 혼합 방식으로 코..
WebSocket 살펴보기 - 2
2023.05.05 - [Django] - WebSocket 살펴보기 어제 쓴 글에 이어 WebSocket 에 대해 좀 더 살펴보고자 한다. WebSockets 특징 서버와 브라우저 간 연결을 유지한 상태로 데이터를 교환할 수 있다. 이때 데이터는 패킷 형태로 전달되며, 전송은 커넥션 중단과 추가 HTTP 요청 없이 양방향으로 이뤄진다.(HTTP는 요청에 대한 응답이 오면 연결을 끊기 때문에 지속적인 연결을 할 수 없다.) 이런 특징 때문에 온라인 게임이나 주식 트레이딩 시스템같이 데이터 교환이 지속적으로 이뤄져야 하는 서비스에 아주 적합하다. 작동 원리 웹소켓은 TCP/IP 프로토콜 위에서 동작한다. 클라이언트가 서버에 웹소켓 연결 요청을 보낸다. 서버는 웹소켓 연결 요청을 받으면, 연결을 수립한다. ..
Websocket
채팅 기능을 구현할 일이 생겨서 구현하던 중 Websocket 에 대해 궁금해서 공부를 해봤다. WebSocket은 웹 브라우저와 웹 서버 간의 양방향 통신을 가능하게 하는 기술이다. HTTP 프로토콜과 달리, WebSocket은 연결을 유지하며 데이터를 전송할 수 있다. 이를 통해 실시간으로 데이터를 주고받을 수 있어서, 채팅 애플리케이션, 주식 시세 정보 등을 실시간으로 제공하는 서비스에서 사용된다. WebSocket은 일반적으로 TCP/IP 기반으로 작동하며, 클라이언트와 서버 간의 소켓 연결을 설정한다.
Celery shared_task
celery 로 schedule 작업을 처리하던 중 celery app 밖에 있는 모듈을 임포트 할 때 error가 났다. 공식문서를 보고 살피던 중 celery app 밖에 있는 app 을 임포트 할 때는 shared_task를 사용해야 했다. 예제 참조
2023.04.30 - [DevOps] - CircleCi Yaml Configure 살펴보기 2. sample config.yml
2023.04.30 - [DevOps] - CircleCi Yaml Configure 살펴보기 1 - Jobs CircleCi Yaml Configure 살펴보기 1 - Jobs 공식 문서 튜토리얼을 공부했다. 1. Jobs # CircleCI configuration file version: 2.1 jobs: build: docker: # Primary container image where all steps run - image: cimg/base:2022.05 auth: username: mydockerhub-user password: $DOCKERHUB_PASSWORD # co barun-programing.tistory.com 어제에 이어서 공식 문서 예제를 보고 config.yml을 이해해보자..
CircleCi Yaml Configure 살펴보기 1 - Jobs
공식 문서 튜토리얼을 공부했다. 1. Jobs # CircleCI configuration file version: 2.1 jobs: build: docker: # Primary container image where all steps run - image: cimg/base:2022.05 auth: username: mydockerhub-user password: $DOCKERHUB_PASSWORD # context / project UI env-var reference jobs은 새로운 컨테이너 또는 가상 머신 내에서 하나의 단위로 실행되는 단계 모음이다. jobs은 중첩된 키 쌍을 사용하여 구성에서 설정되는 Docker 컨테이너 내에서 빌드된다. docker는 사전 빌드된 CircleCI Docke..
블로킹과 논블로킹
참고 사이트 블로킹과 논블로킹의 차이는 제어권을 다른 프로세스에게 넘기느냐 마느냐의 차이이다. 블로킹은 A 함수에서 B 함수를 호출했다면 B에게 제어권을 넘긴다. 반대로 논블로킹은 B함수가 실행되더라도 B함수에게 제어권을 넘기지 않고 A가 제어권을 가진 채 태스크를 수행한다.
Script 실행 시 경로 포함하기
script 파일을 만들고 실행 시 다른 디렉토리에 있는 실행 파일을 실행 시켜야 하는 경우가 있을 수 있다. 나같은 경우에는 docker-compose 를 build 하고 테스트를 한 뒤 컨테이너들을 지우는 script 명령을 만들었다. 이 때 docker-compose 와 script 실행 파일이 다른 폴더에 위치하면서 오류를 겪었다 각 os 별로 상대 경로를 포함하여 실행하는 방법을 설명한다. 1. Window 참고 사이트 pushd “%~dp0” docker-compose -f %~dp0..\..\docker-compose-test.yml -p test down docker-compose -f %~dp0..\..\docker-compose-test.yml -p test build docker-co..
로컬 환경에서 통합 테스트 환경 구축하기 - 1. localstack
파일 업로드하는 테스트 코드를 patch를 통해 우회하는 것으로 짰는데, 다른 개발자 분이 localstack을 이용해서 테스트 환경을 구축하는 것을 보고 레퍼런스를 찾아봤다 https://techblog.woowahan.com/2638/ docker-compose 로 localstack 실행하기 https://stackoverflow.com/questions/53619901/auto-create-s3-buckets-on-localstack 공식 문서 https://localstack.cloud/ docker-compose 로 localstack 띄우기 version: '3.7' services: localstack: image: localstack/localstack environment: - SERV..