flask

3 개의 포스트

aws4분 읽기큐레이션 요약

전체 수명 주기 제어로 격리된 샌드박스 실행하기: AWS Lambda, MicroVM 도입 | Amazon Web Services

AWS Lambda MicroVMs는 사용자나 AI가 생성한 신뢰할 수 없는 코드를 사용자별로 격리된 실행 환경에서 실행하도록 설계된 서버리스 컴퓨팅 기능이다. Firecracker 기반의 VM 수준 격리, 스냅샷을 활용한 빠른 시작·재개, 메모리와 디스크 상태를 유지하는 실행 세션을 제공하면서도 인프라를 직접 운영할 필요가 없다. 특히 AI 코딩 도구, 온라인 개발 환경, 데이터 분석, 취약점 스캐너처럼 사용자별 장기 실행 환경이 필요한 서비스의 기존 격리·성능 trade-off를 줄이는 것이 핵심이다. ## 사용자별 격리 실행 환경이 필요한 이유 - AI 코딩 어시스턴트, 대화형 코드 실행 환경, 데이터 분석 플랫폼, 취약점 스캐너, 사용자 스크립트를 실행하는 게임 서버 등이 주요 대상이다. - 기존 방식에는 각각 한계가 있다. - **가상 머신**: 강력한 격리를 제공하지만 시작에 수분이 걸릴 수 있다. - **컨테이너**: 빠르게 시작되지만 공유 커널 때문에 신뢰할 수 없는 코드를 안전하게 격리하려면 추가적인 보안 강화가 필요하다. - **서버리스 함수**: 이벤트 기반 요청-응답 처리에 적합하지만, 사용자 상호작용 사이에 상태를 유지하는 장기 세션에는 적합하지 않다. - 직접 가상화 인프라를 구축하면 낮은 지연 시간과 강한 격리를 모두 확보할 수 있지만, 상당한 운영·보안 전문성이 필요하다. ## Firecracker 기반 VM 수준 격리 - 각 사용자 또는 세션은 독립된 MicroVM을 할당받는다. - MicroVM 간 커널과 리소스를 공유하지 않으므로 한 사용자가 실행한 신뢰할 수 없는 코드가 다른 사용자 환경이나 호스트 시스템에 접근하는 것을 막는다. - AWS Lambda에서 대규모로 사용되어 온 Firecracker 기술을 기반으로 하므로, 자체 가상화 시스템을 구축하는 대신 AWS의 운영 성숙도를 활용할 수 있다. ## MicroVM Image 생성 과정 - 애플리케이션 코드와 Dockerfile을 ZIP 파일로 패키징해 Amazon S3에 업로드한다. - `public.ecr.aws/lambda/microvms:al2023-minimal` 기반 이미지에서 Python, pip 등을 설치하고 애플리케이션을 구성할 수 있다. - 예시 애플리케이션은 Gunicorn으로 실행되는 Flask API이며, `0.0.0.0:5000` 포트에서 요청을 처리한다. - 다음과 같은 CLI 명령으로 이미지를 생성한다. ```bash aws lambda-microvms create-microvm-image \ --code-artifact uri=<path/to/s3/artifact.zip> \ --name <VM_image_name> \ --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \ --build-role-arn <IAM role ARN> ``` - Lambda는 ZIP 파일을 가져와 Dockerfile을 빌드하고 애플리케이션을 초기화한다. - 초기화가 끝난 실행 중인 디스크와 메모리 상태를 Firecracker 스냅샷으로 저장한다. - 빌드 로그는 다음 CloudWatch Logs 경로에서 확인할 수 있다. ```text /aws/lambda/microvms/<image-name> ``` ## 스냅샷 기반 빠른 시작과 재개 - MicroVM은 일반적인 콜드 부팅 대신 사전에 초기화된 스냅샷에서 시작한다. - 애플리케이션 프로세스, 설치된 패키지, 메모리 상태 등이 준비된 상태이므로 실행 직후부터 요청을 처리할 수 있다. - 이후 생성되는 MicroVM도 동일한 이미지 스냅샷에서 복원되므로 초기화 시간을 줄일 수 있다. - 대규모 대화형 세션도 사용자 입장에서 즉시 반응하는 수준의 시작·재개 성능을 목표로 한다. ## 상태를 유지하는 세션과 유휴 정책 - 실행 중인 MicroVM은 다음 상태를 세션 동안 유지한다. - 메모리 상태 - 디스크 상태 - 실행 중인 프로세스 - 일정 시간 요청이 없으면 MicroVM을 일시 중지할 수 있다. - 중지 시 메모리와 디스크 상태를 보존하고, 요청이 다시 들어오면 해당 상태에서 자동으로 재개한다. - 예시 설정은 15분 유휴 후 중지하고, 5분 동안 중지 상태를 유지한 뒤 요청이 오면 자동 재개하도록 구성한다. ```bash aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:<region>:<acct>:microvm-image:my-image \ --execution-role-arn arn:aws:iam::<acct>:role/MicroVMExecutionRole \ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300,"autoResumeEnabled":true}' ``` ## 엔드포인트와 요청 인증 - MicroVM을 실행하면 Lambda가 고유 ID와 전용 엔드포인트 URL을 제공한다. - 별도의 네트워킹 구성을 하지 않아도 애플리케이션에 접근할 수 있다. - CLI로 단기 인증 토큰을 생성한 뒤 HTTPS 요청의 `X-aws-proxy-auth` 헤더에 포함해 요청을 보낸다. - MicroVM이 중지된 뒤 다시 요청해도 애플리케이션 상태가 유지된 채 복원되므로 클라이언트는 중지·재개 과정을 직접 처리할 필요가 없다. ## 실용적인 활용과 추천 Lambda MicroVMs는 단순한 단발성 함수보다 사용자별로 지속되는 안전한 실행 환경이 필요한 서비스에 적합하다. 사용자 코드 실행, AI 에이전트의 도구 호출, 온라인 IDE, 샌드박스형 분석 환경을 구축한다면 컨테이너 직접 격리나 VM 운영을 대체할 수 있는 후보로 검토할 만하다. 다만 실제 도입 전에는 IAM 실행 역할, 인증 토큰 관리, 유휴·재개 정책, 상태 보존 범위와 비용을 서비스의 세션 패턴에 맞게 검증하는 것이 좋다.

