[DB] Connection Pool
·
DataBase
🎯 Goals connection pool 이 무엇인지 안다. DB 연결 객체의 생성 과정을 안다. 뭐하는 앤데? DB 연결 객체의 캐시풀로, 연결 객체들이 재사용 될 수 있게한다. 왜 쓰는데? DB 커맨드의 성능 향상 👉🏻 앱단에서 DB에 쿼리를 날릴 때에는 반드시 연결 객체가 생성되어야한다. 연결 객체 생성 (연결) - 해제 마다 지연이 발생하는데 동시에 여러 커맨드를 입력할 경우 지연이 누적되어 성능에 악영향을 미친다. 따라서 캐시 풀에 재사용 가능한 연결객체를 미리 생성해 두고 다른 세션에서 이 연결 객체(이미 생성되어있는)를 그대로 재사용 할 수 있게 두는 것이다. 사용 후에는 '반납'한다. 커넥션 풀 미사용 커넥션 풀 사용 연결 객체 생성 - 해제 연결 객체 사용 - 반납 👉🏻 연결 객체 생성..
[PostgreSQL] Notify
·
DataBase/PostgreSQL
When to use? postgreSQL 내에서 특정 row 가 변경되면 해당 이벤트를 특정 채널에 Notify 할 수 있는 기능. ex) Node.js 에서 PostgreSQL 에서 발생한 특정 이벤트 페이로드를 받아온다. Syntax pg_notify() is just a convenient wrapper function for the SQL NOTIFY command. pg_notify (channel-name, payload) Channel 알림 채널명, 채널명은 테이블명 그대로 따라가는 것이 관례다. Payload 8,000 바이트 이하의 문자열 데이터 💡 Notify in transaction NOTIFY behaves is executed in a transaction, the notify..
[PostgreSQL] Sequence 함수 및 값 변경 (번역)
·
DataBase/PostgreSQL
nextval(regclass) 시퀀스의 다음 값을 리턴하는 함수로 thread-safe 하다. 👉🏻 여러 세션에서 이 함수를 동시에 실행하면 각각 다른 값을 갖게한다. 💡 nextval() 을 호출하면 가리키고 있던 시퀀스는 반환하고 곧바로 다음 시퀀스를 가리킨다. ex) nextval(table_name_pkpk:regclass) => 1000 // 리턴은 1000을 받아왔지만 이미 테이블은 다음 시퀀스로 '1001'을 가리키고 있다. 다른 세션에서 INSERT 쿼리 -> 1001 입력 regclass regclass? 시퀀스의 Object ID (OID) 를 의미. 이게 왜 필요할까? OID는 여러 시스템 테이블에 쓰이는 기본키다. OID 는 자체적인 동작이 없다. 그저 의미있는 이름을 시스템 오브..
Description on DB Column
·
DataBase/PostgreSQL
🎯 요구사항 Fastify + Swagger (OPEN API 3.0.3) 를 쓴다면 JSON Schema 를 정의하는 일이 익숙할 것이다. 허나, 프로젝트 초반일수록 DB 스키마는 물론 API 가 변경되는 일이 잦아 JSON Schema 변경도 잦아진다. 개발과 문서화 모두를 맡은 개발자 입장에선 여간 귀찮은 일이 아닐 수 없다. ORM없이 DB 스키마를 변경할 때마다 연결된 DB로부터 자동으로 JSON Schema 를 받아올 순 없을까? 구원 투수 GitHub - SpringTree/pg-tables-to-jsonschema: A command-line utility and module to turn postgres tables into JSON Schemas A command-line utility..