23년 5월 4일 흑우집합소 개발노트 (Daisy ui Stat 이상현상)

thumbnail

배포를 하고 나서…

새벽 2시쯔음 흑우집합소 1.0.2 버전 배포를 했다.
백엔드쪽과 프론트엔드쪽 배포를 끝내고 나서 잘 되나 확인을 해봤다.

근데…
이상한 문제가 발생했다.

프론트엔드 쪽은 TailWindCSS를 사용하고, 거기에 Daisy ui를 사용하고 있다.
근데 이 Daisy UI쪽에서 발생한 문제인 것 같았다.

문제는 아래와 같다.


Github의 Issue 부분을 확인해봤으나, 나와 같은 문제를 일으키는 사람은 없었다.
이는 라이브러리 문제가 아닌 내가 뭔가 잘못 코드를 작성한 문제라는 방향으로 귀결된다.

분명 개발버전에서는 잘 되었던거 같은데…
근데 생객해보니…

개발은 크롬에서 진행했고, 운영 테스트는 사파리에서 진행했다.
혹시나 하는 마음에 크롬에서 직접 봐보니 역시 크롬은 문제가 없었다.

도데체 무슨 문제일까?

뭐 뻔한 이야기겠지만 브라우저 엔진 문제일 것으로 추측했다.
브라우저마다 자바스크립트를 해석하는 방법이 약간 차이가 있기 때문에 저런 버그가 생기는게 아닐까 싶다.

먼저 저쪽 코드는 아래과 같이 되어 있다.

<div className="stats stats-vertical mt-10 mb-10 w-full shadow c_mobile:w-11/12 c_l_pc:stats-horizontal">
  ... //대략 stat 코드 들어감
</div>

이 부분에서 의심이 되는 것은 넓이와 관련된 부분을 의심했다.
그래서 저 코드에서 w-full이것을 빼줬더니 넓이가 줄어들고 저 현상은 없어졌다.

다만 UX 관점에서 위와 통일성이 깨져서 이 부분은 어떻게 해야 할지 고민이 되었다.
일단 사파리 브라우저 외에는 잘 되는거 같아서 사파리에서만 저렇게 구현하고,
그 외에 브라우저는 기존대로 w-full을 적용하기로 했다.

How to?

먼저 window 객체 안에 userAgent를 통해서 사파리 브라우저인지 아닌지를 확인할 필요가 있었다.
그리고 상태값을 하나 주고 사파리 브라우저인지 아닌지를 체크하는 로직을 추가했다.

const [isSafari, setIsSafari] = useState(false)

useEffect(() => {
  const userAgent = window.navigator.userAgent
  const isSafari =
    userAgent.indexOf('Safari') !== -1 && userAgent.indexOf('Chrome') === -1
  setIsSafari(isSafari)
}, [])

이렇게 해서 isSafari 값을 통해 브라우저 확인할 수 있도록 했다.
그리고 기존의 div 태그의 className을 아래와 같이 수정했다.

<div
  className={
    'stats stats-vertical mt-10 mb-10 shadow c_mobile:w-11/12 c_l_pc:stats-horizontal ' +
    (isSafari ? 'flex' : 'w-full')
  }
></div>

사파리 브라우저의 경우 flex를 주고 그 외에는 w-full을 줬다.
flex를 사용할 경우 각 자식 요소를 수평으로 배치할 수 있음을 이용했다.

이렇게 구현했더니 사파리 브라우저에서도 잘 동작했다.

정리

개발을 하다 보니 프론트엔드 쪽은 신경 쓸 부분이 참 많은 것 같다.
Chat GPT에게 이 문제를 물어봤으나 역시 원론적인 답변만 줬다.(영문 & 국문 질문)

당연한 것이 이런 경험적인 부분이나, 동작원리같은 부분은 아직 GPT가 답변하기엔 어려운 부분이 아닐까 싶다.
물론 추후 이런 부분도 학습을 하면 나아지겠지만 아직은 무리인 것 같다.


Written by@MHLab
로또는 흑우집합소 🎲
와인관리, 시음노트, 셀러관리는 마와셀 🥂

🫥 My Service|  📜 Contact|  💻 GitHub