원문 읽기(새 탭에서 열림)
gitlab원문

Python에서 GitLab 기능 플래그 시작하기 (새 탭에서 열림)

GitLab 피처 플래그(Feature Flags)는 소프트웨어의 배포와 출시를 분리하여 운영 환경에서의 리스크를 최소화하는 핵심 기술입니다. Python Flask 앱과 Unleash SDK를 통합하면 별도의 서버 없이도 GitLab UI에서 실시간으로 기능을 제어하고, 특정 사용자 그룹에게만 점진적으로 기능을 노출할 수 있습니다. 이를 통해 예상치 못한 버그 발생 시 코드 재배포 없이 즉각적으로 기능을 차단하고 안전하게 장애에 대응할 수 있는 유연한 릴리스 환경을 구축할 수 있습니다. **GitLab과 Unleash SDK의 작동 방식** * GitLab은 Unleash 호환 API를 내장하고 있어 별도의 Unleash 서버 구축 없이도 다양한 언어의 SDK와 직접 연결이 가능합니다. * SDK는 애플리케이션 시작 시 모든 플래그 정의를 가져오며, 설정된 간격(예: 15초)마다 이를 업데이트하여 로컬에 캐싱합니다. * 플래그 상태를 확인하는 `is_enabled()` 함수는 네트워크 호출 없이 로컬 캐시를 즉시 평가하므로, 성능 저하가 거의 없고 일시적인 네트워크 장애에도 탄력적으로 대응합니다. **정교한 기능 노출을 위한 배포 전략** * **All users:** 모든 사용자에게 기능을 즉시 켜거나 끄는 단순 토글 방식으로 사용됩니다. * **Percent rollout:** 사용자 ID나 세션 ID를 기반으로 트래픽의 특정 비율(예: 10%)에게만 기능을 노출하여 점진적인 릴리스를 수행할 수 있습니다. * **User IDs 및 User list:** 특정 사용자 ID나 정의된 리스트에 포함된 내부 QA 팀, 베타 테스터에게만 기능을 우선적으로 공개하는 데 유용합니다. **Python Flask 애플리케이션 통합 절차** * **GitLab 설정:** 프로젝트 설정에서 Feature Flags 기능을 활성화하고, 사용할 플래그 이름(예: `dark_mode`, `new_layout`)과 배포 전략을 정의합니다. * **인증 정보 확보:** GitLab UI의 Configure 패널에서 제공하는 API URL과 고유한 Instance ID를 복사하여 애플리케이션의 환경 변수로 등록합니다. * **SDK 구현:** `UnleashClient`를 사용하여 API URL과 Instance ID를 설정하고 클라이언트를 초기화합니다. 이후 코드 내에서 플래그 활성화 여부에 따라 로직이 분기되도록 작성합니다. * **환경 관리:** 보안을 위해 Instance ID와 같은 민감한 정보는 `.env` 파일에 저장하고 버전 관리 시스템(Git)에 포함되지 않도록 주의해야 합니다. **실무를 위한 권장 워크플로우** 새로운 기능을 배포할 때는 먼저 'User IDs' 전략을 사용하여 내부 팀원들에게만 기능을 노출해 최종 점검을 수행하십시오. 문제가 없다면 'Percent rollout' 전략으로 변경하여 트래픽의 10%부터 점진적으로 확대해 나가는 것이 안전합니다. 만약 운영 지표에 이상이 발견되면 GitLab UI에서 즉시 플래그를 비활성화하는 것만으로 몇 초 안에 전체 서비스를 정상화할 수 있습니다.

