본문 바로가기

반응형

기타

(29)
[gRPC] Proto file 문법 (Message type, Service type) 1. 프로토 파일 (Proto file)프로토콜 버퍼를 사용하기 위해서는 사용할 데이터와 서비스에 대해서 프로토 파일에 작성해야한다. 프로토 파일에 작성된 프로토콜 버퍼는 아래의 과정을 거쳐서 다른 프로그래밍 언어에서 사용할 수 있도록 변환된다.  우리가 사용할 데이터 구조를 .proto 파일에 작성하면 프로토콜 버퍼 컴파일러인 protoc 가 이를 컴파일하여 해당 프로그래밍 언어의 소스코드를 생성한다. 이렇게 생성된 소스코드를 사용자의 프로젝트 코드와 함께 컴파일하여 프로토콜 버퍼 클래스를 프로그램에서 호출하여 사용할 수 있도록 한다. 아래에는 프로토콜 버퍼 데이터를 정의하기 위해 프로토 파일 문법에 대해서 정리한다. 버전은 proto3 를 기준으로 정리하였다.2. Message Typesyntax =..
[gRPC] gRPC 와 Protocol Buffer 1. gRPC 란?gRPC 는 구글에서 만든 RPC (Remote Procedure Call) 로 'Google Remote Procedure Call' 의 줄임말이다. 프로토콜 버퍼를 IDL 로 사용하며 서로 다른 장치의 프로그램 간의 메서드 호출을 가능하게 해주어 쉽게 분산처리 시스템을 구축할 수 있도록 해준다. gRPC 는 다른 RPC 들과 같이 서비스를 정의하는 것과 원격으로 호출할 수 있는 함수들과 함수의 매개변수, 반환타입 등을 지정하는 것을 기반으로 한다. 서버측에서는 해당 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트의 요청을 처리한다. 클라이언트측은 서버와 같은 기능을 제공하는 stub, 스텁을 가지고 통신을 수행한다.  gRPC 클라이언트와 서버는 여러가지 환경에서 통신할 수..
[SQLite] SQLite 설명 및 예제 프로젝트를 진행하면서 DB 를 사용해야 하는 상황이 발생했다. 프로젝트의 프로토타이핑 과정이었기 때문에 다양한 기능과 성능보다는 간단한 설정과 빠르게 적용할 수 있는 DB 가 필요했고 SQLite 를 사용하기로 했다. SQLite 는 File DB 로 가볍고 따로 DB 서버를 설정할 필요가 없고 간편하게 사용할 수 있다. 이 글에서는 SQLite 에 대한 소개와 간단한 사용 방법을 정리하려고 한다. 1. SQLite 란? SQLite 는 가볍고, 빠르며, 독립적인 SQL Database 엔진을 구현하는 C 언어 라이브러리이다. SQLite 는 내장형 SQL DB 엔진으로 MySQL 이나 PostgreSQL 과 같은 기존의 RDBMS 와 달리 서버리스이며 실행을 위해 별도의 설치나 설정이 필요하지 않다. ..
[Celery] Celery 란? FastAPI 에서 백그라운드 작업을 실행하는 방법을 찾으면서 FastAPI BackgroundTasks 와 Celery 를 비교하는 글을 본 적이 있다. 수행에 오랜 시간과 메모리가 필요한 작업을 따로 실행하고 그러한 작업들의 스케줄링을 하기 위해서 Celery 에 대해서 알아본다. 1. Celery 란? Celery 는 python application 에서 많은 양의 작업들을 나눠서 처리할 수 있도록 해주는 분산 시스템이다. Python application 에서 생서된 작업들의 실시간 처리와 작업 스케줄링 등을 제공하는 task queue 이다. - Task Queue 란? Task queue 는 멀티 쓰레드, 또는 멀티 디바이스를 통한 분산 처리에서 사용되는 개념이다. Task queue 에는 ..
[FastAPI] BackgroundTasks 서버에서 요청을 처리할 때, 작업이 오래 걸리는 요청에 대해서는 응답을 먼저 보내주고 백그라운드에서 나머지 작업을 수행하도록 한다. 이러한 구조를 위해서 보통은 worker thread 를 돌리거나 worker queue 등을 사용하여 다른 쓰레드 또는 프로세스를 통해 백그라운드에서 작업을 수행하도록 합니다. FastAPI 에서는 starlette 의 BackgroundTasks 를 사용하여 요청에 대한 백그라운드 작업을 실행하는 기능을 제공한다. BackgroundTasks 에 추가된 task 들은 FastAPI 에서 asynchronous 하게 실행한다. 이를 통해서 오래 걸리는 작업은 Background Task 로 등록한 후 response 를 먼저 반환하도록 할 수 있다. 1. Backgroun..
[NGINX] NGINX 란? 1. nginx 란? nginx 는 경량 웹서버로 정적파일을 serving 하는 web server 또는 요청을 다른 서버로 전달하는 reverse proxy server 로 활용되어 was 의 부하를 줄이는 로드 밸런서로 사용할수도 있다. nginx 와 많이 비교되는 것이 apache 의 웹서버이다. 이둘의 차이는 요청을 처리하는 방식이다. apache 웹서버의 경우 요청마다 새로운 쓰레드를 생성하여 요청을 처리한다. 그렇기 때문에 요청이 많으면 많을수록 자원이 많이 소모된다. 반면에 nginx 는 event-driven 구조로 동작하는데, 이때문에 하나 또는 고정된 개수의 프로세스만 생성되고, 요청들은 concurrency 하게 처리된다. 그렇기 때문에 보다 적은 자원으로도 효율적인 운용이 가능하다...
[MongoDB] Aggregation MongoDB 를 사용하여 쿼리를 하던 중에 쿼리 최적화를 위해서 관련있는 여러 컬렉션간의 조인에 대한 필요성이 발생했다. 그런데 MongoDB 는 NoSQL 데이터베이스이기 때문에 RDB 와 다르게 테이블 개념이 아니고 FK 등을 통해 테이블 간의 관계가 정의되어 있지 않아서 어떻게 조인을 하는지 검색해보았다. 검색 중에 MongoDB 문서에서 Aggregation 에 대한 정보를 찾았고 오늘은 이에 대해서 정리해보려 한다. 1. Aggregation Aggregation 은 여러 document 들을 연산하여 나온 결과물을 반환하는 연산이다. RDB 에서 조인을 통해 여러 테이블의 데이터를 합쳐서 반환하는 것처럼 aggregation 도 여러 document 의 값들을 조건에 맞게 묶어서 그룹화한 결..
[Web] JWT (JSON Web Token) 1. JWT (JSON Web Token) JWT 는 서로 다른 컴포넌트 간에 데이터를 전달하기 위해서 사용되는 토큰이다. JSON 형식의 객체를 암호화한 값들을 특정한 형식으로 구성한 문자열 형태를 띄고 있으며, 주로 웹서비스의 인증, 인가에서 세션과 쿠키의 대체제로 사용된다. JWT 의 JSON 객체는 name-value 쌍으로 구성되어 값을 저장한다. 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장된다. 이때문에 서버에서 메모리나 스토리지 등을 위해 세션을 관리했던 서버의 부담을 덜 수 있다. 그렇기 때문에 분산 시스템과 같이 여러 request / reply 가 발생하는 구조의 시스템에서 많이 사용한다. 2. JWT 구조 JWT 는 세가지 부분으로 구성되는데, header, payload 그리..

반응형