[BackEnd] 비동기 테스크 큐와 DI Container (feat. Celery)
·
Dev/Backend
개요 지금 학습 흐름이 아래와 같다.IoC & DIP & DI FrameWork의 DI Container로 여러 의존성 관리싱글톤 패턴 & DI Container 직접 만들어서 사용하기이 흐름에 따라서, 이번에는 DI Container를 직접 구현해서 사용할 때, 비동기 테스크 큐들이 어떤 이점을 누릴 수 있는지 살펴보자. 먼저 비동기 테스크 큐와 파이썬 생태계의 대표적 라이브러리인 Celery를 알아보고,규모가 큰 분산 환경 프로젝트에서 Celery와 같은 비동기 테스크 큐를DI Container에 등록하는 방법과 이점을 살펴볼 것이다. 1. 비동기 테스크 큐1.1 비동기 테스크 큐란?쉽게 말해서 지금 당장 처리하지 않아도 되는 일을, 나중에 따로 처리하게 만드는 시스템이다. 백엔드 서버는 보통 아래와..
[BackEnd] 싱글톤 패턴 & DI Container 직접 만들어서 사용하기
·
Dev/Backend
개요IoC, DI, DIP 알아보기DI Container 구현하고 Framework 이해하기^ 위 글에 이어 DI Container를 직접 구현해서 여러 객체 간의 의존성을 관리하는 것에 대해 더 깊이 이해해보고자 한다. 요즘 가장 많이 쓰는 프레임워크가 FastAPI이기에, 글도 이를 중점적으로 작성해 나갈 것이다. 1. Framework가 여러 의존성을 관리하는 방법 : DependsFastAPI의 의존성 주입은 함수 시그니처를 통한 선언적 의존성 관리와 Depends()가 핵심이다. Depends()는 한마디로 쉽게 "이 함수를 실행해서 결과를 여기에 넣어줘"라고 프레임워크에게 알려주는 도구다.이 Dependency Injection의 핵심 기능인 Depends()를 사용하지 않고 의존 관계를 구현..
[BackEnd] Framework 이해하기 - DI Container로 여러 의존성 관리
·
Dev/Backend
개요이전 글에서 IoC, DI, DIP를 알아보았다. 이제 여기서 확장해서 DI Container와 생명 주기 관리, Web Framework의 원리를 알아보자. 1. Framework프레임워크 본질 중 하나가 IoC다. 일반적으로는 개발자가 직접 코드 흐름을 제어하지만, 프레임워크는 이 흐름을 뒤집는다. (제어의 역전)프레임워크가 애플리케이션 코드를 호출 및 흐름을 제어하고, 개발자는 의존 관계만 정의하는 방식이다. framework라고 하면 DI 패턴을 통해서 여러 자원을 관리할 수 있는데, 이게 바로 IoC를 실현하는 구체적인 방법이다.FastAPI: 함수 인자에 Depends()를 명시한다. FastAPI가 호출 시점에 자동으로 의존성을 주입한다.Spring: @Component, @Service..
[BackEnd] IoC & DIP & DI
·
Dev/Backend
개요Inversion of Control, Dependency Inversion Principle, Dependency Injection에 대해 학습한다.DIP를 위해 → IoC 개념으로 → DI를 사용하는 큰 흐름을 가지고 각 내용을 살펴본다. 1. IoC (Inversion of Control) : 제어(관리)의 역전프로그램의 제어 흐름을 개발자가 아닌 프레임워크/컨테이너가 담당하는 설계 원칙이다.1.1 제어(관리)의 두 가지 의미객체 생명 주기 제어(생성, 소멸)프로그램 실행 흐름 제어(언제, 어떤 순서로)1.2 전통적 방식 vs IoCIoC 적용 전class Teacher: def teach(self): student = Student() # 내가 직접 생성 result = student...
[K8S] Kubernetes CLI 총정리
·
DevOps/DevOps
개요업무를 하면서 점점 파드에 접근해서 정보를 확인할 일이 늘어나고 있다. 온콜이나 장애 상황 시에 노션에 붙여둔 명령어를 일일이 찾아보는게 허들이라 느껴져서 아예 블로그에 정리해보기로 했다! KubectlKubernetes API를 사용해서 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드 라인 툴이다.리소스 관리: Pod, Service, Deployment, ConfigMap 등 k8s 리소스를 생성하고 관리할 수 있다. YAML 파일을 통해 선언적으로 리소스를 정의하거나 명령형 커맨드로 직접 다룰 수 있다.클러스터 상태 확인: 클러스터에서 실행 중인 애플리케이션의 상태, 노드 정보, 이벤트 로그 등을 조회할 수 있다.애플리케이션 배포 및 업데이트: 컨테이너 이미지를 배포하고, 롤링 업데이..
[회고] 사내 해커톤 시뮬레이션 회고!
·
회고 & 후기/회고 & 후기
개요회사에서 외부인을 대상으로 해커톤을 주최했다. 이 해커톤의 성공적인 진행을 위해 미리 사내 개발자를 대상으로 시뮬레이션을 진행했고, 자진해서 8시간 해커톤을 참여하게되었다. 참여 동기[ 지식 관점 ] 인프라실에서 자연스럽게 인프라 역량을 키우는 데 몰입하다 보니 상대적으로 프로덕트 개발에 대한 집중은 줄어들었다. 그래서 이번 시뮬레이션 대상자 지원은, 놓쳤다고 느꼈던 개발 지식과 열정을 다시 끌어올리기 위해 스스로에게 동기부여를 주기로 했다![ 협업 관점 ] 시즌테크로 입사한지 6개월차가 되었다. SRE팀은 당근 인프라를 관리하며 서비스 안정성을 책임진다. 또한, 개발자들이 개발에 집중할 수 있도록 인프라 기능을 추상화하고, 서비스 개발에만 집중할 수 있도록 플랫폼을 개발 및 운영한다. 그래서 개발자..
[Network] CIDR, IP, Subnet Mask
·
CS/Network
개요볼 때마다 헷갈려서 아예 각 잡고 정리해보는 CIDR, IP, Subnet Mask 개념확실하게 짚고 넘어가자! 1. CIDR(Classless Inter-Domain Routing)IP/비트수로 네트워크 범위를 표현하는 방식x.x.x.x/ab 형식 2. IP1.1 IP 의미네트워크 + 호스트를 8비트씩 점으로 구분해서 10진수로 표기하는 방법Network Address: 해당 IP가 속한 네트워크 구역을 알 수 있다.192.168.1.0/24 네트워크에 있는 모든 장비는 네트워크 주소가 192.168.1.0으로 같다. (서브넷 마스크를 통해 알 수 있다.)192.168.1.1/24, 192.168.1.12/24 ,192.168.1.2/24가 목적지인 패킷은 라우터에 의해 모두 같은 네트워크로 라우팅..
[Monitoring] 시계열 데이터와 TSDB
·
Monitoring/PromQL & Grafana
개요인턴 때부터 Grafana 작업을 하면서 Metrics, TSDB, PromQL 관련 내용들을 개인 노션에 쭉 작성했는데, 블로그에도 새로운 카테고리를 생성하고 정리하는 공간을 만들었다. 요즘 Alert Rule을 세팅하는 작업을 하고 있는데, 노션 문서를 자주 참고하게 되어서 아예 블로그로 올려버리기로 결심!1. 시계열 기반 모니터링시간의 변화에 따라 축적된 데이터들을 수집, 저장, 분석, 알람하는 시스템예를 들어서.. Prometheus는 다음과 같은 일을 한다.15초마다 /metrics 에 접속해서 현재 상태값 긁어오기수집한 메트릭을 시간과 함께 저장PromQL 쿼리를 통해 과거 1시간 평균 rate같은 걸 분석1.1 운영 시스템에서 시계열 데이터과거에 무슨 일이 있었는지?변화 추이는 어떠한지?..
[Network] CDN(Content Delivery Network)
·
CS/Network
개요Valkey 발표 및 전환을 앞두고..! 이번 스프린트에서 드디어 CloudFront Datadog Alert 작업을 시작하게 되었다. 윈터테크 인턴 시절 CloudFront 리소스에서 Additional Metrics가 비활성화된 점을 발견하고, 프로덕션 환경에 한해 이를 활성화하여 모니터링을 강화하자는 제안을 했으며 팀에서 이를 받아들여 적용하였다. 그러나 Additional Metrics 활성화 이후 기존 CloudFront Datadog Alert의 정확도가 떨어지는 문제가 발생했다. 이번 스프린트에서는 이 문제를 개선하여 Alert 정확도를 높이고, CDN 모니터링을 체계적으로 강화하는 것을 목표로 한다. 이번 포스팅으로 CDN에 대해 잘 정리해보겠다! 1. CDN 기본 구조와 목적CDN은 ..
[DevOps] Redis 7.x → Valkey 8.x 마이그레이션 PoC
·
DevOps/DevOps
개요Redis Laps가 SSPL로 전환하면서, Redis 7.x 버전을 fork한 Valkey Engine 프로젝트가 시작되었다. Valkey 7.x는 Redis 7.x를 그대로 fork한 것과 다름 없어서, 마이그레이션을 할 때 클라이언트 라이브러리를 변경하는 것 이외에는 크게 신경 쓸 점이 없다. 하지만 Valkey 8.x Engine부터는 Redis와 꽤 다른 지점이 생긴다. 직접 ElastiCache Redis, Valkey Engine을 생성해서 마이그레이션 과정을 정리해본다. 1. 기본적인 읽기 전용 Cache기본 환경 정보- Node Type: cache.t4g.small- Cluster Mode: Enabled- Shards/Nodes: 1개 / 2개- Encryption in tran..
[DevOps] 캐시와 Redis, ElastiCache
·
DevOps/AWS
개요이번에 ElastiCache와 관련한 하나의 에픽을 마무리하게 되었다. AWS 셀프 서비스를 위해서 작업에 집중했는데, 본격적인 사내 개발자 사용자 가이드와 안내 문서를 작성하기에 앞서 캐시와 Redis, ElastiCache, 더 나아가 Redis > Valkey 엔진별 특성/ 마이그레이션 내용을 정확히 공부하고자, 블로그 글을 통해 정리해보려고 한다. 그래서 다음과 같은 순서로 글을 쭉 작성하며 정리할 예정!캐싱 개념 | Redis & ElastiCachePython으로 통신하면서 단일 노드 ElastiCache 실습해보기클러스터 모드의 ElastiCache 사용하면서 구조 파악하기Redis, Valkey 각 엔진을 생성하고, 성능 및 비용 비교하기Redis, Valkey 엔진별 차이점 파악하기이..
[Git] Git Rebase 학습하고 실습해보기
·
회고 & 후기/개발 일지
개요git rebase를 실무에서 여러 브랜치에 적용하려니까 헷갈리는 점이 많아서 이번 기회에 git 공부를 확실히 하고자 블로그를 작성하게 되었다. 이 포스팅에서는 git 명령어 뿐만 아니라 fork라는 도구도 함께 사용하며 익힐 것! 1. git rebasegit rebase는 말 그대로 브랜치의 base를 다시(re) 설정한다. git rebase를 통해 커밋 그래프를 단순하게 가져가고, 의미 있는 커밋들만 남겨서 더 원활한 협업을 지원한다. 현재 master 브랜치의 a3 커밋을 베이스로 작업을 진행하고 있고, master 브랜치는 또 다른 작업들이 진행된 상황이다. 이 master 브랜치의 최신 작업 내용을, 내가 현재 작업 중인 feature 브랜치에도 적용하고 싶을 때 rebase 명령어를..
sebinChu
Studying IT with cobinding