-
Spring Controller의 StatelessSpring(Web) 2022. 7. 7. 17:42
예전에 공부한 Spring Controller에서 쓴 내용이 잘못 됐다는것을 발견했다.
https://tmpfactory.tistory.com/39?category=932695
Spring 완전정복 - 1 / Controller
Spring에서 페이지를 띄우는 여러 방법 1. 정적 페이지, MVC와 템플릿 엔진 위 그림과 같이 동작하는데, 각각의 경우에 따라 다르게 동작한다. 정적 페이지를 호출 할 경우 -> http://localhost:8080/hello.htm
tmpfactory.tistory.com
문제가 된 것은 이 부분이다.
Spring Bean은 싱글톤 형식으로 Spring Container에 담겨져 있다는걸 공부하고 있을 때, 이러한 싱글톤 객체에는 필드를 가지고 있어서는 안 된다는것을 알게 되었다.
싱글톤 패턴에대한 이전 글
https://tmpfactory.tistory.com/59?category=932695
Spring 핵심 원리 3 - 싱글톤 패턴과 스프링 컨테이너
스프링은 필요한 메소드들을 스프링 컨테이너에 빈 형태로 관리하게 되는데, 그 동안 DIP(Dependency Inversion Principle)를 지키기위해 AppConfig이라는 Config 파일을 만들어두어, 스프링 빈으로 등록해서
tmpfactory.tistory.com
위에서 내가 쓴 코드는, 명백히 싱글톤 객체에 필드를 넣은 실수이다.
물론 사용상의 문제는 없겠지만(helloApi를 호출하는 시점에 para의 값을 set하기 때문), 이후에 누군가 getName을 했을 때 동기화 오류가 발생 할 수 있다. (getName을 한 시점이, 누군가 setName을 한 직후는 아닌지?)
Controller도 Bean과 같이 스프링에서 싱글톤 패턴으로 관리되므로, Controller내에 필드가 있어서는 안 된다.
@GetMapping("hello-api") @ResponseBody public Param helloApi(@RequestParam("name") String name) { Param para = new Param(); para.setName(name); return para; }
메모리를 더 사용하는 한이 있더라도, 싱글톤 객체에는 "필드"를 넣어서는 안 된다.
'Spring(Web)' 카테고리의 다른 글
Pairing 기술블로그 (0) 2024.04.08 FetchType.EAGER, FetchType.LAZY (0) 2024.03.20 Spring 핵심 원리 3 - 싱글톤 패턴과 스프링 컨테이너 (0) 2022.06.24 Spring 핵심 원리 2 - 회원 도메인 생성, 테스트 (0) 2022.05.24 Spring 핵심 원리 1 - 객체지향 기본 개념 (0) 2022.05.24