Spring

[Spring] - Bean을 생성할 때 어떤클래스를 Bean으로 생성해야 할까?

김종현 2021. 10. 30. 03:35

Spring으로 개발하면 @Controller, @Service, @Repository 등의 어노테이션으로 Bean을 생성할 수 있는데 그렇다면 Bean을 생성할 때 어떤 클래스를 Bean으로 생성해야하는 것 일까? 그건 바로 값들을 담는 클래스가 아니라 작업을 하는 클래스를 Bean으로 생성해야한다.

 

예를들어 유저의 정보를 담고 있는 User클래스가 있고 유저의 정보로 관련된 작업을 하는 UserController클래스가 있다고 할 때 UserController는 Bean으로 등록해야하고 User클래스는 Bean으로 등록하지 않는다.

@RestController
public class UserController {

    @PostMapping("/users")
    public void save(User user) {
    ...
    }
}

위 코드처럼 작성하면 User 클래스는 요청마다 새로 생성되서 매개변수로 전달받기 때문에 Thread-Safe 하다.

그런데 값들을 담은 User클래스를 Spring Bean으로 생성후 사용하게 되면 Spring Bean은 기본적으로 싱글톤이기 때문에 Multi-Thread에서 Thread-Safe하지 못하게 된다.

하지만 필요에 따라 Bean으로 생성해야할 경우가 있는데 그때는 scope을 request로 설정하면 요청마다 객체를 생성하기 때문에 공유하지는 않는다. 필자는 아직까지 Spring Bean을 request로 사용해본 경험이 없다.

728x90