티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함