- 데이터베이스
- @transactional
- 문자열
- DI
- Docker
- nginx
- 자바
- spring
- static
- ORM
- 1차원 배열
- jpa
- mysql
- Django
- join
- 프로그래머스
- java
- select
- sql
- spring mvc
- AWS
- springboot
- PYTHON
- spring boot
- spring security 6
- SSL
- 스프링부트
- string
- hibernate
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
목록Python (14)
개발하는 자몽

보통 백엔드 개발 시 주로 스프링 부트를 사용하는데, 파이썬을 사용하는 AI 엔지니어와 협업할 때 호환성이 좋지 않았다. 그래서 AI 엔지니어와 협업할 때만 사용할, 스프링 부트를 대체할 파이썬 기반 백엔드 프레임워크 사용을 계속 고민해 왔다.인증이나 주된 기능은 스프링 부트로 처리하되 AI 프로그램에서 넘어오는 데이터를 처리하고 API로 전달하는 용도로 쓰고자 했다. 따라서 비교적 무거운 Django를 제외하고 Flask와 FastAPI 중에서 고민했다. 이전에 사용해 본 Flask는 Java로 백엔드 개발하는 것과 비슷한 부분이 있어서 끌렸는데, FastAPI는 Flask와 동일하게 API나 마이크로서비스 개발 등에 적합하며 API 문서 자동화를 지원한다고 한다! API 문서 자동화 지원은 사용할 ..
우선 삭제 전에 가상환경을 만들어 놨다면 비활성화를 한 후, 가상환경을 제거한다.$ deactivate $ rm -rf {가상환경이름}설치했던 파이썬의 위치를 확인해야 한다. 보통 `/usr/local/bin`에 위치한다. 아래 명령어로 특정 파이썬 버전의 디렉터리가 존재하는지 확인한다.$ ls -al /usr/local/bin존재한다면 아래 명령어로 제거한다. 또한 파이썬과 함께 해당 버전을 가진 이름의 디렉토리가 있다면 해당 디렉터리 및 파일도 제거한다.$ sudo rm /usr/local/bin/{파이썬 버전} $ sudo rm /usr/local/bin/python3.8파이썬 관련 디렉토리 또한 삭제해야 한다. 보통 `/usr/local/lib`에 위치한다. 3번과 마찬가지로 파이썬과 함께 해당 ..
백엔드 개발을 하면 DB 테이블(또는 DB 엔티티)을 도메인 엔티티로 옮겨야 되는데, 이는 `Entity`나 `Model` 등으로 표현하게 된다. 여기서는 Django의 `Model`을 다뤄보려고 한다. 각 DB 테이블에는 `created_at`이나 `updated_at`과 같은 공통된 필드가 들어가는 경우가 많다. 따라서 Entity나 Model에는 이 필드들이 반복해서 작성되는데, 생각보다 귀찮고 하다 보면 한 번에 처리할 방법이 없나 찾게 된다. Django에서는 `BaseModel`이라는 클래스에 이렇게 반복 작성되는 필드들을 모아서 선언한다. (SpringBoot 환경에서 JPA를 사용한다면 BaseEntity를 떠올릴 수 있다) BaseModel1. `manage.py`와 동일한 경로에 ..
Model.objects.filter() 지정된 조건에 해당하는 모든 객체를 포함하는 QuerySet 반환 조건에 해당하는 객체가 없는 경우, 에러가 아닌 빈 QuerySet 반환 results = Model.objects.filter(condition) if not results: # 쿼리셋이 비어있을 경우, 처리할 로직 Model.objects.filter().values() QuerySet에 있는 각 객체의 특정 필드 값을 가져와 딕셔너리 리스트로 반환 각 딕셔너리는 선택한 필드를 key로 사용 이를 이용하여 쿼리 결과에서 특정 필드만 가져올 수 있음 results = Model.objects.filter(condition).values('field_name') for result in result..

