본문 바로가기
인턴

pg & pg-promise & Promise 란?

by 당도-50% 2024. 10. 22.

 

※  pg  

 

①  pg 란?  -  라이브러리

    ☞ Node.js 환경에서 PostgreSQL 데이터베이스와 상호작용하기 위한 라이브러리이다.

 

 About  pg

  • PostgreSQL의 공식 Node.js 클라이언트 라이브러리로, pg를 사용해 PostgreSQL 데이터베이스와 직접 통신할 수 있다.
  • 비동기 처리 : 기본적으로 pg는 비동기 작업을 지원하며, 콜백 함수나 Promise를 사용하여 비동기 쿼리를 실행할 수 있다. (최근에는 async/await와 함께 사용하여 비동기 처리를 더 직관적으로 작성 가능)
  • 저수준 API : pg는 상대적으로 저수준의 API를 제공하며, 기본적인 쿼리 실행, 연결 관리, 트랜잭션 등을 제공한다.

 

 

 


 

※  pg-promise 

 

①  pg-promise 란?  -  라이브러리

    ☞ Node.js 환경에서 PostgreSQL 데이터베이스와 상호작용하기 위한 라이브러리이다.

 

  About   pg-promise 

 

  • pg-promisepg 라이브러리 위에 구축된 Promise 기반의 래퍼 라이브러리이다.
  • pg와 같은 기능을 제공하며, Promise기반으로 더 쉽게 코드를 작성할 수 있게 해준다.
  • Promise 기반 API : pg-promise는 모든 작업이 Promise를 반환하므로, async/await 구문을 사용하여 비동기 작업을 간결하게 표현할 수 있다.
  • 자동 연결 관리 : 데이터베이스 연결을 자동으로 관리해주며, 트랜잭션, 커넥션 풀링, 쿼리 실행 후 연결 해제 등의 작업을 효율적으로 처리해 준다.
  • 추가 기능 : SQL 쿼리 빌더, 트랜잭션 처리, 직렬화 및 매핑, 수명 주기 이벤트 관리 등 다양한 고급 기능을 제공한다.

 

 

   주요 이점

· Promise 기반 API 

   pg-promise는 JavaScript의 Promise라는 객체를 사용하여 비동기 처리를 간편하게 해준다. 

· SQL 쿼리 빌더 

  복잡한 SQL 쿼리를 생성할 때 도움이 되는 쿼리 빌더 기능을 제공한다. (동적으로 쿼리 생성 가능)

· 자동 연결 관리 

   데이터베이스 연결을 자동으로 관리하여 성능을 최적화하고 개발자의 수고를 덜어준다.

· 직렬화 및 매핑 

   쿼리 결과를 JavaScript 객체로 쉽게 매핑할 수 있게 해주어 데이터의 편의성을 높여준다.

· 수명 주기 이벤트 

  데이터베이스 연결 및 쿼리 실행과 관련된 여러 이벤트를 통해 개발자가 필요한 기능을 구현할 수 있도록 돕는다.

 

   주요 메서드

메서드
 db.any(query, [values]) > 쿼리 결과가 0개 이상일 떄 사용하며, 결과를 배열로 반환한다.
(결과가 없으면 빈 배열을 반환)
 .one(query, [values]) 쿼리 결과가 정확히 하나일 경우에 사용하며, 결과를 객체로 반환한다.
(결과가 없거나 단일 행만 반환되면 오류가 발생)
 .many(query, [values])  쿼리 결과가 1개 이상이어야 하며, 여려 개의 결과를 배열로 반환한다.
(결과가 없거나 여러 행이 반환되면 오류가 발생)
 .none(query, [values]) 쿼리를 실행하지만 결과를 반환하지 않는 경우 사용한다.
주로 삽입, 업데이트, 삭제 쿼리에 사용된다.
(결과가 있으면 에러 발생)
 .oneOrNone(query, [values]) 쿼리의 결과가 단일 행(1개) 또는 없을 때 사용하며,
결과가 1개일 경우 객체를 결과가 없으면 null을 반환한다
(여러 행이 반환되면 오류가 발생합니다)
 .result(query, [values]) 쿼리 실행 결과의 메타 데이터를 반환한다.
(예, 영향을 받은 행 수 등을 확인할 수 있습니다)
 .query(query, [values]) 쿼리를 실행하고 원시 결과를 반환한다 .
식화된 결과보다는 쿼리 결과 자체를 다룰 때 사용한다.
 .tx(callback) 여러 쿼리를 트랜잭션으로 묶어 실행한다.
(트랜잭션 중 1개라도 실패 시 전체 트랜잭션이 롤백)
 .task(callback) 여러 쿼리를 하나의 논리적 작업 단위로 묶어 실행한다.
트랜잭션과 달리 데이터베이스 상태를 고정하지 않는다.

 

