본문 바로가기

Java

서비스 제공자 프레임워크

1) 서비스 제공자 프레임워크란?

- 서비스 제공자 프레임워크는 개념적인 것이고, 다양한 구현 방법과 변형이 존재할 수 있습니다. 

  서비스 제공자 프레임워크는 그 목적을 잘 이해하는 것이 중요합니다. 

  서비스 제공자 프레임워크의 목적은 확장 가능한 애플리케이션을 만드는 방법을 제공하는 것입니다.

 

- 무언가가 확장 가능하다고 이야기하는 것은 

  애플리케이션의 코드는 그대로 유지되면서, 외부적인 요인을 변경했을 때,

  애플리케이션의 동작을 다르게 동작하도록 만들 수 있느냐에 관한 것입니다. 

  예를 들어, 애플리케이션 코드는 그대로 두면서 설정 파일 하나만 바꾸면 출력되는 메시지가 달라진다거나,

  또는 콘솔에만 출력하던 메시지를 이메일로 보내게 된다거나 DB에 저장을 하게 된다거나에 관한 것입니다. 

 

 

2) 서비스 제공자 프레임워크 예시

- 서비스 제공자 프레임워크의 대표적인 예시는 의존 객체 주입(DI) 프레임워크가 있습니다. 

  코드를 통해 살펴보겠습니다.

[HelloService 인터페이스]

package me.whiteship.chapter01.item01;

public interface HelloService {

    String hello();
    
    static String h1(){
    	prepareMessage();
       	return "hi";
    }
    
    static private void prepareMessage(){
    }
    
    static String hi1(){
    	prepareMessage();
        return "hi";
    }
    
    static String hi2(){
    	prepareMessage();
        return "hi";
    }
    
    default String bye9){
    	return "bye";
    }
}

[ChineseHelloService 클래스]

package me.whiteshipe.hello;

import me.whiteship.chapter01.item01.HelloService;

public class ChineseHelloService implements HelloService{

    @Override
    public String hello(){
    	return "Ni hao";
    }
}

[AppConfig 클래스]

package me.whiteship.chatper01.item01;

import me.whiteship.hello.ChineseHelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig{

    @Bean
    public HelloService helloService(){
    	return new ChineseHelloService();
    }
}

[App 클래스]

package me.whiteship.chapter01.item01;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App{

    public static void main(String[] args){
    	ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        HelloService helloService = applicationContext.getBean(HelloService.class);
        Systemout.println(helloService.hello());
    }
}

- 여기서 HelloService는 서비스 제공자 인터페이스입니다.

  ChineseHelloService는 HelloService의 구현체인데, 이것은 같은 패키지에 있어도 되고,

  다른 패키지에 있어도 괜찮습니다. 즉, 전혀 다른 jar 파일 안에 있어도 괜찮습니다. 

 

- 서비스 제공 API는 서비스 구현체를 등록하는 방법을 제공합니다.

  스프링 같은 경우는 @Configuration이라는 애너테이션을 사용한 클래스를 정의하고,

  해당 클래스 안에 @Bean이라는 메소드로 서비스 구현체를 등록합니다.

  위의 코드 중에서는 AppConfig 클래스가 그것에 해당합니다. 

 

- 서비스 접근 API는 서비스를 가져오는 방법입니다. 위의 코드중에서는 App 클래스가 그것에 해당합니다.

  스프링에서는 @Autowired로 빈을 주입을 받아서 사용하는 방법도 있습니다. 

 

참고

백기선님 강의 (330) 자바, 서비스 제공자 프레임워크 - YouTube