개발

스프링 빈 전역변수는 thread safe 한가?

개미v 2022. 7. 20. 17:39

 

남이 짜놓은 코드를 이어받아 보고 있는데, 스프링 컨트롤러에 전역변수들이 나옵니다.

일반적으로 이런식으로 코드 작성을 하지 않아서 깊게 생각해 보지 않았는데, 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 영역