개발자

NextJS에서 Component 호출 할 때 getServerSideProps 호출 방법이 있나요?

2023년 05월 22일조회 139

JSTL 이나 Thymeleaf 하다가 NextJS 하려니 많이 해메고 있네요. @,@;;; 우선 시나리오는 ProductList.html 페이지에서 서버로부터 상품 목록 주욱 받아 화면 출력 하는 것 까지는 했어요. 이때 서버 목록은 getServerSideProps 함수에서 받아 처리 했구요. 이제 상품 이름 클릭 했을 때 상세 정보를 Layer 화면으로 띄우려는데 그게 잘 안되네요. Thymeleaf에선 해당 페이지만 빌드 돼 html 형태로 받아 올 수 있었는데 nextjs는 어떻게 해야 하는지 모르겠어요. // 상품 상세 내용 export default function ProductModalLayer({ product }:IProduct) { return (<div> {product.name}</div>); } export async function getServerSideProps(context: any) { // 서버 통신으로 product 상세 정보 전달 const data = ... 생략... return { props: { product: data, }, }; } ------ ProductList 부분에서 상품 이름을 클릭 했을 때 const ModalView = dynamic(() => import("../ProductModal.layer")); // 선언 ... // 화면 그리기 <ModalView seq={prod.productSeq}></ModalView> 이런 형식으로 호출 하니까 getServerSideProps를 호출 하지 않네요. 다른 방법으로 fetch를 이용해 호출 해 봤는데 const res = await fetch("/ProductModal.layer?seq=" + seq); const content = await res.text(); 이렇게 하면 getServerSideProps를 호출 하지만 html Tag가 엄청 붙어 나오고 return 의 결과가 아닙니다. getServerSideProps를 고집 하는 이유는 서버 호출 인터페이스는 꼭 서버에서 이뤄지게 하고 싶어서에요. 브라우져 디버거로 노출 안되게 하고 싶어서. 힌트나 방법좀 부탁 드려요~ 다시 JSTL 이나 Thymeleaf로 돌아 갈 수 없어~~~~

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

김재성님의 프로필 사진

https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props#when-does-getserversideprops-run getServerSideProps 가 호출되는 경우는 크게 두 가지입니다. 1. 브라우저 주소창에 url을 입력하여 직접 next.js 서버에 페이지를 요청했을 때 2. (next/link) Link 컴포넌트를 클릭하거나 (next/router) router.push, router.replace 를 호출함으로써 페이지로 이동할 때 - 단, shallow 옵션이 false 여야 합니다. 따라서 말씀하신 경우에 상품 이름을 클릭했을 때 router.push 혹은 replace 를 같은 주소 경로로 호출하되, 상세 정보를 불러와서 모달을 띄워야 하는지 말아야 하는지 여부를 추가적인 쿼리 파라미터로 넘겨주면 될 거 같긴 합니다(단, 페이지 전체가 다시 로드 되는지 아닌지 여부는 모르겠습니다. 이 패턴을 사용해보지는 않아서). "getServerSideProps can only be exported from a page. You can’t export it from non-page files." 또한 문서에 따르면 페이지가 아닌 컴포넌트에 대해 getServerSideProps 를 정의할 수 있는 방법은 없습니다.

시간님의 프로필 사진

시간

작성자

소프트웨어 엔지니어2023년 05월 23일

음 역시 그렇네요. 답변 감사합니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!