Problem
Next.js 를 사용한 웹앱에서 다음과 같이 AWS RDS의 PostgreSQL 인스턴스에 연결을 시도할 때 에러가 출력되면서 query가 제대로 실행되지 않는 상황이 발생했다.
// db.js
import { Pool } from 'pg';
const pool = new Pool({
host: process.env.HOST,
database: process.env.DB,
user: process.env.USER,
password: process.env.PASSWORD,
port: prcoess.env.PORT,
} );
export default pool;</mark>
// api/users/route.js
import { NextResponse } from 'next/server';
import pool from 'db';
export async function GET() {
try {
const result = await pool.query( 'SELECT NOW()' );
return NextResponse.json( result.rows, { status: 200 } );
} catch (error) {
return NextResponse.json( { error: error }, { status: 500 } );
}
}
Error
// Error
{
"length":181,
"name":"error",
"severity":"FATAL",
"code":"28000",
"file":"auth.c",
"line":"543",
"routine":"ClientAuthentication",
"level":"error",
"timestamp":"..."
}
Reason
현재 나의 DB 인스턴스의 PostgreSQL 버전은 16.4 인데 버전 15 이후부터는 DB를 구성하는 파라미터 중 force_ssl이라는 인자가 0에서 1로 바뀌었다고 한다. 이 인자가 1(true) 이면 인증이 확인되지 않는 사이트로 부터 받는 요청은 거부 된다고 한다. 따라서, 문제를 해결하기 위해서는 force_ssl 파라미터 값을 0으로 바꿔주면 SSL 설치가 되지 않는 로컬 환경에서 접속이나 쿼리 요청을 할 수 있게 된다.
https://stackoverflow.com/questions/76511667/nodejs-postgresql-connection-failure
Solve
force_ssl 을 0으로 셋업한 파라미터 그룹을 내가 생성한 인스턴스에 적용해 주면 된다.

파라미터 그룹에 들어가 파라미터 그룹 생성을 눌러 생성 페이지로 들어가 준다.


생성 후 생긴 파라미터 그룹 편집에 들어가 force_ssl 을 필터링 한 후 값을 바꾸고 저장하면 된다.


생성한 파라미터 그룹을 인스턴스에 적용하면 된다. 파라미터 그룹을 수정하면 인스턴스를 재부팅 해야하기 때문에 적용하는데 시간이 좀 걸린다. 대충 20~30분 정도 걸리는듯


이렇게 하면 로컬 next.js 앱에서 쿼리 요청을 보내면 응답 받을 수 있게 된다.