Karl

Karl

25 posts published

flutter, admob 보상형 전면 광고 연동
flutter

flutter, admob 보상형 전면 광고 연동

admob으로 전면광고를 알아 보다가, 보상형 광고가 있어서 만들고 있는 App 에 연동한 과정을 정리한다. 처음에 보상형이라는 이름을 이해를 못했는데, 광고가 제시하는 특정 조건을 만족시키면 보상으로 서비스 내 특정 기능을 가능하게 하거나 포인트를 주는 형식을 이야기 하는 것이였다. 1.  광고 단위 추가2.  google_mobile_ads 패키지 설치google_mobile_ads | Flutter PackageFlutter

flutter

flutter, dynamic links 사용 구축기

flutter app 을 개발하면서 특정 도메인으로 dynamic links 를 사용한 경험을 기록한다. (개인 도메인을 사용하지 않으면 page.link 라는 도메인을 firebase 에서 제공한다.) (adsbygoogle = window.adsbygoogle || []).push({}); 1. Firebase, Custom Domain Hosting 설정먼저 특정 도메인을 등록하려면 해당 도메인의 호스팅을 firebase 에 등록해야한다. 1) Custom 도메인 등록 시작하기를 선택시작하기를 누루면 콘솔에

AWS, arm64 계열 t4g 환경준비
aws

AWS, arm64 계열 t4g 환경준비

서비스를 준비하면서 AWS, lightsail 에서 AWS 환경으로 이전을 준비하는 과정을 정리하고 있다. lightsail 에서 컨테이너 서비스 환경을 사용하기에는 클러스터서버를 구축해야하는 내 상황과는 달랐다. 그래서 AWS 상에 네트워크를 구축하고 arm 계열 서버를 사용할 목적으로 서버도 x86 기준에서 arm 기준으로 컴파일해야 했고 docker 이미지도 환경을 맞춰줘야 했다. 1.  linux/arm64서버 환경에서 Golang

aws

AWS, 네트워크 환경구축

