프론트/javascript
SSR 에서 상태 오염을 방지하자
ZestLee
2024. 3. 10. 16:21
개요
- 최근 개발 시 상태 오염이 발생한 것이 잦았다
- 따라서 겪었던 이슈와 함께 어떻게 해결했었는지 정리해 보고자 한다
발단
- 상태 오염으로 인하여 토큰이 잘못 들어간 이슈가 발생
- 백엔드에서는 해당 토큰으로 인증을 시키기 때문에, 사용자가 교체되어 데이터가 인입된 증상이 발생하게 됨
원인
- 프론트의 서버에서 상태를 싱글톤 상태로 만들어서, 하나의 전역 상태를 공유하게 됨
싱글톤 상태가 되었던 이유
- js 에서는 모듈이 싱글톤 형태로 이루어짐 (import, require 등)
- export 해 준 객체를 그저 참조를 해서 사용하고 있었음
- vuex 에서 module 을 등록할 때 참조한 모듈의 주소만 넣어 등록하기 때문에, 매 요청마다 모듈의 state 를 만드는 것이 아닌 참조만 하고 있었음
해결 방안
- module 의 state 를 등록 시킬 땐 객체가 아닌 함수 형태로 등록해야 함
- 해당 이슈는 vuex 도큐먼트에서도 설명을 하고 있음 Vuex Module
그 외에도 발생할 수 있는 이슈
- 공유되지 말아야 할 인스턴스가 있다면 모두 팩토리 함수로 만들어야 함 (예를 들어, store router axios 등)
- 팩토리 함수는 호출할 때마다 매번 return 해 주는 객체를 만들기 때문에, 매번 인스턴스를 새로 만드는 것