분류 전체보기

    E2E 테스트할 때 외부 API Mock으로 대체하기

    외부 API가 있는 view를 E2E 테스트를 하고 싶다. 하지만 테스트를 할 때마다 외부 API를 요청하는 건 자원 낭비다.(사실 다른 이유가 있을 순 있는데 내가 생각하기에는) 예를 들어 파일 업로드를 S3에 한다고 치자. 만약 테스트 할 때마다 S3에 업로드한다면 말이 되는가?(사실 내가 했다. 근데 뭔가 이상한 점을 눈치챘으니 봐주자) 이럴 때 Mock을 써보자! 테스트코드 예를 들어보자. 당신은 foo api를 테스트해보고 싶다. foo api는 외부 API를 요청받아 보여준다. 그런데 외부 API는 트래픽 제한이 있다. 100번의 트래픽 제한 중에 50번을 테스트한다고 치면 실제 서비스에서는 50번 밖에 사용자에게 못 보여준다. 어쩔 건가? 아무런 조치를 취하지 않은 API Test test...

    Poweshell 환경에서 poetry 와 pyenv로 가상환경 세팅하기

    코딩을 하기 전 개발 환경을 세팅하는 것은 중요하다. 솔직히 1인 개발이면 상관없겠지만, 팀 단위로 개발 환경을 공유해야 하는 경우 환경을 맞춰야 한다. 따라서 이러한 가상환경을 세팅하기 위해 pyenv와 poetry를 활용해 파이썬 버전 관리와 패키지 버전을 관리해 보자. 그리고 난 window 환경이라 더 애먹었기 때문에 정보 공유차원에서 기록을 남긴다. Powershell에서 pyenv 설치하기 pyenv를 설치하는 과정도 험난했다. 참고한 사이트는 아래에 참조를 걸어놨다.(고마운 분들...) 우선 powershell을 관리자용으로 열고 아래의 명령을 넣자 Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv..

    다중 컨테이너를 활용한 애플리케이션의 개발 환경 구축 - 1

    이 포스팅은 『따라 하며 배우는도 커와 CI 환경 』을 보고 썼다. 실무에서 애플리케이션 프로젝트를 진행하려면 백엔드 서버와 데이터베이스 등 많은 요소가 필요하다. 도커를 통해 이러한 앱들을 컨테이너를 통해 활용하므로 멀티 컨테이너 애플리케이션이라 부른다. 멀티 컨테이너 애플리케이션을 위한 전체적인 설계 엔진엑스를 사용하는 용도에 따라 두 가지 설계로 나눠보자. 첫 번째 방법은 클라이언트에서 엔진엑스로 오는 요청을 백엔드 서버와 프런트엔드 서버로 나누는 구조이다. 두 번째 방법은 엔진엑스는 프런트엔드 서버로만 사용해 클라이언트에서 정적 파일을 요구할 때 이를 제공하는 형식으로만 사용하는 구조이다. 두 가지 방법의 장단점을 살펴보자. 엔진엑스의 프록시 기능을 이용한 설계 첫 번째 설계 방식은 엔진엑스를 두..

    Django Filterset 활용하기

    Django에서는 Search 기능이나 Filter 기능을 제공해 준다. 여기서 다양한 lookup을 사용할 수 있다. queryset과 거의 유사하게 제공해 주기 때문에 기능을 구현하는 게 직관적으로 쉬웠다. 나는 exclude를 구현하고 싶었다. 코드는 다음과 같다. views.py: from django_filters.rest_framework import DjangoFilterBackend class FooView(viewsets.ReadOnlyModelViewSet): filter_backends = [..., DjangoFilterBackend, ...] filterset_class = PlantFilter # legacy 에선 filter_class 로 되어있어서 간혹 stackoverflo..

    단일 컨테이너를 활용한 애플리케이션 개발하기

    지금까진 모든 애플리케이션을 개발 환경에서만 실행했기 때문에 하나의 도커 파일만 작성했지만, 이번에는 개발 환경과 운영 환경 모두에서 실행하길 원하므로 두 개의 도커파일을 만들자. 우선 개발환경에서 쓰이는 Dockerfile.dev를 생성하자 FROM python:3.9-slim WORKDIR /app/ COPY requirements.txt ./ RUN pip install -r requirements.txt COPY . . CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] 이 이미지를 빌드해보자. 이때 Dockerfile 이름을 default로 빌드하기 때문에 -f 플래그를 주어서 해당 도커파일을 빌드하자 docer build -f Dockerfil..

    도커 컴포즈 파일 작성하기

    컨테이너는 격리된 상태로 생성되고 기본적으로 외부와 통신할 수 없게 설정돼 있다. 이때 도커 컴포즈를 이용하면 손쉽게 컨테이너를 연결시킬 수 있다. Node와 MySQL DB 연결하기 version: "3.7" # 도커 컴포즈 버전 services: # 이 하단부에 컨테이너들을 정의 mysql: # 컨테이너 이름 image: mysql:5.7 # 컨테이너에서 사용하는 이미지 volumes: # 볼륨 연결 - todo-mysql-data:/var/lib/mysql environment: # 환경변수 MYSQL_ROOT_PASSWORD: 1234 MYSQL_DATABASE: todos docs: build: context: . # Dockerfile이 있는 경로 dockerfile: Dockerfile # ..

    주절주절 + Docker 이미지 효율적으로 빌드하기

    최근에 나의 부족함을 많이 느끼고 있는 거 같다. 3년이란 시간 동안 노력하지 않은 죄를 받고 있는 느낌이다. 그래도 꾸준히 하면 내가 원하는 개발자에 다가가지 않을까 하는 생각이다. 언젠간 이 일을 좋아하는 만큼 실력도 따라줘서 개발을 좋아한다고 자랑스럽게 말하는 순간이 왔으면 좋겠다. 좋아한다는 건 그에 대해 궁금해하고 알려고 노력한다는 뜻이니까. 부지런히 노력하고 좋아하자. 애플리케이션의 소스 코드를 변경했을 때 이미지를 효율적으로 다시 빌드하기 패키지 파일을 효율적으로 COPY 하기 기존의 도커 파일에서는 이미지 빌드과정에서 패키지를 다시 내려받고 있다. 이러한 문제를 해결해 보자. 기존 도커파일: FROM node:10 WORKDIR /usr/src/app COPY ./ ./ RUN npm in..

    따라하며 배우는 도커와 CI 환경 - 작업 디렉터리 명시하기

    WORKDIR 지시자를 살펴보자. WORKDIR 지시자는 무엇인가 WORKDIR 지시자는 도커 파일에서 뒤에 오는 모든 지시자에 대한 작업 디렉터리를 설정한다. 리눅스 명령어의 cd와 비슷한 역할을 한다. 따라서 WORKDIR 지시자를 사용해 작업 디렉터리를 별도로 지정하면 로컬에 있는 파일들이 도커 컨테이너로 복사 될 때 WORKDIR 지시자에 정의한 디렉터리로 들어간다. 도커 컨테이너 안에 별도의 작업 디렉터리가 있어야 하는 이유 최상위 폴더 안에 들어 있던 파일 및 폴더의 이름이 COPY 지시자로 복사한 파일 및 폴더의 이름과 같다면 기존의 파일을 덮어쓰게 된다. 모든 파일이 한 디렉터리에 들어 있으면 복잡한 구조를 띄게 된다. 작업 디렉터리를 설정하는 방법 FROM node:10 WORKDIR /..

    Dockerfile로 nginx + django 서버 만들기

    Dockerfile로 nginx + gunicorn + django 서버를 구성하여 띄웠다. 사실 생각해보면 별거 아닌데, docker에 대한 지식 부족으로 인한 환장의 콜라보로 시간을 버렸다. 괜히 docker라는 거에 겁을 먹었던 거 같다. 도커 파일 없이 그냥 패키지 설치하면서는 잘만 구성하여 띄웠는데... Gpt 가 많이 도와줬다... 고맙다... 어쨌든 다신 이런 일이 없게 기록을 남기자 Dockerfile 만들기 Dockerfile을 만들기에 앞서 생각을 해보자. 만약 Ubuntu 환경에서 nginx와 django를 띄우려면 어떻게 해야할까? 간단하다. nginx를 띄우고 wsgi로 django를 연결시키면 된다. 이걸 Dockerfile에 그대로 적용하면 된다. 1. nginx를 설치한다. ..

    따라하며 배우는 도커와 CI 환경 - 3. 직접 도커 이미지 생성하기

    도커 이미지란 도커 이미지는 컨테이너를 만드는 데 필요한 설정이나 종속성을 가진 소프트웨어 패키지이다. 도커 이미지를 이용해 도커 컨테이너를 생성할 수 있다. 도커 이미지를 생성하는 순서 Dockerfile을 작성한다. Dockerfile에 입력한 명령들이 도커 클라이언트에 전달된다. 도커 클라이언트에 전달된 명령들을 도커 서버에서 처리해 도커 이미지를 만들어 준다. 도커 파일(Dockerfile) 만들기 도커 파일이란? 도커 파일은 도커 이미지를 만들기 위한 설정 파일로, 도커 컨테이너가 어떻게 행동해야 하는지에 대한 설정을 정의하는 곳이다. 가상으로 A라는 프로그램을 실행할 수 있는 이미지가 있다고 가정하자. 여기서 A 이미지 안에 필요한 것은 크게 2가지이다. 하나는 A 이미지로 컨테이너를 생성했을..