Authentication Gone Wrong (React Code Review)
- 이 코드 리뷰는 React 개발자가 서버와 클라이언트 경계를 제대로 이해하지 못해 인증 처리 방식에 문제가 있음을 보여줍니다. 🧐
- Next.js 애플리케이션에서 서버 컴포넌트와 클라이언트 컴포넌트의 구분을 명확히 해야 합니다. 💡
use client
지시어는 클라이언트 환경으로 전환하는 경계를 설정하며, 이 지시어 이후의 모든 코드는 클라이언트에서 실행됩니다. 🚧
- 재사용 가능한 유틸리티 함수를 만들 때, 반환 타입도 재사용 가능한 타입으로 정의하여 코드 중복을 줄일 수 있습니다. ♻️
- 데이터 정렬은 데이터베이스 수준에서 수행하는 것이 JavaScript에서 정렬하는 것보다 효율적입니다. 🗄️
- 상태 변수를 최상위 컴포넌트 레벨에 두는 것은 불필요하게 모든 하위 컴포넌트를 클라이언트 컴포넌트로 만들 수 있습니다. 😥
- 서버 컴포넌트 내에서 클라이언트 전용 이벤트 핸들러(예:
onChange
)를 사용하는 것은 오류를 발생시킬 수 있습니다. 💥
- 입력 필드는 폼 컴포넌트 내에서 사용해야 하며, 개별적으로 사용하는 것은 권장되지 않습니다. ✍️
- 보호된 라우트 컴포넌트에서 클라이언트 측에서만 사용 가능한 쿠키를 서버에서 읽으려고 시도하는 것은 잘못된 접근 방식입니다. 🍪
- 서버 컴포넌트에서 인증 상태를 확인하고, 클라이언트 컴포넌트에서는 UI 업데이트만 담당하도록 분리해야 합니다. ✅
getServerSideProps
또는 미들웨어를 사용하여 인증을 처리하고, 클라이언트 측에서는 인증 상태에 따라 UI를 렌더링하는 것이 좋습니다. 🛡️
- 클라이언트 컴포넌트에서 서버 액션을 호출하여 데이터를 변경하고, 서버에서 데이터를 검증하는 것이 안전합니다. ⚙️
- 서버 액션은 클라이언트와 서버 간의 명확한 경계를 제공하며, 데이터 무결성을 유지하는 데 도움이 됩니다. 🤝
- 불필요한
try...catch
블록을 제거하고, 오류 처리를 중앙 집중화하여 코드 가독성을 높일 수 있습니다. 🗑️
- 코드 리뷰를 통해 개발자는 서버와 클라이언트 경계를 올바르게 이해하고, 더 나은 React 개발자가 될 수 있습니다. 🚀