datadog원문

엔지니어링 스포트라이트: 테이 니시무라 (새 탭에서 열림)

데이터독(Datadog)의 인프라 엔지니어 테이 니시무라(Tay Nishimura)의 커리어 여정은 자신만의 사고방식에 적합한 직무를 찾는 과정의 중요성을 보여줍니다. 수학 전공자이자 시각적 사고를 선호하는 그녀는 일반적인 소프트웨어 개발 속도 경쟁에서 어려움을 겪었으나, 네트워크 시뮬레이터 'ToyNet' 개발을 통해 자신의 강점을 증명하며 SRE(Site Reliability Engineering)로 성공적으로 전향했습니다. 이 글은 전형적인 엔지니어의 틀에 갇히지 않고 자신의 고유한 특성을 기술적 자산으로 승화시킨 과정을 다룹니다. **학계와 실무 사이의 괴리와 시각적 사고** * 수학 전공자로서 증명 위주의 엄격한 사고에 익숙했던 테이는 효율과 속도를 중시하는 애자일 개발 환경에서 초기에 성능 피드백 문제로 어려움을 겪었습니다. * 코드를 바로 작성하기보다 코드를 그림으로 변환하여 논리를 검증한 뒤 다시 코드로 옮기는 '시각적 사고' 방식을 고수했는데, 이는 신중함을 더해주었지만 작업 속도를 늦추는 요인이 되기도 했습니다. * 일반적인 개발 직무에서는 속도 저하로 평가받았던 그녀의 신중함과 모든 실패 모드를 고려하는 태도가, 오히려 시스템의 안정성을 책임지는 SRE 직무에는 핵심적인 역량이 될 수 있음을 깨달았습니다. **ToyNet 개발과 SRE로의 전환** * 팬데믹 기간 중 해고를 겪었으나 이를 계기 삼아 평소 관심 있던 네트워크 기술을 공부하며, 수감자와 베테랑을 위한 교육 프로그램 'Project Reclass'를 시작했습니다. * 인터넷 사용이 제한된 교도소 환경에서도 네트워크 실습이 가능하도록 React, Flask, Mininet을 활용해 컨테이너 기반 네트워크 에뮬레이션 플랫폼인 'ToyNet'을 설계했습니다. * ToyNet은 테이의 클라우드 배포 역량과 기술적 깊이를 증명하는 강력한 포트폴리오가 되었으며, 이는 데이터독에 SRE로 합류하는 결정적인 발판이 되었습니다. **데이터독에서의 적응과 시각적 분석의 힘** * 데이터독 합류 후 Kubernetes, 카오스 엔지니어링, Go 언어 등 생소한 기술 스택을 빠르게 습득하며 인프라 엔지니어로서 전문성을 쌓았습니다. * 데이터독의 카오스 자동화 도구인 'Chaos Controller'를 오픈소스화하는 과정에서, 복잡한 코드베이스를 상자와 화살표로 시각화하여 구조를 파악하는 자신만의 분석 방식을 적극적으로 활용했습니다. * 과거에는 약점으로 치부되었던 '꼼꼼하고 신중한 속도'가 이제는 대규모 시스템의 신뢰성을 보장하고 복잡한 기술 문제를 해결하는 강력한 무기가 되었습니다. 자신이 업계의 전형적인 틀(Cookie-cutter shape)에 맞지 않는다고 느낄 때, 포기하기보다는 자신의 독특한 사고방식이 빛을 발할 수 있는 세부 분야를 찾는 것이 중요합니다. 테이 니시무라의 사례처럼 사이드 프로젝트를 통해 실질적인 기술력을 증명하고 이를 직무 전환의 교두보로 활용하는 전략은 커리어 고민을 겪는 엔지니어들에게 실질적인 영감을 줍니다.