분류 전체보기
따라하며 배우는 도커와 CI 환경 - 1. 도커란
이 시리즈는 책을 읽으면서 실습하는 포스팅이다. 중간중간 필요한 개념도 정리하자. 도커 이미지와 도커 컨테이너 도커 컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위이다. 도커 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 ㅍ포함하는 가볍고 독립적이며 실행 가능한 소프트 웨어 패키지이다. 도커를 사용할 때의 흐름 도커 클라이언트에 원하는 명령을 입력한다. 도커 서버(도커 데몬)가 도커 클라이언트에 입력한 명령어를 전달받으면 명령어에 따른 이미지를 생성하고 컨테이너를 실행한다. 그리고 해당 컨테이너에서 애플리케이션을 실행한다...
Django staticfile 관리하기
프로덕션에서 정적파일 제공하기 정적 파일을 프로덕션에 넣는 기본 개요는 정적 파일이 변경될 때 collectstatic 명령을 실행 한 다음 수집 된 정적 파일 디렉터리(STATIC_ROOT)를 정적 파일 서버로 이동하여 제공하도록 정렬하는 두 단계를 구성한다. STATICFILES_STORAGE에 따라 파일을 수동으로 새 위치로 이동하거나, Storage 클래스의 post_process 메서드가 처리할 수 있다. 모든 배치 작업과 마찬가지로 daemon 세부 사항이 있다. 모든 프로덕션 설정은 약간 다르다. 아래에서 소개하는 것은 일반적인 패턴이다. 같은 서버에서 정적파일과 사이트를 제공하기 사이트에 이미 서비스를 제공하고 있는 서버와 동일한 서버에서 정적 파일을 제공하려는 경우 프로세스는 다음과 같을..
스택프레임, 빅오
스택 프레임 함수가 호출되면 스택 프레임이라는 공간이 생긴다. 이 스택 프레임에는 함수 실행에 필요한 지역변수들이 할당된다. def add_two(a,b): c = a + b # 4 return c a = 10 # 1 b = 20 # 2 result = add_two(a, b) # 3 print(result) #1과 #2는 프로그램이 시작되면서부터 끝날 때까지 메모리에 유지되는 전역변수이다. #3에서 a와 b를 인수로 전달하고 add_two 함수를 호출하면 내부적으로 ‘스택 프레임’이라는 내부 공간이 생기고, 그 공간에 add_two 함수 내부에 있는 매개변수 a, b와 그 결괏값을 담을 지역 변수 C가 저장된다. 스택 프레임은 메모리에 생성되는데 생성될 수 있는 크기에 한계가 있다. 이때 발생하는 에러..
[DRF] Third Party Packages - DRF Nested Routers
중첩 관계를 표현하는 REST API를 표현해 주는 Third Party Packages를 공부해보자. Installation pip install drf-nested-routers Quickstart 다음과 같은 url을 만든다고 하자. /domain/
[DRF] Serializer relations
Model 간의 관계를 Serializer를 통해 표현하려면 어떻게 해야 할까? 한 번 알아보자. 데이터 간의 관계는 OneToOne, ForeignKey, ManyToMany 등 다양하다. 이를 Serializer에서 표현하려면 어떻게 할까? NOTE! DRF에서는 쿼리 최적화까진 해주지 않는다. 이는 프로그래머의 몫이므로 쿼리 최적화를 하자. API Reference 앨범과 트랙 모델을 통해 자세히 살펴보자 class Album(models.Model): album_name = models.CharField(max_length=100) artist = models.CharField(max_length=100) class Track(models.Model): album = models.ForeignKe..
Github Actions CI/CD 알아보기 - 1
CI/CD는 지속적인 통합(Continuous Integration)과 배포(Continuous Delivery/Deployment)를 일컫는 말이다. CI/CD는 DevOps의 핵심 개념 중 하나이다. 어떤 구성이 있는지 살펴보자. 여기서는 github actions를 기준으로 설명한다. CI 자동화 프로세스인 지속적인 통합을 의미한다. CI를 성공적으로 구현할 경우 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 레포지토리에 병합된다. 여러 명의 개발자의 코드가 충돌나는 경우를 이 과정에서 해결할 수 있다. CD 지속적인 서비스 제공 또는 배포라고 볼 수 있다. 버그 테스트를 거쳐 repo에 자동으로 업로드되는 것을 뜻하며, 운영팀은 이 repo에서 애플리케이션을 실시간..
[DRF] create vs perform_create
create와 perform_create는 Django REST Framework에서 사용되는 두 개의 메소드이다. create 메소드는 API 뷰에서 POST 요청을 받을 때, 새로운 객체를 생성하는 메소드이다. 이 메소드는 일반적으로 API Serializer 클래스의 save() 메소드를 호출하고, 데이터 유효성 검사를 수행하여 새로운 객체를 생성한다. 그리고 생성된 객체를 HTTP response로 반환한다. def create(self, validated_data): email = validated_data.get("email", None) validated.pop("email") # Now you have a clean valid email string # You might want to ca..
Docker Compose - 1
정의 도커 컴포즈(Docker Compose)는 여러 개의 도커 컨테이너를 하나의 애플리케이션으로 관리하기 위한 도구이다. 도커 컴포즈를 사용하면 YAML 파일을 통해 여러 개의 도커 컨테이너를 정의하고, 이들 컨테이너 간의 네트워크 및 볼륨 설정 등을 관리할 수 있다. 도커 컴포즈를 사용하면, 여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 쉽게 관리할 수 있다. 각각의 컨테이너는 하나의 서비스 역할을 하며, 서로 다른 컨테이너 간의 연결과 의존성을 정의하여 애플리케이션을 구성한다. 도커 컴포즈는 CLI(Command Line Interface)를 통해 사용할 수 있으며, YAML 파일에 정의된 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행할 수 있다. 또한, 여러 개의 컨테이너로 구성..
결합과 추상화 - 3
2023.02.13 - [Python] - 결합과 추상화 - 2에 이어 가 보자. 의존성 주입과 가짜를 사용해 에지투에지 테스트 단위 테스트가 어느 정도 모이다 보면 시스템의 큰 덩어리를 한 번에 테스트하려고 할 것이다. 이때 엔트투엔드 테스트로 돌아갈 수도 있다. 하지만 엔트투엔드 테스트는 작성하거나 유지보수하기 어렵다. 대신 전체 시스템을 한 번에 테스트하되, 가짜 I/O를 사용하는 일종의 에지투에지 테스트를 자주 작성하자. 명시적 의존성: def sync(source, dest, filesystem=FileSystem()): # 최상위 함수는 이제 reader와 filesystem이라는 두 가지 의존성을 노출한다. source_hashes = filesystem.read(source) # reade..
[DRF] APIView vs ViewSet
DRF는 RESTful API를 만들기 위한 뷰를 정의하는 CBV 형태의 두 가지 방법이 있다. APIView와 ViewSet이다. 두 가지의 특징과 차이점을 살펴보자 APIView APIView는 커스텀하기 편한 기본 클래스이다. API View를 사용하면 각 HTTP 메서드(GET, POST, PUT, DELETE 등)를 별도로 정의하고 요청/응답을 수동으로 처리해야 한다. API View를 사용하면 API 로직과 응답 생성을 완벽하게 제어할 수 있지만 더 많은 상용 코드가 필요하다. from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import authentic..