Loading...
2021. 5. 2. 19:38

[FastAPI] 10. Middleware를 이용한 전후 처리

API를 호출할 때 처리 시간이 어느 정도 소모되는지 궁금하다거나 클라이언트로부터 요청을 받았을 때 받은 EndPoint와 데이터가 궁금하다면 어떻게 해야할까요? Middleware Spring에서는 Intercepter, Filter와 같은 중간 처리 방법이 있다면, Flask에서는 App Context 중 after_request나 before_request 등의 콜백 함수로 받아 처리하는 등 여러가지 방법이 있습니다. FastAPI에는 Middleware 패턴을 가지고 있습니다. Middleware 패턴은 API 호출 전후를 중심으로 하나의 콜백 함수가 실행되고 난 뒤, API Router로 요청을 넘기는 패턴입니다. 클라이언트가 요청을 받으면 이 요청은 먼저 Middleware에서 받게 됩니다. ..

2021. 4. 11. 22:27

[Programming] Reactive (리액티브)

웹 서비스에서 흔히 발생하는 일이 있습니다. 하나의 API 결과 뿐만 아니라 n개의 API 결과를 받아보고 싶습니다. 흔히 우리가 SPA를 가지고 웹 애플리케이션을 만들다보면 여러 API를 호출하는 일이 있는데, 이와 비슷한 이야기입니다. Reactive Programming이 나오기 이전, 우리가 생각하는 대규모 애플리케이션은 그냥 수십대 서버를 가지고 GB 정도의 데이터, 몇 초 걸리는 응답 시간, 유지보수는 몇 시간 걸리는 정도가 당연하다. 라고 보고 운영을 해왔습니다. 하지만 지금은 어떨까요? 다양한 서비스가 있고, 특히 한국에서는 인터넷 속도가 굉장히 빠르기 때문에 페이지 로딩 시간이 수 초라도 걸리면 그냥 닫아버리는 게 관습이 되어버렸죠. 이렇게 변화가 된 이유는 무엇일까요? 늘어난 데이터 시..

2021. 4. 4. 12:52

[FastAPI] 9. Persistence Layer 구간을 비동기 처리 하는 방법

첫 포스트에서 우리는 FastAPI가 ASGI 기반의 uvicorn을 이용하여 uvloop에 기반한 비동기 처리로 API 요청과 응답을 비동기로 처리할 수 있다는 이야기를 하였습니다. 하지만 공교롭게도 Database Connection에서 이러한 기능을 지원해주지 않아 API 요청 단에는 비동기 처리가 가능하여도 DB에 액세스 하는 구간은 비동기 처리가 되지 않기 때문에 Blocking이 발생하고, 다음 요청이 계속 대기 되는 문제점을 가지고 있었습니다. Python DB API 그렇다면 파이썬은 어떤식으로 Database와 연결할 수 있는 것일까요? Java의 경우는 JDBC라는 Database Connector라는 것이 존재하여 애플리케이션과 Database 사이를 연결해주는 게 가능한데요. Pyt..

2021. 3. 27. 14:24

[Spring boot] Axon Framework 맛보기

이번 포스트부터 Spring을 이용한 CQRS에 대해 적어보도록 하겠습니다. 몇 파트가 지난 포스트에서 우리는 MSA의 트랜잭션 이야기 중 이벤트 소싱과 CQRS에 대해 이야기 하였습니다. 2021.03.21 - [Architecture/MSA] - [MSA] 7. MSA의 트랜잭션 이야기 3 - 이벤트 소싱과 CQRS [MSA] 7. MSA의 트랜잭션 이야기 3 - 이벤트 소싱과 CQRS 이벤트 소싱을 처음 접하게 된 것은 2017 SpringCamp에서였습니다. 당시에는 MSA라는 개념에 대해 잘 알지도 못했고, MSA는 대기업에서나 쓸 수 있고, 적용가능한 엄청나게 큰 아키텍처였다. 라고만 인 blog.neonkid.xyz CQRS와 이벤트 소싱에 대한 개념은 제대로 이해되었지만 이에 대한 구현을 ..

2021. 3. 21. 12:16

[MSA] 7. MSA의 트랜잭션 이야기 3 - 이벤트 소싱과 CQRS

이벤트 소싱을 처음 접하게 된 것은 2017 SpringCamp에서였습니다. 당시에는 MSA라는 개념에 대해 잘 알지도 못했고, MSA는 대기업에서나 쓸 수 있고, 적용가능한 엄청나게 큰 아키텍처였다. 라고만 인식하고 무작정 배웠을 때였습니다. 그런데, 최근 제가 다니고 있는 회사에서 이벤트 소싱과 CQRS라는 주제로 이야기를 했었는데요. 다시금 CQRS를 보려고 하니, 그 개념이 잘 기억나지 않고, 어떤 특징을 가지고 있었는지를 파악하기가 어려워서 이렇게 정리하게 되었습니다. 그럼 MSA의 트랜잭션 이야기 3번째 이벤트 소싱과 CQRS 시작하도록 하겠습니다. 전통적인 CRUD 가끔은 이런 생각이 들 때가 있습니다. 전통적인 CRUD를 사용함으로써 백엔드 엔지니어가 데이터베이스를 사용할 때 트랜잭션 로직..

