콘텐츠로 건너뛰기

How to solve that next.js and AWS RDS PostgreSQL connection is failed.

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 앱에서 쿼리 요청을 보내면 응답 받을 수 있게 된다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다