개발자 박가나
내일배움캠프 77일차 ('한잔해' 트러블슈팅) 본문
'한잔해' 프로젝트에서 겪은 트러블슈팅을 기록하고자 한다.
문제 발생
MVP 기능 개발을 마무리하고 중간 발표를 위해서 vercel에 배포를 하였는데, 로컬에서는 문제없이 동작하던 로그인 기능이 배포 링크에서는 너무 오래 걸리는 현상이 발생하였다.
시행착오 1
가장 먼저 region 문제가 아닐까 싶어서 확인해봤는데 vercel과 supabase 모두 서울로 잘 설정되어 있었다.
시행착오 2
비슷한 문제를 겪고 있는 stack overflow를 발견하였고, server action을 route handler로 변경해보기로 하였다.
Dalle3 request in Next.js 14 server actions leading to FUNCTION_INVOCATION_TIMEOUT on vercel
I am hosting my next 14 app on Vercel. My app generates images using the dalle3 api and stores them into a firebase firestore. It all works correctly on my dev server but gets a
stackoverflow.com
/* 변경 전 server action */
export const signin = async (data: SignInDataType): Promise<void> => {
const supabase = createClient();
const { email, password } = data;
const { error } = await supabase.auth.signInWithPassword({
email,
password,
});
if (error) throw new Error(error.message);
redirect('/');
};
/* 변경 후 route handler */
export async function POST(request: Request) {
const supabase = createClient();
const { email, password } = await request.json();
try {
const { error } = await supabase.auth.signInWithPassword({
email,
password,
});
if (error) {
return NextResponse.json({ errorMessage: error.message });
}
return NextResponse.json({ successMessage: '로그인 성공' });
} catch (error: any) {
return NextResponse.json({ errorMessage: 'server error' });
}
}
route handler를 사용하니 문제가 해결되었다. 콜드 스타트로 인해 route handler보다는 server action의 속도가 빠르다고 알고 있었는데 정확히 반대되는 결과가 나왔고, 30초 가까이 걸리던 로그인 기능이 server action을 route handler로 변경해주는 것만으로 해결된 이유가 궁금해졌다. 명확한 이유를 알아내지는 못했지만 다음과 같은 이유가 아닐까 추측해보았다.
- 엣지(Edge)와 Node.js(Serverless) 환경의 차이
- 엣지 런타임은 빠른 응답을 위해 경량화된 환경에서 동작을 하기 때문에 Node.js의 일부 모듈이나 네이티브 API를 사용할 수 없거나 동작 방식이 달라서 문제가 생길 수 있음
- Supabase, OpenAI 같은 일부 라이브러리는 엣지 런타임에 완벽히 호환되지 않는 부분들이 종종 보고됨
- WebSocket, 이벤트 스트리밍, 특정 노드 내장 모듈 의존성 등이 있는 경우 문제가 발생할 수 있음
- 타임아웃(Timeout) 정책 차이
- Vercel의 엣지 함수는 기본적으로 매우 짧은 타임아웃이 설정되어 있음
- Node.js 함수는 엣지 함수보다 조금 더 긴 타임아웃이나 다른 정책을 적용받을 수 있음
'트러블슈팅' 카테고리의 다른 글
내일배움캠프 80일차 ('한잔해' 트러블슈팅) (0) | 2025.01.23 |
---|---|
내일배움캠프 60일차 ('냠냠로그' 트러블슈팅) (0) | 2024.12.24 |
내일배움캠프 55일차 ('League of Legends' 트러블슈팅) (1) | 2024.12.17 |
내일배움캠프 54일차 ('League of Legends' 트러블슈팅) (0) | 2024.12.16 |
내일배움캠프 52일차 ('League of Legends' 트러블슈팅) (1) | 2024.12.12 |