AWS, lightsail 컨테이너 서비스에서 지원하는 것이 부족해서 ECS 를 무작정 사용해보고자 했다. (lightsail 컨테이너도 기반은 ECS 라고 하던데 세부적인 기능이 빠져있었다.) 먼저 lightsail 에서 벗어나 aws 상에 네트워크를 구축하는 것이 먼저 해야 할 일이었고 아래와 같이 VPC 를 구성하고 AZ 를 나누어 pubic / private zone의 구성을 만들어야 했다. (adsbygoogle = window.

aws

AWS, SES 도메인 연동

개인 프로젝트를 진행하던 도중 AWS 의 Simple Email Service 를 고려하게 됐고 연동과정을 기록해 두기로 한다. AWS, SES 시작화면 (adsbygoogle = window.adsbygoogle || []).push({}); 1. 자격증명생성과감하게 오른쪽 위 "자격증명생성" 을 클릭해봤다. 생소한 화면이나 수정하면 되지 하는 마음으로 아래와 같이 대충 입력 후 "자격증명생성" "자격증명생성" 완료 후 아래와 같이 TXT 레코드 및

aws

AWS, lightsail 컨테이너 서비스 테스트

개인 프로젝트를 진행하며 container 서비스를 쓸일이 있어서 aws container 서비스중 저렴하다는 lightsail 컨테이너 서비스를 사용해보기로 했다. lightsail continer service (adsbygoogle = window.adsbygoogle || []).push({}); 아래와 같이 웹에서 리전을 선택하고 서비스 사양과 이미지를 선택하면 간단히 생성이 가능하다. Web 에서 컨테이너를 생성하는 화면나는 직접 만든 서버를 클러스터로 사용할 목적이므로, 일단 로컬머신에서 이미지를 생성하기로

golang

Golang, CGO Linux 크로스 컴파일러

Cross Compiler이 크로스 컴파일러는 Apple Silicon 및 Intel Mac을 모두 지원합니다. homebrew-macos-cross-toolchains/README.md at main · messense/homebrew-macos-cross-toolchainsmacOS cross compiler toolchains. Contribute to messense/homebrew-macos-cross-toolchains development by creating an account on GitHub.GitHubmessensebrew 패키지 설치brew tap messense/macos-cross-toolchains brew install x86_64-unknown-linux-gnuCrossCompile, x86_64 예시CGO_ENABLED=1 CC=x86_64-unknown-linux-gnu-gcc

gRPC

gRPC 구현 - Client Streaming RPC #2

이번 글에서는 gRPC 의 Client Streaming RPC 예제를 구현 해보도록 한다. Client Streaming RPC 는 다량의 데이터를 스트리밍 방식으로 전송한다는 점에서 지난 글에서 다뤘던 Unary RPC 와 다르다. (아래 그림에서 왼쪽 아래) gRPC Learning (Part 1) - Yang(Bruce) Li - Medium (adsbygoogle = window.adsbygoogle || []).push({}); Client Streaming RPC의 구현시작하기Client

gRPC

gRPC 구현 - Unary RPC #1

gRPC의 대표적인 4가지 서비스 예제를 직접 구현해보고 정리해 보기로 했다. 이번 글에서는 gRPC 의 가장 단순한 서비스 형태인 Unary RPC 를 작성 해보도록 한다. Performance is not an Option - gRPC and Cassandra (adsbygoogle = window.adsbygoogle || []).push({}); gRPC에 대한 소개gRPC 프레임웍에 대한 소개는 좋은 글을 소개하는 것으로 대신하며, 다음 링크(

benchmark

uvicorn 0.16.0 성능문제

cloud 에서 uvicorn 으로 서비스 해야 하는 상황에서 어떤 구조로 서비스 하는게 효율이 좋을 지 고민 중에 다음과 같은 테스트를 진행했고 뜻밖의 상황을 기록해둔다. 테스트를 마친 지금 결론은 uvicorn 의 특정버전 문제가 아닌 듯 하다. uvicorn 이 worker 프로세스를 제어하는 방식(spawn)에서 파생된 문제로 보인다. (그렇다고 하기에도 워커가 1개일때도

python, db library benchmark (feat. sqlalchemy vs aiomysql)
benchmark

python, db library benchmark (feat. sqlalchemy vs aiomysql)

DB 라이브러리에서 동기처리 (sqlalchemy) 가 비동기처리 (aiomysql) 특성에 따라 어떤 차이가 있는 지 살펴봤다. 벤치마크 테스트는 Pool 을 구성하고 주요 옵션이나 기능의 차이를 살펴보고자 했다. 기본적으로 동기처리는 Pool 에서 하나씩 Connection을 사용하고 리턴하는 방식으로 처리 될 것이며, 비동기 처리는 비동기로 날라오는 요청들을 가능한 Pool 안의 Connection을 가져다 쓰고 리턴하는 방식을

FastAPI, CRUD API 개발을 위한 기록
python

FastAPI, CRUD API 개발을 위한 기록

API에 있어 기본이 되는 CRUD API 를 개발하며 FastAPI 에 적응하기 위한 기록을 남긴다. (adsbygoogle = window.adsbygoogle || []).push({}); 1. 환경세팅1) 프로젝트 생성poetry new appspoetry 를 통해 프로젝트를 생성하면 아래와 같은 구조를 갖게 된다. apps ├── pyproject.toml ├── README.rst ├── apps │ └── __init__.py └── tests ├── __init__.py └── test_apps.py2) 의존성 라이브러리 설치db는

benchmark

FastAPI (Python) vs Echo (Go)

단순 호기심에 동일 기능을 벤치마크 해봤다. 언어의 성격이나 장단이 다르니 동일한 조건의 테스트는 아니라고 생각된다. 다른 파이썬 라이브러리로도 벤치마크 해봐야겠지만, 결론적으로는 Go 로 작성된 echo 프레임웍이 RPS 면이나 응답속도로도 압도적으로 빨랐다. (adsbygoogle = window.adsbygoogle || []).push({}); 1. Envapple m1 macbook air, osx v.11.6.2 bigsur, memory 16GB2.FastAPI (Python)

uvicorn 0.16.0 benchmark (feat. m1 mac)
benchmark

uvicorn 0.16.0 benchmark (feat. m1 mac)

uvicorn 서버의 세가지 옵션 설정에 따른 성능을 평가해보고자 테스트를 진행함 (adsbygoogle = window.adsbygoogle || []).push({}); 1.envapple m1 macbook air, osx v.11.6.2 bigsur, memory 16GBRunning uvicorn 0.16.0 with CPython 3.9.7 on Darwin2.options1) workers작업자 프로세스의 수입니다. 기본값은 $WEB_CONCURRENCY 환경 변수인 경우를 따라가거나 기본값은

trouble shooting

minikube(feat. lima) 환경에서 로컬 이미지를 가져오지 못하는 문제

개발한 어플리케이션 이미지를 지난 글에서 구축한 minikube  환경에 올려 보고자 하면서 문제를 발견했다. 환경정보 silicon m1 macminikube version v1.24.0limactl 0.7.4 로컬에서 빌드한 이미지를 minikube 환경으로 가져 오려면, 가장 간단한 방법이 도커 host 와 minikube 를 연결하는 방법인데 다음과 같이 containerd runtime 은 지원이 안되는 모양이다. minikube

