안녕하세요. 스벨트킷 서버 load 관련 질문이 있습니다. > JS프레임워크

JS프레임워크

안녕하세요. 스벨트킷 서버 load 관련 질문이 있습니다. 정보

SVELTE 안녕하세요. 스벨트킷 서버 load 관련 질문이 있습니다.

본문

현업 개발자는 아닙니다.. 혼자 공부하며 즐겁게 개발하고 있습니다.

 

nextjs로 개인 캘린더를 하나 만들어서 쓰던게 있습니다. page 라우터로 작성 되어있고, 자체 api만 이용해서 query 라이브러리로 데이터 주고 받게끔만 되어 있습니다.

 

스벨트킷으로 이걸 다시 만들어 보면서 공부를 해보고 있는데

서버 load 와 form action 만을 이용해서 한번 만들어 보고 싶었습니다.

이게 최초 페이지 로드 시에 데이터를 page.server.ts 에서 가져오는건 좋은데

예를들어, 전체 데이터가 있는 페이지에서 특정 게시글을 눌러서 모달창을 띄우고, 상세 정보를 가지고 오면

기존에 전체 데이터에서 필요한 데이터만 빼서 그대로 모달에 보여주면 쉽기는 한데, 

이렇게 하니까 해당 모달에서 데이터 변경시에 바뀐 부분이 바로 반영되어 페이지에 보여지지 않더라구요.

 

그래서 모달이 마운트 될 때마다 서버에서 데이터를 가져오고 싶은데 모달 컴포넌트 에서는 page.server.ts 같은 파일이 없으니

모달이 로드되는 라우트의 page.server.ts 파일에서 쿼리스트링에 조건 분기를 달아서 경우에 따라 load 함수 리턴값의 결과를 다르게 가져가도록 작성하니 원하는대로 동작은 하는데 load 함수가 너무 복잡하고 이게 맞나.. 하는 생각이 들었습니다.

 

이런 케이스에선 api를 따로 작성해서 모달 마운트 시에 api 콜을 해서 데이터를 가져오는게 맞는 걸까요?

대신 이렇게 하면 query 라이브러리를 사용해야 쉽게 데이터 변경점을 바로 표시 할탠데

서버 load 기능만을 사용해서 모두 작성 해보고 싶어서요..

추천
0

댓글 4개

react next.js 하고 query가 react-query 를 말씀하시는건지? 

 

이런 케이스에선 api를 따로 작성해서 모달 마운트 시에 api 콜을 해서 데이터를 가져오는게 맞는 것 같습니다.
+page.server.ts 나 Next.js api 엔트포인트 하나 더 만드셔도 되고

그리고 svelte-query 라이브러리도 있긴한데, 

복잡하지 않으면 로컬스토리지를 스토어에 연결해서 사용하면,

조용하게 변경합니다.
 

@들불 답변 감사합니다!

최대한 svelte-query 라이브러리를 사용하지 않고 개발 해보고 싶었습니다. 

자동 re-fetch 기능 하나 때문에 쓰는건데, 최대한 지양하고 해결 해보고 싶어서요.

 

내용 중에 nextjs로 만든 프로젝트를 스벨트킷으로 다시 만들고 있는거라

두 프로젝트가 연동되어 있는건 아닙니다 ㅎㅎ 다시 만드는건데

 

처음 해결하고 싶었던 방식은 https://deview.kr/2023/partners 사이트 같이 게시글을 눌렀을 때 뜨는 모달에 주소를 가진 페이지를 만드는 방법이 없을까 하고 알아 봤습니다.. 그럼 모달별로 +page.server.ts 파일을 적용해서 api 콜 없이 가능하지 않을까 하고요..! 이런 방법이 없는지 궁금합니다 ㅠㅠ

 

그리고 마지막에 로컬스토리지를 스토어에 연결해서 사용 한다는 부분은 어떤 내용인지 정확히 잘 모르겠습니다.. api콜 해서 받아온 데이터를 스토리지에 저장 해두고, 스토어에서 변경점이 있으면 다시 콜을 하게 하는 로직을 넣는 얘기 일까요?

 

