해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.
😲 Q1. spring에서도 모든 request에 특정 리소스를 담아서 보내줄 수 있는 방법이 있을까요?
Spring backend, React frontend 프로젝트에서 프론트와 백엔드 어플리게이션을 서버에서 각각 구동시키는것이 아닌, react 앱을 빌드 한 뒤 spring 어플리케이션의 정적 리소스에 담아서 보내고자 합니다. 기존에 node 프로젝트에서 동일한 방법(프론트 앱 빌드 후 백엔드 서버의 resource로 전달)을 사용했던 경우에는 특정 정적 리소스를 모든 requerst에 담아서 보내도록 설정을 할 수 있어서 관련 설정을 해주었는데, spring에서도 모든 request에 특정 리소스를 담아서 보내줄 수 있는 방법이 있을까요?
위와 같은 방법으로 스프링 어플리케이션을 구동해보니, react앱이 빌드된 파일이 index.html이라 루트경로에 대해서는 resource폴더의 static폴더 안의 index.html를 인식하기 때문에 뷰파일이 있다고 판단해 화면을 띄워주고, GUI를 통한 화면전환은 이루어지고있는데, 다른 url을 통해 보내는 요청에 대해서는 no static resources 응답을 보내고 있습니다. 관련해서 testController를 생성해 특정 경로에 대해 index.html파일을 view로 전달하도록 설정해보니, 해당 요청에 대해서는 no resources가 아닌 view를 정상적으로 응답하고있는걸 확인했습니다. 따라서 리액트 라우팅으로 이루어진 경로들에 대해서는 index.html파일을 함께 전달해야 할 것 같아 질문드립니다.
🧑🎓 A 1: servlet단에서 해당 요청에 대한 차단이 일어나고있을것입니다. 따라서 servlet에서 특정 경로 이하에 대한 요청은 모두 열어주는식으로 해서 해결이 가능할 것 같긴 한데, 해당 방법은 요청을 무한으로 보낼 수 있기 때문에 보안적으로나 성능적으로 위험한 방법이라고 판단됩니다. 따라서 정적 메서드가 아닌 각각의 어플리케이션을 구동하는것을 추천드립니다.
😲 Q2 : 배포에 사용할 클라우드 서버의 스케일이 제한된 상황이라, 프론트와 백엔드 어플리게이션을 서버에서 각각 구동시키는것이 아닌, react 앱을 빌드 한 뒤 spring 어플리케이션의 정적 리소스에 담아서 보내고자했습니다.
🧑🎓 A2 : 그렇다면 이해가 갑니다. 하지만 위와 같은 상황은 흔한 경우가 아닙니다. 보통 운영서버의 스케일을 작게 설정하지는 않기 때문입니다.
😲 Q3 : 클라이언트 측에서 "mvc에 대해서는 최소한의 리소스만 사용해달라" 요청을 해온 건이라, 우선 시도중이었습니다. 해당 방법 관련해서 Dispatcher단에서 차단이 일어난다는점은 이해했습니다.
혹시 Custom Filter를 사용해서 특정 요청들에 대해서는 response에 index.html을 view파일로 함께 전달하라고 지정하는 방식은 가능하지 않을까 하는 생각이 드는데, 멘토님께서는 어떻게 생각하시나요?
🧑🎓 A3: 해당 방법으로 구현한다고 하면 아까 말했던 보안이나 성능이슈는 잡을 수 있을 것 같습니다. 하지만, 해당 방법은 front-end 코드와 backend 코드 사이에 결합도를 높인다는 점은 유의하고 있으면 좋을 것 같습니다. 관련해서 mvc패턴을 가능한 줄이고자 하는 이유에 대해서도 함께 생각해보면 좋을 것 같습니다.
오늘 멘토링과 관련해서 생각/공부해봐야 할 주제 🤔
- 왜 mvc 패턴은 지양되어가는 중일까?
- filter를 통해 정적 리소스를 보내준다면, 어느 필터 다음에 위치시키는 것이 가장 적절한가 고민해봐야겠다.
이번 멘토링과 관련되어 작성한 글 📖
'Web_Backend > Spring' 카테고리의 다른 글
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!