ASGI 웹 프레임워크 FastAPI  를 시작하며
python

ASGI 웹 프레임워크 FastAPI 를 시작하며

Python, Backend 를 시작하는 데 부족한 부분들을 정리해 보고자 한다. (adsbygoogle = window.adsbygoogle || []).push({}); 1. Backend 구성 (feat. WSGI 와 ASGI)Python 의 일반적인 웹서비스에 아키텍쳐를 이해하기 위해 아래와 같은 그림을 그려봤다. 1) Web Server웹서버의 역할은 두개로 나누어 볼 수 있다. 정적인 요청의 서빙이나 Reverse Proxy를 이용하여 어플리케이션 서버로 동적인

Slicon M1 Mac에 Conda 가상환경 만들기 (feat. miniforge)
python

Slicon M1 Mac에 Conda 가상환경 만들기 (feat. miniforge)

conda는 주로 Python의 버전별 가상환경과 의존성이나 패키지를 관리하는 툴입니다. 간단하게 생각하면 패키지 매니저이면서 파이썬의 버전을 골라 설치 할 수도 있는 툴이라고 보면 된다. 대표적인 conda 환경을 만들어주는 프로그램은 Anaconda(anaconda 채널), miniconda(anaconda 채널), miniforge(conda-forge 커뮤니티 채널)가 있고, Anaconda는 5G 정도 되는 패키지를 동시에 설치하는 다소 무거운 환경을

Slicon M1 Mac에서 쿠버네티스 환경 구축하기 (feat. lima+minikube)
kubernetes

Slicon M1 Mac에서 쿠버네티스 환경 구축하기 (feat. lima+minikube)

지난 글 에서는 Lima 를 활용하여 docker 개발환경을 구축해 보았고 이번에는 lima 를 minikube의 드라이버로 설정하여 쿠버네티스 개발환경을 구축해보기로 했다. 1. Lima 구동limactl start export DOCKER_HOST=unix://$HOME/docker.sock docker ps2. minikube 설치brew install minikube# docker 드라이버에 containerd를 컨테이너 런타임으로 사용하여 kube 환경구축 minikube start --driver=docker --container-runtime=

Slicon M1 Mac에서 Lima로 Docker Desktop 대체 하기
docker

Slicon M1 Mac에서 Lima로 Docker Desktop 대체 하기

지난 글 에서는 Silicon Mac 을 지원하는 UTM 이라는 오픈소스 VM에 Ubuntu 를 설치하여 Docker 개발환경을 구축 했는 데, 이번에는 Silicon Mac 을 지원하는 Lima 라는 Linux VM 을 구축해주는 오픈소스를 활용하여 개발환경을 구축해 보려고 한다. 1. Lima 소개간단히 Lima 에 대해 소개하자면 위에 언급한 것과 같이 Linux VM 를

Silicon M1 Mac에서 UTM으로 Docker Desktop 대체 하기
docker

Silicon M1 Mac에서 UTM으로 Docker Desktop 대체 하기

Docker Desktop 의 유료전환 소식이 있었고 22년 1월 말까지 유예기간을 둔다고 한다. 그 성능이 어떠하든 개발환경을 구축할때 필수적으로 사용하던 어플리케이션이라 아쉬움이 많이 남는다. Mac 환경에서 개발을 해야하는 회사들은 아마도 대안을 찾을 것으로 보이는데, 그 대안이 Intel Mac인 경우 VirtualBox 를 활용한 다양한 옵션이 있는 것으로 보이나, Silicon Mac 에서는 VirtualBox

Makefile

ShellScript 와 Makefile

이번에 ShellScript 와 같이 정리해보려는 Makefile 의 경우, 보통 C 로 작성된 소스를 의존성을 기술하여 make 라는 명령어로 컴파일을 도와주는 스크립트다. 요즘 go 에서 makefile 을 활용하는 몇가지 글들을 접하면서 ShellScript 보다 체계적이고 깔끔하게 느껴져서 이제는 대부분을 makefile 로 자동화 작업을 하고 있다. 이 글에서는 ShellScript 와 Makefile 어느 것이

go versioning

Go 패키지 생성에서 버전관리 까지

GitHub 에서의 go 프로젝트 생성과 versioning 과정을 코드로 정리해 보고자 한다.유의적 버전 2.0.0 | Semantic Versioning https://github.com/golang-standards/project-layout (adsbygoogle = window.adsbygoogle || []).push({}); Semantic 버전관리Go에서는 패키지 버저닝을 위해 Semantic Versioning을 사용하길 제안하고 있으며, 간단하게 정리를 하자면 다음과 같다.~기존 버전과 비호환~ 되며 API가 바뀌면 “MAJOR 버전”