ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • spring boot 데몬 어플리케이션 만들기
    Tech/SpringBoot 2015. 9. 28. 12:46
    반응형


    스프링 부트로 syslog 를 분석하는 데몬 어플리케이션 을 만들어 보도록 한다.


    가정: 

    syslog message 에는  IPAddress,MacAddress,Time, JobType 관련 정보가 포함 되어있다.

    해당 메시지에서 ip 와 mac 주소,jobtype 을 추출하여 각 jobType 에 따라 처리하도록 한다.


    sts 로 spring start project  생성한다.



    dependency 에 대해서는 필요할 경우 추가하 면 되기 때문에 여기서는 그냥 skip...


    생성된 데몬app 의 클래스 구조는  아래와 같다.






    springApplication클래스가 @SpringApplication을 사용하여 실행 하게 된다.

    @SpringApplication 은 설정 부터 시작하여 컴포넌트 스캔을 비롯한 각종 어노테이션을 포함한 개념이다.


    스프링설정 파일에 필요한 설정부터 하도록 한다.


    ( 설정 파일 사용법을 알아보기 위함.)


    [application.properties]

    #jobtype of syslog message 

    syslog.marker.add=Add

    syslog.marker.modify=Modify

    syslog.marker.delete=Delete


    #syslog analyzer pattern for ip and mac address 

    #ip,mac 이라는 named 패턴을 사용하도록 한다.


    syslog.ip.pattern=(?<ip>(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

    syslog.mac.pattern=(?<mac>([0-9A-Fa-f]{2}[\\.:-]){5}([0-9A-Fa-f]{2}))


    #syslog Analyzer pattern for port and gateway

    syslog.default.port=100

    syslog.default.gateway=40



    먼저 전체적인 클래스 다이어그램을 보자.



    Class:

    Anaylzer

    AnalyzerImpl

    WorkerService

    WorkerServiceImpl

    WorkerController


    Main


    anayler 클래스는 run()메소드 하나를 포함하고 있다.

    Analyzer 는 compoent  으로 되어있다.

    실질적으로 AnaylzerImple 클래스에서 분석관련 메소드들을 private 으로 구현하여 run 메서드에서 호출 하도록 한다.

    WorkerService 에서는 Future<Void> startAnalyzer()를 호함 하고 있다.

    비동기적으로 이 함수를 실행 시키기 위해 아래와 같이 한다.

    @Autowired

    private Analyzer analyzer;

    @Async

    @Override

    public Future<Void> startAnalyzer()

    {

    analyzer.run();

    return new AsyncResult<Void>(null);

    }

    @Async 어노테이션을 붙임으로서 이 함수는 비동기실행 함수가 된다.


    WorkerController클래스는 이러한 비동기 적 실행을 위해 Controller 역할을 할 수 있도록 해준다.

    @Controller

    public class WorkerController {


    @Autowired

    private WorkerService workerService;

    // 의존하는 객체를 설정한 이후에 초기화 작업수행.

    @PostConstruct

    public void startWorkerFlow()

    {

    workerService.startAnalyzer();

    }

    }


    최종적으로 메인 클래스인 DemoAapplication   에서 시작 할수 있도록 한다.

    @EnableAsync

    @EnableScheduling

    @SpringBootApplication

    public class DemoApplication {


        public static void main(String[] args) {

            SpringApplication.run(DemoApplication.class, args);

        }


    프로그램을 시작하면 메인에서 DemoApplication클래스가 호출 되고 내부적으로 비동기 처리된 클래스들이 어노테이션들에 의해 작동 되게 된다.


    서버에서 구동 시키려는 데몬 프로그램을 이런 과정으로 구현하면 데몬 프로그램은 쉽게 구현 할수있을것 같다.


    반응형
Designed by Tistory.