Windows 도커 환경에서 Laravel Breeze CSS 깨짐 해결법 (WSL2에서 Vite 개발 서버를 실행할 때)

포스트 썸네일 이미지

이전 포스트에서는 라라벨 13에 Laravel Breeze를 설치했다.

오늘의 포스트에서는 Windows docker 개발 환경에서 Laravel Breeze 설치 시에 화면의 CSS가 깨진 채로 표시되는 문제를 해결하는 방법을 정리해 보겠다.




이전 포스트




Laravel Breeze 설치 후 CSS가 깨진 화면

이전 포스트의 마지막에 말했던 것처럼 Windows 운영체제에서 docker로 개발 환경을 구축하면, Laravel Breeze 설치 후 http://localhost에 접속할 때 이렇게 화면의 스타일이 깨져서 이상하게 표시된다.


이 문제를 해결하기 위해서는 총 4개의 파일을 수정해야 한다.





docker-compose.yml에 추가해야 할 코드


docker-compose.yml

ports:
  - ${VITE_PORT}:${VITE_PORT}

위의 캡처 이미지처럼 docker-compose.yml 파일에서 app:에 해당하는 부분이 이 코드를 추가한다.




.env

VITE_PORT= #넣고 싶은 포트 번호를 넣는다. 보통은 5173

docker-compose.yml 파일에 환경 변수가 추가되었으니 최상위에 있는 .env 파일에도 이렇게 포트 설정값을 추가하자.


도커 컨테이너는 독립된 방과 같다.

이렇게 ${VITE_PORT} 포트를 열어줌으로써, Windows 브라우저가 컨테이너 안에 갇혀 있는 Vite 서버로 접근할 수 있도록 대문을 만든 것이다.





package.json에 추가해야 할 코드


src/package.json

"dev": "vite --host",

위의 캡처 이미지처럼 package.json 파일에는 "dev": "vite",였던 코드를 이렇게 수정한다.

(참고로 VSCode에서 [ctrl + P] 키를 누르고 파일명으로 검색하면 파일의 위치를 빨리 찾을 수 있다.)


기본적으로 Vite는 보안을 위해 '나 자신(컨테이너 내부)'의 요청만 받는다.

그런데 이렇게 --host 옵션을 붙이면 외부(Windows 호스트)에서 오는 요청도 받도록 허락하게 된다.




vite.config.js에 추가해야 할 코드

마지막으로 vite.config.js 파일에는 이 코드를 추가한다.




캡처한 이미지의 코드는 Laravel 공식 웹사이트에서도 "WSL2에서 Vite 개발 서버를 실행할 때, 브라우저가 개발 서버와 통신할 수 있도록 vite.config.js 파일에 다음 구성을 추가해야 한다"라고 안내되어 있는 코드다.




src/vite.config.js

server: {
    host: true,
    port: process.env.VITE_PORT ? parseInt(process.env.VITE_PORT) : 5173,
    hmr: {
        host: 'localhost',
    },
},

캡처한 이미지보다 코드가 조금 더 추가됐다.

추가된 코드는 처음에는 필요 없지만, 언젠가 갑자기 포트 번호가 충돌해서 바꿔야 할 경우에는 필요해질 수 있는 코드들이다.


HMR(Hot Module Replacement)은 코드 수정 시 실시간으로 반영해 주는 기능이다.

브라우저에게 "실시간 업데이트 신호를 보낼 주소는 localhost야"라고 명확히 가리켜준 것이다.





docker-compose up -d --build

그리고 마지막으로, 우분투 터미널로 docker-compose.yml 파일이 있는 디렉토리에서 이 명령어를 실행한다.




make app #컨테이너 안으로 들어간다.
npm run dev

그러고 나서 VSCode의 터미널에서 이 명령어들을 다시 입력하고 http://localhost에 접속하면 Laravel Breeze가 설치된 첫 페이지가 드디어 정상적으로 표시될 것이다.




라라벨 웹 애플리케이션의 첫 화면이 정상적으로 표시되는 모습

첫 화면의 상단에 Laravel Breeze를 설치하기 전에는 없었던 Log in과 Register 버튼이 보인다.




결과적으로, 이전에는 브라우저가 CSS 파일을 찾으러 컨테이너로 가려다 길을 잃어 CSS가 깨졌던 것이다.

그런데 지금의 설정으로 이정표와 대문을 다 만들어서 정상적으로 파일을 가져오게 된 것이다.




다음 포스트

이 글이 도움이 됐거나 유익했다면 스크롤을 조금만 더 내려서 댓글을 남겨주세요. (비로그인도 가능합니다!)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊

지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.
이전 포스트 다음 포스트

댓글 쓰기

0 Comments

문의하기 양식