Loading...
2020. 12. 27. 12:14

[FastAPI] 2. SQLAlchemy를 이용한 간단한 CRUD API 만들기

이번 글에서는 ORM에 대한 사용 방법에 대해 알아보도록 하겠습니다. ORM은 Object Relation Mapping의 약자로 객체를 이용해서 데이터베이스 Entity에 접근하는 방법입니다. 보통 애플리케이션 레벨에서 DB에 접근할 때는 데이터베이스 드라이버를 이용하여 SQL Query를 던져 실행하는 방법을 사용하지만 SQL Query는 소프트웨어 엔지니어에게 있어 러닝 커브를 증가 시키고, 소프트웨어 코드 가독성을 저하시키는 원인이 되었습니다. 하지만 ORM을 이용하면 기본적인 CRUD를 포함한 간단한 쿼리에 대해 SQL Query를 프로그래밍 코드에 질의하지 않아도 프로그래밍 코드 안에서 처리할 수 있는 이점을 얻을 수 있습니다. Python 언어에서의 대표적인 ORM 라이브러리로 SQLAlch..

2020. 12. 25. 16:42

[FastAPI] 1. GET, POST, PUT, DELETE 등 기본 API 만들고 문서 자동화 해보기

지난 글에 이어서 FastAPI를 이용해서 기본적인 REST API 개발 이야기 두 번째를 이어가보도록 하겠습니다. 우리가 REST API를 개발하면 주요 메소드 종류 5가지가 있는데요. 바로 GET, POST, PUT, DELETE, PATCH 이렇게 5가지 입니다. 물론 이 외에도 OPTIONS가 있지만 이 글에서는 다루지 않겠습니다. 기본 API 만들기 (GET) REST API의 기본 API는 먼저 GET 메소드부터 시작됩니다. GET 메소드는 서버로부터 리소스를 가져올 때 쓰는 READ API 입니다. FastAPI에서는 아래의 두 가지 방법으로 작성할 수 있습니다. from fastapi import FastAPI app = FastAPI() @app.route('/health') async ..

2020. 12. 25. 15:16

[Python] FastAPI 프레임워크를 이용한 비동기 REST API 개발

Python 언어를 이용하여 REST API 서버를 만들 수 있는 방법은 여러 방법이 있습니다. 국내 혹은 많은 개발자들의 사랑을 받고 있는 Django, 그리고 가벼운 프레임워크로써 많이 사용하고 있는 Flask 등 여러가지가 있는데요. 이번 글에서는 Jetbrains의 IDE 도구인 PyCharm과 FastAPI 프레임워크를 이용해서 REST API 서버를 개발하는 시간을 가져보도록 하겠습니다. What is FastAPI? Python에서는 웹 서버와 연동하기 위해 WSGI라는 인터페이스를 사용합니다. 그러나 WSGI는 동기 방식으로 프로그램을 처리하기 때문에 미리 들어온 요청을 처리할 때까지 다음 사람이 계속 기다려야 하는 단점을 감수해야 합니다. FastAPI는 Starlette이라는 비동기 프..

2020. 12. 20. 11:14

[Python] PyCharm에서 Poetry를 이용한 디펜던시 관리

소프트웨어 개발시 디펜던시의 관리는 이제 선택이 아닌 필수가 되었습니다. 여태까지 Python 언어를 이용해 소프트웨어 개발을 하였을 때는 requirement를 이용하여 환경별로 디펜던시 관리를 했었습니다. 그러나 requirements는 하나의 디펜던시를 설치할 때 하위 요소까지 설치해주지 않아 종속되는 디펜던시를 수동으로 설치해야 하는 불편함이 있습니다. Poetry Poetry - Python dependency management and packaging made easy. Intuitive CLI Poetry's commands are intuitive and easy to use, with sensible defaults while still being configurable. Soon ex..

2020. 12. 6. 18:42

[Python] REST API 개발로 알아보는 WSGI, ASGI

REST API 서버를 개발하기 위해서는 이제 특정 언어를 배워야 할 필요 없이 원하는 언어로 자유롭게 개발할 수 있는 세상이 오게 되었습니다. Python 언어 또한 다양한 프레임워크를 제공함으로써 REST API 서버를 쉽게 개발할 수 있는데요. 이를 제공하는 다양한 프레임워크가 많이 존재하지만 그 중 가장 보편화 되어 알려진 프레임워크는 아래의 두 가지 일 것입니다. Django Flask Django는 MTV 패턴을 제공하여 API 뿐만 아니라 템플릿을 이용하여 정적 HTML 파일을 생성해 뷰를 만들 수 있도록 제공하여 빠른 개발을 통해 높은 생산성을 자랑하는 프레임워크입니다. 반면 Flask는 오직 API만을 쉽게 제공하여 빠른 API 서버만을 만들 수 있도록 제공하는 것이 특징이죠. Sprin..

2020. 11. 21. 18:42

[Kubernetes] 4. Minikube로 시작하는 kubernetes

