분류 전체보기
Django 구조 잡기
django 프로젝트 구조에 대한 고민을 하고 있었는데 통찰을 얻을 수 있는 글이 있었다. https://soheeeep.tistory.com/m/26 [Django] 프로젝트 구조 잡기 장고는 하나의 프로젝트 내에 여러 개의 app이 존재하는 구조이다. python manage.py startapp [appname] 명령으로 app을 생성한 뒤, settings의 INSTALLED_APPS에 생성된 app을 등록해줌으로서 손쉽게 관리할 수 있 soheeeep.tistory.com 이걸 보고 구조에 대한 고민을 좀 더 해봐야겠다.
Django + Slack
Web에서 일어나는 이벤트(회원 가입, 문의 등)를 Slack에서 이벤트로 받아보고 싶을 수 있다. (그래야만 한다. 안 궁금하면 어쩔 수 없고...) 한번 해보자 Slack Slack Webhook 생성하기 1. 우선 App을 생성하자 2. 해당 화면에서 From scrath를 선택하자 From an app manifest는 Slack 공식 문서에선 다음과 같이 설명한다. 매니페스트는 Slack 앱용 YAML 또는 JSON 형식의 구성 번들입니다. 매니페스트를 사용하면 UI 또는 API를 사용하여 사전 정의된 구성으로 앱을 만들거나 기존 앱의 구성을 조정할 수 있습니다. 매니페스트를 공유하고 재사용할 수 있으므로 프로덕션 앱의 개발 복제본을 만드는 간단한 방법이 제공됩니다. 다음에 자세히 살펴보자(우선..
배포전략 - 카나리 배포전략
다양한 배포전략 중에서 카나리 배포전략을 알아보자. 카나리는 새인데 탄광에서 유독가스가 배출되는 것을 알아서 위험을 알렸다고 한다. 이런 것처럼 카나리 배포는 새롭게 배포한 버전의 위험을 감지할 수 있는 배포 전략이다. 배포를 할 때 한 번에 모든 소스를 올리는 것이 아니라 특정 서버 혹은 User에게만 배포를 한 뒤, 정상적으로 운용이 된다면 전체 서버로 확대한다. 카나리 배포의 장점은 A/B 테스트가 가능하고, 서버의 트래픽 일부를 신 버전으로 분산하여 트래픽에 따른 오류 여부를 확인도 할 수 있다. 이런 식으로 성능 모니터링에도 유용하다. 참고 https://reference-m1.tistory.com/211 [Etc] 배포 전략의 종류(롤링/블루 그린/카나리) 요즘은 MSA 아키텍처를 많이 지향하..
NAT Gateway란
DB의 경우 Private IP를 이용하여 외부에서의 접근을 차단하는 형태로 구성한다. 그런데 만일 외부의 접속을 허용해야 하는 경우가 발생하면 어떻게 해야 할까? Public IP를 부여한다면 외부에 노출되므로 보안에 취약하게 된다. 이때 사용하는 것이 NAT Gateway와 Bastion Host 기술이다. 이 둘은 사설망의 구조를 유지시켜주면서 외부와 조건적으로 데이터 통신이 가능하게 해 준다.(Bastion Host은 다음에 자세히 알아보자.) NAT Gateway(Network Address Translation) 네트워크 주소 변환은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 도애 트래픽을 주고받는 기술을 말한다. 대표적으로 사설 IP를 외부..
[DRF] SearchFilter
회사에서 검색과 필터 기능을 구현해야 한다. 그전에 앞서 복기를 해보자. DRF에서는 FIlter기능과 SearchFilter를 제공해 준다. 우선은 SearchFilter만 구현해 보자 SearchFilter SearchFilter 클래스는 단순한 단일 쿼리 매개 변수 기반 검색을 지원하며, 장고 관리자의 검색 기능을 기반으로 한다. 사용 중인 브라우저 API에는 SearchFilter 컨트롤이 포함된다. search_fields 특성이 설정된 경우에만 SearchFilter 클래스가 적용된다. search_fields 특성은 CharField 또는 TextField와 같은 모델의 텍스트 유형 필드 이름 목록이어야 한다. from rest_framework import filters class User..
Elasticsearch 1. 개념 알아보기
검색을 구현해야 한다. 이전에는 직접 쿼리셋으로 구현하거나 drf에서 filtering 등을 이용했다. 다만 방대한 데이터를 검색할 때는 Elasticsearch를 이용하는 게 좋은데, 한 번도 써본 적이 없어서 적용에 앞서 개념을 이해하기 위해 포스팅을 쓴다. 정의 Elasticsearch 는 루씬 기반의 검색 엔진이다. HTTP 웹 인터페이스와 스키마에서 자유로운 JSON 문서와 함께 분산 멀티테넌트 지원 전문 검색 엔진을 제공한다. 방대한 양의 데이터를 신속하게 저장, 검색, 분석을 수행할 수 있다. Elasticsearch는 검색을 위해 단독으로 사용할 수도 있지만 ELK(Elasticsearch / Logstash / Kibana) 스택으로 사용되기도 한다. 멀티테넌트 Elasticsearch의..
Docker Network - Bridge 알아보기
어제에 이어서 network plugin에 대해 알아보자. 공식문서를 번역하면서 주석을 달은 포스팅이다. (튜토리얼은 생략한다. 공식문서 튜토리얼을 그대로 따라가면 이해되기 때문에!) Use bridge networks 네트워킹 측면에서 브리지 네트워크는 네트워크 세그먼트 간에 트래픽을 전달하는 링크 계층 장치이다. -위키피디아- 링크 계층이란? 링크 계층은 호스트가 물리적으로 연결되는 링크 상에서만 운용되는 메서드, 통신 프로토콜이 모여있다. 링크는 네트워크 상의 호스트나 노드를 상호 연결하기 위해 사용되는 물리, 논리 네트워크 구성 요소이며 링크 프로토콜은 근거리 통신망 세그먼트나 광역 통신망 연결의 인접한 네트워크 노드 간에만 운용되는 메서드와 표준의 스위트이다. 브리지는 호스트 시스템의 커널 내에..
Docker network
docker를 실행하던 중 Host os 에서 firewalld 설정을 변환시켜 docker chain 이 꼬이는 일이 발생했다. 이로 인해 docker container의 network가 이상이 생겼다. 해결은 했는데, docker의 network가 어떻게 이루어지는 지 궁금해졌다. 오늘 호스팅은 docker network에 관해 알아보고 다음에는 docker and iptables에 대해 알아보자 개요 Docker 컨테이너 및 서비스가 강력한 이유는 이들을 함께 연결할 수 있다는 것이다. Docker를 사용하여 플랫폼에 구애받지 않고 관리할 수 있다. 몇 가지 기본 Docker 네트워킹 개념을 익히고 이러한 기능을 최대한 활용할 수 있도록 기반 지식을 쌓아보자. 이 포스팅에서는 Docker 네트워크의..
결합과 추상화 - 2
2023.02.09 - [분류 전체보기] - 결합과 추상화 - 1 이전 글에 이어서 쓰기 파일 입출력과 관련한 테스트를 어떻게 작성해야 할까? 시스템에서 트릭이 적용된 부분을 분리해서 격리하고, 실제 파일 시스템 없이도 테스트할 수 있게 해야 한다. 외부 상태에 대해 아무 의존성이 없는 코드의 '핵'을 만들고, 외부 세계를 표현하는 입력에 대해 이 핵이 어떻게 반응하는지 살펴보자. 먼저 코드에서 로직과 상태가 있는 부분을 분리하자. 이제 최상위 함수는 거의 아무 로직도 들어있지 않고, 입력을 수집하고 로직(함수형 핵)을 호출한 다음 출력을 적용하는 명령형 코드의 나열로 바뀐다. def sync(source, dest): # 명령혈 셀 1단계: 입력 수집 source_hashes = read_paths_a..
HTTPS 동작 방식
쓰는 이유 HTTPS는 SSL/TLS 보안 계층 위에서 HTTP가 작동하도록 한다. 그렇다면 왜 이렇게 하는 것일까? 간단히 말하면 보안 때문이다. HTTP는 클라이언트와 서버 간의 데이터를 주고받을 때 공격자가 데이터를 가로채기 쉬웠다. 암호화가 되지 않은 채 데이터를 전송하기 때문이다. HTTPS는 서버와 클라이언트가 주고받는 텍스트를 암호화한다. 또한 클라이언트는 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수 있다. 원리 SSL 프로토콜은 SSL 인증서를 사용해 작동한다. SSL 인증서는 클라이언트와 서버 간의 통신을 제 3자가 보증해 주는 전자화된 문서이다. 이 인증서를 통해 암호화를 한다. 이 방식을 좀 더 살펴보자. CA는 서버의 공개키와 서버키를 암호화하여 보관한다. 암호화할 때는 공..