[java] JAX-RS를 이용한 디자인 패턴 적용 방법

Java API for RESTful Web Services (JAX-RS)는 웹 서비스를 개발하기 위한 자바 스펙이다. 이를 사용하여 RESTful 웹 서비스를 구현할 때 디자인 패턴을 적용하는 것은 중요한 요소이다. 이 글에서는 JAX-RS를 이용하여 디자인 패턴을 적용하는 방법에 대해 설명하고자 한다.

1. MVC 패턴 적용

MVC 패턴은 Model-View-Controller의 약자로, 웹 애플리케이션을 구성하는 요소들을 분리하여 개발하는 패턴이다. JAX-RS를 사용할 때도 MVC 패턴을 적용할 수 있다.

다음은 JAX-RS에서 MVC 패턴을 적용한 예시이다.

@Path("/users")
public class UserController {

    @GET
    public List<User> getAllUsers() {
        // Model의 데이터를 조회
        List<User> users = userService.getAllUsers();

        // View에 데이터 전달
        return users;
    }

    @POST
    public Response createUser(User user) {
        // 요청된 데이터를 Model에 저장
        userService.createUser(user);

        // 응답 생성
        return Response.status(Response.Status.CREATED).build();
    }

    // 다른 메소드들 생략...
}

위의 예시에서 UserController는 컨트롤러 역할을 수행하며, GET 메소드는 모든 사용자를 조회하고, POST 메소드는 사용자를 생성한다. 데이터베이스와 상호작용하는 모델 클래스는 별도로 작성하여 사용할 수 있다.

2. Singleton 패턴 적용

Singleton 패턴은 애플리케이션에서 특정 클래스의 인스턴스가 오직 하나만 생성되도록 하는 패턴이다. JAX-RS에서는 리소스 클래스가 요청에 대해 반복적으로 인스턴스화되지 않도록 Singleton 패턴을 적용할 수 있다.

@Singleton
@Path("/users")
public class UserController {
    // 클래스 구현 생략...
}

위의 예시에서 @Singleton 어노테이션은 해당 클래스가 싱글톤으로 동작하도록 지정한다. 이렇게 되면 요청이 올 때마다 새로운 인스턴스가 생성되는 것이 아니라, 기존의 인스턴스가 재사용된다.

3. Factory 패턴 적용

Factory 패턴은 객체를 생성하는 로직을 캡슐화하여 객체의 생성 방법을 통일하고 유연성을 높이는 패턴이다. JAX-RS에서는 Factory 패턴을 사용하여 서비스 객체를 생성할 수 있다.

public interface UserService {
    void createUser(User user);
    List<User> getAllUsers();
}

public class UserServiceFactory {
    public static UserService createUserService() {
        // 필요한 구현체를 생성하여 반환
        return new UserServiceImpl();
    }
}

@Path("/users")
public class UserController {
    private UserService userService;

    public UserController() {
        this.userService = UserServiceFactory.createUserService();
    }

    // 메소드들 생략...
}

위의 예시에서 UserService 인터페이스는 서비스 객체의 동작을 정의하고, UserServiceImpl 클래스는 실제로 동작하는 구현체이다. UserServiceFactory 클래스는 필요한 구현체를 생성하여 반환하는 역할을 수행한다. UserController는 생성된 서비스를 사용하여 요청을 처리한다.

결론

JAX-RS를 사용하여 RESTful 웹 서비스를 개발할 때, MVC 패턴, Singleton 패턴, Factory 패턴 등의 디자인 패턴을 적용할 수 있다. 이를 통해 코드의 구조를 개선하고 유지보수성을 향상시킬 수 있다. 디자인 패턴은 개발 과정에서 유용한 가이드가 되며, 팀의 협업을 원활하게 할 수 있다.

참고 자료