Swagger와 drf-yasg`Swagger`는 API 문서를 쉽고 간단하게 만들도록 도와주는 오픈 소스 도구이다. `drf-yasg`는 Django Rest Framework API로 Swagger/OpenAPI 2.0 Specification을 생성해 주는 라이브러리이다. 공식 문서는 이 글을 참고하자. drf-yasg 사용 방법Notice CBV에서 적용 작업하는 가상 환경에서 아래 명령어를 입력하여 `drf-yasg`를 설치한다. $ pip install -U drf-yasg 설치가 완료되었다면 `settings.py`에 아래 코드를 작성하자.INSTALLED_APPS = [ ... 'drf_yasg', ...] swagger UI의 css/js 파일이 필요하면 아래 코드로 ..
static file 관리 Django 프로젝트를 배포할 때 `DEBUG` 설정은 `False`로 설정하게 된다. 이미지가 저장된 경로로 API 요청하는 것에 대해서 `True`일 때는 `MEDIA_ROOT`와 `MEDIA_URL` 설정만 하면 이미지가 저장된 경로로 API 요청을 했을 때 200 응답을 받을 수 있다. 하지만 `False`일 때 요청을 하면 404 에러가 발생한다. static 파일 관리는 `INSTALLED_APPS`의 `django.contrib.staticfiles` 모듈이 담당하고 있는데, settings.py의 `DEBUG`를 `False`로 바꾸면 동작하지 않는다. 따라서 static 파일의 처리는 Apache나 Nginx와 같은 웹 서버가 담당하게 된다. 관련 내용은 여기를..
지난 글에서 외부에 노출되면 안 되는 정보는 `django-environ`을 통해 분리할 수 있다고 언급했다. django-environ은 환경 변수로 Django 애플리케이션을 구성할 수 있도록 해주는 파이썬 패키지다. 파이썬 패키지이므로 `pip`를 통해서 설치할 수 있다. django-environ 적용 가상 환경이나 작업 환경에 아래 명령어를 입력하여 `django-environ`을 설치해 보자. 참고로 그냥 `environ`도 있는데 이 친구가 아니다! 반드시 `django-environ`으로 설치! $ pip install django-environ `manage.py`와 동일한 위치에 `.env` 파일을 생성하자. 그리고 생성한 파일에 `key=value` 형식으로 외부에 노출하면 안 되는 ..
서버에서 개발을 하다가, 여러 명이 서버에 접근할 때 git이나 여러 설정이 꼬여서 개발 환경을 분리하기로 결정했다. SpringBoot는 `application.yml`이나 `application.properties`를 이용하여 개발 환경을 분리한다면, Django는 `settings.py`를 이용하여 개발 환경을 분리해야 한다. 구조 분리 전 설정이 담긴 프로젝트 구조는 아래와 같다. 📦backend ┣ 📜settings.py ┣ 📜asgi.py ┣ 📜exceptions.py ┣ 📜urls.py ┣ 📜wsgi.py ┗ 📜__init__.py 프로젝트 설정이 `settings.py` 하나로만 구성되어 있다. 이렇게 되면 로컬 환경이나 배포 환경의 설정이 동일하게 되므로 DB 접속이나 기타 설정 등을 할..
Request와 Requests`Request` : Django가 제공하는 객체로 HTTP 요청에 대한 다양한 정보를 담고 있음. `WSGI Reuqest` 타입`Requests` : Python 모듈로 HTTP 요청을 보낼 때 사용 request.GET, request.POST`.GET()`, `.POST()` : Django 속성`request.GET` : HTTP GET 메서드로 받은 요청`request.POST` : HTTP POST 메서드로 받은 요청`request`를 `dictionary type(Query Dict)`로 변환`key` 이름을 가진 key가 존재하면 해당 `key`값을 반환하고, 존재하지 않을 경우 `KeyError` 발생 requests.get, requests.post,..
목적`django-crontab`을 사용하여 쉽게 `crontab`을 적용해 보고, 도커 컨테이너에서 실행시켜 보자! cron & crontab & cronjob`cron` : 실행 도구`crontab`: `cron`이 실행할 일(job)이 담긴 파일`cronjob`: `crontab`에 작성한 일(job) django-crontab 설정 with Docker`pip`로 `django-crontab`을 설치합니다. pip install django-crontab 설치 후 `settings.py`에 아래 코드를 추가합니다.INSTALLED_APPS = [ ... 'django_crontab',]...CRONJOBS = [ ('*/30 * * * *', 'app.cron.hello', '>> /..