· 독서
최근에 역행자를 읽게 됐는데, 개인적으로 자의식해체를 통해서 많은 것을 배울 수 있었고, 무엇을 배웠는지 기록을 남기기 위해서 글을 작성하게 되었습니다. 자의식해체를 읽고 제 단점을 해결하기 위한 힌트를 얻을 수 있었으며, 최근에 그 단점으로 인해서 고민하던 시기에 이 책을 읽을 수 있어서 운이 좋았던 것 같습니다. 자의식 해체 제가 느낀 자의식해체는 자아가 자기 방어를 위해 부적절한 생각을 떠올릴 때 이를 방지할 수 있는 방법이라고 생각했습니다. 인간은 가급적 안정된 상태를 유지하고 싶어 하기 때문에 큰 실수를 저지르더라도 내 자아가 엉망이 되어 자살하지 않도록 갖은 이유를 대며 실수를 합리화한다. 이로 인해 실수를 저지른 나를 보호하는 역할로써 자의식을 넘어 나 자신을 지키기에만 급급해진다. 자의식 ..
· 개발
최근 팀에서 FastAPI 반환값의 Response Model를 어떻게 사용할 것인지 논의했던 내용을 정리했습니다. 함께 논의해 주신 팀원분들께 감사인사를 드립니다. jsonable_encoder의 성능 이슈 FastAPI는 컨트롤러(라우터) 함수의 반환값을 json serializable 한 타입으로 변환해주는 jsonable_encoder라는 함수를 사용합니다. 따라서 API 반환시마다 jsonable_encoder 👉 json.dumps 과정을 거치게되며, 해당 함수는 recursive 하게 작동하기 때문에 반환값이 많을 경우 jsonable_encoder에 의해서 API 성능이 안 좋아질 수 있습니다. 간단한 코드로 확인해보면 아래와 같습니다. import timeit from typing imp..
· 개발
MSA로 전환 시 고민해야 할 분산 데이터 관련 문제가 트랜잭션만 있는 것은 아닙니다. 쿼리를 구현하는 방법도 찾아내야 합니다. 💡 트랜잭션 문제 해결 법 → [MSA] 마이크로서비스 사가 패턴 [MSA] 마이크로서비스 사가 패턴 단일 DB에 접근하는 모놀리식 애플리케이션의 트랜잭션 관리는 어렵지 않습니다. 하지만 다중 DB, 다중 메시지 브로커를 사용하는 모놀리식 애플리케이션이나, 자체 DB를 가진 여러 서비스로 구 sawaca96.tistory.com DB가 하나뿐인 모놀리식 애플리케이션에서는 비교적 쉽게 쿼리를 구현했습니다. 하지만 MSA에서는 의외로 쿼리를 작성하기가 어렵습니다. 여러 서비스 여러 DB에 분산된 데이터를 조회해야 하기 때문입니다. 이를 해결하기 위한 2가지 패턴이 있습니다. API..
· 개발
[Airflow] 개념 이해하기 Airflow에 대한 공식문서의 설명 Airflow 는 워크플로우를 프로그래밍 방식으로 작성, 스케줄링 및 모니터링하는 플랫폼입니다. Airflow 를 사용하여 워크플로우를 비순환 그래프로 작성할 수 있습니 sawaca96.tistory.com Airflow 두번째 글 입니다. Helm Chart를 이용해서 k8s위에 Airflow를 설치해보려고 합니다. 우선 많이 사용하는 차트는 아래 2가지 옵션이 있습니다. airflow-stable → Airflow community에서 개발한 차트입니다. astronomer/airflow-chart → Airflow as a Service를 개발하는 astronomer에서 공개한 차트입니다. 저는 airflow-stable을 이용해..
· 개발
Airflow에 대한 공식문서의 설명 Airflow는 워크플로우를 프로그래밍 방식으로 작성, 스케줄링 및 모니터링하는 플랫폼입니다. Airflow를 사용하여 워크플로우를 비순환 그래프로 작성할 수 있습니다. Airflow 스케줄러는 지정된 종속성을 따르면서 워커에게 작업을 부여합니다. 다양한 명령어들을 통해 복잡한 작업도 수행할 수 있습니다. 훌륭한 인터페이스를 통해서 운영 중인 파이프라인을 쉽게 시각화하고, 진행 상황을 모니터링하며, 필요할 때 문제를 해결할 수 있습니다. 워크플로우가 코드로 정의되면 유지 관리, 버전 관리, 테스트 및 협업 기능이 향상됩니다. 💡 비순환 그래프는 순환하는 싸이클이 존재하지 않고 일방향성만 가지는것을 의미합니다. 요약하면 Airflow는 개발자가 작성한 Python DA..
· 개발
단일 DB에 접근하는 모놀리식 애플리케이션의 트랜잭션 관리는 어렵지 않습니다. 하지만 다중 DB, 다중 메시지 브로커를 사용하는 모놀리식 애플리케이션이나, 자체 DB를 가진 여러 서비스로 구성된 MSA는 트랜잭션 관리가 어렵기 때문에 좀 더 정교한 메커니즘이 필요합니다. 따라서 서비스가 분리되면서 ACID(원자성 Atomic, 일관성 Consistency, 격리성 Isolation, 지속성 Durability) 트랜잭션으로 관리해 오던 단일 DB를 ACD 사가로 관리하는 다중 DB 아키텍처로 전환해야 합니다. 💡사가(sage)는 ACID에서 Isolation이 빠진 ACD만 지원하는 로컬 트랜잭션입니다. 사가를 이용해서 여러 서비스에 걸친 트랜잭션을 구현하고 데이터 일관성을 유지하는 방법에 대해 알아보겠..
· 개발
모놀리식 애플리케이션은 대부분의 모듈이 언어 수준의 메서드나 함수를 통해 서로 호출하기 때문에 REST API나 클라우드 서비스 연계 모듈을 작성하지 않는 이상 IPC는 크게 신경 쓸 필요가 없습니다. 이와 달리 MSA는 애플리케이션을 여러 개의 서비스로 구성하며 서비스는 대부분 요청을 처리하기 위해 서로 협동합니다. 서비스 인스턴스는 여러 머신에서 실행되는 프로세스 형태이므로 반드시 IPC(Inter-Process Communication)를 통해 상호 작용해야 합니다. 이번 글에서는 IPC의 종류와 가용성 측면을 따졌을때 MSA에서 어떤 IPC를 쓰는 것이 좋은지 알아보겠습니다. 동기 RPI 통신 💡 RPI는 클라이언트가 서비스에 요청을 보내면 서비스가 처리 후 응답을 회신하는 IPC입니다. 💡 메시..
· 개발
아키텍처는 확장성 신뢰성 관리성 테스트성 배포성등 ~성 으로 끝나는 서비스 품질 요건에 영향을 미칩니다. 따라서 어떤 아키텍처를 사용하느냐에 따라 품질 요건을 얼마나 충족할 수 있을지 결정됩니다. 오늘은 마이크로서비스 아키텍처에 대해 알아보도록 하겠습니다. 💡본문에서 마이크로서비스 아키텍처를 MSA(MicroServiceArchitecture)라고 부르겠습니다. MSA는 애플리케이션을 느슨하게 결합된 여러 서비스로 구성하는 아키텍처 스타일입니다. 💡여기서 서비스란 어떤 기능이 구현되어 단독 배포가 가능한 소프트웨어 컴포넌트입니다. 느슨하게 결합된 서비스는 구현 코드를 감싼 API를 통해서만 상호 작용하므로 클라이언트에 영향을 끼치지 않고 서비스 내부 구현을 바꿀 수 있습니다. 그리고 애플리케이션 개발 시..
반응형
sawaca96
으뜸코딩