새소식

부딛히면서 배우기

도커로 띄워지지 않는 나의 프로젝트 문제 해결(springboot + mariadb + springsecurity)

  • -

 

 

저의 프로젝트 배포하는 것을 공부하기 위해

Docker를 이용하여 나의 프로젝트를 띄워보았습니다.

 

 

저의 프로젝트는 

영한님 강의 시청 후 다른 교재를 참고하여 만들었고

맛집 게시판 프로젝트이며

게시글과 댓글을 crud 하는 것입니다.

 

 

프로젝트에 대해서는

스프링부트 3.3.0 버전

mariadb

스프링시큐리티 6 버전

을 사용하였습니다.

 

 

도커 공부용으로 사용한 빈 프로젝트(간단한 컨트롤러 설계한 것)는 쉽게 띄워졌는데

나의 프로젝트에 적용시켜보니 매핑이 안된다는 에러 페이지가 띄워져서

처음에는 도커에 대해서 내가 올바르게 사용하지 않았나 싶어

강의들을 찾아보았는데

도커 쪽에서는 문제가 없어 보였습니다.

 

 

처음엔 스프링시큐리티와 도커가 충돌하는 것일까에 대한 의문을 가졌는데

구글링을 해본 경과 스프링시큐리티 설정과는 관련이 없었습니다.

 

 

그 다음으로는 docker compose logs 를 통해

컨테이너들의 로그들을 살펴보았습니다.

 

 

처음엔 db쪽 연결도 문제가 있어서

연결 문제인지 도커의 볼륨 설정문제인지

포트도 다시 설정해보고

사용자계정, db비밀번호 설정, 도커 문법 재 확인 등 여러 과정을 거쳐

mariadb 컨테이너는 정상 작동 할 수 있도록 띄웠습니다.

 

 

docker exec -it 컨테이너번호 /bin/bash 를 통하여

도커 환경에서의 mariadb 를 접속해보니 계속 empty table 이라고 떠서

곰곰히 생각해보고

./gradlew clean build 를 적용하고 도커 컴포즈를 실행하니

db쪽 문제는 해결이 되었습니다.

저는 docker compose up 시 --build 옵션을 사용하면 계속 바뀐 내용이 적용이 되는 줄 알았는데

이미지만 다시 빌드하지 프로젝트까지는 다시 빌드하지 않아서

두 단계를 모두 거쳐야 된다는것을 깨달았습니다.

 

 

하지만 그럼에도 페이지가 매핑되지 않는 에러가 나타났습니다(...)

도커를 사용하지 않은 로컬 환경(인텔리제이 run)으로 실행시켰을 땐

모든 기능이 정상작동 되어

여기저기 구글링 해보기도 하고, ai에게도 질문해보는 등

며칠을 소모하였습니다,,,

 

 

그 결과 

제가 생성한 html 파일의

<th:block th:replace=“~{/layout/basic :: setContent(~{this::content})}"> 대해
<th:block th:replace="~{layout/basic :: setContent(~{this::content})}"> 변경

하니 도커 환경에서 저의 프로젝트가 정상적으로 띄워졌습니다
경로에 대해 제일 앞의 / 를 제거하니 도커에서는 잘 띄워진걸 보아하니
경로 인식을 하는 방식이 달라서 그러지 않았나 싶습니다.

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.