AWS Redshift Serverless 사용기
1년 반정도 프로젝트에서 사용했었습니다.
처음에는 온프레미스처럼 물리적 스펙을 가지고 있는 Redshift를 사용했다가, 비용의 문제로 Serverless로 변경하였습니다.
실시간 작업은 없고, 새벽 배치 작업이 대부분이였거든요.
상세한 측정은 아니지만, 대략 하루 8시간 이내 사용이라면 서버리스가 비용적으로 저렴하다고 합니다.
사용한 만큼만 비용을 내거든요.
대략 얼마나 비용이 줄어들었는지는 저에게 안 알려주더라구요.
하지만, 고객은 만족스러운건지 다른 시스템에도 하나씩 적용하기 시작했습니다.
redshift는 postgresql 엔진으로 만들어진, 컬럼 기반의 DBMS입니다.
aws에서만 있어요.
성능도 좋고, 대용량 처리에 훌륭합니다.
수백만건 조인 정도는 딸깍- 하고 조회됩니다.
수천만, 수억건 병렬처리에 훌륭하죠.
다시 서버리스 이야기로 오자면..
콜드 상태(유휴)와 웜 상태(활성)가 있습니다.
사용 안하는 시간에는 서버 자원이 회수되어서 유휴상태로 들어갑니다.
그 때, 커넥션을 하면 콜드스타트를 하는데 가끔 잘 안됩니다.
aws에서는 즉시연결됩니다. 라고 하는데
실제 새벽 첫 배치가 실행되는 순간에는 커넥션 타임아웃이 발생합니다.. (60초)
제가 dbeaver에서 접근할 때도 10초 이상 걸리는 경우도 가~끔 있었습니다.
다른 서버리스 lambda, glue와는 다르게
redshift는 서버 스펙이 높아서 자원 형성에 콜드 스타트가 좀 오래 걸리는 것 같네요.
그래서 코드에 60초 커넥션 타임아웃, 6번 retry를 설정을 했는데
3번 실패하고 4번째 수행되더라구요.
최소 3분이 넘은 겁니다..
최초 도입할 때도 종종 타임아웃이 나서 고객센터에 케이스를 남겼는데
원인을 알 수 없다라고만 했었어요.
그래서 지금은 배치 수행 5분 전에 미리 서버리스를 깨워놓습니다.
select getdate()를 수행하는 쿼리를 성공할 때까지 수행하거든요.
그 뒤에 수행되는 배치에서는 커넥션 오류가 1년 넘게 발생한 적이 한번도 없었습니다.
redshift serverless를 사용할 생각이 있으신 분들은
이런 약간의 불편함이 있다 정도 아셨으면 좋겠네요.
