728x90
반응형

go 4

[msa-perf-lab] Python과 Go 비교: I/O & CPU Bound 작업에서의 동시성 차이 분석 - GIL, Gouroutine, M:N 스케줄링

MQ 비동기 도입 전/후 테스트를 진행하며, 파이썬의 I/O 작업 처리 방식에 궁금증이 생겼다. 1초가 걸리는 요청을 초당 100개씩 보냈는데도 1초마다 100개를 전부 응답했기 때문이다. 파이썬은 GIL 때문에 한번에 하나의 작업만 처리하는 걸로 알고 있었는데다가, 내가 비동기 처리를 하지 않았는데도 비동기처럼 동작하길래 무슨 원리인지 궁금해서 파 보았다. GIL(Global Interpreter Lock)GIL은 Global Interpreter Lock의 약자로서, 간단히 말하면 파이썬에서 하나의 프로세스(워커)가 동시에 하나의 CPU 작업만 실행하게 하는 제약조건이다. 이 제약 때문에 파이썬 코드는 언제나 동시에 단 한개만 실행된다. 그러나 이것이 싱글스레드로 동작한다는 말은 아니다. 필요에..

[msa-perf-lab] REST vs gRPC 성능 비교 및 InfluxDB + Grafana 시각화

드디어 성능 테스트에 필요한 모든 환경을 구축하고, 실제 테스트까지 해 보았다.트래픽 발생은 JS k6라이브러리를 활용했고, 시계열 데이터를 InfluxDB에 담아 Grafana와 연동해 시각화했다. InfluxDB + Grafana 컨테이너화 InfluxDB와 Grafana를 컨테이너로 올렸다. Docker에 준비된 이미지를 받아와 띄우고 기본 세팅만 하면 되기 때문에 크게 어렵진 않았다.기존 컨테이너 (Flask + Go(Gin) + PostgreSQL)와 하나의 compose 파일로 묶을까 했지만, 네트워크는 공유하되 테스트용 컨테이너는 분리해 관리하는 것이 나을 것 같아 따로 구성했다. InfluxDB, Grafana 세팅은 크게 건드린 건 없고 최대한 가볍게 띄웠다. 모든 컨테이너가 띄워졌다...

[msa-perf-lab] Flask <-> Go(Gin) gRPC 환경 세팅 및 내부 gRPC 통신 테스트

저번 글에서 Flask + PostgreSQL 환경 세팅 및 docker-compose 컨테이너화 까지 진행했었다.이번 글에서는 Go 서버 구현은 넘어가고, Flask Go gRPC 환경 세팅에 대한 내용을 다룰 것이다. 디렉터리 구조 우선 디렉터리 구조를 좀 손봤다. 작은 프로젝트가 될 거라서 구조는 신경쓰지 않으려고 했는데, 플라스크 기준으로 3가지 통신 방식이 있었다. 1. Flask가 요청 받고 직접 응답 (internal)2. Flask가 요청 받고 Go에게 Rest로 전달 (rest)3. Flask가 요청 받고 Go에게 gRPC로 전달 (grpc) 아직 제대로 시작도 안 했는데 벌써 복잡해져서, 아예 초반에 디렉터리 구조를 잡아버렸다.그나마 다행인 건, gRPC 서버(Go)에서는 gRPC ..

[msa-perf-lab] MSA 성능 실험 프로젝트 - Flask & Go(Gin)

프로젝트 개요Flask + Go(Gin) 기반 MSA 아키텍처 성능 실험 프로젝트를 시작한다. 서비스 목적이 아닌 성능 개선 및 측정/검증 프로젝트이며 UI/UX, 도메인, 비즈니스 로직 등을 철저히 제외하고 백엔드 고급 기술 + 성능 개선 및 측정에 목표를 둔다. 프로젝트 목적- 이력서 & 포트폴리오 업그레이드 및 개인 실력 향상 주요 내용- Flask & Go(Gin) MSA 아키텍처 설계 및 구현- Flask & Go(Gin) 서버 간 Rest/gRPC 성능 측정- Flask 단일 vs Flask & Go 성능 측정 (CPU 집약적 연산, 외부 API 호출, 대용량 데이터 처리 등)- Docker/Docker compose 활용한 컨테이너 그룹화 및 Kubernetes 연동 컨테이너 오케스트레이션-..

728x90
반응형