전체 글89 django channels를 이용한 실시간 알림 Django에서 실시간 알람을 구현하기위해서는 웹소켓을 통해서 사용자와 서버와의 실시간 연결을 통해 메세지를 보내야합니다. 이거를 하기위해서 asgi서버인 daphne 서버 세팅을 하고 알림의 조건에 맞추어서 ws로 메세지를 보내면됩니다 이거를 하기위해서 메세지 브로커인 redis를 settings에 설정을 해주고 INSTALLED_APPS에 daphne를 추가시켜줍니다 INSTALLED_APPS = [ "daphne", ... ] CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [("redis", 6379)], }, }, } ASGI_APPLICATION = "프로.. 내일배움 캠프/TIL 2023. 7. 20. django-channels Channels는 장고를 사용하여 HTTP를 넘어 웹소켓, 채팅 프로토콜, IoT 프로토콜 등을 처리할 수 있는 기능을 확장하는 프로젝트입니다. ASGI라는 파이썬 사양을 기반으로 합니다. 채널은 장고의 네이티브 ASGI 지원을 기반으로 구축됩니다. Django는 여전히 기존의 HTTP를 처리하지만 Channels는 동기식 또는 비동기식으로 다른 연결을 처리할 수 있는 선택권을 제공합니다. channels은 여러 패키지로 구성됩니다 Channels, 장고 통합 계층 HTTP 및 웹 소켓 종료 서버인 Daphne 기본 ASGI 라이브러리인 asgiref channels_redis, Redis 채널 계층 백엔드(옵션) Django Channels의 주요 특징과 개념은 다음과 같습니다: 웹 소켓 지원: 웹 소.. 내일배움 캠프/TIL 2023. 7. 20. asgi 서버랑 wsgi서버의 차이점 ASGI(Asynchronous Server Gateway Interface)와 WSGI(Web Server Gateway Interface)는 웹 서버와 웹 애플리케이션 간 통신을 중개하는 인터페이스입니다. ASGI는 WSGI의 발전된 형태로 비동기 웹 애플리케이션을 지원합니다. 이 둘의 주요 차이점은 다음과 같습니다 동기 vs. 비동기: WSGI: WSGI는 동기적인 방식으로 요청과 응답을 처리합니다. 한 번에 하나의 요청만 처리하며, 요청이 끝나기 전까지 다른 요청은 처리되지 않습니다. ASGI: ASGI는 비동기적인 방식으로 요청과 응답을 처리합니다. 여러 개의 요청을 동시에 처리할 수 있으며, 비동기 I/O를 사용하여 효율적인 처리를 가능하게 합니다. 확장성: WSGI: WSGI는 동기적인 특성.. 내일배움 캠프/TIL 2023. 7. 19. 웹소켓이란 웹소켓(WebSockets)은 실시간 통신을 위한 표준 프로토콜로, 서버와 클라이언트 간 양방향 통신을 제공합니다. 웹소켓이란? 웹소켓은 HTML5 표준으로, 클라이언트와 서버 간 지속적인 연결을 가능케 하는 프로토콜입니다. HTTP와 달리 양방향 통신을 지원하며, 실시간 데이터 전송에 적합합니다. 웹소켓의 동작 방식 웹소켓은 클라이언트와 서버 간의 TCP 연결을 수립합니다. 연결이 수립되면, 클라이언트와 서버 간 데이터를 양방향으로 주고받을 수 있습니다. 서버나 클라이언트에서 메시지를 보내면 상대방에게 즉시 전달됩니다. 웹소켓의 장점 실시간 통신: 서버로부터 즉시 데이터를 수신하고, 서버로 데이터를 전송할 수 있습니다. 효율적인 통신: 웹소켓은 HTTP 연결을 유지하므로, 데이터를 전송하기 위한 추가적.. 카테고리 없음 2023. 7. 19. simple jwt token 커스터마이징 django에서 simple jwt token을 통해서 로그인을 구현하려고 하는데 로그인이 실패했을때의처리를 하기위해서 로그인 과정을 커스터 마이징을 하려고 공식문서를 읽었는데 ???? 대체 어떻게 커스텀을 해야할지 모르겠어가지고 그냥 코드를 봤었다... 대충 보니까 주로 사용하는 리프레시랑 엑세스 토큰은 위에있는 validate를 통과해야지 토큰이 발급되는 형식인거같은데 여기에서 로그인이 틀렸을떄 처리를 위해서 어떤식으로 해야할지 생각을 해봤었다 그래서 그냥 오버라이딩을 해서 해결하겠다는 마인드로... 이런느낌으로 작성해서 에러를 raise하는 경우를 바꾸고 원하는 값을 추가 시켜서 원하는 결과를 도출시켯따~ 내일배움 캠프/TIL 2023. 6. 15. celery를 사용한 비동기 처리 django에서 메일을 보내는 프로세스를 실행하는 동안 이게 다른 프로세스를 실행을 하지못하니까 약간 시간적으로 손해를 보는거같다는 느낌이 들었다 그래서 이거를 해결하고자 메일보내기같은 좀 시간이 걸리는 부분은 celery같은 비동기 처리 모듈을 이용해서 처리를 하고 그 뒤에 있는 코드를 실행하게 해서 조금더 시간을 절약하고자 했었다 celery 설치방법 pip install celery pip install 을 사용해 celery를 설치후에 원하는 브로커를 선택해서 setting.py url에 넣어줘야 합니다 브로커를 사용하는 이유는 비동기 작업 분산, 작업의 안정성과 지속성, 작업의 우선순위와 스케줄링, 확장성과 유연성 같은 이유때문에 celery를 사용해서 비동기 처리를 하기위해서는 브로커를 선택해.. 내일배움 캠프/TIL 2023. 6. 14. django_cron 을 통한 스케줄러 사용 프로젝트를 진행하던 도중 유저가 몇개월 이상 접속하지않거나 탈퇴한지 특정기간이 지나게 되면 회원정보를 삭제하는 코드를 구현하고 싶었는데 이거를 사용하기위해서는 특정시간마다 db를 돌려서 해당조건에 맞는 유저를 찾아서 변환을 해줬어야 해서 이거를 처리하기 위해서 어떤 방법이 좋을까 고민하다가 튜터님께서 알려주신 django-cron을 사용했습니다 settings.py 에 추가하고자하는 작업을 추가해주고 CRON_CLASSES = [ "user.cron.MyCronJob", ] 해당 코드와같이 작성해주면 매 00시마다 작동을 하는 코드가 되게된다 from django_cron import CronJobBase, Schedule class MyCronJob(CronJobBase): RUN_TIME = ["00.. 내일배움 캠프/TIL 2023. 6. 14. 12주차 WIL FACTS(사실, 객관) 이번 일주일동안 있었던 일, 내가 한 일 도커공부 vue js공부 FEELINGS(느낌, 주관) 나의 감정적인 반응, 느낌 개인 공부한주라서 그런지 되게 무난하게 지나간거같다 FINDINGS(배운 것) 그 상황으로부터 내가 배운 것, 얻은 것 docker로 하는게 직접 업로드하는거보다 되게 편한거같았고 vue가 굉장히 재미있었다 FUTURE(미래) 배운 것을 미래에는 어떻게 적용할 지 이번 최종에서는 한번 vue를 사용해서 프로젝트를 구현해보고 십다 내일배움 캠프/WIL 2023. 6. 5. vue router Vue 라우터란 무엇인가요? Vue 라우터는 Vue.js 애플리케이션에 페이지 네비게이션을 추가하기 위한 공식 라이브러리입니다. 이를 통해 애플리케이션의 URL을 기반으로 다양한 라우팅 기능을 구현할 수 있습니다. Vue 라우터를 사용하면 싱글 페이지 애플리케이션(Single-Page Application, SPA)의 사용자 경험을 향상시킬 수 있습니다. Vue 라우터의 주요 기능 라우팅: Vue 라우터는 URL과 컴포넌트를 매핑하여 페이지 간의 전환을 관리합니다. 각 URL에 대한 컴포넌트를 설정하고, 사용자가 URL을 변경할 때 해당 컴포넌트를 렌더링합니다. 중첩 라우팅: Vue 라우터는 중첩된 라우트 구조를 지원하여 여러 수준의 라우팅을 구성할 수 있습니다. 이를 통해 복잡한 애플리케이션을 구성할 .. 내일배움 캠프/TIL 2023. 6. 5. 코딩테스트 2016년 def solution(a, b): yo_il = {0:"THU",1:"FRI",2:"SAT",3:"SUN",4:"MON",5:"TUE",6:"WED"} date = [30,31] date2 = [31,30] tot_day = 0 for month in range(1,a): if month 2: tot_day -=1 tot_day+=b return yo_il[tot_day%7] 배열로 30 31 를 돌아가게해서 월수를 에 있는 날짜를 세고 윤년이기 때문에 3월부터는 1일빼서 총 달의 일수를 구하고 day를 더한다음에 7로 나눠서 무슨요일인지 구했다 내일배움 캠프/TIL 2023. 6. 2. LV.1 대충 만든 자판 해당 문제를 풀기위해 각 키별로 타이핑이 가장 적게드는 값만 dic에 저장을 해서 targets에 있는 값을 dic의 value로 치환해서 그 값들을 모두 더하면 targets에 있는 타이핑을 하기위해 필요한 타이핑이 나올거라고 생각을 했다 그래서 먼저 keymap에있는 알파벳을 for문을 돌려서 enumerate를 통해서 key : index 방식으로 저장이 되게 했다 dic = {} for keymaps in keymap: for i,key in enumerate(keymaps,1): if not dic.get(key) or dic.get(key,0) > i: dic[key]=i 이방식으로 keymaps에 있는 값들을 전부 dictionary에 저장을 해서 이제 targets에 있는 값하고 비교를 해.. 카테고리 없음 2023. 6. 1. 내가 보고 베끼려고 저장해둔 리눅스 명령어 디렉토리를 생성하고 이동해보기 mkdir / 디렉토리 생성하기 mkdir ./test # 현재 경로에 test 디렉토리 생성하기 mkdir ./test/test2 # test 디렉토리 안에 test2 디렉토리 생성하기 mkdir /home/ubuntu/test3 # /home/user 경로에 test3 디렉토리 생성하기 pwd / 현재 경로 확인하기 pwd # 현재 경로 확인 cd / 경로 이동하기 cd ./test # 현재 경로의 test 디렉토리로 이동 cd ./test/test2 # test 디렉토리 안에 test2 디렉토리로 이동 cd ../test3 # 상위 디렉토리의 test3 디렉토리로 이동 cd /home/user/test4 # /home/user/test4 디렉토리로 이동 ls / 파일 .. 내일배움 캠프/TIL 2023. 5. 31. 이전 1 2 3 4 5 ··· 8 다음