svelte-local-storage-store 이게 편하게 store 하고 local storage 연동해서 쓰는 라이브러리입니다
store 를 이용하면 svelte 에서 백그라운드 프로그램 처럼 연결된 곳의 값을 변경시켜주는데, 문제는 요게 시간이 지나면 사라집니다.
그래서 다음에 접속하면 다시 api 요청을 해야하는 등의 문제가 발생합니다.
store와 연결된 storage 에 우선 api 요청 결과를 배열 형태로 너어 둔뒤
모달 불러올때 여기 저장된 배열중 특정 키로 값들을 불러오면 되지 않을까요?
그리고
모달 열때  store의 배열의 값을  우선 불러오고 또다시 api 호출해서 순간 갱신되도록하고, store의 키를 이용해서 해당키의 스토어의 값도 갱신해주는 방법으로
실제 서비스 하려면 문제 삼을 수도 있는게, 느리다거나, 깜박이는 것처럼 보인다거나일 텐데, 값이 없다가 api 콜로 불러와서 뿌려주면 깜박이는 것처럼보이니까.
우선 가장 가까운 스토어의 정보를 불러와서 보여주고 동시에 api 로 해당 글 부분만 불러와서 갱신해서 보여주면 크게 깜박이는 느낌이 최소화 되어서 보여주지 않을까합니다.
svelte 이용하는 이유가 네이티브처럼 팍팍 뜨는 느낌이 경쾌하고 빨라서 이용하게 되는데
열었을때 기나리거나 굼뜨면 좀 그렇잖아요.
그리고 pc 로 하는 경우 마우스 오버했을 때 a 태그의 경우 해당 페이지를 pre load 하는 기능이 있습니다.
꼼수라면 이게 될지 모르겠는데, 내용만 보여주는 페이지를 하나 만드시고 해당 페이지를 로드하면 store목록의 해당 키의 값을 갱싱하도록 넣어두세요.
그렇게 해 놓고 마우스 오버 되면 store가 로드되고 클릭하면 모달이 뜨게하고 페이지로 넘어가는 거는 막아두는 방법도 할 수 있고, 아니면 a 링크 말고 그냥 마우스 오버하면 api 요청해서 store 내용 갱신하도록 해도 되고
이렇게 하면 네이티브 처럼 바로 볼수 있지 않을까요.
물론 최초에 목록을 불러올때는 한번은 로드하는 시간이 걸리겠죠. 그건 첫페이지면 뭔가 엑션을 주어서 해결하시고 앱의 스플레시스크린 이나 스켈레톤 로드바 같은거로..

만약 다른 페이지에서 링크로 타고 온다면 이미 a 링크가 로드를 먼저 실행해주기 때문에 해당 페이지 열때는 이미 스토어에 저자된 이후의 값을 바로 보여주는 거라서 로드 시간도 느끼지 못할 꺼에요.

 

@들불 따로 한번 라이브러리 설치해서 연습 해봐야겠습니다 ㅎㅎ

최대한 서버 로드와 액션을 사용해서 페이지를 만들어보고 싶었는데, 위 답변 해주신 내용들을 제가 다 이해하고 사용을 하면 구현 가능할지 모르겠으나.. 결국 svelte-query 적용해서 모두 api 콜로 변경하니 모두 해결 되버렸습니다. 하하

server action 과 load 함수만을 이용한 완전 서버사이드 랜더링 사이트는 모달같은 특수한 뷰가 없다는 가정에서나 구현 가능한건지 제가 많은걸 몰라서 그런건지.. 아쉽습니다.

 

여기서 들불님 글 읽어보면서 지금 이 프로젝트도 api를 다른 cms와 연동시켜서 앱으로도 구현 해보려고 합니다. 찾기 어려운 많은 방법들을 잘 정리 해주셔서 충분히 가능할 것 같아서요! 

그누보드는 사실 잘 모르지만, 덕분에 얻은 정보들로 꼭 성공 해보겠습니다.

좋은 답변 주셔서 너무나 감사합니다. 좋은밤 되세요 :)

전체 261 |RSS
JS프레임워크 내용 검색

회원로그인

진행중 포인트경매

  1. 참여4 회 시작24.04.25 20:23 종료24.05.02 20:23
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT