개발자
많이들 사용하시나요? 사용한다면 어느 조합으로 사용 하고 계신지 궁금합니다. 주로 궁금한거는 기존의 v13 or v14, 기존의 css-in-js 사용이 불가능한 상황에서 스타일링에는 무엇을 사용하는지, 별도의 데이터 패칭 라이브러리(swr, tanstack-query)와 전역상태도구(zustand, jotai)를 사용하는지. 음 기존 page router 쓰시던 분들은 프로덕션 레벨에서도 마이그레이션 해서 사용중인지도 궁금하네요 추가로 특정 조합에 장점이 있는지도 궁금합니다 감사합니다!
답변 1
인기 답변
저는 주로 tailwind-css를 이용하여 개발하고 있습니다. 저는 tailwind를 선호하는 편이지만 호불호가 강한 프레임워크이다보니 선호하지 않으시는 분들의 경우에는 제 주변에선 주로 scss 를 사용하시는 것 같아요 그 외에도 css-in-js의 스타일링 방식을 매우 선호하시는 분들의 경우에는 주로 css-in-ts라고도 많이 부르는 것 같은데 빌드타임 css-in-js 를 표방하는 프레임워크들을 사용하실 수 있습니다. 이것은 생각해보면 간단한 이유인데 css-in-js 방식을 채택하는 이모션, 스타일드컴포넌트와 같은 라이브러리들을 서버에서 사용할 수 없는 이유는 런타임에 css를 동적으로 평가, 생성하는 과정을 수행하기 때문입니다. 따라서 코드를 실행시켜봐야 css를 생성할 수 있다는 것인데 웹환경 자체에 대한 의존성이 있는 코드를 서버에서 실행시켜보는 것이 가능하지 않기 때문에 css를 평가할 수 없는 것이죠 따라서 코드를 실제로 실행시켜보지 않더라도 css를 정적으로 평가하고 생성할 수만 있다면 서버에서도 사용할 수 있습니다. 그러한 개념의 일환으로 빌드타임 css 프레임워크들을 생각할 수 있는 것입니다. 대표적으로 pandacss , 바닐라익스트랙트 등이 있는데 저같은 경우엔 pandacss의 개발자 경험이 괜찮았던 것 같습니다. 상태관리에 대한 질문도 남겨주셨는데 서버사이드 환경에 익숙치 않으신 분들의 경우 쉽게 의문이 생길 수 있는 영역입니다. 결론부터 말씀드리면 대부분의 경우 페칭라이브러리, 전역상태관리라이브러리는 사용해야합니다. 이것은 next.js와 같은 서버사이드에서도 동작하는 프레임워크를 사용하게되면 실제로 상태를 다루는 영역이 "서버"와 "클라이언트" 둘로 나뉘게 되기 때문인데요 서버쪽의 상태를 관리하는 것은 여러가지 솔루션이 있지만 서버쪽의 상태만 관리한다고해서 클라이언트측의 상태가 필요없어지는게 아니기 때문입니다. 서버상태까지 리액트쿼리로 관리할수도있고, 안할수도있습니다만 저같은 경우엔 클라이언트 상태는 주로 리액트쿼리를 이용하여 관리합니다. 조합은.. 상황에 따라 달라지거나 취향인 부분이 많을 것 같네요
Ed
작성자
프론트엔드 개발자 • 1월 13일
답변 감사합니다! 질문이 있는데 리액트쿼리는 서버상태를 관리하는데 쓰이지 않나요? 비동기로 서버로부터 받아온 상태 말이죠 아니면 클라로 가져온 시점부터 클라상태라고 말씀 하시고 계신걸까요? 아니면 제가 리액트 쿼리에 대해 잘못 알고 있는게 있을까용
유길종
프론트엔드 개발자 • 1월 13일
음.. 제가 너무 간략하게 설명을 하다보니 조금 혼란스럽게 표현을 한 것 같습니다. 위 답변 본문에서 이야기한 "서버 상태"의 정의는 "서버로부터 받아온 데이터의 상태"가 아니라 "서버측의 상태"를 의도한 것이었습니다. 우리는 서버컴포넌트와 next.js를 이용하여 fetch 등을 통해 데이터를 가져오는 행위를 "서버"에서 수행할 수 있어졌습니다. 그런데 이렇게 데이터를 가져오는 행위를 "서버"에서 수행하게되면 여러가지 성능적인 문제가 생기게 됩니다. 무엇이냐면 동일한 엔드포인트로의 요청을 여러 서버컴포넌트에서 수행할 경우 불필요하게 너무 많은 동일한 api 요청이 발생할 여지가 있다는 것입니다. 해당 엔드포인트를 사용하는 컴포넌트가 N개 늘 때마다 api를 처리하는 서버에 요청이 동일하게 N개로 늘어난다면 API 서버의 부하가 선형적으로 증가할 것이며 그와 별개로도 여러 요청에 대한 응답을 기다려야하기 때문에 네트워크 성능에 따라서도 더 큰 영향을 받게됩니다. 이러한 문제를 해결하기 위해 next.js는 next.js가 구동되는 서버측에 in-memory memoization과 데이터에 대한 cache를 담은 json 을 두는 것을 통하여 request를 캐싱합니다. 이것이 next.js가 제공하는 "확장된 fetch" 함수의 정체인데요 이것은 캐싱이기도하지만 어떠한 면에서는 "이전 요청에 대한 결과" / "request 요청"이라는 상태를 관리하는 스토어를 두는 것이라고도 볼 수 있다고 생각합니다. 그래서 이러한 처리를 수행하는 것을 "서버 상태"를 관리한다고 표현한것이었습니다.
유길종
프론트엔드 개발자 • 1월 13일
물론 next.js 사용자는 이러한 사실을 대부분의 경우 알필요조차없으며 인지하지 않더라도 next.js를 사용하는데에 아무런 문제가 없습니다. 다만 그와 별개로 대부분의 애플리케이션이라면 무한 스크롤과 같은 사용사례 혹은 mutation 요청 중 , 성공, 실패 시의 사용자 인터랙션이 필요하며 이러한 클라이언트측의 사용사례를 구현하는데에 있어 next.js는 도움을 주는 부분이 없습니다. 따라서 그렇기 때문에 next.js를 쓰더라도 리액트쿼리와 같은 페칭라이브러리는 사용하는 것이 좋다는 의도의 답변이었어용
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!