분류 전체보기
[QuerySet] Built-in Expressions - F() 표현식 알아보기
이 포스팅은 장고 공식 문서를 기반으로 했습니다. F() expressions F() 객체는 모델 필드의 값, 모델 필드의 변환된 값 또는 annotated 된 열을 나타낸다. 실제로 DB에서 Python 메모리로 꺼낼 필요 없이 모델 필드 값을 참조(성능의 효율성)하고 이를 사용하여 DB 작업을 수행할 수 있다. Django는 F() 객체를 사용하여 DB 수준에서 필요한 작업을 설명하는 SQL식을 생성한다. 일반적으로 다음과 같은 일을 할 수 있다. # Tintin filed a news story! reporter = Reporters.objects.get(name='Tintin') reporter.stories_filed += 1 reporter.save() 여기서 우리는 DB에서 reporter...
WSL2 환경에서 Poetry 사용하기
해당 포스팅은 Poetry 공식 문서를 보고 작성하였습니다. 적확한 쓰임새는 공식문서를 보고 참고해 주세요. 1. Poetry란? 공식 문서에서는 Poetry를 다음과 같이 설명한다. Poetry는 Python에서 종속성 관리 및 패키징을 위한 도구입니다. 그것은 당신의 프로젝트가 의존하는 라이브러리를 선언하도록 허용하고 당신을 위해 그것들을 관리(설치/업데이트)할 것입니다. Poetry는 반복 가능한 설치를 보장하는 잠금 파일을 제공하고 배포용 프로젝트를 빌드할 수 있습니다. 사실 Python 개발자들은 pip를 통해 Python의 다양한 라이브러리들을 설치할 수 있다. 그렇다면 Poetry를 굳이 쓰는 이유가 뭘까? 가장 큰 이유는 아마도 라이브러리 간의 의존성 관리를 "내"가 직접 하지 않아도 된다..
[Nginx] 리버스 프록시란?
리버스 프록시란? 리버스 프록시는 인터넷으로부터 요청을 받아와서 이것들을 내부망의 서버로 바로 포워드한다. 프록시에 요청을 하는 대상은 내부망을 인지하지 못할 수 있다. - 위키백과 리버스 프록시는 클라이언트가 웹 서비스에 요청하면 이 요청을 받아서 내부 서버에서 데이터를 받은 후에 요청에 대한 응답을 사용자에게 다시 전달한다. 즉 WAS나 WS의 앞 쪽에 리버스 프록시가 위치해 있는 형태이다. 하지만 의문이 든다. 어차피 WS가 앞쪽에 위치해서 처리해도 되는데 굳이 리버스 프록시를 쓰는 이유가 뭘까? 2. 리버스 프록시를 쓰는 이유 리버스 프록시를 쓰는 몇 가지 이유를 살펴보자 2.1 성능 2.1.1 로드 밸런싱 리버스 프록시를 둔다면 예를 들어 Nginx의 경우 로드밸런싱을 통해 대량의 요청 트래픽이..
[Queryset] select_related와 prefetch_related 살펴보기
select_related와 prefetch_related를 사용하는 이유는 ORM에서 발생되는 N+1 문제를 해결하기 위해 eager-loading(즉시 호출) 방식을 취하는 두 가지 메서드 사용한다. N+1 문제란? Lazy-loading 방식은 실제 데이터를 사용할 때 DB에 히트하게 된다. 이로 인해 참조 관계의 데이터를 가져올 때 문제가 발생한다. 처음 1번의 SQL query를 실행할 때 해당 모델이 갖고 있는 필드만을 가져온다. 순회 시 참조 모델의 데이터는 처음 쿼리에서 가져오지 않았기 때문에 순회 횟수(N번)만큼 참조 관계 모델의 SQL query를 실행한다. 꼭 1번 더 쿼리를 실행하는 것은 아니고 비효율적으로 쿼리 호출 횟수가 생긴다는 의미로 받아들이면 된다. 자세한 내용은 1. 블로..
[DRF] HyperlinkedModelSerializer 살펴보기
ModelSerializer에 이어서 HyperlinkedModelSerializer를 살펴보자 HyperlinkedModelSerializer는 ModelSerializer와 비슷하다. 단지 관계를 표현할 때 기본 키가 아닌 하이퍼링크로 표현한다는 점을 제외하곤. 기본적으로 serializer에는 기본 키 필드 대신 URL 필드가 포함된다. URL 필드는 HyperlinkedIdentifyField serializer 필드를 사용하여 표현되며 모델의 모든 관계는 HyperlinkedRelatedField serializer 필드를 사용하여 표현된다. 필드 옵션에 추가하여 기본 키를 명시적으로 포함할 수 있다. 예를 들면 아래와 같다. class AccountSerializer(serializers.Hy..
[DRF] ModelSerializer 살펴보기
Serializer 클래스 중 Django Model과 매핑되는 ModelSerializer를 알아보자. 이 ModelSerializer 클래스는 모델 필드에 해당하는 필드를 사용하여 Serializer 클래스를 자동으로 만들 수 있는 shortcut을 제공한다. ModelSerializer 클래스는 Serializer 클래스와 대부분 같다. 아래의 경우를 제외하고, 모델에 따라 필드가 자동으로 생성된다. 자동으로 unique_together, validators와 같은 Seiralizer의 validator를 생성한다. .create() 및 .update()의 간단한 기본 구현이 포함되어 있다. ModelSerializer를 선언하면 아래와 같다. class AccountSerializer(serial..
세션과 JWT
세션과 JWT는 모두 인가에 관한 보안 기술이다. 그렇다면 인가란 무엇일까? 1. 인가란? 인가란 사용자에게 특정 리소스나 기능에 액세스 할 수 있는 권한을 부여하는 프로세스를 말한다. 대표적으로, 서버에서 특정 파일을 다운로드할 수 있는 권한을 부여하거나, 개별 사용자에게 관리자 권한으로 애플리케이션에 액세스 할 수 있는 권한을 부여하는 경우가 여기에 해당된다. 2. 세션 2.1 정의 세션은 일정 시간 동안 같은 사용자(웹 브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 여기서 일정 시간이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점을 뜻한다. 정리하자면 방문자가 웹 애플리케이션에 접속해 ..
[모두의 네트워크] 31장 메일 서버의 구조(SMTP와 POP3)
응용 계층에서 메일을 송수신하기 위한 프로토콜을 알아보자. 1. 메일의 송수신 구조 메일을 송수신하려면 클라이언트 측의 메일 프로그램과 서버 측의 메일 서버 프로그램 간에 통신을 해야 한다. 이때 사용되는 프로토콜에는 두 가지 종류가 있다. 메일을 보내는 데 사용되는 프로토콜은 SMTP고, 메일을 받는 데 사용되는 프로토콜은 POP3이다. SMTP는 포트 번호로 25번을 사용하고 POP3는 110번을 사용한다. 1.1 SMTP에 의한 메일 송신과 메일 전송 위의 그림에서 컴퓨터 1과 메일 서버 1 간의 통신을 더 자세히 살펴보자. 우선 컴퓨터 1의 메일 프로그램은 SMTP를 사용하여 메일 서버 1로 메일을 보낸다. 1.2 POP3에 의한 메일 수신 SMTP로 메일 서버 1이 메일 서버 2로 메일을 전송할..
[모두의 네트워크] 28장 응용 계층의 역할
1. 응용 계층의 역할 애플리케이션은 서비스를 요청하는 측에서 사용하는 애플리케이션은 클라이언트로 불린다. 서비스를 제공하는 측에서 사용하는 애플리케이션은 서버라고 불린다. 이러한 애플리케이션은 응용 계층에서 동작한다. 응용 계층에서는 클라이언트의 요청을 전달하기 위해 서버가 이해할 수 있는 메시지(데이터)로 변환하고 전송 계층으로 전달하는 역할을 한다. 또한 클라이언트 측 애플리케이션(웹 브라우저, 메일 프로그램 등)이 서버 측 애플리케이션(웹 서버 프로그램, 메일 서버 프로그램 등)과 통신하려면 응용 계층의 프로토콜을 사용해야 한다. 1.1 각 애플리케이션의 프로토콜 웹 사이트 - HTTP 파일 전송 - FTP 메일 전송 - SMTP 메일을 받을 때 - POP3 또한 네트워크에서 컴퓨터나 네트워크 장..
Django의 특징
Django를 사용하면서 Django를 왜 쓰는가? Djanog는 어떤 특징이 있는가란 궁금증을 가진 적이 없었다. 생각해보면 왜 쓰는가에 대한 이유를 알아야지 적합한 웹 프레임워크들을 사용할 수 있는데... 그런 반성의 의미에서 Django는 어떤 웹프레임워크인지 알고자 한다. 1. Django의 특징 1.1. MTV 구조 1.1.1. View urlpattern에 알맞은 호출이 들어오면 요청은 view로 들어오게 된다. view는 웹 클라이언트로부터 HTTP요청을 수신하고 HTTP 응답을 되돌려준다. 이곳에서 DB에 접근하고(ORM을 통한 데이터 쿼리) Template을 렌더링 하기 위해 자원들을 활용한다. 1.1.2. Model Model에서는 파이썬 객체를 통해 데이터를 관리하고 쿼리한다. Dja..