본문 바로가기
카테고리 없음

[Spring Boot] 정적리소스 수정후 서버 재시작 없이 적용하는 방법 #1

by 개발하는쌍둥이아빠 2022. 9. 25.

내가 어쩌다 이놈에게 꽂혀서

Spring Boot? Spring Framework를 사용하는것도 10년전에 대형 SI 프로젝트에서나 사용했었지,

근래에는 사용할 일도, 생각도 하지 않았습니다.

요근래 10여개의 프로젝트를 진행할땐 Vue.js가 제 취향에 맞아서인지 이것만 사용했었습니다.

그래도 API서버를 작업할때는 항상 JAVA로 진행을 해왔습니다.

몇년전에 만들어둔 API 전용 프로젝트 폴더만 복사해서 재적용하면 바로 사용이 가능했으니깐요.

그러다가 개발 환경에 큰 변화가 왔습니다.

개발툴을 이클립스에서 인텔리제이로 바꾸게 되었습니다.

놀랍더군요. 20년넘게 사용하고 손에 익었다 생각했던 이클립스보다 사용하기 더 편안하고, 코드 보기가 더 좋다는 느낌이 들었습니다.

고인물 개발자가 더 고인물 개발자에게 이런 변화를 이야기 하다가,

주변에서 다시 이야기 해주더군요. 스프링부트를 써보라고...

그리고  지금, 그 스프링부트를 사용한지 1년여가 지나가고 있습니다.

이제는 진행하는 모든 프로젝트가 스프링부트가 되었네요.

게다가 스프링부트로 프로젝트를 진행하다보니 어느순간 JAVA보다는 코틀린을 더 많이 사용 중입니다.

 

얼마전에 한창 개발을 마무리 하고 런칭 준비중이었던 시기에 딱 1주일동안 겪었던 일들이

이렇게 다시 개발블로그를 쓰게 만들었습니다.

 

아마, 은퇴할때까지 개발관련된 블로그를 쓰겠죠.

이제는 정리하고, 또 정리해야 반복되는 실수를 하지 않는 나이가 되어서 이겠죠.

정적리소스파일 수정 후

웹브라우저에서 변경된 내용을 확인 하려면 항상 서버를 재시작해야 했습니다.

(이건 Spring Framework사용을 전제한 이야기 입니다)

스프링부트에서는 'spring-boot-devtools'를 추가하여  이 문제를 해결 할 수 있습니다.

아래는 제가 사용중인 IDE에 설정한 내용입니다.

  • IntelliJ IDEA 2022.2.2 (Ultimate Edition)
  • Gradle 
implementation("org.springframework.boot:spring-boot-devtools:2.7.3")

잘 사용하던 툴들의 버전업데이트를 진행후에 개발진행시 미묘하게 불편한 뭔가가 발생했습니다.

아무리 새로고침(Command + R)을 눌러도 javascript파일을 수정한 내용이 화면에 반영이 되지 않았습니다.

이해할수 없던게 강력 새로고침(Command + shift + R)을 하면 변경 내용이 반영되었습니다.

 

크롬브라우저의 새로고침 종류

단순하게 화면이동을 하고 반영된 내용을 보는거야 귀찮아도 '강력 새로고침'을 하면 되는데,

문제는 POST방식으로 이동하는 화면들은 이 방식이 통하지 않아서 매번 화면에 반영된 내용을 확인하기 위해

브라우저 캐시를 전체 삭제하고, 소스를 전체 리빌딩하여 반영후 확인하는 걸 반복하다보니,

마감시간전의 스트레스가 열배는 넘었던거 같습니다.

 

그래서 웹상의 모든 방법을 다 찾아봤습니다.

인텔리제이의 매뉴얼부터 읽어보고, 관련 포럼에 질문도 해보고, 다른 개발자들은 유사한 상황에서 어떤 방식을

사용했는지 경험담도 읽어 봤지만, 제가 겪고 있는 상황은 나아지지가 않았습니다.

 

* 아래는 제가 적용했던 내용입니다.

  • [Command + ,] : Build project automatically 체크!

환경설정

  • Modify Options 에서 On 'Update' action, On frame deactivation 항목의 값을 아래 그림처럼 변경.

Run/Debug Configurations

사실 위 설정은 기존에도 되어있던거고, 위 설정만으로도 충분히 잘 사용하고 있었습니다. 다만, 개발툴의 버전업데이트 이후 위 적용사항이

전혀 화면에 반영되지 않아서 그게 문제였습니다.

 

그래서 좀더 고민을 하다가 플러인의 설정에도 변화가 있는게 아닌지 의심이 들었습니다.

크롬브라우저에 설치된 LiveReload 플러그인의 환경변수값을 살펴보면서 그제야 문제점을 확인 할 수 있었습니다.

 

저기 브라우저에 보이는 아이콘을 클릭하면 LiveReload 플러그인을 활성화/비활성화 할 수 있었습니다.!!!!! 두둥~

허무하게도 문제는 이게 맞았습니다.

항상 문제가 해결되면 허탈해 합니다. 간단한것이 었지만, 막상 문제가 발생한 그 순간에는 눈에 보이지 않으니깐요.

 

저처럼 의존성 추가, 인텔리제이의 환경설정이 다 적용이 되었고,

이전에는 전혀 문제가 없었지만 최근에 동일한 문제가 발생한 분들을 위해 글을 남겨 봅니다. 

 

 

 

댓글