any()     one()     many()     none()     oneOrNone()     result()     query()     tx()     task()

 


 

※ Promise ( 객체 )

· 참고 ↓ (Promise 객체)

 

 Promise 란?

 ☞ Promise는 JavaScript에서 비동기 작업의 결과를 나타내는 객체이다. (즉, 비동기 함수가 반환하는 객체)

 

 

②  Promise 의 3가지 상태

  • Pending (대기) : Promise가 처음 생성되면 기본 상태이며, Promise가 비동기 작업 수행중인 상태이다.
  • Fulfilled (이행됨) : 비동기 작업이 성공적으로 완료되었을 때로, promise가 작업의 결과값을 반환한 상태이다.
  • Reject (거부됨) : 비동기 작업이 실패했을 때로, Promise는 Rejected 상태로 바뀌며 오류가 전달된다.

 

  Promise 의 구조

  • then() : Promise가 성공적으로 완료되었을 때(이행됨) 호출되는 콜백 함수이다.
  • catch() : Promise가 실패했을 때(거부됨) 호출되는 콜백 함수이다.
  • finally() : Promise가 완료되었을 때(성공 또는 실패와 상관없이) 호출되는 콜백 함수이다.
+++ Promise 사용 예시 +++

const promise = new Promise((resolve, reject) => {		//promise 생성
   // 비동기 작업 수행 로직 예시
    var success = true;
    
    if(success){
    	resolve("성공!");
    }else{
    	reject("오류!");
    }
}

promise
    .then(result => {
    	console.log(result);  // 이행됨 - (Fulfilled) 상태에서 실행됨
    })
    .catch(error => {
    	console.log(error);   // 거부됨 - (Rejected) 상태에서 실행됨
    })
    .finally(() => {
    	console.log("작업 끝");	// 성공,실패 여부와 상관없이 항상 실행됨
    })

 

 

  Promise 이점

· 비동기 처리  pg-promise를 사용하면 데이터베이스 쿼리를 비동기적으로 실행할 수 있다.
(비동기 이벤트 기반 아키텍처인 Node.js와 잘 어울리며, I/O작업이 완료될 때까지 다른작업 수행 가능)

· 체이닝 Promise를 사용하면 .then() 과 .catch() 메서드를 통해 결과를 쉽게 처리하고 오류를 관리할 수 있다.
· 에러 처리의 일관성 Promise를 사용하면 오류를 보다 쉽게 잡는다.
(.catch()를 통해 모든 비동기 작업의 오류를 중앙집중식으로 처리 가능)
· 조합 가능성 여러 Promise를 함꼐 사용할 수 있어, 여러 비동기 작업을 동시처리하거나 결과를 조합할 수 있다.

 

 

   Producer &  Consumer

      ☞ 비동기 처리와 관련된 개념들으로, Promise가 어떤 방식으로 생성되고 사용되는지를 설명할 때 자주 사용된다.

 

  • Producer
  • ☞  Promise를 생성하는 쪽이다. 즉, 비동기 작업을 수행하고, 그 결과에 따라 Promise를 반환하는 역할을 한다.                                    resolve() / reject()  호출
  • Consumer
  •  Producer가 생성한 Promise의 결과를 소비하는 쪽이다. 즉, Promise가 반환하는 결과를 처리하는역할을한다.            then() / catch() 사용
  • Producer Promise를 생성하고 비동기 작업을 수행하는 주체이며, 그 결과를 Promise를 통해 Consumer에게 전달한다.
  • Consumer는 그 결과를 받아 처리하는 주체이다.
  • ( ∴ Promise는 이 둘 사이의 비동기적 데이터 흐름을 관리하는 역할을 한다. )

 

 

 

 

 

 

 

 

 

참조 :

https://dev-h2.tistory.com/54

 

ES6:: Promise란?(특징, 체이닝, 에러 처리 예시 등)

Promise란? 프로미스는 자바스크립트 비동기 처리에 사용되는 객체이다. 여기서 자바스크립트의 비동기 처리란 ‘특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 자

dev-h2.tistory.com

https://dunchi.tistory.com/64

 

[express] pg-promise

Express와 PostgreSQL을 pg 모듈을 사용해서 연동하던 중 하나의 Query로 찾은 데이터를 다른 쿼리에서 사용해야하는 경우가 발생하였다. 저번에도 이런 경우가 있었는데 pg에 Query안에 또 Query를 하는

dunchi.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

'인턴' 카테고리의 다른 글

JSON 이란?  (1) 2024.10.25
FormData 란?  (0) 2024.10.24
Git pull / push  (0) 2024.10.21
VS Code에서 Git - add, commit 하기  (0) 2024.10.18
[3일차] Next.js 프로젝트 생성하기, 페이지 띄워보기  (0) 2024.10.16