개발자
안녕하세요! 혼자서 next로 ssr과 ssg을 얕게나마 경험해보고 싶어서 공부중에 있는데 궁금한 것이 생겨서 질문하려고 찾아왔습니다! 제가 알기로 다이나믹 라우팅을 통하여 데이터의 유동적인 변경이 없는 페이지는 SSG로, 데이터의 변동이 특징인 정적 페이지는 SSR로 데이터를 처리한다고 했던 것 같습니다. 그렇다면 궁금한 부분은 각 컨텐츠의 좋아요 버튼이 있고, 해당 버튼을 클릭 시 좋아요가 증가하게 되는데, 이 좋아요의 개수는 상호작용을 할 시에 꾸준히 변하며 페이지에도 그 변함에 따라서 그 개수를 렌더링에 반영하게 됩니다. 여기서 고민은 SSR인 getServerSideProps랑 SSG인 getStaticProps를 사용하여 get 요청을 받아야되는지 입니다. 제 생각에는 상호작용 컴포넌트를 작동시킬 때마다 Number 타입의 개수를 새로 렌더링에 반영해야되니 getServerSideProps를 써야될 것 같은데, 조금 난해한 것 같아서 다른 개발자분들의 의견을 듣고 싶습니다. 항상 감사합니다 :)
답변 1
인기 답변
안녕하세요! 실시간으로 변하는 데이터의 경우 클라이언트 사이드에서 요청을 보내고 처리하는게 일반적인것 같아요. 특히 좋아요처럼 유저 상호작용이 있고 렌더링이 다시되어야한다면요. getStaticProps의 경우에는 getStaticProps에 정의된 로직이 프로덕션 빌드 시에 한번 생성되고 이후 서버로 요청이 들어오면 생성된 정적 페이지를 리턴해주는 걸로 알고 있습니다. getServerSideProps는 매 요청마다 해당 페이지를 미리 서버에서 렌더링해서 HTML로 내려주고 상호작용에 필요한 JS를 따로 내려주는 방식입니다. 즉, getStaticProps, getServerSideProps 모두 최초 페이지 요청할때 작동하는 함수들이고 페이지내에서 좋아요를 누른뒤 렌더링이 다시 되어야하는 부분이 전체 페이지가 아니라 일부 컴포넌트라면 위 두 함수를 굳이 쓸 이유가 없을 것 같긴하네요. 다시 렌더링이 되어야하는 부분만 바꿔주는건 컴포넌트 내부에서 클라이언트 사이드 요청으로 구현할 수 있을 것 같아요. 3가지 방식은 이런 차이가 있을것 같아요. getStaticProps = next 서버에서 빌드 시에 한번 돌고 똑같은 페이지를 매 요청마다 리턴해줌 getServerSideProps = next 서버로 페이지 요청이 들어오면 서버에서 렌더링을 미리해서 HTML로 내려주고 필요한 JS를 함께 보내줌 클라이언트 사이드 요청 = 사용자의 브라우저에 로드된 (리액트) JS 코드에서 요청을 보내고 처리함 결론은 사용자의 상호작용으로 UI가 즉각적으로 바뀌어야하는거라면 클라이언트 사이드에서 요청을 보내고 처리하는 걸 추천드립니다. 만약 SEO가 중요하거나 최초 페이지 로드할때 해당 데이터가 필요하다면 getServerSideProps를 같이 사용하셔도 좋을 것 같아요 :) - https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props - https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props - https://nextjs.org/docs/pages/building-your-application/data-fetching/client-side
이상원
작성자
Frontend Dev • 2023년 06월 19일
우와 상세하게 설명해주셔서 너무 감사합니다 :) 보내주신 자료를 바탕으로 더 공부해보겠습니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!