티스토리 뷰

1. DB연결 

- db의 경우, 요청마다 새 세션을 생성하는 것이 일반적이다. 이렇게 하면 각 요청이 독립적인 트랜잭션을 갖게 되어, commit, rollback, 세션 종료 등을 개별적으로 처리할 수 있다. 따라서 yield를 통해 요청마다 새로운 세션을 제공한다.

 

1) DB 엔진이란?

- 실제 db와 통신하는 역할, db와의 물리적 연결(예: TCP 연결, pool)을 관리하고, 내부적으로 연결 풀을 운영하는 객체

: SQLAlchemy의 create_engine, create_async_engin

 

2) DB 세션이란?

- DB 엔진 위에서 동작하는 작업 단위(유닛 오브 워크), ORM이 객체의 상태를 추적하고, 여러 쿼리를 하나의 트랜잭션으로 묶어 commit이나 rollback할 수 있도록 관리: 연결의 논리적 단위

- 엔진이 제공하는 연결(pool) 중 하나를 할당받아 사용하면서, 애플리케이션 단위의 데이터 변경을 추적하는 역할을 담당

3) 상태 관리란?

- 애플리케이션이나 객체의 현재 상태(데이터, 변경 내역 등)을 추적하고, 유지하는 작업

- DB 세션은 메모리 상에 로드된 객체, 변경사항, 캐시된 데이터 등을 관리하여 나중에 데이터베이스와 동기화(commit) 할 수 있도록 한다

 

4) 트랜잭션 관리란?

- 여러 개의 데이터베이스 연산을 하나의 원자적 단위로 묶어, 전체 작업이 성공할 때만 데이터베이스에 반영되도록 하거나, 중간에 오류가 발생하면 모두 취소(rollback)하는 과정, 이를 통해 데이터의 일관성과 무결성을 보장

* 예: 은행 계좌간 송금시, 한 계좌에서 돈을 출금하면, 다른 계좌에 돈을 입금하는 2단계가 1개의 프로세스가 되야 한다.

 

* Redis는 주로 단순 데이터 저장, 빠른 읽기/쓰기 작업에 주로 쓰이기 때문에, 단일 명령어 기반의 작업 (get, set 등)으로 구성되며, 각 명령어가 원자적으로 실행된다

- 복잡한 객체 상태 추적이나 여러 명령어를 하나의 트랜잭션 단위로 묶어 관리할 필요가 없는 단순한 데이터 저장/캐시 시스템이다

 

2. Redis 연결

- redis는 인메모리 캐시나 메시지 브로커로 자주 사용되며, 라이브러리에서 제공하는 클라이언트는 내부적으로 연결 풀을 관리하며, 스레드/코루틴이 안전하게 설계되어 여러 요청에서 동시에 사용해도 문제가 없다.  즉, 애플리케이션 시작 시 한 번 생성한 후 이를 전역 변수로 관리하면서 여러 요청에서 재사용 하는 것이 일반적이다. 따라서 굳이 yield 패턴으로 매번 새 인스턴스를 생성 할 필요가 없다.

 

1) Redis 클라이언트란?

- 애플리케이션에서 redis 서버와 통신하기 위해 사용하는 라이브러리나 객체

- 내부적으로 연결 풀을 관리

- Redis는 클라이언트 자체가 서버와의 연결(엔진 역할)과 명령어 수행(세션 역할)을 모두 담당한다.

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함