※ 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-promise는 pg 라이브러리 위에 구축된 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는 이 둘 사이의 비동기적 데이터 흐름을 관리하는 역할을 한다. )
참조 :
'인턴' 카테고리의 다른 글
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 |