개발

스프링 빈 전역변수는 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 영역

반응형