본문으로 바로가기

싱글톤 방식에서의 무상태 설계

category 카테고리 없음 2023. 9. 18. 08:52
반응형

Stateless Service 와 Controller

Stateless Service:
서비스 계층의 객체는 주로 상태를 가지지 않습니다(stateless). 즉, 멤버 변수로 데이터를 유지하거나 저장하는 것이 아니라, 메서드의 매개변수와 반환값을 통해 데이터를 처리합니다. 따라서, 요청이 서비스 계층을 거쳐서 응답을 완료하면 그와 관련된 상태 정보는 사라집니다.

Controller의 생명주기:
웹 요청이 들어올 때마다 컨트롤러의 메서드가 호출되며, 해당 메서드 내의 지역 변수는 메서드 실행이 끝날 때 사라집니다. 컨트롤러 레벨에서도 상태를 저장하려면 주로 세션을 사용하게 되지만, 이것은 컨트롤러의 메서드 내의 일반 지역 변수와는 다르게 동작합니다.

예를 들어,

@RestController
public class MyController {

    @Autowired
    private MyService myService;

    @GetMapping("/data")
    public SomeResponse getData(@RequestParam String param) {
        SomeData data = myService.getData(param); // 서비스 호출
        return new SomeResponse(data); // 응답 반환
    }
}

위의 예제에서 getData 메서드는 웹 요청이 들어올 때마다 호출되고, 그 요청에 대한 처리가 끝나면 param과 data 변수는 메모리에서 사라집니다. myService는 Spring Bean이므로 계속 존재하지만, 그 내부에서 처리하는 데이터는 메서드 호출이 끝나면 사라집니다.

따라서, 웹 요청을 처리하는 동안 컨트롤러와 서비스 계층에서 사용하는 지역 변수나 매개변수는 그 요청 처리가 끝나면 사라지게 됩니다.

반응형