개발자
Next.js에서 클라이언트 컴포넌트에 사용하는 환경 변수에 NEXT_PUBLIC을 붙여줘야하는 것으로 압니다. 제가 프로젝트에서 api 키를 포함해 클라이언트 컴포넌트에서 fetch 요청을 보내야하는 상황이라(리액트 쿼리 사용 중), 해당 api키에 위와 같은 변수를 붙여주었습니다. 그런데 해당 방법이 안전한걸까요? 전에 chatGPT에서는 NEXT_PUBLIC을 붙이는 환경 변수에는 api 키와 같은 보안에 중요한 변수는 넣지 않는게 좋다고 하더라고요.... 이 말이 사실인건가요? 그렇다면 그 이유가 궁금합니다.. + Next.js에서 리액트 쿼리를 사용하고 있는데 리액트 쿼리를 사용하는 곳은 클라이언트 컴포넌트여야 정상적으로 작동하더라고요.. 만약 api 키가 포함된 요청을 클라이언트 컴포넌트에서 사용하는 것이 보안에 좋지 않다면, 어떤 방법을 써서 api 요청을 보내야할까요? Next.js의 api 라우트를 만들어 요청하는게 맞는건가요? 개발에 대해 잘 몰라 질문이 깔끔하지 않습니다만.. 혹시 아는 분 계시면 도와주세요 😭❕
답변 2
클라이언트 컴포넌트는 사용자(브라우저)에 직접 노출됩니다. 사람의 실수로 중요한 정보가 노출될 가능성이 있으므로 권장하지 않는겁니다. Nextjs 버전 14(app router)에서 권장하는 방식은 다음과 같습니다. 데이터 패칭(GET)은 서버 컴포넌트에서 async, await를 통해 진행하세요. 그 외 요청(POST, PUT, DELETE 등)은 API 라우트를 사용하시면 좋습니다.
olcloolzj
작성자
대학생 • 2024년 05월 28일
답변 감사합니다 ! 제가 리액트 쿼리를 사용 중인데 리액트 쿼리는 클라이언트 컴포넌트에서만 사용 가능하더라구요 ,,(?) 그럼 리액트 쿼리로(클라이언트 컴포넌트에서) api 요청을 바로 보내는게 아니라 api 라우트를 이용해 api 요청을 해주는 로직을 만들어도 되는걸까요? 클라이언트 컴포넌트 ↔️ api 라우트를 이용해 만든 로직(여기에 실제 api 키는 NEXT_PUBLIC이 붙지 않는 서버 환경 변수로 저장) ↔️ 실제 api 이런 구조 요청하고 응답을 전달받도록 수정했는데 이렇게 변경해도 되나요? 😶,,
포크코딩
별빛상단 단주 • 2024년 05월 28일
next 공식 문서에서 제공하는 프로덕션 룰들을 지키면 대부분 문제 없습니다!
olcloolzj
작성자
대학생 • 2024년 05월 28일
친절하게 답변해주셔서 감사해요 ㅎㅎ !! 하루 마무리 잘하세요 정말 감사합니다 🙂👍✨
NEXT_PUBLIC 으로 절대 외부 api key나 api secret을 정의하시면 안됩니다. api router로 한 번 proxy를 만들어주세요. Client => Api Router => 외부 API Api Router에서는 process.env로 환경변수 접근이 가능합니다.
E2E
• 2024년 05월 29일
안녕하세요 api router를 쓰라고 말씀해주셨는데 use server로 디비에 직접 붙는건 별로인걸까요?
olcloolzj
작성자
대학생 • 2024년 05월 29일
답변 감사합니다 ㅎㅎ! 조언해주신 방식대로 수정하였습니다 🙂🙂 !!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!