전체 글 144

01. 신뢰할 수 있고 확장 가능하며, 유지보수하기 쉬운 애플리케이션

지난주부터, '데이터 중심 애플리케이션 설계'라는 책을 스터디하기 시작했다. 책을 읽으며, 중요하다고 생각하는 부분에 대해 짧게 요약정리(+약간의 개인적 생각이 들어간...) 해보고자 한다. 이번 포스팅에서는 첫 챕터인, "01. 신뢰할 수 있고 확장 가능하며 유지 보수하기 쉬운 애플리케이션" 부분을 다뤄 보았다. 목차 1. 신뢰성 2. 확장성 3. 유지보수성 01. 신뢰성 신뢰성이란, 결함이 발생해도 시스템이 올바르게 동작하게 만드는 것을 말한다. 결함률이 0이 되도록 설계하는 것은 불가능하다. 오히려, 결함이 발생하더라도 결함으로 인한 장애가 발생하지 않도록 내결함성을 갖추게 설계하는 것이 좋다. (보안 이슈는 제외) 내결함성을 갖추도록 설계하면, 특정 유형의 결함이 발생하였을 경우 사용자에게 결함을..

URL과 리소스

URI는Uniform Resource Identifier의 약자로, 위치 & 이름 또는 둘 다 추가로 분류될 수 있다. 여기서, 위치(Locator)가 URL, 이름(Name)이 URN이다. 오늘은 이 중에서도, 전 세계적으로 통용되는 URL에 대해 포스팅해 볼 것이다. 목차 URL의 개념 URL의 구성 단축 URL URL의 인코딩 01. URL의 개념 URL은 Uniform Resource Locator의 약자로, 인터넷의 리소스를 가리키는 표준 이름을 말한다. 즉, 원하는 리소스가 어디에 위치하고 어떻게 가져오는지에 대해 정의해주는 기능을 갖고 있다. URL은 우리가 원하는 정보를 가리키고, 그것이 어디에 있으며 어떻게 접근하면 될 지 알려주는 기능을 갖고 있다. URL이 없었을 땐, 상대방과의 파일..

Python Error - most likely due to a circular import 해결

aiokafka consumer 를 개발하는 과정에서 most likely due to a circular import 에러를 접했다. 원인은 되게 허무+간단했다. 해당 에러는 모듈 import 시 작업 폴더 내 모듈과 동일한 파일명이 존재하기 때문에 발생한다. 내가 실행하고자 했던 파일명이 aiokafka.py 였고, 그 안에 import aiokafka 명령이 실행되고 있었기 때문에, 이름이 충돌하여 발생한 이슈다. 따라서, aiokafka.py 파일 명을 다른 이름으로(나의 경우 aiokafka_consumer.py로 변경하였다.) 변경하면 문제없이 실행되는 것을 확인할 수 있다.

Docker airflow2 커스텀 이미지 빌드 과정

앞서, 기존에 생성된 이미지만을 이용해서 airflow 를 빌드했었는데, 오늘은 airflow 이미지 자체를 직접 빌드해보도록 하겠다. 왜 직접 빌드해야 하는지에 대한 이유와 공식 문서 소개, 그리고 airflow2 image 빌드 과정을 포스팅하겠다. 목차 airflow2 커스텀 이미지 빌드의 필요성 airflow2 이미지 빌드 공식 문서 01. airflow2 커스텀 이미지 빌드의 필요성 여담이지만 회사 면접을 봤을 당시, airflow를 도커로 띄워서 작은 프로젝트를 운영해 본 경험이 있다고 말씀드렸다. 이때 사수님께서 이미지 빌드 과정에 대해서 상세히 여쭤보았던 기억이 나는데, 이때 나는 이미 빌드되어져 있는 이미지를 활용해서 운영했었다라고 대답했던 기억이 난다. 그래서, 기회가 된다면 이미지부터..

Kafka Consumer 애플리케이션 개발 - Python (Local Server 기반)

해당 프로젝트는 로컬 서버를 기반으로 카프카 프로듀서 애플리케이션을 개발하는 프로젝트에 대한 포스팅이다. 컨플루언트 기반 클러스터에서 카프카를 실행하기 전, 카프카의 동작 원리를 이해하기 위해 로컬에 직접 설치 및 실행해보았다. 목차 Python Consumer 개발 01. Python Consumer 개발 1-1. 개요 앞선 포스팅에서, 카프카를 로컬에 설치하는 방법 그리고 해당 로컬에서 카프카, 주키퍼 서버를 띄우는 방법에 대해 알아보았다. 그리고 kafka-python을 이용해 카프카 프로듀서를 띄워보았다. 이전 포스팅 링크 https://eng-sohee.tistory.com/136 Local Server 기반, Kafka Producer 애플리케이션 개발 - Python 해당 프로젝트는 로컬 서..

Kafka Producer 애플리케이션 개발 - Python (Local Server 기반)

