mingkeSep 14, 2024supabase django에 연결하기 - 오름캠프오름캠프에서 PostgreSQL에 대해서 조금 배웠습니다. 대부분의 훈련생 분들이 PostgreSQL을 파이널 프로젝트에 사용하려고 합니다. DRF로 백엔드를 구축하면서 PostgreSQL을 DB로 사용할 수 있는 방법은 여러가지가 있습니다.DjangoSupabase
mingkeSep 13, 2024pytest로 django 테스트하기 (feat. pytest-django) - 오름캠프수업 중에 Django에 내장된 테스트 모듈로 테스트를 작성했습니다. 하지만 Python에서는 pytest라는 아주 좋은 테스트 프레임워크를 사용해서 테스트를 많이 작성합니다.DjangoPytest오름캠프
mingkeSep 3, 2024기술블로그 쓰는 방법 공유 - 오름캠프글을 대단히 잘 쓰는 사람은 아니지만 기술 관련 글쓰기 처음 쓰는 사람들에게는 도움이 될 수도 있겠다 싶어서 제가 쓰는 방법을 공유할까 합니다.Writing오름캠프
mingkeAug 27, 2024django-debug-toolbar로 ORM성능 측정하기 - 오름캠프이번 포스팅에서 개발할 때 사용하면 유용한 django-debug-toolbar 에 대해서 알아보려고 합니다. django-debug-toolbar 써드 파티 라이브러리지만 Django 공식 문서에서 소개될 정도로 아주 널리쓰이는 툴입니다.Django오름캠프
mingkeAug 20, 2024Django 테스트 데이터 쉽게 만드는 방법 - 오름캠프이번 포스팅에서 ORM을 연습할 때 필요한 테스트 데이터(더미 데이터)를 쉽게 만드는 방법을 알아보려고 합니다. 테스트 데이터는 테스트 코드를 작성할 때도 필요하기 때문에 잘 알아두면 좋습니다.Django오름캠프
mingkeAug 14, 2024FastAPI Swagger 접근 제한하기최근에 Swagger 관련 이야기를 하다가 Swagger에 접근하는 방법에 대한 이야기가 나왔습니다. 프로젝트를 하면서 API를 만들었는데 Swagger에 같은 팀원만 접근할 수 있도록 만들 필요가 있었습니다.FastAPISwagger
mingkeAug 7, 2024Django Model 기초 공부하기 - 오름캠프오름캠프에서 Django 수업이 시작되었습니다. 오늘 있었던 수업 내용 중에 Django Model과 관련하여 내용을 정리하는 포스트를 작성해보려고 합니다.Django오름캠프
mingkeAug 2, 2024Github Actions Cron으로 Upstream Repository Sync 맞추기Github Actions는 여러가지 기능들을 제공하는데요. Cron을 실행할 수도 있습니다. 이번에 Cron을 이용하게 되어 이번 포스팅에서 공유하려고 합니다.Github Actions
mingkeJul 29, 2024Chocolatey 윈도우 패키지 매니저 사용하기Chocolatey라는 패키지 매니저가 있길래 설치해서 사용해보았습니다. 이번 포스팅에서 사용법을 정리해보려고 합니다.Others오름캠프
mingkeJul 27, 2024WSL로 Windows 11에서 linux 세팅하기WSL은 Windows Subsysem for Linux의 약자로 윈도우에서 Linux의 파일시스템을 실행하고 CLI툴들을 사용하게 해주는 시스템입니다. 예전에는 세팅하는 것이 좀 까다로웠다고 하는데 이제는 아주 쉽습니다. 이번 포스팅에서 알아보도록 하겠습니다.Others오름캠프
mingkeJul 24, 2024Ruff - Rust로 만들어진 Python linter & formatter 알아보기Python 프로젝트를 관리하다 보면 코드 스타일을 일관되게 유지하는 것이 중요합니다. 이것을 도와주는 파이썬에 다양한 linter와 formatter가 있습니다. 저는 그동안 flake8과 black의 조합으로 사용해왔습니다. 그러다가 이번에 Ruff로 옮기게 되어 Ruff에 대해 간단하게 정리해보려고 합니다.Python
mingkeJul 22, 2024Python 데코레이터 만드는 방법 - 오름캠프파이썬 데코레이터는 함수나 클래스를 감싸서 꾸며주는 기능을 합니다. 공통된 기능을 데코레이터로 만들어 중복을 줄여 재사용성을 높일 수 있습니다.Python오름캠프
mingkeJul 20, 2024Python PDM 사용법 알아보기FastAPI Repository에서 PDM이 사용되고 있는걸 발견했는데 궁금해서 저도 한 번 써봤습니다.Python
mingkeJul 16, 2024오픈소스 프로젝트를 하는 이유 - 오름캠프이번 포스팅에서는 오름캠프 파이썬 백엔드과정 훈련생분들과 함께 오픈소스 프로젝트를 시작한 이유를 적어보려고 합니다.Others오름캠프
mingkeJul 12, 2024CLI 터미널 출력 테스트 하기(feat.pytest)이번 프로젝트에서는 pytest로 테스트 코드를 작성해보았습니다. 터미널에 출력된 값을 테스트하는 것을 잘 몰랐는데요. 알아보니 아주 쉽게 할 수 있는 방법이 있어서 그 방법을 이번 포스팅에서 정리해보려고 합니다.PytestPython
mingkeJul 11, 2024Typer를 이용한 Python CLI 만들기Typer 타입힌트를 기반으로하는 CLI 개발 라이브러리입니다. FastAPI 개발자분이 만들었습니다. FastAPI와 비슷한 패턴으로 개발할 수 있다는 것이 아주 매력적입니다Python
mingkeJul 10, 2024Python datetime 라이브러리 사용법 - 오름캠프어제 공부 중에 파이썬에서 날짜와 시간을 다루는 것이 있었고 datetime 라이브러리를 사용하고 있었습니다. 좀 더 자세한 설명으로 알려드리기 위해 이 글을 작성합니다.Python오름캠프
mingkeJul 8, 2024pre-commit 사용법 - 오름캠프pre-commit 이라는 툴이 있어서 소개해 드리려고 합니다. pre-commit 의 기능은 이름에서 추측할 수 있습니다. commit 이전에, 그러니까 commit이 실행되기 전에 일련의 작업들을 실행하는 것입니다.pre-commit오름캠프
mingkeJul 6, 2024오름캠프 - 블로그를 해야하는 이유와 성장하는 법어제 오름캠프 파이썬 백엔드 과정의 첫 오프라인 밋업이 있었습니다. 훈련생 분들과 만나서 이야기할 수 있는 기회였고, 머신러닝 엔지니어이자 유명한 블로거이신 이수진님의 블로그 세미나가 있었습니다. 세미나를 통해 배운점을 되새기며 저의 생각도 적어보려고 합니다.Writing오름캠프
mingkeJul 2, 2024오름캠프 - Python 처음 배우는 파이썬 클래스최근 오름캠프에서 Python class 진도를 나갔습니다. 많은 분들이 class를 어려워하셨습니다. Python은 객체지향프로그래밍 언어로 class를 잘 아는 것은 기본입니다. 객체를 만드는 틀이 class이기 때문입니다. 서브강사로서 자습시간에 훈련생 분들과 class 복습을 했습니다. 관련 내용을 블로그에 포스팅하려고 합니다.Python오름캠프
mingkeJun 29, 2024Rust - 라이프타임(lifetime)은 또 뭡니까?라이프타임은 메모리 안정성을 보장하기 위한 Rust의 여러 장치들 중 하나인 것 같습니다. 제네릭의 한 종류이며, 어떤 참조자가 얼마나 오랫동안 유효한지 컴파일러가 추적하고 검증하는 방식입니다.Rust
mingkeJun 27, 2024오름캠프 - Python 팁 자잘한 거 몇가지 공유 v1자습시간에 훈련생 분들과 문제풀기 연습을 진행했었습니다. 같이 문제 풀다가 이런건 자잘하지만 공유하면 좋긴 좋겠다 싶은 것들을 포스팅 해보려고 합니다. 몰라도 문제 없지만 그래도 알아둬서 나쁠거 없는 그런것들을 공유 해보겠습니다.Python오름캠프
mingkeJun 26, 2024오름캠프 - map함수와 list comprehension 비교map이냐 List Comprehension이냐는 개인 취향 같습니다. 그리고 둘 다 코드가 간결해지긴 하지만 너무 생략하면 오히려 가독성이 떨어지는 경우도 많아서 일반 for문을 사용하는 경우도 많습니다.Python오름캠프
mingkeJun 23, 2024오름캠프 - Python 변수 공부하기변수는 파이썬만의 특징은 아닙니다. 변수는 데이터를 저장하고 참조할 수 있는 이름을 가진 메모리 공간입니다. 대부분의 프로그래밍 언어에서 변수를 사용합니다. 파이썬에서 모든 데이터는 객체(object)입니다. 객체는 특정 클래스로부터 생성된 인스턴스(instance)라고도 불립니다.Python오름캠프
mingkeJun 18, 2024오름캠프 - 부트캠프에 임하는 태도모두의 연구소에서 진행하는 부트캠프인 오름캠프의 서브강사가 되었습니다. 서브강사 또는 멘토라고 불리더군요. 알고 있는 기술스택이 파이썬 백엔드라 Django 백엔드과정 부트캠프에 서브강사로 4개월간 참여하게 되었습니다.Others오름캠프
mingkeJun 16, 2024django-ninja 사용해서 API 개발해보기Django Reddit을 둘러보다가 django-ninja 에 대한 게시물을 발견했습니다. 작년 말에 1버젼이 릴리즈 되었더라구요. 그래서 튜토리얼 느낌으로 한 번 사용해보았습니다.Django
mingkeJun 15, 2024Rust 문자열 타입 알아보기Rust를 취미처럼 공부하고 있습니다. 정말 난이도가 있다고 느껴집니다. 문자열 타입같은 경우, 다른 언어를 배울 때 가장 먼저 배우는 쉬운 타입인데 Rust에서는 그렇지가 않더군요. Rust 문자열에 대해서 한 번 알아보겠습니다.Rust
mingkeJun 14, 2024IDX - Google이 만든 웹 기반 IDE 알아보기얼마전에 보니 구글이 웹에서 실행할 수 있는 클라우드 IDE를 개발했더라구요. IDX라고 합니다. 간단하게 한 번 써봤는데요. 이번 포스팅에서 한 번 알아보도록 하겠습니다.Others
mingkeJun 11, 2024Next.js에서 nodemailer로 이메일 전송하기이번 포스팅에서 nodemailer를 이용해서 쉽게 이메일 전송하는 법을 알아보겠습니다.NextjsNodejs
mingkeJun 10, 2024python 문자열 템플릿 알아보기문자열 템플릿을 만드는 방법은 f-string 같은 포맷팅 방법 이외에 따로 파싱을 구현하여 사용할 수 있었습니다. 정규표현식을 사용을 위한re 라이브러리나 string 라이브러리를 이용하면 가능합니다.Python
mingkeJun 9, 2024FastAPI lifespan asynccontextmanager 직접 구현하기 (feat.__aenter__, __aexit__)FastAPI에서 startup 이벤트와 shutdown를 구현하는 방법으로 lifespan을 사용하는 방법이 있습니다. 이번 포스팅에서 좀 더 객체지향적이고 사용성 좋은 방법으로 구현해보았습니다.FastAPIPython
mingkeJun 3, 2024Supabase CLI활용 - Supabase CLI로 migration하기Supabase에서 제공해주는 Supabase CLI를 이용하면 migration 작업을 좀 더 손쉽게 할 수 있었습니다. Migration 과정을 포스팅 해보도록 하겠습니다. Supabase를 이용해볼 수록 정말 잘 만들었다는 생각이 듭니다.Supabase
mingkeJun 1, 2024Rust로 Python 라이브러리 만들어보기(PyO3)취미로 Rust를 공부하고 있습니다. 이제 어느 정도 기본적인 문법을 익혔고, Rust코드를 조금은 읽을 수 있게되었습니다. 그래서 Rust로 Python 라이브러리 만들기 Hello World 정도를 한 번 해보려고 합니다.PythonRust
mingkeMay 30, 2024나만 알고 있는 코딩 노하우 뽐내기 - 한빛출판네트워크 이벤트 소개이메일을 확인하다가 한빛출판네트워크에서 온 이벤트 소식을 알게되었습니다. "나만 알고 있는 코딩 노하우 뽐내기"- 개발 코딩 꿀Tip 특공대 모여라!Others
mingkeMay 28, 2024FastAPI에서 Scheduler 사용하기백엔드 개발하다보면 Scheduler를 개발해야할 때가 종종 있습니다. FastAPI를 사용할 때 복잡하지 않은 Scheduler라면 apscheduler 라는 라이브러리를 사용하면 됩니다.간단하게 알아보도록 하겠습니다.FastAPIPython
mingkeMay 27, 2024FastAPI - API 파라미터 camelCase로 변경하기 (feat. Pydantic Field)API 명세에서 CamelCase를 사용하고 백엔드 코드베이스에서는 snake_case를 유지하는 방법을 알아보도록 하겠습니다.FastAPIPydantic
mingkeMay 24, 2024Rust Struct (구조체) and implementation오늘 소개할 Struct와 Implementation은 Rust에서 OOP 패러다임을 적용해 볼 수 있도록 해줍니다. struct와 impl 키워드를 이용하면 됩니다.Rust
mingkeMay 22, 2024Github Actions - PR 생성 자동화하기오늘은 Github에서 Github Actions 를 이용하여 Pull Request(PR)을 자동으로 생성하는 방법에 대해 포스팅 해보려고합니다. Github Actions를 이용하면 아주 쉽게 그것을 가능하게 만들수 있습니다. Github Actions에 많은 기능들이 있으니까요!Github Actions
mingkeMay 16, 2024Rust 관련 용어 정리 - 1Python이랑 Javascript 밖에 경험이 없어서 Rust에 나오는 용어들이 바로 쏙쏙 들어오지는 않아서 관련 용어들을 간단하게 정리해볼까 합니다.Rust
mingkeMay 15, 2024Python 클래스 딕셔너리처럼 만들기 (매직메소드 활용)Dictionary 이야기를 하려는 것은 아니고 Python의 클래스를 dict 처럼 만들어 사용할 수 있는데 문득 이 내용을 가볍게 정리하고 싶어 포스팅합니다.Python
mingkeMay 13, 2024FastAPI - Supabase Storage 사용해보기지난번 포스팅에서 FastAPI와 Supabase DB를 사용해보았습니다. 이번 포스팅에서는 Supabase에서 제공하는 Storage 서비스를 사용해보겠습니다. AWS S3와 동일하지만 1GB까지 무료로 사용할 수 있습니다. Supabase에서 제공하는 Python SDK를 사용하면 아주 쉽게 사용할 수 있습니다.FastAPISupabase
mingkeMay 11, 2024FastAPI - Supabase DB 사용해서 개발해보기Supabase는 PostgreSQL을 기반으로 한 오픈 소스의 Backend-as-a-Service(BaaS) 플랫폼으로, Firebase에 대한 오픈 소스 대안으로 알려져 있습니다. 이번 포스팅에서 Supabase에서 제공하는 DB와 Storage를 FastAPI와 함께 사용하는 방법에 대해서 간단하게 알아보겠습니다.FastAPISupabase
mingkeMay 9, 2024FastAPI 이미지 S3 업로드 (클라우드 스토리지)지난번 포스팅에서 FastAPI 이미지 업로드 기능에 대해서 다뤘습니다. 단순히 업로드 받아서 서버의 파일시스템에 저장하는 방식으로 했었는데요. 이번 포스팅에서는 대표적인 클라우드 스토리지인 S3에 저장하는 방법을 다뤄보도록 하겠습니다.AWSFastAPI
mingkeMay 7, 2024FastAPI 이미지 업로드 (feat. 이미지 최적화)오늘은 FastAPI에서 이미지를 업로드하는 하는 방법을 주제로 포스팅을 해볼까합니다. 최근 있었던 작업중에 클라이언트에서 업로드한 이미지를 받아서 클라우드 스토리지에 저장하는 것이 있었는데요. FastAPI로 작업했던 것은 아니었습니다. 그래서 FastAPI로도 하는 방법을 정리해보겠습니다.FastAPI
mingkeMay 3, 2024FastAPI CLI 업데이트 version - 0.111.0오늘보니 FastAPI의 CLI 기능이 업데이트 되었더라구요. FastAPI에 CLI가 없어서 좀 아쉽다는 생각이 있었는데 0.111.0 버젼에서 추가되었습니다.FastAPI
mingkeMay 1, 2024FastAPI Swagger 수정하기FastAPI의 장점중의 하나는 자동으로 Swagger를 생성해준다는 것입니다. 기본 세팅이 되어 생성이 됩니다. 물론 개발자가 직접 수정할 수도 있습니다. 사용하다보면 수정해보고 싶은 마음이 생길 수도 있는데요. html, css를 직접 수정해서 UI를 변경할 수도 있는데 저는 html,css를 잘하는 편이 아니기 때문에, 간단하게 변경할 수 있는 방법을 이번 포스팅에서 다뤄보겠습니다.FastAPISwagger
mingkeApr 30, 2024FastAPI Middleware 적용 방법이번 포스팅에서는 FastAPI에서 Middleware를 적용하는 방법들에 대해서 알아보겠습니다. 방법이 한가지가 아닙니다. 어려운 방법은 없으니 하나씩 알아보도록 하겠습니다.FastAPI
mingkeApr 28, 2024Django ORM 개별 실행 방법Django를 이용해서 개발하다보면 ORM을 작성할 때, 서버를 실행하지 않고 ORM만 개별적으로 테스트 해보고 싶은 경우가 있습니다. 이럴때 사용할 수 있는 방법에 대해서 이번 포스팅에서 한 번 알아보겠습니다.Django
mingkeApr 27, 2024Django 프로젝트 구조화 Service 레이어최근 프로젝트에서 제가 선택한 방법은 service 레이어를 따로 만드는 방법이었습니다. 프로젝트의 특징, 규모 등에 따라 구조잡는 법은 다양할 것입니다. 이번 포스팅에서는 제가 사용한 방법에 대해서 공유해보도록 하겠습니다Django
mingkeApr 24, 2024FastAPI - JWT 로그인 쿠키 사용오늘 다뤄볼 내용은 쿠키를 사용해서 JWT 로그인을 구현해보는 것입니다. 지난번 포스팅에서는 JWT 인증을 구현해서 Response Body에 토큰을 담는 방식으로 진행했습니다.FastAPI
mingkeApr 23, 2024Django 5 신기능 GeneratedField 소개 및 활용 방법GeneratedField는 모델의 다른 필드들을 기반으로 값을 자동 계산하여 관리하는 기능을 제공합니다. 이 필드는 데이터베이스에 의해 값이 설정되고 업데이트 되며, Stored 컬럼과 Virtual 컬럼의 두 유형으로 구분됩니다.Django
mingkeApr 19, 2024django wtf - django 라이브러리 및 유용한 정보 모음Django는 역사가 긴 open-source라서 third-party 라이브러리도 굉장히 많습니다. 감 찾기에 앞서 Django에서 많이 사용되는 라이브러리들은 무엇이 있는지 알아볼까 합니다. 이것들을 정리해서 보기 좋게 정리해준 사이트가 있습니다.Django
mingkeApr 17, 2024개발자 취업 - 중소기업 취업시 고려사항신입부터 지금까지 중소기업 4군데를 거쳐왔고 지난주를 마지막으로 4번째 회사를 퇴사했습니다. 퇴사한 기념으로 신입으로 취업할 때 고려해 봤으면 좋았을 것 같은 사항들, 앞으로는 반드시 고려할 사항들을 포스팅 해보려고 합니다. 완전 개인적 의견과 경험을 공유합니다.Career
mingkeApr 15, 2024FastAPI - Websockets 사용해보기 (with Redis)예전에 했던 사이드 프로젝트 중에서 WebSocket을 사용했던 적이 있습니다. FastAPI를 이용해서 websocket을 구현했었는데요. 아주 쉽게 구현이 가능해서 금새 만들었습니다. 그 방법을 이번 포스팅에서 공유해보려고 합니다.FastAPI
mingkeApr 13, 2024Rust 소유권(Ownership)과 차용(Borrowing)최근에 취미로 Rust를 공부하고 있습니다. 러스트에는 소유권(Ownership)과 차용(Borrowing)이라는 생소한 개념이 있더라구요. 공부한 내용을 이번 포스팅에서 정리해보려고 합니다. 이 개념들은 메모리 관리와 안전성을 강화하기 위해 설계된 것이라고 합니다.Rust
mingkeApr 9, 2024FastAPI 파일 다운로드 구현하기특정 데이터들을 Excel로 다운로드 하거나, 이미지들을 다운로드 하는 등의 요청이 있었습니다. 이와 관련해서 FastAPI에서 파일 다운로드 방법을 이번 포스팅에 공유하고자 합니다.FastAPI
mingkeApr 8, 2024Django selected_related, prefetch_related 면접 단골 질문Django에서 N+1 문제를 해결하는 방법을 알아 봅니다. 바로 select_related, prefetch_related 입니다. 이번 포스팅에서는 이 두 메소드에 대해서 알아보겠습니다.Django
mingkeApr 8, 2024Python 비동기 - 이벤트 루프 간단 정리이전 글에 이벤트 루프 기반의 비동기와 멀티 스레딩 기반의 비동기를 비교하는 글을 작성했습니다. 이번 글에서는 비동기 프로그래밍의 핵심 요소, 이벤트 루프에 대해 자세히 알아보겠습니다.Python
mingkeApr 4, 2024Python 비동기 이벤트루프 방식과 멀티스레딩 방식 비교Python에서 비동기 프로그래밍은 효율적인 I/O 작업과 고성능 애플리케이션 구축에 많이 사용됩니다.최근 면접에서 ‘Python 비동기에서 이벤트루프 방식과 멀티스레딩 방식이 어떻게 다른지 설명해 보시오’ 라는 질문을 받았습니다. 오늘은 이와 관련해서 포스팅을 해보려고 합니다.Python
mingkeApr 2, 2024Redis 따닥 방지(중복 방지) 하기 - FastAPI최근 면접에서 받았던 질문 내용을 가지고 블로그 글을 작성하고 있습니다. 이번에는 Redis를 이용해서 클라이언트의 따닥을 방지하는 방법을 알아보겠습니다. 성공하든 실패하든 면접 많이 보는것은 도움이 되는 것 같네요. 임시 Token과 Redis를 이용해서 상태관리를 통해 처리할 수 있습니다.RedisFastAPI
mingkeMar 31, 2024SQLALCHEMY MYSQL UPSERT on_duplicate_key_update데이터가 존재하면 업데이트를 하고, 존재하지 않으면 데이터를 삽입하는 방법이 있습니다. 이것을 Upsert라고 부릅니다. 얼마전 사용할 일이 있어서 사용했는데, 블로그로도 한 번 공유 해볼까 합니다. 데이터베이스는 MySQL 기준으로 작성합니다.SQLAlchemy
mingkeMar 30, 2024SQLALCHEMY MYSQL DB INDEX 설정하기DB 인덱스와 관련해서는 주니어 이하의 면접에서도 많이 다뤄지는 주제라고 생각됩니다. 개인적으론 최근 치렀던 과제테스트와 면접에서도 다뤄졌던 내용인데요. 오늘은 이와 관련해서 블로그 포스팅을 해보려고합니다.SQLAlchemy
EKOMar 25, 2024SQLD 유효기간 영구 전환, 만료된 자격증 복원하기최근에 자격증을 사용할 일이 있어 확인해보니 SQLD 유효기간이 만료되어 있었습니다. 혹시 되살릴 수 있는 방법이 없을까 찾아보다가, 보수교육을 이수하면 SQLD 유효기간이 영구로 전환된다는 사실을 알게 되었습니다. 다행히 유효기간이 만료된 후에도 보수교육만 이수하면 영구 자격으로 전환이 가능합니다.Certification
mingkeMar 13, 2024Python ThreadPoolExecutor - concurrent.futures 파이썬 비동기오늘은 Python에서 어떠한 작업들을 동시에 처리할 수 있는 방법들 중에 하나인 ThreadPoolExecutor에 대해서 알아보도록 하겠습니다. 멀티스레딩을 쉽게 구현할 수 있게 해주며, 주로 I/O 바운드 작업에서 성능을 개선하기 위해서 사용됩니다. I/O 바운드 작업은 프로그램의 실행 속도가 입출력 작업에 의해서 결정되는 작업입니다. 디스크에 접근하거나, 네트워크 통신을 하는 경우를 말합니다. 이 정도 개념만 알고 코드 넘어가겠습니다.Python
mingkeMar 12, 2024FastAPI Settings - Pydantic Settings 관리하기FastAPI에서는 Django 처럼 기본 Setting을 지원해주는 것이 없기 때문에 프로젝트에 필요한 셋팅들을 직접 만들어줘야 합니다. DB 주소, AWS키 등 프로젝트에서 사용될 환경변수나 상수값 같은 것들을 말이죠. pydantic_settings를 많이 사용합니다. 이번 포스팅에서 pydantic_settings로 FastAPI에서 setting을 관리하는 방법을 알아보겠습니다.FastAPIPydantic
mingkeMar 7, 2024Github Actions - Docker 이미지 빌드 및 푸시하기이미지를 빌드하고 레지스트리로 푸시하는 작업은 귀찮은 작업입니다. Github Actions를 이용해 이 작업을 자동화할 수 있는 방법을 알아보겠습니다. Github Actions MarketPlace에는 다양한 Action들이 있는데요. 제가 자주 사용하는 방법을 공유해 보도록 하겠습니다.Github Actions
mingkeMar 4, 2024개발자의 글쓰기 - 블로그 하는 이유블로그를 처음 시작했던 것은 2021년부터인데요. 그땐 티스토리를 했는데, 막연하게 ‘좋은 개발자가 되려면 글을 잘써야한다더라, 블로그를 해야한다더라 이야기’를 듣고 했다가 6개월을 넘기지 못하고 자연스레 접게되었네요.그러다가 최근에 다시 시작하게 되었습니다. 그래서 오늘은 블로그를 왜 하는지에 대해서 글을 작성해보려고 합니다.Writing
mingkeFeb 29, 2024ECS EC2 배포 태스크 정의 하드제한 소프트제한AWS ECS EC2를 배포하는 과정에서 태스크 정의를 작성해야합니다. 태스크 정의를 작성할 때 컨테이너 설정을 부분에서 리소스를 할당한은 옵션이 있습니다. 오늘은 그 중에서 메모리를 제한할 때 사용하는 개념인 하드제한과 소프트 제한을 알아보도록 하겠습니다.AWS
mingkeFeb 26, 2024FastAPI AWS ECS에 배포하기FastAPI 애플리케이션을 배포하기 위해 gunicorn을 설정하고 실행하는 방법을 알아봤습니다. 배포를 위한 여러가지 방법들이 있지만 오늘 공유할 내용은 AWS ECS + EC2 입니다.FastAPIGunicornAWS
mingkeFeb 17, 2024FastAPI 배포하기 gunicornAI의 인기와 함께 요즘 FastAPI를 배우려고 하는 분들이 많이 늘어난 것 같습니다. 개발이 빠르고, 쉽게 ML모델을 서빙해볼 수 있는 도구로 FastAPI가 주목받고 있어서 그런것 같습니다. 친구에게도 FastAPI 애플리케이션 배포 어떻게 하냐는 질문을 받은 적도 있어서, FastAPI + Gunicorn 배포 방법을 포스팅해보려고 합니다.FastAPI
mingkeFeb 9, 2024python calendar 파이썬 달력 다루기 - python 표준 내장 라이브러리Python에서 제공하는 calendar 라이브러리에 대해서 알아보려고 합니다. calendar라이브러리는 날짜 관련 작업을 간편하게 사용할 수 있도록 제공해주는 라이브러리입니다. 최근 하고 있는 업무가 어드민 관련 기능을 만드는 것이 많이 있는데요. 아무래도 관리자들이 사용하는 것이다 보니 날짜와 관련된 내용을 다루게 되었습니다. 그래서 calendar에 대해서 블로그에 기록해보려고 합니다.Python
mingkeFeb 7, 2024FastAPI CORS 특정 도메인 전체 포트 허용하기FastAPI에서는 CORSMiddleware를 사용하여 이러한 CORS 설정을 쉽게 구현할 수 있습니다. CORS에서 도메인을 입력할 때 도메인이 같아도 포트번호가 다르면 다른 출처가 됩니다. 최근 프론트엔드 개발자가 CORS 에서 특정 도메인에 포트를 여러개 허용해달라는 요청이 있었습니다.FastAPI
mingkeFeb 6, 2024SQLAlchemy 임시테이블 생성하기요구사항에 맞춰 개발을 하던 도중, IN 절에 데이터를 넣어 조회해야하는 케이스가 생겼습니다. 그런데, 그 숫자가 수만에서 수십만까지도 가능한 상황이라, 다른 방법이 필요했습니다. 여러가지 방법들 중 선택한 방법은 임시테이블을 만들어 조인하여 사용하는 것이었습니다.SQLAlchemy
mingkeFeb 5, 2024개발자가 가장 배우고 싶은 언어 Rust 배우기 - Rust란?2024년에 개발자들이 가장 배우고 싶은 언어 Rust를 한 번 배워봐야겠다 생각했습니다. Hello World까지하고 느낀점은 ‘뇌에 자극을 주기 참 좋은 선택이다’. Rust 진도를 더 나가기 전에 Rust에 대해서 간략히 정리해보고 가려고 합니다.Rust
mingkeFeb 1, 2024FastAPI Streaming 하는 법 StreamingResponseFastAPI에서 StreamingResponse을 이용해서 Streaming 방식으로 클라이언트에 데이터를 전달하는 방법을 알아보겠습니다.FastAPI
mingkeJan 31, 2024utf8, utf8mb4 인코딩의 이해 (feat. MYSQL 이모지 저장)이모지로 된 닉네임을 저장하던 도중 에러가 발생했습니다. MYSQL 8 버젼부터는 CHARACTER SET과 UTF8mb4, COLLATION UTF8mb4_0900_ai_ci 가 기본값이고, 우린 회사는 8버젼을 쓰고있는데 이게 무슨일? 원래는 발생할 수 없는 문제인데Programming
mingkeJan 30, 2024ChatGPT 프롬프트 엔지니어링 - 개발용 Custom Instruction 프롬프트 공유 1AI 시대에 생산성을 높이기 위해 ChatGPT를 달고 살고 있습니다. ChatGPT를 여기 저기 다양하게 사용하고 있지만, 그래도 개발자이기 때문에 개발 질문을 가장 많이 했던 것 같습니다. 개발용으로 쓰고 있는 Custom Instruction을 공유해 볼까 합니다.Prompt Engineering
mingkeJan 29, 2024FastAPI - Pydantic 으로 Query param 만들기Query Parameter에 대해서 Query parameter가 많아서 함수의 parameter 값으로 넣으면 코드가 지저분해지고 보기 힘들어지거나, Query Parameter를 따로 관리하고 싶거나 할 때 Pydantic BaseModel을 사용해서 Query Parameter를 정의해서 사용하면 편리합니다.FastAPI
mingkeJan 26, 2024pre-commit custom hook 만들기pre-commit은 Git 원격 저장소에 커밋하기 전, 실행되는 스크립트를 구성하는 데 사용되는 tool입니다. 오늘은 pre-commit에서 custom hook을 만드는 방법을 알아보려고 합니다.pre-commit
mingkeJan 25, 2024docker-compose mysql sql 파일 실행 방법 알아보기새로운 프로젝트를 시작할 땐, docker-compose로 로컬에 db를 띄우고 migration 파일을 만들어 migration을 해서 프로젝트를 진행해 나갔습니다. DB는 기존의 것을 사용하는 경우가 있습니다. 그럴때는 기존 DB구조를 로컬 DB에도 똑같이 migration하여 사용해야 하죠. 그 방법을 알아보겠습니다.Docker
mingkeJan 24, 2024Github Actions CI - 코드 품질 관리를 위한 Black, Flake8 설정하기Github Actions를 CI/CD 툴로 자주 이용하고 있습니다. 꽤 편리한데 아주 쓸만합니다. 많은 개발자들이 이미 만들어 놓은 actions들이 marketplace에 존재하고 있어 그 편리함을 더 증폭시켜줍니다. 이번 포스팅에서는 CI의 기본이되는 코드 품질 관리를 위한, Python에서 아주 널리널리 쓰이고 있는 코드 포맷터와 린트, black, flake8 조합을 Github Actions에서 사용하는 방법을 알아보겠습니다.Github Actions
mingkeJan 24, 2024Github Actions에서 TEST DB 사용하기테스트코드를 작성하면서 DB가 필요한 경우가 있습니다. 로컬에서 테스트를 실행할 때는 docker-compose로 테스트 DB 컨테이너를 하나 새로 띄워서 사용했습니다. 하지만 CI/CD 구축을 할 때는 굳이 docker compose를 사용하지는 않았습니다. DB를 쉽게 띄울 수 있기에 그렇게 했습니다. Gitbhub Actions에서 TEST DB 사용하는 방법을 알아보겠습니다.FastAPIGithub Actions
mingkeJan 22, 2024FastAPI - JWT 인증 구현하기오늘은 며칠전 JWT인증을 만들어 달라는 요청을 받아서 구현했던 내용을 한 번 정리해보려고 합니다. 간단하게 JWT (JSON Web Token)를 설명하면 웹서비스 인증 시스템에 널리 사용되는 컴팩트한 토큰입니다. 헤더, 페이로드, 시그니처 세부분으로 나뉘어져 구성되어 있습니다. FastAPI 공식 문서에 소개된 것을 조금 변형하여 구현해보도록 하겠습니다.FastAPI
mingkeJan 21, 2024python pathlib 파일 경로 다루기 - python 표준 내장 라이브러리오늘은 python에서 파일 경로를 다루는 방법을 알아보려고 합니다. 파이썬을 처음 배울 땐 os.path를 이용해서 다루곤 했는데요. 이젠 python 내장 라이브러리인 pathlib도 많이 사용합니다. pathlib은 파일 시스템 경로를 객체로 취급하며, 경로 관련 작업을 효율적이고 직관적으로 수행할 수 있게 해줍니다.Python
mingkeJan 20, 2024python secrets - python 표준 내장 라이브러리secrets 는 이름에서 알 수 있듯, 보안과 관련해서 난수를 생성하는데 도움을 주는 라이브러리입니다. 3.6 버젼부터 추가되었습니다. “난수 생성은 random 라이브러리 사용하면 되는거 아님?” 이라고 생각할 수 있는데 random은 PNRG(Pseudo-Random Number Generator)를 사용해서 SEED값에 따라 랜덤이지만 순서가 정해집니다. 따라서 SEED값을 알면 순서를 알 수 있기 때문에 안전하지 않습니다Python
mingkeJan 19, 2024SQLAlchemy - 기존 DB로 SQLAlchemy 모델 생성하기(feat.sqlacodegen)새 프로젝트에서 DB를 새로 만들고 migration할 땐 보통 alembic을 사용해서 테이블을 만들고 그것을 기반으로 SQLAlchemy model을 작성합니다. 하지만 DB가 기존에 만들어져 있는 경우는 그렇게 할 수 없죠. 오늘은 sqlacodegen 라이브러리로 기존 DB를 가져와서 SQLAlchemy Model을 생성하는 방법을 알아보려고 합니다.SQLAlchemy
mingkeJan 18, 2024FastAPI - Depends 의존성 주입 그리고 use_cacheFastAPI의 Depends 함수는 의존성 주입(Dependency Injection)을 구현하는 데 사용됩니다. 의존성 주입은 컴포넌트(함수, 클래스 등) 간의 의존성을 외부에서 제공하는 방법입니다.FastAPI
mingkeJan 17, 2024FastAPI - Pydantic 에러 응답 변경 (feat.Exception Handler)FastAPI로 개발하면 pydantic을 통해 입력받은 데이터의 Validation을 하는 경우가 많습니다. pydantic에서 에러가 발생하면 422에러와 함께 pydantic에서 미리 정해놓은 에러 응답이 전송됩니다. 오늘은 이 부분을 내가 원하는대로 응답을 변경하는 방법을 알아보겠습니다.FastAPI
mingkeJan 16, 2024Python 암호화 AES-128-CBC 암호화 구현하기 - pycryptodome과 cryptography 사용하기암호화는 데이터 보안의 중요한 측면 중 하나입니다. 그리고 AES(Advanced Encryption Standard)는 가장 널리 사용되는 대칭 키 암호화 알고리즘 중 하나입니다. 최근 데이터를 암호화 할 일이 있었습니다. 하지만 저는 암호학에 대해 아는게 없습니다. 하지만 Python 라이브러리를 이용하면 쉽게 구현할 수 있습니다Python
mingkeJan 13, 2024Python QRCode 생성하기QRCode를 Python으로 간단하게 만들어봅니다. qrcode 라이브러리를 이용하면 아주 쉽게 만들수 있습니다.Python
mingkeJan 10, 2024SQLAlchemy ORM 속도 측정하기최근 FastAPI + Async SQLAlchemy 조합으로 백엔드 개발을 주로하고 있습니다. 며칠전까지 별 문제 없었는데 어제 API 응답 속도가 좀 느려진 것을 감지했습니다. 원인을 파악하던 도중에 ORM 속도를 측정봐야겠다고 생각했습니다. Async SQLAlchemy ORM의 Query를 실행하는데 걸리는 시간을 측정하는 데코레이터를 만들어보았습니다.PythonSQLAlchemy
mingkeJan 5, 2024Poetry - Python dependency 매니저 알아보기Poetry는 Python 프로젝트 관리의 많은 작업을 간소화하는 아주 강력한 의존성 관리 및 패키징 도구입니다. 최근 poetry를 사용하지 않는 팀원에게 poetry를 사용하는 방법을 알려줬었는데, 블로그에도 글로 한 번 남겨봅니다.Python
mingkeJan 3, 2024Python - ast, Abstract Syntax Tree 추상 구문 트리AST는 소스 코드의 구조를 트리 형태로 나타내는 것으로, 코드의 구조를 분석하고 다양하게 조작하는 데 사용할 수 있습니다. 오늘은 ast를 간단하게 알아보고 사용경험을 공유하고자 합니다.Python
mingkeDec 28, 2023EC2 기타 비용 분석작은 프로젝트를 EC2에 배포하고 운영, 관리까지 하면서 비용에 대해서 자연스레 관심을 가지게 되었습니다. Cost Explorer에서 비용을 살펴보다가, EC2-기타 항목이 있어 그것이 무엇이가 살펴보는 시간을 가지려고 합니다.AWS
mingkeDec 22, 2023FastAPI - 나만의 FastAPI 라이브러리 만들기FastAPI는 microframework라서 개발하다보면 자유도가 참 높다고 느껴지는것 같습니다. 백엔드를 개발하는데 정말 필수적인 것들만 있고 나머지는 원하는 대로 만들어서 쓰면 되는것 같습니다.FastAPIPython
mingkeDec 13, 2023Openpyxl으로 엑셀 파일 Python으로 쉽게 다루기Python에는 Pandas라는 강력한 데이터분석 라이브러리가 있습니다. Excel역시 pandas를 이용하면 쉽게 읽고 데이터를 가져올 수 있습니다. 하지만 pandas는 사이즈가 큰 라이브러리이기 때문에 Excel만 읽고 쓰고 하려 한다면 pandas를 설치하는것은 낭비일 수 있습니다. 오늘은 openpyxl을 이용하여 python으로 excel을 다루는 것을 익혀보려고 합니다. openpyxl은 xlsx확장자 파일의 엑셀을 읽고 쓸수있는 라이브러리입니다.Python
mingkeDec 8, 2023AWS ECS EC2에서 Replica와 Daemon 전략 비교이 글에서는 Replica와 Daemon, 두 가지 주요 배치 전략의 차이점과 적절한 사용 시나리오에 대해 알아보고자 합니다. ECS에 처음 배포해볼 때 서비스 유형에서 Replica, Daemon을 보고 이게 뭐지 했던 것에서 시작하게 되었습니다.AWS
mingkeDec 6, 2023Boto3 - ECS 서비스 실행 및 종료하기AWS 콘솔에 들어가서 서비스를 삭제할 수도 있고 AWS CLI 를 통해서 할 수도 있고 다양한 방법이 있겠지만 Boto3를 이용해서 실행 및 종료하는 어드민 API를 만들기로 결정했습니다. 개발자가 아니더라도 권한이 있는 사람이라면 쉽게 가능할 수 있도록 하기 위해서 내린 결정이었습니다.AWSPython
mingkeDec 4, 2023FastAPI - Gunicorn hooks 사용하기FastAPI Application을 배포할 때 일반적으로 Gunicorn을 많이 사용합니다. Gunicorn hooks를 소개하고, 최근 Gunicorn hooks를 사용한 경험을 공유하려고합니다.FastAPIGunicorn
mingkeDec 1, 2023FastAPI - PydanticCustomError 사용법FastAPI에서 Pydantic을 사용하면 기본적으로 유효성 검사에 실패했을 때 422에러를 발생시키고 정해진 응답을 반환합니다. 하지만 PydanticCustomError를 사용해서 Error를 커스텀 할 수 있습니다.FastAPIPydantic
mingkeNov 30, 2023파이썬 비동기 소켓통신 연결 방법오늘은 비동기 소켓통신의 구현 방법을 알아보겠습니다. 동기적으로 소켓 통신을 구현 하면, 외부 통신 시 I/O 바운드 작업으로 인해 블로킹이 발생하여 지연이 생길 수 있습니다. 그러나 비동기 방식을 사용하면 동시성이 향상되어 좀 더 빠르고 효율적으로 실행할 수 있게 됩니다.Python
mingkeNov 29, 2023FastAPI - FastAPI 유효성검사 Pydantic Validator 사용해서 데이터 유효성 검사하기Pydantic은 Python용 데이터 유효성 검사 라이브러리입니다. FastAPI에서 많이 사용됩니다. Pydantic은 데이터 모델을 정의하고 해당 모델의 유효성을 검사할 수 있습니다. Pydantic을 사용하면 더욱 안전하고 효율적인 API 개발이 가능합니다.FastAPIPydantic
mingkeNov 25, 2023Gitbhub Actions에서 S3를 활용해서 Crendential 파일 관리하기어느 날 파이프라인 구축하던 중에 한 가지 고민이 생겼습니다. Github workflow에서 이미지를 build하는데 꼭 필요한 파일이지만, .gitignore에 있어서 원격 저장소에는 push되지 않는 파일들을 어떻게 처리할까하는 고민이었습니다AWSGithub Actions
mingkeNov 23, 2023aiohttp 비동기로 API 호출하기Python의 비동기 HTTP 클라이언트/서버 프레임워크입니다. 이것은 Python의 비동기 프로그래밍 기능을 활용하여, 동시에 여러 HTTP 요청을 처리할 수 있게 해주는 강력한 도구입니다. 동시에 여러 네트워크 요청을 처리할 때 I/O 대기 시간을 효율적으로 관리할 수 있게 해줍니다.Python
mingkeNov 22, 2023FastAPI - Redis 캐시 사용하기FastAPI에서 Redis를 사용하는 방법에 대해서 간단하게 알아보겠습니다. 운영하고 있는 서비스 중에 전기차G - 전기차 충전소 찾기 가 있습니다. 공공API를 사용해서 전기차 충전소 위치와 충전기 정보를 제공하는 서비스 입니다.FastAPIRedis
mingkeNov 20, 2023FastAPI - Swagger에 Authorize 생성하기최근에 FastAPI로 API를 개발하던 중에 Authentication을 middleware로 구현하여 추가를 하였습니다. 그리고나서 생각해보니 Swagger에서 API를 실행해 볼 때도 인증이 들어가야 했습니다. FastAPI Swagger에서 Authorize 버튼을 만들어 Header에 key를 담아 실행할 수 있는 방법에 대해 알아보겠습니다.FastAPISwagger
mingkeNov 18, 2023ECS 롤링 배포 최대 비율 최소 비율Amazon ECS에서는 서비스의 롤링 업데이트를 수행할 때 서비스에 대해 "최소 실행 작업 비율" 및 "최대 실행 작업 비율"을 설정할 수 있는 옵션이 있습니다. 이러한 설정은 배포 프로세스를 제어하여 업데이트 중에 특정 수의 작업이 계속 실행되고 리소스 제한을 초과하지 않도록 하는 데 도움이 됩니다. 이게 정확히 무슨 의미인지 몰라서 공부하고 정리해보았습니다.AWS
mingkeNov 17, 2023CloudWatch 로그 정규 표현식으로 검색하기최근 간단한 프로젝트를 ECS로 배포한 뒤 CloudWatch에 로그를 기록했습니다. CloudWatch에서 Log를 검색할 수 있도록 제공해줍니다. AWS CloudWatch에서 로그를 검색하는 방법에 대해서 알아보겠습니다. 그리고 실수했던 경험을 공유하도록 하겠습니다.AWS
mingkeNov 16, 2023FastAPI - Custom Exception Handler 사용하기FastAPI에서 커스텀 Exception Handler를 사용하는 방법을 알아보겠습니다. FastAPI API에서 다음과 같은 코드는 에러 응답을 반환합니다. FastAPI를 처음 쓸 때 HTTPException을 그냥 사용했었는데, status code와 detail message만 전달하니 함께 일하던 프론트엔드 동료가 error를 구분하기 어렵다고 구분할 수 있도록 code도 함께 넣어 전달해달라는 요청이 있었습니다.FastAPI
mingkeNov 16, 2023FastAPI - lifespan 사용하기FastAPI lifespan은 Application 시작과 종료까지의 기간을 의미합니다. 시작 이벤트와 종료 이벤트가 발생할 때 동작하는 로직을 구현하여 실행할 수 있으며, 시작 이벤트에서 발생한 리소스를 계속 유지할 수 있습니다.FastAPI
mingkeNov 14, 2023sqlalchemy greenlet_spawn error 해결sqlalchemy.exc.StatementError (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been calledSQLAlchemy
mingkeNov 12, 2023FastAPI - Async SQLALCHEMY 테스트 환경 구축하기테스트 코드의 중요성은 두 말하면 입이 아픈데요. SQLAlchemy를 비동기로 사용하면 테스트 환경을 구축하는 방법도 달라집니다. 오늘은 Pytest를 이용해서 SQLAlchemy를 비동기로 테스트하는 환경 구축을 공부해보겠습니다.FastAPIPytestSQLAlchemy
mingkeNov 11, 2023FastAPI + Async SQLALCHEMY 사용하기최신 애플리케이션 개발에서 효율성과 확장성은 가장 중요한 요소입니다. 비동기를 지원하는 ORM은 이러한 목표를 달성하는 데 중요한 역할을 할 수 있습니다. 비동기 API를 지원하는 Python Framework(요즘 제가 제일 좋아하는)FastAPI를 사용할 때 적용한다면 더 큰 효과를 볼 수 있습니다.FastAPISQLAlchemy