남이 짜놓은 코드를 이어받아 보고 있는데, 스프링 컨트롤러에 전역변수들이 나옵니다.
일반적으로 이런식으로 코드 작성을 하지 않아서 깊게 생각해 보지 않았는데, thread safe 문제 부터 떠오릅니다.
테스트 코드로 테스트 해보았습니다.
테스트 코드
@Controller
public class TestController {
// num이라는 전역변수는 thread safe한가?
int num = 0;
@RequestMapping("/test.do")
public String selectMode(HttpServletRequest request, ModelMap model) throws Exception{
model.addAttribute("num", num++);
return "test";
}
}
결과
페이지 호출할 때마다 num이라는 값은 증가 합니다.
다른 사람이 접속해서 호출해도 num은 이전 숫자에서 이어서 증가 합니다.
스프링 빈 전역변수는 thread safe 하지 않습니다.
저런식으로 코드 작성하면 안됩니다.
좀 더 설명
전역변수는 Heap 영역, 지역변수는 Stack 영역
'개발' 카테고리의 다른 글
스프링 mybatis 폐쇄망 dtd 문제 (0) | 2022.11.29 |
---|---|
HSTS 오류 - Strict-Transport-Security 헤더에 오류가 감지됨 (0) | 2022.08.06 |
자바스크립트 유니코드 정규식 (0) | 2022.07.09 |
img 태그 adblock에 탐지되게 하는 방법 (0) | 2021.12.19 |
React spreadsheet 조사 (0) | 2021.10.30 |