2021. 3. 14. 16:53

[FastAPI] 8. 비동기 처리에서 SQLAlchemy의 scoped_session이 문제가 되는 이유

아래의 포스트에서 FastAPI가 SQLAlchemy와 연동하였을 때 비동기적으로 처리하는 부분이 미흡하다는 단점에 대해 이야기했었던 적이 있습니다. 2020.12.27 - [Programming/Python] - [FastAPI] 2. SQLAlchemy를 이용한 간단한 CRUD API 만들기 [FastAPI] 2. SQLAlchemy를 이용한 간단한 CRUD API 만들기 이번 글에서는 ORM에 대한 사용 방법에 대해 알아보도록 하겠습니다. ORM은 Object Relation Mapping의 약자로 객체를 이용해서 데이터베이스 Entity에 접근하는 방법입니다. 보통 애플리케이션 레벨에서 blog.neonkid.xyz 이 부분에서 다룬 SQLAlchemy의 scoped_session에 대해 좀 더 ..

2021. 3. 6. 19:22

[RxJava] 5. Reactive 연산자 파헤쳐보기 3편 (수학 연산자 및 기타 연산자)

2021/02/21 - [Programming/Java] - [RxJava] 4. Reactive 연산자 파헤쳐보기 2편 (결합, 조건 연산자) [RxJava] 4. Reactive 연산자 파헤쳐보기 2편 (결합, 조건 연산자) 2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive 연산자 파헤쳐보기 1편 (생성, 변환 연산자) [RxJava] 3. Reactive 연산자 파헤쳐보기 1편 (생성, 변환 연산자) 2021/01/23 - [Programming/Java] - [RxJ.. blog.neonkid.xyz 지난 포스트에 이어서 RxJava의 기본을 다루는 연산자 마지막 편 수학 연산자 및 기타 연산자에 대해 알아보겠습니다. 이번 포스트에서 다룰 수학 연산..

2021. 2. 27. 16:39

[FastAPI] 7. Google-auth 및 PyJWT를 이용한 OAuth2 인증 구현 2

지난 글에 이어서 이번 포스트에서는 OAuth2 인증 토큰을 API에서 받아 처리하는 방법에 대해 알아보도록 하겠습니다. HTTP Header 우리가 REST API를 통신하는 데 사용하는 HTTP 프로토콜은 Header와 Body라는 구조로 이뤄져 있습니다. Header와 Body 모두 개발자가 다룰 수 있는 데이터 구조로 되어 있으며 Header에는 전송하고자 하는 서버 혹은 클라이언트의 정보 내지 전송하고자 하는 대상에 부가적인 메타데이터를 넘겨줄 떄 사용합니다. 쉬운 예시로 위와 같이 로컬 서버에게 GET 메소드를 이용해서 리소스를 가져오는 호출을 전달했을 경우 데이터를 받는 대상자에게 부가적인 메타 데이터를 가져올 수 있도록 Key-value 형태의 데이터 구조를 가지고 있습니다. 이 중에서 가..

2021. 2. 21. 18:20

[RxJava] 4. Reactive 연산자 파헤쳐보기 2편 (결합, 조건 연산자)

2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive 연산자 파헤쳐보기 1편 (생성, 변환 연산자) [RxJava] 3. Reactive 연산자 파헤쳐보기 1편 (생성, 변환 연산자) 2021/01/23 - [Programming/Java] - [RxJava] 2. Reactive 기본 연산자(Operator) - map, filter, reduce [RxJava] 2. Reactive 기본 연산자(Operator) - map, filter, reduce Reactive Programming에서 꽃이라고.. blog.neonkid.xyz 이번 포스트는 지난 포스트에 이어 결합, 조건 연산자에 대해 알아보겠습니다. 결합 연산자 결합 연산자는 여러 개의 Obser..

2021. 2. 13. 13:26

[FastAPI] 6. Google-auth 및 PyJWT를 이용한 OAuth2 인증 구현 1

이번 포스트에서는 인증에 대한 이야기를 해보고자 합니다. Spring에서는 Spring Security라는 모듈을 제공하여 개발자가 인증에 대한 구현을 개별적으로 하지 않고도 쉽게 구현할 수 있는 방법이 존재했습니다. 이를 통하여 Google 개발자 콘솔에서 Client ID를 미리 발급받은 후 구현되어 있는 구현체만 잘 사용하면 어렵지 않게 OAuth2 인증을 구현할 수 있었죠. FastAPI도 이와 비슷하게 OAuth2 인증을 구현하지만 JWT를 사용하는 것에는 별도의 구현 처리를 해줘야 합니다. 이번 포스트에서는 이 두 라이브러리를 가지고 OAuth2 인증을 어떻게 구현할 수 있는지에 대해 알아보겠습니다. [Spring boot] Spring boot Security로 시작해보는 인증 Spring ..