Kubernetes 클러스터를 구축하기 위해 두 개의 노드를 준비하고 이를 마스터와 각 노드로 나누어야 하는 구조를 갖춰야 하지만 이는 실제 서비스하기 위한 환경에 대한 권장 사항이었습니다. 쿠버네티스를 실 서비스해보기 전에 직접 사용해보는 방법은 여러 가지 있습니다. AWS의 EKS, GCP의 GKE 등 클라우드 벤더를 사용하는 방법 직접 쿠버네티스 클러스터를 구축하는 방법이 있지만 실제로 체험해보기 위해 클라우드 벤더의 값비싼 비용을 사용하거나 마스터, 노드의 하드웨어 장비를 직접 구입하는 것은 비용적으로 부담이 될 수 있을 것입니다. Minikube는 로컬 환경에서 최상의 쿠버네티스 환경을 제공하기 위한 프로젝트로 우리는 쿠버네티스를 간단하게 체험해보기 위해 일련의 마스터, 슬레이브 노드를 구성하고..

2020. 11. 18. 21:49

[Kubernetes] 3. Controller로 더 나아간 애플리케이션 배포

우리는 쿠버네티스의 4개 객체들의 역할과 그들의 모임으로 한 서비스를 배포하고 운영하는 데 있어 기본적인 요소라는 것을 알았습니다. 쿠버네티스는 서비스의 트래픽에 따라 컨테이너를 자동으로 증가시켜주는 스케일 업/아웃, 애플리케이션에 필요한 batch 작업 등 애플리케이션 설정, 배포에 더욱 빛을 발휘할 수 있는 강력한 기능을 제공합니다. Controller 쿠버네티스의 컨트롤러는 이전에 설명한 객체를 이용하여 배포한 서비스들에 더 많은 기능을 추가시켜주는 존재입니다. 예를 들어, 우리의 서비스는 사용자가 많아 요청 수가 많을 것이므로 Namespace에 부여된 리소스 허용량에 한하여 트래픽량이 증가함에 따라 자동으로 컨테이너를 생성/삭제하는 오토 스케일링 기능, 내 서비스 앞단에 로그를 수집하거나 데몬을..

2020. 11. 14. 17:44

[Kubernetes] 2. Kubernetes 기본 구성과 객체(object)

지난 포스트에서 Kubernetes와 Container Deployment에 대해 알아보며 컨테이너로 서비스 배포하기까지의 과정과 Docker Swarm 등의 다른 오케스트레이션 툴과 어떤 점이 다른지 살펴봤습니다. 이러한 점을 확인하고, 우리가 운영하는 서비스가 쿠버네티스에 적합한지, 차후 미래 운영 대책으로 사용할만한지를 정확하게 고려 대상으로 선정하셨다면 이 글을 계속 읽으며 Kubernetes를 직접 공부해보고, 사용해보시는 것이 좋을 것 같네요. Kubernetes의 기본 구조 이제 본격적으로 Kubernetes가 어떻게 이루어졌는지 알아보겠습니다. 기존의 Docker에서는 컨테이너를 관리할 때 중앙의 Docker Engine이 자리잡고 있어, 이 엔진이 애플리케이션 이미지를 관리하고, 생성하는..

2020. 11. 7. 22:37

[Kubernetes] 1. Container Deployment와 Kubernetes

저에게 있어 쿠버네티스는 Docker Swarm을 지나 이전부터 사용하고 있었던 컨테이너 오케스트레이션 툴이었습니다. 최근에 이직을 한 회사에서 쿠버네티스를 이용하여 시스템을 구성하고 서비스를 운영하게 되어 주 오케스트레이션 툴로 쿠버네티스를 사용하게 되었고, 이 때부터 Docker Swarm 보다는 Kubernetes로 시스템을 구성하는 일이 자주 생겨났습니다. 이 글은 Docker를 자주 사용하지만 Kubernetes에 대해서는 잘 모르고, 그리고 사용을 고려해보고 싶은 분들에게 드리는 글의 시작입니다. Container Deployment으로 거슬러 올라오기까지.. Kubernetes는 Go 언어를 기반으로 Google에서 개발하여 2014년에 공개된 Container Orchestration to..

2020. 11. 2. 22:10

[MSA] 6. MSA의 트랜잭션 이야기 2 - Two-Phase commit과 Saga

이전 글에 이어서 MSA 내에서 트랜잭션을 원활히 하는 방법 2가지를 소개해드리고자 합니다. 관계형 데이터베이스와 더불어 모놀리틱 아키텍처를 도입한 서버 애플리케이션은 DB 서버에서 제공하는 Commit과 Rollback을 이용하여 데이터를 일관성 있게 제어할 수 있었습니다. 그러나 MSA에서는 각 서비스별로 DB 인스턴스와 애플리케이션이 분리됨에 따라 관계형으로 맺어진 Entity들은 서로가 다른 인스턴스로 운영되고, 그들 리소스를 받기 때문에 데이터의 일관성이 무너지게 됩니다. 이를 위해 우리는 분산 트랜잭션 기술을 이용하여 이들 일관성을 지킬 수 있는 방법이 있습니다. 1. Two-Phase Commit Two-Phase Commit이란, 2단계에 거쳐서 영속하는 작업을 말합니다. 이렇게 말하면 아..