728x90
반응형

Computer Science 56

[Gunicorn] gunicorn worker timeout

Gunicorn을 이용해서 웹 서버를 돌리는데, WORKER TIMEOUT을 마주했다. 실행 시간이 너무 오래 걸려서, 자동으로 끝내버린다. 나의 경우 AI모델을 실행해야 해서 특히 더 오래 걸렸다(거의 1분). 그러나 gunicorn에서 기본적으로 제공하는 timeout은 30초. 해결 방법은, gunicorn을 실행할 때 -t옵션을 주는 것이다. gunicorn --bind 0.0.0.0:8000 server.wsgi:application -t 150 나는 장고 서버를 gunicorn을 이용해 돌렸는데, 위와 같이 마지막에 -t옵션을 주고 원하는 초를 설정하면 된다. 별개의 이야기지만, 실행 시간을 빠르게 하고 싶다면 gunicorn --bind 0.0.0.0:8000 server.wsgi:appli..

[Nginx, Django] Nginx로 Django media url 지정하기

Nginx에서는 미디어 경로를 따로 설정해주지 않으면 Django media url이 정상적으로 작동하지 않는다. 나의 경우 2개의 설정을 모두 적용해야 이미지가 정상적으로 보였다. 1. 미디어 경로 설정 Nginx의 설정 파일에 미디어 관련 url을 지정하는 방법이다. 나는 서비스를 프론트엔드(client), 백엔드(server), db, nginx 4개의 컨테이너로 분리했다. 따라서 nginx 서버의 루트 url은 프론트엔드의 빌드 파일을, api 아래는 백엔드 api를 설정하고, api로 요청이 들어오면 8000번 포트로 넘겨주도록 파일을 설정했다. 따라서 이미지에 대한 요청도 모두 8000번 포트로 넘겨주어야 한다. nginx/default.conf upstream api { server serv..

[Docker-compose, MySQL] M1 환경에서 MySQL 이미지 이용하기

In particular, the mysql image is not available for ARM64. You can work around this issue by using a mariadb image. 이 오류는 컨테이너화 한 뒤 팀원분들에게 공유하면서 발생했던 오류였다. 그렇다... Mac M1칩으로는 도커의 MySQL 이미지를 사용할 수 없다. 이미지를 Mariadb로 바꾸어야하나 고민도 했지만, 해결 방법은 의외로 간단하다. docker-compose.yml version: '3' services: db: image: mysql:8.0.22 container_name: my01 command: mysqld --character-set-server=utf8 --collation-server=ut..

[MySQL, Django, Docker compose] MySQL ERROR 2002

Django db utils OperationalError 2002 Can 't connect to MySQL server on 'localhost' (10061) 이전 글과 같은 에러지만, 이번에는 장고 서버의 오류기 때문에 따로 글을 작성했다. 그래서 이 에러는 왜 나는 것이냐, 거두절미하고 원인부터 말하자면, docker-compose 관계에서 데이터베이스의 host는 데이터베이스 컨테이너 이름이어야 한다! 그동안 host는 당연히 localhost를 써왔으니까.. 하하 당연히 localhost라고 생각했는데, db는 이제 db라는 컨테이너에서 따로 돌아가고 있기 때문에 host를 바꾸어야 하는 것이었다. docker-compose.yml db: image: mysql:8.0.22 container..

[MySQL, Docker] MySQL ERROR 2002/2003/2005

며칠간 삽질했다... 나는 백엔드로 Django를 사용하고, 데이터베이스로 MySQL을 사용하는 프로젝트를 하고 있었기 때문에 docker-compose를 이용해서 MySQL 컨테이너를 만들어야 했다. 그러나! docker-compose를 빌드하면서 수없이 마주친 에러, MySQL 2003. 비슷한 에러로는 MySQL 2002 에러도 발생한다. 이 에러는 MySQL 서버에 접속할 수 없을 때 발생하는 에러인데, 최초 이미지 빌드 시에만 뜨고, 컨테이너를 재시작하면 사라지는 이상한 오류였다. 원인 신경 안 쓰려다가 재시작하는 것이 번거롭고, 마이그레이션 문제도 생겨서 원인을 찿아보던 찰나, 어떤 사람의 스택오버플로우를 발견했다... Running mysql and django inside docker-co..

[Django] Django rest framework(DRF) Serializer 오류

Serializer가 정상적인 데이터 타입이 아니라고 뱉어낼 때 “non_field_errors”: [ “Invalid data. Expected a dictionary, but got QuerySet.” ] 대강 이런 식의 오류가 난다. 뭔가를 원했는데, 쿼리셋이든 뭐든 데이터 타입이 다르다고... 원인 대부분의 인터넷에서 제공하는 코드는 결과가 1줄일 때를 기준으로 한다. 그러나! 내 코드는 여러 줄의 결과를 리턴한다. 해결방법 여기저기 찾아봤으나 결국 장고 포럼이 베스트였다. 참고한 포럼 나의 기존 코드 playlists = Playlist.objects.filter(user=user_id) serializer = PlaylistSerializer(data=playlists) dumped = jso..

[Postman] 파일 업로드 / 파일 포함해서 request하기

Postman에서 기본적으로 파일 업로드는 막혀있다. 해결방법 1. Postman Agent 설치 Postman Agent 설치 2. 파일 업로드 경로 준수 C:\users\USER\Postman\files 안에 파일을 넣으면 그 파일을 업로드할 수 있다. 단, Postman 파일이 아니라 Postman Agent로 폴더명이 설정되어 있다. 직접 Postman으로 바꿔주어야 한다. 그 외 파일을 전송하기 위해서는, body > form-data 에서 전송해야 한다. KEY 부분의 오른쪽에 마우스를 대면 텍스트와 파일 중 선택할 수 있다.

[Postman] Postman 사용법

Postman 실리콘밸리 인턴십 프로그램 참여하면서 처음 알게 된 Postman. 대표적인 백엔드 API 테스트 툴이다. 사용방법 1. 로그인 로그인은 필수다. 2. API 테스트는 어디서? 접속하면 볼 수 있는 메인 페이지. 이 중 우리가 들어가야 할 곳은 바로 Workspace! 기존에 갖고 있는 워크스페이스가 있다면 나와 같이 워크스페이스 목록이 보일 것이고, 없다면 좌측의 Workspaces에서 새 워크스페이스를 만들 수 있다. 워크스페이스에 접속하면, Overview가 보이는데 이 옆에 있는 +를 눌러주면 다음과 같이 request를 보낼 수 있다! Postman 파일 업로드하기 https://yourhyeony.tistory.com/51

[Django, MySQL] Migration은 성공했지만 table이 없다.

장고에서 마이그레이션이 됐다는 메시지는 뜨는데 테이블을 생성하지 않을 때 분명 마이그레이션은 됐다고 하는데, 막상 db를 확인해보면 테이블이 없다. models.py에서, class Meta: 부분을 주목해야 한다. managed 속성이 false로 되어있으면 테이블을 생성하지 않는다. models.py class Playlist(models.Model): user = models.ForeignKey('account.User', models.DO_NOTHING, blank=True, null=True) name = models.CharField(max_length=50, blank=True, null=True) tag = models.CharField(max_length=50, blank=..

[MySQL] MySQL ERROR 1045

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)이런 에러가 간간히 뜰 때 있다.이 에러는 간단히 말하면 MySQL 로그인에 실패했을 때 발생한다.대표적인 원인은,1. 비밀번호를 잘못 입력했다.비밀번호를 잘 입력하면 로그인 성공한다.mysql -u root -p {비밀번호} 또는mysql -u root -p를 입력하면 나타나는 Enter password: 에서 비밀번호를 정확히 입력한다.2. 비밀번호를 잊었다.터미널에서 mysqld --skip-grant를 입력해서 진입한다. 비밀번호 인증 없이 MySQL에 진입할 수 있다.진입한 후 비밀번호를 다음과 같이 변경한 뒤 로그인한다.use mysql; # 유저..

728x90
반응형