해당 프로젝트는 로컬 서버를 기반으로 카프카 프로듀서 애플리케이션을 개발하는 프로젝트에 대한 포스팅이다. 컨플루언트 기반 클러스터에서 카프카를 실행하기 전, 카프카의 동작 원리를 이해하기 위해 로컬에 직접 설치 및 실행해보았다. 목차 카프카 로컬 설치 서버 실행 Python Producer 개발 01. 카프카 로컬 설치 카프카 설치를 위해서는 공식 사이트를 이용해 파일을 다운로드 받아야 한다. 아래 공식다운로드 홈페이지 링크를 통해 접속하여, 파일을 다운받는다. 난 여기서 kafka_2.13-3.0.0 버전을 다운받았고, 해당 압축을 풀어주었다. https://kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Pla..

쿠버네티스 - 디플로이먼트의 배포 방식 :: 리크리에이트, 블루그린, 카나리

목차 배포 방식 - 리크리에이트 배포 방식 - 블루/그린 배포 방식 - 카나리 오늘은 롤링업데이트 방식 설명에 이어, 나머지 배포 방식 3가지를 간단히 소개해보는 포스팅을 작성해보도록 하겠다. 01. 배포 방식 - 리크리에이트 리크리에이트 배포 방식은 말그대로 re-create 하는 것이다. 즉, 업데이트 시 모든 서버를 중지하고 새로운 버전으로 배포한 뒤 다시 서비스를 올리는 방식이다. 이는 자원을 추가적으로 사용하지 않는다는 점에서 장점이 있지만, 다운타임이 발생한다는 치명적 단점이 있기 때문에 일반적으로 사용하지는 않는다. 장점: 자원을 추가적으로 사용하지 않음 단점: 다운타임이 발생 02. 배포 방식 - 블루/그린 블루그린 방식에서, 블루는 구 버전 & 그린은 신 버전을 의미한다. 블루 '앤' 그..

카테고리 없음 2022.03.27

쿠버네티스 - 디플로이먼트의 배포 방식 :: 롤링 업데이트

목차 배포 방식 - 롤링업데이트 디플로이먼트는 애플리케이션을 배포하고 업데이트를 수행하는 리소스다. 이를 통해 배포하는 방식은 크게 네 가지로 분류되며, 방법마다 장단점이 존재한다. 따라서 서비스에 적합한 배포 방식을 채택해야 한다. 오늘은 가장 기본적이자 대표적으로 쓰이는 롤링업데이트 방식에 대해서 포스팅을 할 예정이다. 01. 배포 방식 - 롤링업데이트 앞선 글에서, 디플로이먼트의 개념 및 이점을 포스팅했었다. (이전 게시물) 쿠버네티스란? 주요 개념 익혀보기 - 레플리카셋, 디플로이먼트, 서비스 목차 쿠버네티스 구성요소 - 레플리카셋 쿠버네티스 구성요소 - 디플로이먼트 쿠버네티스 구성요소 - 서비스 01. 쿠버네티스 구성요소 - 레플리카셋(ReplicaSet) 앞선 글에서 파드(pod)에 대해서 포..

쿠버네티스란? 주요 개념 익혀보기 - 레플리카셋, 디플로이먼트, 서비스

목차 쿠버네티스 구성요소 - 레플리카셋 쿠버네티스 구성요소 - 디플로이먼트 쿠버네티스 구성요소 - 서비스 01. 쿠버네티스 구성요소 - 레플리카셋(ReplicaSet) 앞선 글에서 파드(pod)에 대해서 포스팅을 했었다. (이전 글 참고) 쿠버네티스란? - 노드와 파드, 컨테이너 차이를 이해해보자 목차 쿠버네티스란 쿠버네티스 구성요소 - 노드 쿠버네티스 구성요소 - 파드 01. 쿠버네티스란 도커를 어느 정도 공부하다 보면, 쿠버 네티스에 대해서 많이 들어봤을 것이다. 쿠버네티스는 컨테 eng-sohee.tistory.com 여기서, 레플리카셋은 파드의 수를 보장하기 위한 개념이다. 즉, 레플리카 세트를 3으로 설정했다고 가정할 때, 파드가 삭제되거나 (어떠한 이슈에 의해) 다운돼도, 쿠버네티스가 알아서 ..

Redis - Node.js 연동 - 127.0.0.1 이 아닌 다른 host 로 연결하는 방법

앞서, node js에 redis를 연동하는 방법 + 트러블 슈팅에 대해 포스팅을 했었다. Redis - Node.js 연동 - ClientClosedError: The client is closed 나는 업무 상 redis 를 node js 애플리케이션에 연동해서 수행해야 할 테스트 작업이 있었다. 사실 js 를 잘 다루지 못하지만, 해당 방법에 대해서는 구글링 시 많은 자료가 나오므로 비교적 손쉽게 eng-sohee.tistory.com 나는 GCP memorystore Redis ( = Cloud Redis)에 연결해야 했다. 하지만 연동 과정에서, 127.0.0.1 을 제외한 다른 host로 연결이 안 된다는 이슈가 발생했다. 나는 client configuration 문서를 통해, socket을..