AI 웹 개발 과정 92

DRF 커스텀 JWT 클레임 , 프론트엔드에서 JWT 환경 구성

JWT claim custumizing serializer를 활용하여 simplejwt에서 제공하는 기본 정보 이외에 포함하고 싶은 정보를 payload에 추가적으로 넣을 수 있다. 1) user/jwt_claim_serializer.py 파일 생성 후 작성 # TokenObtainPairSerializer를 임포트해서 새로생성할 serializer에 상속 시켜줘야한다. from rest_framework_simplejwt.serializers import TokenObtainPairSerializer # TokenObtainPairSerializer를 상속하여 클레임 설정 class SpartaTokenObtainPairSerializer(TokenObtainPairSerializer): @classm..

docker - nginx/gunicorn

Nginx / Gunicorn 의 역할 python manage.py runserver 는 개발용 서버이기 때문에 디버깅이 찍히고 대량의 트래픽, static 파일들을 서빙하는데에는 문제가 있다. 따라서 배포를 할때는 runserver 대신 nginx 서버와 연동이 필요하다. nginx 와 django 연결을 가능케 하는게 gunicorn(웹서버게이트웨이인터페이스) 이다. gunicorn 연결하기 1) 배포용 docker-compose 만들기 docker-compose.prod.yaml 파일 생성 2) gunicorn 설치 pip install gunicorn 3) freeze pip freeze > requirements.txt 4) docker-compose.prod.yaml 작성 command: g..

docker 명령어

# 컨테이너 리스트 docker ps # 정지된 컨테이너 리스트까지 포함 docker ps -a # 이미지 리스트 docker image ls # 컨테이너 실행 docker run -dp 3000:3000 getting-started # 컨테이너 실행 with 볼륨 docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started # 컨테이너에서 쉘 열기 docker exec -it {id} /bin/sh # 컨테이너 정지 docker stop {id} # 컨테이너 삭제 docker rm {id} # 컨테이너 정지 & 삭제 docker rm -f {id} # 이미지 태그하기(소스 이미지에서 타겟이미지로) docker tag {sourceimagename} {..

알고리즘 - 3주차 [스택, 큐, 해쉬]

Stack : 한쪽으로만 자료를 넣고 뺄 수 있는 자료 구조. Last In First Out (LIFO) push(data) : 맨 앞에 데이터 넣기 pop() : 맨 앞의 데이터 뽑기 peek() : 맨 앞의 데이터 보기 isEmpty(): 스택이 비었는지 안 비었는지 여부 반환해주기 class Node: def __init__(self, data): self.data = data self.next = None class Stack: # 자료 구조 def __init__(self): self.head = None def push(self, value): # 메소드 new_node = Node(value) self.head.next = self.head self.head = new_node return..

타임어택 07/08 - JWT 인증된 사용자만 접근 할 수 있는 View

Q1. 프로젝트에 jwt 인증을 사용해서 access token을 발급하도록 simple jwt 설정하기 - ACCESS_TOKEN_LIFETIME은 50분, REFRESH_TOKEN_LIFETIME은 1일로 설정 구현) DRF JWT install pip install djangorestframework-simplejwt 프로젝트 settings.py 추가 INSTALLED_APPS = [ ... 'rest_framework_simplejwt', ] # 토큰 유효시간 설정 from datetime import timedelta SIMPLE_JWT = { # Access 토큰 유효 시간 설정하기 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=50), # Refresh 토큰 ..

django-dotenv

dotenv 개발한 앱을 github등 외부에 업로드 할 때, DB의 비밀번호나 AWS Account 정보 같이 중요한 정보들이 노출되는 것을 막기 위해 환경변수를 설정해서 관리 할 수 있다. 1. dotenv install pip install django-dotenv 2. django 프로젝트 경로에 .env 파일 생성 3. .env 작성 DJANGO_SECRET_KEY = "DJANGO_SECRET_KEY 값" DB_USER = "DB_USER 값" ... 4. settings.py 추가 (환경변수 값이 필요한 파일에) import os ... SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY")# .env에서 추가한 변수명에 맞게 5. manage.py 추가 im..

nginx / gunicorn

Nginx 엔진엑스 동시접속 처리에 특화된 웹 서버(Web Server) 프로그램 (전달자로서 역할) 웹 서버(Web Server)는 브라우저의 정적 페이지 요청을 처리하고 동적 페이지 요청인 경우 WSGI 서버를 호출하여 응답한다. 1. 정적 파일을 처리하는 HTTP서버로서의 역할 웹서버의 역할은 HTML, CSS, Javascript, 이미지와 같은 정보를 웹 브라우저(Chrome, Iexplore, Opera, Firefox 등)에 전송하는 역할을 한다. (HTTP 프로토콜을 준수) 2. 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할 클라이언트가 서버에 요청하면, 프록시서버(Nginx) 가 배후서버(reverse server)로부터 데이터를 가져오는 역할을 한다. 웹 응용프로그램 서버에..

django 프로젝트 docker 사용하여 ec2 배포까지

1. django 프로젝트 폴더에 Dockerfile 생성하기 Dockerfile FROM python:3.8-alpine ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # alpine 리눅스 패키지 업데이트 RUN apk update # 필요한 패키지 추가 RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev # .txt 파일을 컨테이너의 다음 경로에 복사한다. COPY requirements.txt /usr/src/app/ # 작업 경로 WORKDIR /usr/src/app # 경로에서 복사한 파일 실행 RUN pip install -r requirements.txt # 현재 폴더에 있는 파일들을 컨..

testcode 작성

https://hamait.tistory.com/635 파이썬의 함정 - 2 (@classmethod 와 @staticmethod 의 차이) 파이썬의 함정 - 2 @classmethod 와 @staticmethod 의 차이 자바나 C++ 베이스에서 파이썬으로 옮겨 왔을때 가장 실수하기 쉬운 부분에 대해서 살펴보겠습니다. 특히나 클래스 메소드와 정적 메소 hamait.tistory.com @classmethod Class Person: @classmethod def formBirthYear(cls, name, birthYear): return cls(name, date.today().year - birthYear) def display(self): ... person1 = Person.fromBirthYe..